001: /* $Id: ManyToManyEditor.java 746 2006-11-08 13:34:23Z hengels $ */
002: package org.conform.wings.editor;
003:
004: import java.util.HashSet;
005: import java.util.Set;
006:
007: import org.conform.*;
008: import org.conform.format.Format;
009: import org.conform.wings.Editor;
010: import org.conform.wings.PropertyAdapter;
011: import org.wings.SComponent;
012:
013: public class ManyToManyEditor implements Editor {
014: public SComponent createComponent(PropertyMeta propertyMeta) {
015: SubSet subSet = new SubSet();
016: subSet.setModel(new SubSetModelPropertyAdapter(propertyMeta));
017: Format format = propertyMeta.getFormat();
018: if (format != null)
019: subSet.setRenderer(new FormattedListCellRenderer(format));
020: configureComponent(propertyMeta, subSet, false);
021: return subSet;
022: }
023:
024: public void configureComponent(PropertyMeta propertyMeta,
025: SComponent component, boolean erroneous) {
026: SubSet subSet = (SubSet) component;
027: subSet.setEnabled(propertyMeta.isWritable());
028: subSet.setVisible(propertyMeta.isReadable());
029: }
030:
031: public void setPropertyData(SComponent component,
032: PropertyData propertyData) {
033: BeanData beanData = propertyData.getBeanData();
034: if (beanData != null)
035: beanData.addPropertyChangeListener(propertyData
036: .getPropertyMeta().getName(),
037: new ComponentInvalidator(component));
038: if (component instanceof SubSet) {
039: SubSet subSet = (SubSet) component;
040: ((SubSetModelPropertyAdapter) subSet.getModel())
041: .setPropertyData(propertyData);
042: }
043: }
044:
045: public PropertyData getPropertyData(SComponent component) {
046: if (component instanceof SubSet) {
047: SubSet subSet = (SubSet) component;
048: return ((SubSetModelPropertyAdapter) subSet.getModel())
049: .getPropertyData();
050: }
051:
052: return null;
053: }
054:
055: static class SubSetModelPropertyAdapter extends DefaultSubSetModel
056: implements PropertyAdapter {
057: private PropertyData propertyData;
058: private PropertyMeta property;
059:
060: public SubSetModelPropertyAdapter(PropertyMeta property) {
061: this .property = property;
062: }
063:
064: public PropertyData getPropertyData() {
065: return propertyData;
066: }
067:
068: public void setPropertyData(PropertyData propertyData) {
069: this .propertyData = propertyData;
070: fireChange();
071: }
072:
073: public Set getWholeSet() {
074: return new HashSet(property.getRelationBean()
075: .getDomainProvider().getDomain());
076: }
077:
078: public Set getIncludedSubSet() {
079: if (propertyData == null)
080: return null;
081:
082: return (Set) propertyData.getValue();
083: }
084:
085: public void setIncludedSubSet(Set includedSubSet) {
086: propertyData.setValue(includedSubSet);
087: fireChange();
088: }
089:
090: public void exclude(Object object) {
091: includedSubSet.remove(object);
092: propertyData.setValue(includedSubSet);
093: fireChange();
094: }
095:
096: public void include(Object object) {
097: includedSubSet.add(object);
098: propertyData.setValue(includedSubSet);
099: fireChange();
100: }
101: }
102: }
|