OSDN Git Service

change package name. jp.naist.se.stigmata -> jp.sourceforge.stigmata
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / hook / StigmataHookManager.java
1 package jp.sourceforge.stigmata.hook;
2
3 /*
4  * $Id$
5  */
6
7 import java.util.Iterator;
8
9 import jp.sourceforge.stigmata.BirthmarkContext;
10 import jp.sourceforge.stigmata.BirthmarkEnvironment;
11 import jp.sourceforge.stigmata.spi.StigmataHookSpi;
12
13 /**
14  * 
15  * @author Haruaki Tamada
16  * @version $Revision$ $Date
17  */
18 public class StigmataHookManager{
19     private static final StigmataHookManager manager = new StigmataHookManager();
20
21     /**
22      * private constructor for singleton pattern.
23      */
24     private StigmataHookManager(){
25     }
26
27     public static StigmataHookManager getInstance(){
28         return manager;
29     }
30
31     public void runHook(Phase phase, BirthmarkContext context){
32         StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
33         hook.onHook(phase, context);
34     }
35
36     public void runHook(Phase phase, BirthmarkEnvironment env){
37         StigmataHook hook = buildHook(phase, env);
38         hook.onHook(phase, env);
39     }
40
41     private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
42         MultipleStigmataHook hooks = new MultipleStigmataHook();
43
44         for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
45             StigmataHookSpi service = i.next();
46
47             switch(phase){
48             case SETUP:
49                 hooks.addHook(service.onSetup());
50                 break;
51             case TEAR_DOWN:
52                 hooks.addHook(service.onTearDown());
53                 break;
54             case BEFORE_EXTRACTION:
55                 hooks.addRuntimeHook(service.beforeExtraction());
56                 break;
57             case AFTER_EXTRACTION:
58                 hooks.addRuntimeHook(service.afterExtraction());
59                 break;
60             case BEFORE_COMPARISON:
61                 hooks.addRuntimeHook(service.beforeComparison());
62                 break;
63             case AFTER_COMPARISON:
64                 hooks.addRuntimeHook(service.afterComparison());
65                 break;
66             case BEFORE_FILTERING:
67                 hooks.addRuntimeHook(service.beforeFiltering());
68                 break;
69             case AFTER_FILTERING:
70                 hooks.addRuntimeHook(service.afterFiltering());
71                 break;
72             default:
73                 throw new InternalError("invalid phase: " + phase);
74             }
75         }
76         return hooks;
77     }
78 }