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
16 * @version $Revision$ $Date
18 public class StigmataHookManager{
19 private static final StigmataHookManager manager = new StigmataHookManager();
22 * private constructor for singleton pattern.
24 private StigmataHookManager(){
27 public static StigmataHookManager getInstance(){
31 public void runHook(Phase phase, BirthmarkContext context){
32 StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
33 hook.onHook(phase, context);
36 public void runHook(Phase phase, BirthmarkEnvironment env){
37 StigmataHook hook = buildHook(phase, env);
38 hook.onHook(phase, env);
41 private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
42 MultipleStigmataHook hooks = new MultipleStigmataHook();
44 for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
45 StigmataHookSpi service = i.next();
49 hooks.addHook(service.onSetup());
52 hooks.addHook(service.onTearDown());
54 case BEFORE_EXTRACTION:
55 hooks.addRuntimeHook(service.beforeExtraction());
57 case AFTER_EXTRACTION:
58 hooks.addRuntimeHook(service.afterExtraction());
60 case BEFORE_COMPARISON:
61 hooks.addRuntimeHook(service.beforeComparison());
63 case AFTER_COMPARISON:
64 hooks.addRuntimeHook(service.afterComparison());
66 case BEFORE_FILTERING:
67 hooks.addRuntimeHook(service.beforeFiltering());
70 hooks.addRuntimeHook(service.afterFiltering());
73 throw new InternalError("invalid phase: " + phase);