OSDN Git Service

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