1 package jp.sourceforge.stigmata.ui.swing;
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.LinkedHashMap;
11 import javax.swing.JPanel;
13 import jp.sourceforge.stigmata.spi.BirthmarkService;
14 import jp.sourceforge.talisman.i18n.Messages;
18 * @author Haruaki TAMADA
20 public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{
21 private static final long serialVersionUID = 7057130952947891635L;
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;
29 public BirthmarkSelectablePane(StigmataFrame stigmata){
30 this.stigmata = stigmata;
33 stigmata.addBirthmarkServiceListener(this);
36 protected abstract void updateLayouts();
38 public Messages getMessages(){
39 return stigmata.getMessages();
42 public void setExperimentalMode(boolean experimentalMode){
43 this.experimentalMode = experimentalMode;
47 public boolean isExperimentalMode(){
48 return experimentalMode;
51 public String[] getSelectedServiceTypes(){
52 return selectedServices.toArray(new String[selectedServices.size()]);
55 public BirthmarkService getService(String type){
56 BirthmarkSelection elem = services.get(type);
58 return elem.getService();
64 public String[] getServiceTypes(){
65 String[] serviceArray = new String[services.size()];
67 for(String key: services.keySet()){
68 BirthmarkService service = services.get(key).getService();
69 serviceArray[index] = service.getType();
75 public boolean hasService(String type){
76 return services.get(type) != null;
79 public void select(String type, boolean flag){
81 selectedServices.add(type);
84 selectedServices.remove(type);
89 public void select(BirthmarkService service, boolean flag){
90 select(service.getType(), flag);
94 selectedServices.clear();
96 experimentalMode = false;
101 public void addDataChangeListener(DataChangeListener listener){
102 listeners.add(listener);
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);
117 public void serviceRemoved(BirthmarkService service){
118 BirthmarkSelection elem = services.get(service.getType());
120 selectedServices.remove(service.getType());
121 services.remove(service.getType());
126 public Iterator<String> serviceNames(){
127 return services.keySet().iterator();
130 protected BirthmarkSelection getSelection(String type){
131 return services.get(type);
134 protected Iterator<BirthmarkSelection> birthmarkSelections(){
135 return services.values().iterator();
138 protected void fireEvent(){
139 for(DataChangeListener listener: listeners){
140 listener.valueChanged(this);
144 private void initServices(){
145 BirthmarkService[] serviceArray = stigmata.getEnvironment().getServices();
147 services = new LinkedHashMap<String, BirthmarkSelection>();
148 for(BirthmarkService service: serviceArray){
149 BirthmarkSelection elem = new BirthmarkSelection(service);
150 services.put(service.getType(), elem);