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
24 public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{
25 private static final long serialVersionUID = 7057130952947891635L;
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;
33 public BirthmarkSelectablePane(StigmataFrame stigmata){
34 this.stigmata = stigmata;
37 stigmata.addBirthmarkServiceListener(this);
40 protected abstract void updateLayouts();
42 public Messages getMessages(){
43 return stigmata.getMessages();
46 public void setExperimentalMode(boolean experimentalMode){
47 this.experimentalMode = experimentalMode;
51 public boolean isExperimentalMode(){
52 return experimentalMode;
55 public String[] getSelectedServiceTypes(){
56 return selectedServices.toArray(new String[selectedServices.size()]);
59 public BirthmarkSpi getService(String type){
60 BirthmarkSelection elem = services.get(type);
62 return elem.getService();
68 public String[] getServiceTypes(){
69 String[] serviceArray = new String[services.size()];
71 for(String key: services.keySet()){
72 BirthmarkSpi service = services.get(key).getService();
73 serviceArray[index] = service.getType();
79 public boolean hasService(String type){
80 return services.get(type) != null;
83 public void select(String type, boolean flag){
85 selectedServices.add(type);
88 selectedServices.remove(type);
93 public void select(BirthmarkSpi service, boolean flag){
94 select(service.getType(), flag);
98 selectedServices.clear();
100 experimentalMode = false;
105 public void addDataChangeListener(DataChangeListener listener){
106 listeners.add(listener);
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);
121 public void serviceRemoved(BirthmarkSpi service){
122 BirthmarkSelection elem = services.get(service);
124 selectedServices.remove(service);
125 services.remove(service);
130 public Iterator<String> serviceNames(){
131 return services.keySet().iterator();
134 protected BirthmarkSelection getSelection(String type){
135 return services.get(type);
138 protected Iterator<BirthmarkSelection> birthmarkSelections(){
139 return services.values().iterator();
142 protected void fireEvent(){
143 for(DataChangeListener listener: listeners){
144 listener.valueChanged(this);
148 private void initServices(){
149 BirthmarkSpi[] serviceArray = stigmata.getEnvironment().getServices();
151 services = new LinkedHashMap<String, BirthmarkSelection>();
152 for(BirthmarkSpi service: serviceArray){
153 BirthmarkSelection elem = new BirthmarkSelection(service);
154 services.put(service.getType(), elem);