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 }