1 package jp.sourceforge.stigmata.ui.swing;
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;
15 import javax.swing.JPanel;
17 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
18 import jp.sourceforge.talisman.i18n.Messages;
22 * @author Haruaki TAMADA
25 public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{
26 private static final long serialVersionUID = 7057130952947891635L;
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;
34 public BirthmarkSelectablePane(StigmataFrame stigmata){
35 this.stigmata = stigmata;
38 stigmata.addBirthmarkServiceListener(this);
41 protected abstract void updateLayouts();
43 public Messages getMessages(){
44 return stigmata.getMessages();
47 public void setExperimentalMode(boolean experimentalMode){
48 this.experimentalMode = experimentalMode;
52 public boolean isExperimentalMode(){
53 return experimentalMode;
56 public String[] getSelectedServiceTypes(){
57 return selectedServices.toArray(new String[selectedServices.size()]);
60 public BirthmarkSpi getService(String type){
61 BirthmarkSelection elem = services.get(type);
63 return elem.getService();
69 public String[] getServiceTypes(){
70 String[] serviceArray = new String[services.size()];
72 for(String key: services.keySet()){
73 BirthmarkSpi service = services.get(key).getService();
74 serviceArray[index] = service.getType();
80 public boolean hasService(String type){
81 return services.get(type) != null;
84 public void select(String type, boolean flag){
86 selectedServices.add(type);
89 selectedServices.remove(type);
94 public void select(BirthmarkSpi service, boolean flag){
95 select(service.getType(), flag);
99 selectedServices.clear();
101 experimentalMode = false;
106 public void addDataChangeListener(DataChangeListener listener){
107 listeners.add(listener);
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);
122 public void serviceRemoved(BirthmarkSpi service){
123 BirthmarkSelection elem = services.get(service);
125 selectedServices.remove(service);
126 services.remove(service);
131 public Iterator<String> serviceNames(){
132 return services.keySet().iterator();
135 protected BirthmarkSelection getSelection(String type){
136 return services.get(type);
139 protected Iterator<BirthmarkSelection> birthmarkSelections(){
140 return services.values().iterator();
143 protected void fireEvent(){
144 for(DataChangeListener listener: listeners){
145 listener.valueChanged(this);
149 private void initServices(){
150 BirthmarkSpi[] serviceArray = stigmata.getEnvironment().getServices();
152 services = new LinkedHashMap<String, BirthmarkSelection>();
153 for(BirthmarkSpi service: serviceArray){
154 BirthmarkSelection elem = new BirthmarkSelection(service);
155 services.put(service.getType(), elem);