svn commit: r17689 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
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]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.