OSDN Git Service

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