OSDN Git Service

fixed findbugs warnings.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / BirthmarkSelectablePane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.LinkedHashMap;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.Set;
10
11 import javax.swing.JPanel;
12
13 import jp.sourceforge.stigmata.spi.BirthmarkService;
14 import jp.sourceforge.talisman.i18n.Messages;
15
16 /**
17  * 
18  * @author Haruaki TAMADA
19  */
20 public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{
21     private static final long serialVersionUID = 7057130952947891635L;
22
23     private StigmataFrame stigmata;
24     private Set<String> selectedServices = new HashSet<String>();
25     private Map<String, BirthmarkSelection> services;
26     private List<DataChangeListener> listeners = new ArrayList<DataChangeListener>();
27     private boolean experimentalMode;
28
29     public BirthmarkSelectablePane(StigmataFrame stigmata){
30         this.stigmata = stigmata;
31
32         initServices();
33         stigmata.addBirthmarkServiceListener(this);
34     }
35
36     protected abstract void updateLayouts();
37
38     public Messages getMessages(){
39         return stigmata.getMessages();
40     }
41
42     public void setExperimentalMode(boolean experimentalMode){
43         this.experimentalMode = experimentalMode;
44         updateLayouts();
45     }
46
47     public boolean isExperimentalMode(){
48         return experimentalMode;
49     }
50
51     public String[] getSelectedServiceTypes(){
52         return selectedServices.toArray(new String[selectedServices.size()]);
53     }
54
55     public BirthmarkService getService(String type){
56         BirthmarkSelection elem = services.get(type);
57         if(elem != null){
58             return elem.getService();
59         }
60     
61         return null;
62     }
63
64     public String[] getServiceTypes(){
65         String[] serviceArray = new String[services.size()];
66         int index = 0;
67         for(String key: services.keySet()){
68             BirthmarkService service = services.get(key).getService();
69             serviceArray[index] = service.getType();
70             index++;
71         }
72         return serviceArray;
73     }
74
75     public boolean hasService(String type){
76         return services.get(type) != null;
77     }
78
79     public void select(String type, boolean flag){
80         if(flag){
81             selectedServices.add(type);
82         }
83         else{
84             selectedServices.remove(type);
85         }
86         fireEvent();
87     }
88
89     public void select(BirthmarkService service, boolean flag){
90         select(service.getType(), flag);
91     }
92
93     public void reset(){
94         selectedServices.clear();
95         initServices();
96         experimentalMode = false;
97         updateLayouts();
98         fireEvent();
99     }
100
101     public void addDataChangeListener(DataChangeListener listener){
102         listeners.add(listener);
103     }
104
105     @Override
106     public void serviceAdded(BirthmarkService service){
107         if(services.get(service.getType()) == null){
108             BirthmarkSelection elem = new BirthmarkSelection(service);
109             selectedServices.add(service.getType());
110             services.put(service.getType(), elem);
111         }
112         updateLayouts();
113         fireEvent();
114     }
115
116     @Override
117     public void serviceRemoved(BirthmarkService service){
118         BirthmarkSelection elem = services.get(service.getType());
119         if(elem != null){
120             selectedServices.remove(service.getType());
121             services.remove(service.getType());
122         }
123         fireEvent();
124     }
125
126     public Iterator<String> serviceNames(){
127         return services.keySet().iterator();
128     }
129
130     protected BirthmarkSelection getSelection(String type){
131         return services.get(type);
132     }
133
134     protected Iterator<BirthmarkSelection> birthmarkSelections(){
135         return services.values().iterator();
136     }
137
138     protected void fireEvent(){
139         for(DataChangeListener listener: listeners){
140             listener.valueChanged(this);
141         }
142     }
143
144     private void initServices(){
145         BirthmarkService[] serviceArray = stigmata.getEnvironment().getServices();
146
147         services = new LinkedHashMap<String, BirthmarkSelection>();
148         for(BirthmarkService service: serviceArray){
149             BirthmarkSelection elem = new BirthmarkSelection(service);
150             services.put(service.getType(), elem);
151         }
152     }
153 }