1 package jp.sourceforge.stigmata.hook;
7 import java.util.Iterator;
9 import jp.sourceforge.stigmata.BirthmarkContext;
10 import jp.sourceforge.stigmata.BirthmarkEnvironment;
11 import jp.sourceforge.stigmata.spi.StigmataHookSpi;
15 * @author Haruaki Tamada
17 public class StigmataHookManager{
18 private static final StigmataHookManager manager = new StigmataHookManager();
21 * private constructor for singleton pattern.
23 private StigmataHookManager(){
26 public static StigmataHookManager getInstance(){
30 public void runHook(Phase phase, BirthmarkContext context){
31 StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
32 hook.onHook(phase, context);
35 public void runHook(Phase phase, BirthmarkEnvironment env){
36 StigmataHook hook = buildHook(phase, env);
37 hook.onHook(phase, env);
40 private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
41 MultipleStigmataHook hooks = new MultipleStigmataHook();
43 for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
44 StigmataHookSpi service = i.next();
48 hooks.addHook(service.onSetup());
51 hooks.addHook(service.onTearDown());
53 case BEFORE_EXTRACTION:
54 hooks.addRuntimeHook(service.beforeExtraction());
56 case AFTER_EXTRACTION:
57 hooks.addRuntimeHook(service.afterExtraction());
59 case BEFORE_COMPARISON:
60 hooks.addRuntimeHook(service.beforeComparison());
62 case AFTER_COMPARISON:
63 hooks.addRuntimeHook(service.afterComparison());
65 case BEFORE_FILTERING:
66 hooks.addRuntimeHook(service.beforeFiltering());
69 hooks.addRuntimeHook(service.afterFiltering());
72 throw new InternalError("invalid phase: " + phase);