OSDN Git Service

プラットフォームごとのStigmataのホームディレクトリの場所を返す一連のクラスをリファクタリングした.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / FrequencyBirthmark.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 /*
4  * $Id$
5  */
6
7 import java.util.Arrays;
8 import java.util.Comparator;
9 import java.util.HashMap;
10 import java.util.Iterator;
11 import java.util.Map;
12
13 import jp.sourceforge.stigmata.BirthmarkElement;
14 import jp.sourceforge.stigmata.utils.ArrayIterator;
15
16 /**
17  * 
18  * @author Haruaki Tamada
19  * @version $Revision$ 
20  */
21 public class FrequencyBirthmark extends AbstractBirthmark{
22     private static final long serialVersionUID = 1905526895627693908L;
23
24     private Map<String, FrequencyBirthmarkElement> counts = new HashMap<String, FrequencyBirthmarkElement>();
25     private String type;
26
27     public FrequencyBirthmark(String type){
28         this.type = type;
29     }
30
31     @Override
32     public int getElementCount(){
33         return counts.size();
34     }
35
36     @Override
37     public synchronized BirthmarkElement[] getElements(){
38         FrequencyBirthmarkElement[] elements = new FrequencyBirthmarkElement[counts.size()];
39         int index = 0;
40         for(Map.Entry<String, FrequencyBirthmarkElement> entry: counts.entrySet()){
41             elements[index] = entry.getValue();
42             index++;
43         }
44         Arrays.sort(elements, new Comparator<FrequencyBirthmarkElement>(){
45             @Override
46             public int compare(FrequencyBirthmarkElement o1, FrequencyBirthmarkElement o2){
47                 return o1.getValueName().compareTo(o2.getValueName());
48             }
49         });
50         
51         return elements;
52     }
53
54     @Override
55     public Iterator<BirthmarkElement> iterator(){
56         return new ArrayIterator<BirthmarkElement>(getElements());
57     }
58
59     @Override
60     public void addElement(BirthmarkElement element){
61         String value;
62         if(element instanceof FrequencyBirthmarkElement){
63             FrequencyBirthmarkElement e = (FrequencyBirthmarkElement)element;
64             value = e.getValueName();
65         }
66         else{
67             value = (String)element.getValue();
68         }
69         FrequencyBirthmarkElement foundElement = counts.get(value);
70         if(foundElement != null){
71             foundElement.incrementValueCount();
72         }
73         else{
74             foundElement = new FrequencyBirthmarkElement(value);
75         }
76         counts.put(value, foundElement);
77     }
78
79     @Override
80     public String getType(){
81         return type;
82     }
83 }