OSDN Git Service

remove Revision tag
[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  */
17 public class StigmataHookManager{
18     private static final StigmataHookManager manager = new StigmataHookManager();
19
20     /**
21      * private constructor for singleton pattern.
22      */
23     private StigmataHookManager(){
24     }
25
26     public static StigmataHookManager getInstance(){
27         return manager;
28     }
29
30     public void runHook(Phase phase, BirthmarkContext context){
31         StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
32         hook.onHook(phase, context);
33     }
34
35     public void runHook(Phase phase, BirthmarkEnvironment env){
36         StigmataHook hook = buildHook(phase, env);
37         hook.onHook(phase, env);
38     }
39
40     private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
41         MultipleStigmataHook hooks = new MultipleStigmataHook();
42
43         for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
44             StigmataHookSpi service = i.next();
45
46             switch(phase){
47             case SETUP:
48                 hooks.addHook(service.onSetup());
49                 break;
50             case TEAR_DOWN:
51                 hooks.addHook(service.onTearDown());
52                 break;
53             case BEFORE_EXTRACTION:
54                 hooks.addRuntimeHook(service.beforeExtraction());
55                 break;
56             case AFTER_EXTRACTION:
57                 hooks.addRuntimeHook(service.afterExtraction());
58                 break;
59             case BEFORE_COMPARISON:
60                 hooks.addRuntimeHook(service.beforeComparison());
61                 break;
62             case AFTER_COMPARISON:
63                 hooks.addRuntimeHook(service.afterComparison());
64                 break;
65             case BEFORE_FILTERING:
66                 hooks.addRuntimeHook(service.beforeFiltering());
67                 break;
68             case AFTER_FILTERING:
69                 hooks.addRuntimeHook(service.afterFiltering());
70                 break;
71             default:
72                 throw new InternalError("invalid phase: " + phase);
73             }
74         }
75         return hooks;
76     }
77 }