OSDN Git Service

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