001: package org.osbl.client.wings.form;
002:
003: import org.osbl.client.wings.form.layouter.*;
004: import org.osbl.client.wings.form.ComponentProvider;
005: import org.osbl.client.wings.form.GenericObjectSubForm;
006: import org.osbl.client.wings.shell.Client;
007: import org.osbl.client.ClientServiceProvider;
008: import org.osbl.plugin.*;
009: import org.osbl.persistence.model.Concrete;
010: import org.osbl.persistence.model.General;
011: import org.conform.*;
012: import org.wings.*;
013:
014: import java.util.*;
015: import java.awt.event.ItemListener;
016: import java.awt.event.ItemEvent;
017: import java.beans.PropertyChangeListener;
018: import java.beans.PropertyChangeEvent;
019:
020: public class QualificationsSubForm extends GenericObjectSubForm
021: implements ItemListener, PropertyChangeListener {
022: private static final String KEY = General.class.getName()
023: + ".qualifications";
024:
025: private Map<String, SCheckBox> availableQualifications;
026:
027: SPanel panel = new SPanel(new SGridLayout());
028: private boolean ignoreStateChange;
029:
030: public Map<String, SCheckBox> getAvailableQualifications() {
031: if (availableQualifications == null) {
032: availableQualifications = new HashMap<String, SCheckBox>();
033:
034: boolean writable = getGenericObjectForm().getBeanMeta(
035: ComponentProvider.ROOT).getProperty(
036: "qualifications").isWritable();
037: final PluginManager pluginManager = (PluginManager) ClientServiceProvider
038: .getInstance().getService("PluginManager");
039: final ExtensionPoint extensionPoint = new ExtensionPoint(
040: getGenericObjectForm().getType().getName()
041: + ".concrete", Concrete.class);
042: final List<Extension> list = pluginManager
043: .getExtensions(extensionPoint);
044: for (Extension extension : list) {
045: final Class<Concrete> concreteClass = (Class<Concrete>) extension
046: .getImplementation();
047: final String name = Client.getInstance()
048: .getResourceProvider().getMessage(
049: concreteClass.getName());
050: final SCheckBox checkBox = new SCheckBox(name);
051: checkBox.setHorizontalAlignment(SConstants.LEFT_ALIGN);
052: checkBox.setName(concreteClass.getSimpleName());
053: checkBox.putClientProperty("concrete", concreteClass);
054: checkBox.addItemListener(this );
055: checkBox.setEnabled(writable);
056: panel.add(checkBox);
057: availableQualifications.put(concreteClass
058: .getSimpleName(), checkBox);
059: }
060: }
061: return availableQualifications;
062: }
063:
064: public void initializeSubForm() {
065: getAvailableQualifications();
066: getGenericObjectForm().getBeanData(ComponentProvider.ROOT)
067: .addPropertyChangeListener("qualifications", this );
068: }
069:
070: public Object getObject(String path) {
071: return null;
072: }
073:
074: public void setObject(String path, Object object) {
075: }
076:
077: public BeanMeta createBeanMeta(String path) {
078: return null;
079: }
080:
081: public SComponent createCustomComponent(String key) {
082: return KEY == key ? panel : null;
083: }
084:
085: public void appendLayoutInstructions(Instruction mainInstruction) {
086: PageSet pageSet = (PageSet) mainInstruction;
087: Page firstPage = pageSet.pages.get(0);
088: Division firstDivision = firstPage.divisions.get(0);
089: Column secondColumn = firstDivision.columns.get(0);
090: secondColumn.lines.add(new CustomEditor(KEY));
091: }
092:
093: // forward checkboxes to general.qualifications
094: public void itemStateChanged(ItemEvent e) {
095: if (ignoreStateChange)
096: return;
097:
098: SCheckBox checkBox = (SCheckBox) e.getSource();
099: boolean selected = checkBox.isSelected();
100: String qualification = '|' + checkBox.getName();
101:
102: BeanData beanData = getGenericObjectForm().getBeanData(
103: ComponentProvider.ROOT);
104: PropertyData propertyData = beanData.getPropertyData(beanData
105: .getBeanMeta().getProperty("qualifications"));
106:
107: String qualifications = (String) propertyData.getValue();
108: if (qualifications == null)
109: qualifications = "";
110:
111: if (selected && !qualifications.contains(qualification))
112: qualifications += qualification;
113: else if (!selected && qualifications.contains(qualification))
114: qualifications = qualifications.replaceFirst(
115: '\\' + qualification, "");
116: else
117: qualifications = null;
118:
119: if (qualifications != null) {
120: if (qualifications.length() == 0)
121: qualifications = null;
122:
123: propertyData.setValue(qualifications);
124: }
125: }
126:
127: // forward general.qualifications to checkboxes
128: public void propertyChange(PropertyChangeEvent evt) {
129: General general = (General) getGenericObjectForm().getObject();
130: if (general == null)
131: return;
132:
133: System.out.println("update qualifications "
134: + general.getQualifications());
135:
136: updateCheckBoxes(general);
137: }
138:
139: private void updateCheckBoxes(General general) {
140: ignoreStateChange = true;
141: for (Map.Entry<String, SCheckBox> entry : getAvailableQualifications()
142: .entrySet()) {
143: entry.getValue().setSelected(
144: general.hasQualification(entry.getKey()));
145: }
146: ignoreStateChange = false;
147: }
148: }
|