1 package jp.sourceforge.stigmata.hook;
3 import java.util.Iterator;
5 import jp.sourceforge.stigmata.BirthmarkContext;
6 import jp.sourceforge.stigmata.BirthmarkEnvironment;
7 import jp.sourceforge.stigmata.spi.StigmataHookSpi;
11 * @author Haruaki Tamada
13 public class StigmataHookManager{
14 private static final StigmataHookManager manager = new StigmataHookManager();
17 * private constructor for singleton pattern.
19 private StigmataHookManager(){
22 public static StigmataHookManager getInstance(){
26 public void runHook(Phase phase, BirthmarkContext context){
27 StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
28 hook.onHook(phase, context);
31 public void runHook(Phase phase, BirthmarkEnvironment env){
32 StigmataHook hook = buildHook(phase, env);
33 hook.onHook(phase, env);
36 private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
37 MultipleStigmataHook hooks = new MultipleStigmataHook();
39 for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
40 StigmataHookSpi service = i.next();
44 hooks.addHook(service.onSetup());
47 hooks.addHook(service.onTearDown());
49 case BEFORE_EXTRACTION:
50 hooks.addRuntimeHook(service.beforeExtraction());
52 case AFTER_EXTRACTION:
53 hooks.addRuntimeHook(service.afterExtraction());
55 case BEFORE_COMPARISON:
56 hooks.addRuntimeHook(service.beforeComparison());
58 case AFTER_COMPARISON:
59 hooks.addRuntimeHook(service.afterComparison());
61 case BEFORE_FILTERING:
62 hooks.addRuntimeHook(service.beforeFiltering());
65 hooks.addRuntimeHook(service.afterFiltering());
68 throw new InternalError("invalid phase: " + phase);