View Javadoc

1   package rydeen;
2   
3   import java.util.Collections;
4   import java.util.Iterator;
5   import java.util.LinkedHashMap;
6   import java.util.Map;
7   
8   import rydeen.spi.ProcessorService;
9   
10  /**
11   * {@link ProcessorService}の集合を管理するクラスです.
12   * このオブジェクトはProcessorServiceの追加された順序を保持します.
13   *
14   * @author Haruaki Tamada
15   */
16  public class ProcessorServicePool implements Iterable<ProcessorService>{
17      private Map<String, ProcessorService> services = new LinkedHashMap<String, ProcessorService>();
18  
19      /**
20       * デフォルトコンストラクタです.
21       */
22      public ProcessorServicePool(){
23      }
24  
25      /**
26       * セルフコンストラクタで,引数に与えられたProcessorServicePoolが持つ
27       * ProcessorServiceを持つオブジェクトを構築します.
28       */
29      public ProcessorServicePool(ProcessorServicePool pool){
30          services.putAll(pool.services);
31      }
32  
33      /**
34       * このオブジェクトが持つProcessorServiceの列挙を返します.
35       */
36      @Override
37      public Iterator<ProcessorService> iterator(){
38          return Collections.unmodifiableCollection(services.values()).iterator();
39      }
40  
41      /**
42       * <p>
43       * このオブジェクトに新たにProcessorServiceを登録します.
44       * </p><p>
45       * 引数にnullが与えられた場合はNullPointerExceptionが投げられます.
46       * </p><p>
47       * 既に指定されたProcessorServiceが登録されている場合は,
48       * 引数に与えられたオブジェクトで登録を更新します.
49       * </p>
50       */
51      public void addProvider(ProcessorService service){
52          services.put(service.getProcessorName(), service);
53      }
54  
55      /**
56       * <p>
57       * このオブジェクトが指定された名前を持つProcessorServiceを保持していれば
58       * trueを返し,保持していなければfalseを返します.
59       * </p><p>
60       * 引数にnullが与えられた場合は,falseが返されます.
61       * </p>
62       */
63      public boolean contains(String processorName){
64          return services.containsKey(processorName);
65      }
66  
67      /**
68       * <p>
69       * このオブジェクトが指定されたProcessorServiceを保持していればtrue,
70       * 保持していなければfalseを返します.
71       * </p><p>
72       * 引数にnullが与えられた場合はfalseが返されます.
73       * </p>
74       */
75      public boolean contains(ProcessorService service){
76          return services.containsValue(service);
77      }
78  
79      /**
80       * <p>
81       * 指定されたProcessorServiceをこのオブジェクトの登録から削除します.
82       * 削除に成功すればtrueを返し,失敗すればfalseを返します.
83       * </p><p>
84       * 指定されたProcessorServiceがこのオブジェクトに登録されていないとき,削除に失敗します.
85       * </p><p>
86       * 引数にnullが与えられた場合はNullPointerExceptionが投げられます.
87       * </p>
88       */
89      public boolean removeProvider(ProcessorService service){
90          return services.remove(service.getProcessorName()) != null;
91      }
92  
93      /**
94       * <p>
95       * このオブジェクトに登録されているProcessorServiceの数を返します.
96       * </p><p>
97       * このオブジェクトは必ず0以上の数値を返します.
98       * </p>
99       */
100     public int getServiceCount(){
101         return services.size();
102     }
103 
104     /**
105      * <p>
106      * 指定された名前を持つProcessorServiceを返します.
107      * </p><p>
108      * 指定された名前を持つProcessorServiceをこのオブジェクトが保持していない場合,
109      * もしくはnullが与えられた場合,このメソッドはnullを返します.
110      * </p>
111      */
112     public ProcessorService getService(String processorName){
113         return services.get(processorName);
114     }
115 }