View Javadoc

1   package rydeen;
2   
3   import java.util.Iterator;
4   import java.util.LinkedHashMap;
5   import java.util.Map;
6   
7   /**
8    * <p>
9    * ある処理器({@link Processor <code>Processor</code>})の処理結果を扱うためのクラスです.
10   * 処理結果を出力するために用いられます.
11   * </p><p>
12   * サマリは複数のエントリから成り,1つのエントリにはキーとそれに対応する値が含まれる.
13   * エントリは追加された順序を保持します.
14   * キーは親子関係があり,階層は.で区切られます.このサマリのトップの階層は
15   * {@link #getProcessorId() <code>getProcessorId</code>}メソッドで
16   * 返される処理器の名前です.
17   * </p><p>
18   * サマリ同士が階層関係を結ぶ場合もあります.
19   * </p>
20   *
21   * @author Haruaki Tamada
22   */
23  public class Summary implements Iterable<Summary.Entry>{
24      private String processorId;
25      private Map<String, Summary.Entry> entries = new LinkedHashMap<String, Summary.Entry>();
26  
27      /**
28       * 指定された名前でサマリオブジェクトを作成します.
29       */
30      public Summary(String processorId){
31          setProcessorId(processorId);
32      }
33  
34      /**
35       * <p>
36       * 処理器のIdを設定します.
37       * </p><p>
38       * idがnullのNullPointerExceptionが投げられます.
39       * </p>
40       * @param id 処理器のId
41       */
42      public void setProcessorId(String id){
43          if(id == null){
44              throw new NullPointerException();
45          }
46          this.processorId = id;
47      }
48  
49      /**
50       * 処理器のidを返します.
51       * @return 処理器のid
52       */
53      public String getProcessorId(){
54          return processorId;
55      }
56  
57      /**
58       * <p>サマリに,1つのエントリを追加します.</p>
59       * <p>keyがnullの場合,valueがnullの場合はNullPointerExceptionが投げられます.</p>
60       * @param key 追加するエントリのキー
61       * @param value キーに対応する値
62       */
63      public void putEntry(String key, String value){
64          if(key == null || value == null){
65              throw new NullPointerException();
66          }
67          entries.put(key, new Summary.Entry(key, value));
68      }
69  
70      /**
71       * <p>
72       * keyに対応する値を返します.keyに対応する値が存在しない場合はnullが返されます.
73       * </p>
74       * <p>
75       * keyがnullの場合はNullPointerExceptionが投げられます.
76       * </p>
77       * @param key 取得したい値に対応付けられているキー.
78       * @return keyに対応付けられた値.
79       */
80      public String getEntry(String key){
81          if(key == null){
82              throw new NullPointerException();
83          }
84          Entry entry = entries.get(key);
85          String value = null;
86          if(entry != null){
87              value = entry.getValue();
88          }
89          return value;
90      }
91  
92      /**
93       * <p>
94       * サマリから指定されたキーを持つエントリを削除します.
95       * keyがnullの場合や,与えられたkeyに値が対応付けられていない場合は何も行いません.
96       * </p>
97       * 
98       * @param key 削除するエントリのキー
99       */
100     public void removeEntry(String key){
101         entries.remove(key);
102     }
103 
104     /**
105      * このサマリに格納されているエントリの数を返します.
106      * @return このサマリオブジェクトが持つエントリの数.
107      */
108     public int getEntryCount(){
109         return entries.size();
110     }
111 
112     /**
113      * このサマリに格納されているエントリの列挙を返します.
114      */
115     @Override
116     public Iterator<Summary.Entry> iterator(){
117         return entries.values().iterator();
118     }
119 
120     /**
121      * サマリに追加するエントリを表すクラス.
122      */
123     public static class Entry{
124         private String key;
125         private String value;
126 
127         /**
128          * 与えられたキーとそれに対応する値で,
129          * サマリのエントリを構築します.
130          * キーもしくは,値がnullの場合はNullPointerExceptionが投げられます.
131          */
132         public Entry(String key, String value){
133             if(key == null || value == null){
134                 throw new NullPointerException();
135             }
136             this.key = key;
137             this.value = value;
138         }
139 
140         /**
141          * このエントリのキーを返します.
142          */
143         public String getKey(){
144             return key;
145         }
146 
147         /**
148          * このエントリの値を返します.
149          */
150         public String getValue(){
151             return value;
152         }
153     }
154 }