Author: bobtarling Date: 2009-12-20 07:07:21-0800 New Revision: 17689 Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java
Log: Improve design pattern for checkbox Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java?view=diff&pathrev=17689&r1=17688&r2=17689 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java 2009-12-20 07:07:21-0800 @@ -64,6 +64,9 @@ action = new SetAction(getterSetter, modelElement, propertyName); setActionCommand((String) action.getValue(Action.ACTION_COMMAND_KEY)); + addActionListener(action); + Model.getPump().addModelEventListener( + this, modelElement, propertyName); } private String propertyToLabel(String propertyName) { @@ -75,18 +78,10 @@ } /** - * Add listeners when the component is placed on its parent - */ - public void addNotify() { - addActionListener(action); - Model.getPump().addModelEventListener( - this, modelElement, propertyName); - } - - /** * Remove all listeners when the component is removed from its parent */ public void removeNotify() { + super.removeNotify(); removeActionListener(action); Model.getPump().removeModelEventListener( this, modelElement, propertyName); @@ -142,7 +137,7 @@ public void actionPerformed(ActionEvent e) { super.actionPerformed(e); CheckBox source = (CheckBox) e.getSource(); - this.getterSetter.set(modelElement, source.isSelected(), propertyName); + getterSetter.set(modelElement, source.isSelected(), propertyName); } } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java?view=diff&pathrev=17689&r1=17688&r2=17689 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java 2009-12-20 07:07:21-0800 @@ -1,8 +1,17 @@ package org.argouml.core.propertypanels.ui; +import java.util.HashMap; +import java.util.Map; + abstract class GetterSetter { /** + * The list of boolean property getter/setters + */ + protected final Map<String, BooleanGetterSetter> getterSetterByPropertyName = + new HashMap<String, BooleanGetterSetter>(); + + /** * Set a UML property by property name * @param handle the element to which a property must be set * @param value the new property value @@ -18,7 +27,19 @@ */ abstract Object get(Object handle, String propertyName); + boolean contains(String propertyName) { + return getterSetterByPropertyName.containsKey(propertyName); + } + static GetterSetter getGetterSetter() { return new GetterSetterImpl(); } + + protected abstract class BooleanGetterSetter { + + abstract String getPropertyName(); + abstract Boolean get(Object modelElement); + abstract void set(Object modelElement, Boolean value); + } + } \ No newline at end of file Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java?view=diff&pathrev=17689&r1=17688&r2=17689 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java 2009-12-20 07:07:21-0800 @@ -10,6 +10,23 @@ */ class GetterSetterImpl extends GetterSetter { + public GetterSetterImpl() { + addGetterSetter(new AbstractGetterSetter()); + addGetterSetter(new LeafGetterSetter()); + addGetterSetter(new RootGetterSetter()); + addGetterSetter(new ActiveGetterSetter()); + addGetterSetter(new OwnerScopeGetterSetter()); + addGetterSetter(new TargetScopeGetterSetter()); + addGetterSetter(new QueryGetterSetter()); + addGetterSetter(new NavigableGetterSetter()); + addGetterSetter(new AsynchronousGetterSetter()); + addGetterSetter(new SynchGetterSetter()); + addGetterSetter(new OrderingGetterSetter()); + } + + private void addGetterSetter(BooleanGetterSetter bgs) { + getterSetterByPropertyName.put(bgs.getPropertyName(), bgs); + } /** * Set a UML property by property name * @param handle the element to which a property must be set @@ -17,53 +34,9 @@ * @param propertyName the property name */ public void set(Object handle, Object value, String propertyName) { - if ("isAbstract".equals(propertyName)) { - Model.getCoreHelper().setAbstract(handle, (Boolean) value); - } else if ("isLeaf".equals(propertyName)) { - Model.getCoreHelper().setLeaf(handle, (Boolean) value); - } else if ("isRoot".equals(propertyName)) { - Model.getCoreHelper().setRoot(handle, (Boolean) value); - } else if ("isActive".equals(propertyName)) { - Model.getCoreHelper().setActive(handle, (Boolean) value); - } else if ("ownerScope".equals(propertyName)) { - Model.getCoreHelper().setStatic(handle, (Boolean) value); - } else if ("targetScope".equals(propertyName)) { - // Have we handled UML2 here? - Model.getCoreHelper().setStatic(handle, (Boolean) value); - } else if ("isQuery".equals(propertyName)) { - Model.getCoreHelper().setQuery(handle, (Boolean) value); - } else if ("isNavigable".equals(propertyName)) { - Model.getCoreHelper().setNavigable(handle, (Boolean) value); - } else if ("ordering".equals(propertyName)) { - if ((Boolean) value) { - Model.getCoreHelper().setOrdering(handle, - Model.getOrderingKind().getOrdered()); - } else { - Model.getCoreHelper().setOrdering(handle, - Model.getOrderingKind().getUnordered()); - } - } else if ("isAsynchronous".equals(propertyName)) { - Model.getCommonBehaviorHelper().setAsynchronous( - handle, - (Boolean) value); - } else if ("isSynch".equals(propertyName)) { - Model.getActivityGraphsHelper().setSynch( - handle, - (Boolean) value); - } else if ("derived".equals(propertyName)) { - Object taggedValue = Model.getFacade().getTaggedValue(handle, (String) propertyName); - if (taggedValue == null) { - taggedValue = - Model.getExtensionMechanismsFactory().buildTaggedValue( - (String) propertyName, ""); - Model.getExtensionMechanismsHelper().addTaggedValue( - handle, taggedValue); - } - if ((Boolean) value) { - Model.getCommonBehaviorHelper().setValue(taggedValue, "true"); - } else { - Model.getCommonBehaviorHelper().setValue(taggedValue, "false"); - } + BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName); + if (bgs != null) { + bgs.set(handle, (Boolean) value); } } @@ -74,37 +47,180 @@ * @param propertyName the property name */ public Object get(Object handle, String propertyName) { - if ("isAbstract".equals(propertyName)) { - return Model.getFacade().isAbstract(handle); - } else if ("isLeaf".equals(propertyName)) { - return Model.getFacade().isLeaf(handle); - } else if ("isRoot".equals(propertyName)) { - return Model.getFacade().isRoot(handle); - } else if ("isActive".equals(propertyName)) { - return Model.getFacade().isActive(handle); - } else if ("ownerScope".equals(propertyName)) { - return Model.getFacade().isStatic(handle); - } else if ("targetScope".equals(propertyName)) { - // Have we handled UML2 here? - return Model.getFacade().isStatic(handle); - } else if ("isQuery".equals(propertyName)) { - return Model.getFacade().isQuery(handle); - } else if ("isNavigable".equals(propertyName)) { - return Model.getFacade().isNavigable(handle); - } else if ("ordering".equals(propertyName)) { - return Model.getFacade().getOrdering(handle) == Model.getOrderingKind().getOrdered(); - } else if ("isAsynchronous".equals(propertyName)) { - return Model.getFacade().isAsynchronous(handle); - } else if ("isSynch".equals(propertyName)) { - return Model.getFacade().isSynch(handle); - } else if ("derived".equals(propertyName)) { - Object tv = Model.getFacade().getTaggedValue(handle, propertyName); + BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName); + if (bgs != null) { + return bgs.get(handle); + } + + return null; + } + + private class AbstractGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isAbstract"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isAbstract(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setAbstract(modelElement, value); + } + } + + private class LeafGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isLeaf"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isLeaf(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setLeaf(modelElement, value); + } + } + + private class RootGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isRoot"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isRoot(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setRoot(modelElement, value); + } + } + + private class ActiveGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isActive"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isActive(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setActive(modelElement, value); + } + } + + private class OwnerScopeGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "ownerScope"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isStatic(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setStatic(modelElement, value); + } + } + + private class TargetScopeGetterSetter extends BooleanGetterSetter { + // Have we handled UML2 here? + public String getPropertyName() { + return "targetScope"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isStatic(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setStatic(modelElement, value); + } + } + + private class QueryGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isQuery"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isQuery(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setQuery(modelElement, value); + } + } + + private class NavigableGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "navigable"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isNavigable(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCoreHelper().setNavigable(modelElement, value); + } + } + + private class AsynchronousGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isSynchronous"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isAsynchronous(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getCommonBehaviorHelper().setAsynchronous(modelElement, value); + } + } + + private class SynchGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "isSynch"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().isSynch(modelElement); + } + public void set(Object modelElement, Boolean value) { + Model.getActivityGraphsHelper().setSynch(modelElement, value); + } + } + + private class OrderingGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "ordering"; + } + public Boolean get(Object modelElement) { + return Model.getFacade().getOrdering(modelElement) == + Model.getOrderingKind().getOrdered(); + } + public void set(Object modelElement, Boolean value) { + if ((Boolean) value) { + Model.getCoreHelper().setOrdering(modelElement, + Model.getOrderingKind().getOrdered()); + } else { + Model.getCoreHelper().setOrdering(modelElement, + Model.getOrderingKind().getUnordered()); + } + } + } + + private class DerivedGetterSetter extends BooleanGetterSetter { + public String getPropertyName() { + return "derived"; + } + public Boolean get(Object modelElement) { + Object tv = Model.getFacade().getTaggedValue(modelElement, getPropertyName()); if (tv != null) { String tag = Model.getFacade().getValueOfTag(tv); return ("true".equals(tag)); } return false; } - return null; + public void set(Object modelElement, Boolean value) { + Object taggedValue = Model.getFacade().getTaggedValue(modelElement, (String) getPropertyName()); + if (taggedValue == null) { + taggedValue = + Model.getExtensionMechanismsFactory().buildTaggedValue( + (String) getPropertyName(), ""); + Model.getExtensionMechanismsHelper().addTaggedValue( + modelElement, taggedValue); + } + if ((Boolean) value) { + Model.getCommonBehaviorHelper().setValue(taggedValue, "true"); + } else { + Model.getCommonBehaviorHelper().setValue(taggedValue, "false"); + } + } } } ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2431811 To unsubscribe from this discussion, e-mail: [[email protected]].
