svn commit: r17693 - 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-21 02:56:15-0800
New Revision: 17693

Added:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java
      - copied, changed from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java
      - copied, changed from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java
Removed:
   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
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/SwingUIFactory.java

Log:
New implementation of RadioButtonPanel

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=17693&r1=17692&r2=17693
==============================================================================
--- 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-21 02:56:15-0800
@@ -1,4 +1,15 @@
-// $Id: Checkbox.java 15920 2008-10-14 18:03:33Z bobtarling $
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling - Original implementation
+ *******************************************************************************
+ */
 
 package org.argouml.core.propertypanels.ui;
 
@@ -36,7 +47,7 @@
      */
     private final Action action;
 
-    private final GetterSetter getterSetter;
+    private final GetterSetterManager getterSetter;
     
     /**
      * Constructor for UMLCheckBox.
@@ -51,7 +62,7 @@
             final String text,
             final Object modelElement,
             final String propertyName, 
-            final GetterSetter getterSetter) {
+            final GetterSetterManager getterSetter) {
         super(text);
         
         this.getterSetter = getterSetter;
@@ -111,7 +122,7 @@
          */
         private static final long serialVersionUID = -2708077474004286682L;
         
-        private final GetterSetter getterSetter;
+        private final GetterSetterManager getterSetter;
         private final String propertyName;
         private Object modelElement;
         
@@ -119,7 +130,7 @@
          * Constructor for ActionSetElementOwnershipSpecification.
          */
         protected SetAction(
-                final GetterSetter getterSetter, 
+                final GetterSetterManager getterSetter, 
                 final Object modelElement,
                 final String propertyName) {
             super(Translator.localize("Set"), null);

Removed: 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=markup&pathrev=17692

Removed: 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=markup&pathrev=17692

Copied: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java (from r17689, /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/GetterSetterManager.java?view=diff&pathrev=17693&r1=17689&r2=17693
==============================================================================
--- /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/GetterSetterManager.java	2009-12-21 02:56:15-0800
@@ -1,15 +1,30 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling - Post GSOC improvements
+ *******************************************************************************
+ */
+
 package org.argouml.core.propertypanels.ui;
 
 import java.util.HashMap;
 import java.util.Map;
 
-abstract class GetterSetter {
+import org.argouml.model.Model;
+
+abstract class GetterSetterManager {
     
     /**
      * The list of boolean property getter/setters
      */
-    protected final Map<String, BooleanGetterSetter> getterSetterByPropertyName =
-        new HashMap<String, BooleanGetterSetter>();
+    protected final Map<String, BaseGetterSetter> getterSetterByPropertyName =
+        new HashMap<String, BaseGetterSetter>();
     
     /**
      * Set a UML property by property name
@@ -26,20 +41,34 @@
      * @param propertyName the property name
      */
     abstract Object get(Object handle, String propertyName);
+
+    abstract String[] getOptions(String propertyName);
     
     boolean contains(String propertyName) {
         return getterSetterByPropertyName.containsKey(propertyName);
     }
     
-    static GetterSetter getGetterSetter() {
-        return new GetterSetterImpl();
+    static GetterSetterManager getGetterSetter() {
+        return new GetterSetterManagerImpl();
     }
     
-    protected abstract class BooleanGetterSetter {
+    protected abstract class BaseGetterSetter {
         
-        abstract String getPropertyName();
-        abstract Boolean get(Object modelElement);
-        abstract void set(Object modelElement, Boolean value);
+//        abstract String getPropertyName();
+        abstract Object get(Object modelElement);
+        abstract void set(Object modelElement, Object value);
     }
     
+    protected abstract class RadioGetterSetter extends BaseGetterSetter {
+        
+        private String[] options;
+
+        protected void setOptions(final String[] options) {
+            this.options = options;
+        }
+
+        protected String[] getOptions() {
+            return options;
+        }
+    }
 }
\ No newline at end of file

Copied: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java (from r17689, /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/GetterSetterManagerImpl.java?view=diff&pathrev=17693&r1=17689&r2=17693
==============================================================================
--- /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/GetterSetterManagerImpl.java	2009-12-21 02:56:15-0800
@@ -1,32 +1,66 @@
-// $Id: PopupMenuNewEvent.java 15918 2008-10-14 06:40:41Z mvw $
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling - Original implementation
+ *******************************************************************************
+ */
 
 package org.argouml.core.propertypanels.ui;
 
 import org.argouml.model.Model;
 
 /**
- * Property getters and setters
+ * Property getters and setters for UML1.4
  * @author Bob Tarling
  */
-class GetterSetterImpl extends GetterSetter {
+class GetterSetterManagerImpl extends GetterSetterManager {
     
-    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());
+    /**
+     * The constructor
+     */
+    public GetterSetterManagerImpl() {
+        build();
+    }
+    
+    /**
+     * Create all the getter/setters for this implementation
+     */
+    private void build() {
+        addGetterSetter("isAbstract", new AbstractGetterSetter());
+        addGetterSetter("isLeaf", new LeafGetterSetter());
+        addGetterSetter("isRoot", new RootGetterSetter());
+        addGetterSetter("isActive", new ActiveGetterSetter());
+        addGetterSetter("ownerScope", new OwnerScopeGetterSetter());
+        addGetterSetter("targetScope", new TargetScopeGetterSetter());
+        addGetterSetter("isQuery", new QueryGetterSetter());
+        addGetterSetter("isNavigable", new NavigableGetterSetter());
+        addGetterSetter("isSynchronous", new AsynchronousGetterSetter());
+        addGetterSetter("isSynch", new SynchGetterSetter());
+        addGetterSetter("ordering", new OrderingGetterSetter());
+        addGetterSetter("navigable", new NavigableGetterSetter());
+        addGetterSetter("derived", new DerivedGetterSetter());
+        addGetterSetter("visibility", new VisibilityGetterSetter());
+        addGetterSetter("aggregation", new AggregationGetterSetter());
+        addGetterSetter("kind", new ParameterDirectionGetterSetter());
+        addGetterSetter("changeability", new ChangeabilityGetterSetter());
+        addGetterSetter("concurrency", new ConcurrencyGetterSetter());
     }
     
-    private void addGetterSetter(BooleanGetterSetter bgs) {
-        getterSetterByPropertyName.put(bgs.getPropertyName(), bgs);
+    /**
+     * Helper method for adding a new getter/setter
+     * @param propertyName
+     * @param bgs
+     */
+    private void addGetterSetter(String propertyName, BaseGetterSetter bgs) {
+        getterSetterByPropertyName.put(propertyName, bgs);
     }
+    
     /**
      * Set a UML property by property name
      * @param handle the element to which a property must be set
@@ -34,9 +68,9 @@
      * @param propertyName the property name
      */
     public void set(Object handle, Object value, String propertyName) {
-        BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+        BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
         if (bgs != null) {
-            bgs.set(handle, (Boolean) value);
+            bgs.set(handle, value);
         }
     }
     
@@ -47,7 +81,7 @@
      * @param propertyName the property name
      */
     public Object get(Object handle, String propertyName) {
-        BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+        BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
         if (bgs != null) {
             return bgs.get(handle);
         }
@@ -55,136 +89,116 @@
         return null;
     }
     
-    private class AbstractGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isAbstract";
+    public String[] getOptions(String propertyName) {
+        BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+        if (bgs instanceof RadioGetterSetter) {
+            return ((RadioGetterSetter) bgs).getOptions();
         }
-        public Boolean get(Object modelElement) {
+        
+        return null;
+    }
+    
+    /**
+     * The getter/setter for the Absrtact property
+     * @author Bob Tarling
+     */
+    private class AbstractGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isAbstract(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setAbstract(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setAbstract(modelElement, (Boolean) value);
         }
     }
     
-    private class LeafGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isLeaf";
-        }
-        public Boolean get(Object modelElement) {
+    private class LeafGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isLeaf(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setLeaf(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setLeaf(modelElement, (Boolean) value);
         }
     }
     
-    private class RootGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isRoot";
-        }
-        public Boolean get(Object modelElement) {
+    private class RootGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isRoot(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setRoot(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setRoot(modelElement, (Boolean) value);
         }
     }
     
-    private class ActiveGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isActive";
-        }
-        public Boolean get(Object modelElement) {
+    private class ActiveGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isActive(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setActive(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setActive(modelElement, (Boolean) value);
         }
     }
     
-    private class OwnerScopeGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "ownerScope";
-        }
-        public Boolean get(Object modelElement) {
+    private class OwnerScopeGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isStatic(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setStatic(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setStatic(modelElement, (Boolean) value);
         }
     }
     
-    private class TargetScopeGetterSetter extends BooleanGetterSetter {
+    private class TargetScopeGetterSetter extends BaseGetterSetter {
         // Have we handled UML2 here?
-        public String getPropertyName() {
-            return "targetScope";
-        }
-        public Boolean get(Object modelElement) {
+        public Object get(Object modelElement) {
             return Model.getFacade().isStatic(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setStatic(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setStatic(modelElement, (Boolean) value);
         }
     }
     
-    private class QueryGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isQuery";
-        }
-        public Boolean get(Object modelElement) {
+    private class QueryGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isQuery(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setQuery(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setQuery(modelElement, (Boolean) value);
         }
     }
     
-    private class NavigableGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "navigable";
-        }
-        public Boolean get(Object modelElement) {
+    private class NavigableGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isNavigable(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCoreHelper().setNavigable(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCoreHelper().setNavigable(modelElement, (Boolean) value);
         }
     }
     
-    private class AsynchronousGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isSynchronous";
-        }
-        public Boolean get(Object modelElement) {
+    private class AsynchronousGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isAsynchronous(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getCommonBehaviorHelper().setAsynchronous(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getCommonBehaviorHelper().setAsynchronous(modelElement, (Boolean) value);
         }
     }
     
-    private class SynchGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "isSynch";
-        }
-        public Boolean get(Object modelElement) {
+    private class SynchGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().isSynch(modelElement);
         }
-        public void set(Object modelElement, Boolean value) {
-            Model.getActivityGraphsHelper().setSynch(modelElement, value);
+        public void set(Object modelElement, Object value) {
+            Model.getActivityGraphsHelper().setSynch(modelElement, (Boolean) value);
         }
     }
     
-    private class OrderingGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "ordering";
-        }
-        public Boolean get(Object modelElement) {
+    private class OrderingGetterSetter extends BaseGetterSetter {
+        public Object get(Object modelElement) {
             return Model.getFacade().getOrdering(modelElement) ==
                 Model.getOrderingKind().getOrdered();
         }
-        public void set(Object modelElement, Boolean value) {
+        public void set(Object modelElement, Object value) {
             if ((Boolean) value) {
                 Model.getCoreHelper().setOrdering(modelElement,
                         Model.getOrderingKind().getOrdered());
@@ -195,24 +209,28 @@
         }
     }
     
-    private class DerivedGetterSetter extends BooleanGetterSetter {
-        public String getPropertyName() {
-            return "derived";
-        }
-        public Boolean get(Object modelElement) {
-            Object tv = Model.getFacade().getTaggedValue(modelElement, getPropertyName());
+    private class DerivedGetterSetter extends BaseGetterSetter {
+        
+        /**
+         * Derived is not a true UML property but is in fact a pseudo property
+         * stored in a tag named "derived"
+         */
+        private static final String TagName = "derived";
+        
+        public Object get(Object modelElement) {
+            Object tv = Model.getFacade().getTaggedValue(modelElement, TagName);
             if (tv != null) {
                 String tag = Model.getFacade().getValueOfTag(tv);
                 return ("true".equals(tag));
             }
             return false;
         }
-        public void set(Object modelElement, Boolean value) {
-            Object taggedValue = Model.getFacade().getTaggedValue(modelElement, (String) getPropertyName());
+        public void set(Object modelElement, Object value) {
+            Object taggedValue = Model.getFacade().getTaggedValue(modelElement, TagName);
             if (taggedValue == null) {
                 taggedValue =
                         Model.getExtensionMechanismsFactory().buildTaggedValue(
-                                (String) getPropertyName(), "");
+                                TagName, "");
                 Model.getExtensionMechanismsHelper().addTaggedValue(
                         modelElement, taggedValue);
             }
@@ -223,4 +241,281 @@
             }
         }
     }
+    
+    
+    public class VisibilityGetterSetter extends RadioGetterSetter {
+        
+        /**
+         * Identifier for public visibility.
+         */
+        public static final String PUBLIC = "public";
+
+        /**
+         * Identifier for protected visibility.
+         */
+        public static final String PROTECTED = "protected";
+
+        /**
+         * Identifier for private visibility.
+         */
+        public static final String PRIVATE = "private";
+
+        /**
+         * Identifier for package visibility.
+         */
+        public static final String PACKAGE = "package";
+        
+        public VisibilityGetterSetter() {
+            setOptions(new String[] {PUBLIC, PACKAGE, PROTECTED, PRIVATE});
+        }
+        
+        public Object get(Object modelElement) {
+            Object kind = Model.getFacade().getVisibility(modelElement);
+            if (kind == null) {
+                return null;
+            } else if (kind.equals(Model.getVisibilityKind().getPublic())) {
+                return PUBLIC;
+            } else if (kind.equals(Model.getVisibilityKind().getPackage())) {
+                return PACKAGE;
+            } else if (kind.equals(Model.getVisibilityKind().getProtected())) {
+                return PROTECTED;
+            } else if (kind.equals(Model.getVisibilityKind().getPrivate())) {
+                return PRIVATE;
+            } else {
+                return PUBLIC;
+            }
+        }
+        
+        public void set(Object modelElement, Object value) {
+            Object kind = null;
+            if (value.equals(PUBLIC)) {
+                kind = Model.getVisibilityKind().getPublic();
+            } else if (value.equals(PROTECTED)) {
+                kind = Model.getVisibilityKind().getProtected();
+            } else if (value.equals(PACKAGE)) {
+                kind = Model.getVisibilityKind().getPackage();
+            } else {
+                kind = Model.getVisibilityKind().getPrivate();
+            }
+            Model.getCoreHelper().setVisibility(modelElement, kind);
+        }
+    }
+    
+    
+    private class AggregationGetterSetter extends RadioGetterSetter {
+        
+        /**
+         * Identifier for aggregate aggregation kind.
+         */
+        public static final String AGGREGATE = "aggregate";
+
+        /**
+         * Identifier for composite aggregation kind.
+         */
+        public static final String COMPOSITE = "composite";
+
+        /**
+         * Identifier for no aggregation kind.
+         */
+        public static final String NONE = "none";
+        
+        public AggregationGetterSetter() {
+            setOptions(new String[] {AGGREGATE, COMPOSITE, NONE});
+        }
+        
+        public Object get(Object modelElement) {
+            Object kind = Model.getFacade().getAggregation(modelElement);
+            if (kind == null) {
+                return null;
+            } else if (kind.equals(Model.getAggregationKind().getNone())) {
+                return NONE;
+            } else if (kind.equals(Model.getAggregationKind().getAggregate())) {
+                return AGGREGATE;
+            } else if (kind.equals(Model.getAggregationKind().getComposite())) {
+                return COMPOSITE;
+            } else {
+                return NONE;
+            }
+        }
+        
+        public void set(Object modelElement, Object value) {
+            Object kind = null;
+            
+            if (value.equals(AGGREGATE)) {
+                kind = Model.getAggregationKind().getAggregate();
+            } else if (value.equals(COMPOSITE)) {
+                kind = Model.getAggregationKind().getComposite();
+            } else {
+                kind = Model.getAggregationKind().getNone();
+            }
+            Model.getCoreHelper().setAggregation(modelElement, kind);
+            
+        }
+    }
+    
+    private class ParameterDirectionGetterSetter extends RadioGetterSetter {
+        
+        /**
+         * Identifier for an "in" parameter.
+         */
+        public static final String IN = "in";
+
+        /**
+         * Identifier for an "out" parameter.
+         */
+        public static final String OUT = "out";
+
+        /**
+         * Identifier for an "in/out" parameter.
+         */
+        public static final String INOUT = "inout";
+
+        /**
+         * Identifier for a "return" parameter.
+         */
+        public static final String RETURN = "return";
+        
+        public ParameterDirectionGetterSetter() {
+            setOptions(new String[] {
+                    IN,
+                    OUT,
+                    INOUT,
+                    RETURN});
+        }
+        
+        public Object get(Object modelElement) {
+            Object kind = Model.getFacade().getKind(modelElement);
+            if (kind == null) {
+                return null;
+            } else if (kind.equals(Model.getDirectionKind().getInParameter())) {
+                return IN;
+            } else if (kind.equals(Model.getDirectionKind().getInOutParameter())) {
+                return INOUT;
+            } else if (kind.equals(Model.getDirectionKind().getOutParameter())) {
+                return OUT;
+            } else {
+                return RETURN;
+            }
+        }
+        
+        public void set(Object modelElement, Object value) {
+            Object kind = null;
+            if (value == null) {
+                kind = null;
+            } else if (value.equals(IN)) {
+                kind = Model.getDirectionKind().getInParameter();
+            } else if (value.equals(OUT)) {
+                kind = Model.getDirectionKind().getOutParameter();
+            } else if (value.equals(INOUT)) {
+                kind = Model.getDirectionKind().getInOutParameter();
+            } else if (value.equals(RETURN)) {
+                kind = Model.getDirectionKind().getReturnParameter();
+            }
+            Model.getCoreHelper().setKind(modelElement, kind);
+            
+        }
+    }
+    
+    
+    private class ConcurrencyGetterSetter extends RadioGetterSetter {
+        
+        /**
+         * Identifier for sequential concurrency.
+         */
+        public static final String SEQUENTIAL= "sequential";
+
+        /**
+         * Identifier for guarded concurrency.
+         */
+        public static final String GUARDED = "guarded";
+
+        /**
+         * Identifier for concurrent concurrency.
+         */
+        public static final String CONCURRENT = "concurrent";
+
+        public ConcurrencyGetterSetter() {
+            setOptions(new String[] {
+                    SEQUENTIAL,
+                    GUARDED,
+                    CONCURRENT});
+        }
+        
+        public Object get(Object modelElement) {
+            Object kind = Model.getFacade().getConcurrency(modelElement);
+            if (kind == null) {
+                return null;
+            } else if (kind.equals(Model.getConcurrencyKind().getSequential())) {
+                return SEQUENTIAL;
+            } else if (kind.equals(Model.getConcurrencyKind().getGuarded())) {
+                return GUARDED;
+            } else if (kind.equals(Model.getConcurrencyKind().getConcurrent())) {
+                return CONCURRENT;
+            } else {
+                return SEQUENTIAL;
+            }
+        }
+        
+        public void set(Object modelElement, Object value) {
+            Object kind = null;
+            if (value.equals(SEQUENTIAL)) {
+                kind = Model.getConcurrencyKind().getSequential();
+            } else if (value.equals(GUARDED)) {
+                kind = Model.getConcurrencyKind().getGuarded();
+            } else {
+                kind = Model.getConcurrencyKind().getConcurrent();
+            }
+            Model.getCoreHelper().setConcurrency(modelElement, kind);
+        }
+    }
+    
+    
+    private class ChangeabilityGetterSetter extends RadioGetterSetter {
+        
+        /**
+         * Identifier for addonly changeability.
+         * TODO: Note this should not be ni UML2 version
+         */
+        public static final String ADDONLY = "addonly";
+
+        /**
+         * CHANGEABLE_COMMAND determines a changeability kind.
+         */
+        public static final String CHANGEABLE = "changeable";
+
+        /**
+         * FROZEN_COMMAND determines a changeability kind.
+         */
+        public static final String FROZEN = "frozen";
+
+        public ChangeabilityGetterSetter() {
+            setOptions(new String[] {ADDONLY, CHANGEABLE, FROZEN});
+        }
+        
+        public Object get(Object modelElement) {
+            Object kind = Model.getFacade().getChangeability(modelElement);
+            if (kind == null) {
+                return null;
+            } else if (kind.equals(Model.getChangeableKind().getAddOnly())) {
+                return ADDONLY;
+            } else if (kind.equals(Model.getChangeableKind().getChangeable())) {
+                return CHANGEABLE;
+            } else if (kind.equals(Model.getChangeableKind().getFrozen())) {
+                return FROZEN;
+            } else {
+                return CHANGEABLE;
+            }
+        }
+        
+        public void set(Object modelElement, Object value) {
+            if (value.equals(CHANGEABLE)) {
+                Model.getCoreHelper().setReadOnly(modelElement, false);
+            } else if (value.equals(ADDONLY)) {
+                Model.getCoreHelper().setChangeability(
+                        modelElement, Model.getChangeableKind().getAddOnly());
+            } else {
+                Model.getCoreHelper().setReadOnly(modelElement, true);
+            }
+        }
+    }
 }

Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java?view=markup&pathrev=17693
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java	2009-12-21 02:56:15-0800
@@ -0,0 +1,219 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling - Original implementation
+ *******************************************************************************
+ */
+
+package org.argouml.core.propertypanels.ui;
+
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Enumeration;
+
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.border.TitledBorder;
+
+import org.argouml.model.Model;
+import org.argouml.i18n.Translator;
+import org.argouml.ui.LookAndFeelMgr;
+import org.argouml.ui.UndoableAction;
+import org.tigris.swidgets.FlexiGridLayout;
+
+/**
+ * A collection of radio buttons representing the state of some UML property
+ * on a UML element.
+ * @author Bob Tarling
+ */
+public class RadioButtonPanel extends JPanel
+        implements PropertyChangeListener {
+
+    /**
+     * The class uid
+     */
+    private static final long serialVersionUID = -3786246432442765208L;
+
+    /**
+     * The UML element this panel represents
+     */
+    private final Object umlElement;
+
+    /**
+     * The UML property this panel represents
+     */
+    private final String propertyName;
+
+    /**
+     * The group of buttons
+     */
+    private final ButtonGroup buttonGroup = new ButtonGroup();
+    
+    /**
+     * The getter/setter facade for accessing the model subsystem
+     */
+    private final GetterSetterManager getterSetterManager;
+    
+    /**
+     * Constructor for RadioButtonPanel.
+     * @param umlElement the UML element this radio panel represents and is
+     * listening to
+     * @param propertyName the property name of the UML element this radio
+     * panel represents and is listening to
+     * @param horizontal determines the orientation
+     * @param getterSetterManager the manager for getting and setting model
+     * element values
+     */
+    public RadioButtonPanel(
+            final Object umlElement,
+            final String propertyName,
+            final boolean horizontal,
+            final GetterSetterManager getterSetterManager) {
+        super(true);
+        setDoubleBuffered(true);
+        
+        final String[] options = getterSetterManager.getOptions(propertyName);
+        
+        setLayout(horizontal
+                ? new GridLayout()
+                : new FlexiGridLayout(0, options.length));
+        
+        this.propertyName = propertyName;
+        this.getterSetterManager = getterSetterManager;
+        this.umlElement = umlElement;
+        
+        final Font font = LookAndFeelMgr.getInstance().getStandardFont();
+        final String label = Translator.localize("label." + propertyName);
+        if (label != null) {
+            TitledBorder border = new TitledBorder(label);
+            border.setTitleFont(font);
+            setBorder(border);
+        }
+        
+        Action action = new SetAction(getterSetterManager, umlElement, propertyName);
+        
+        buttonGroup.add(new JRadioButton());
+        
+        for (String option : options) {
+            final String optionLabel =
+                Translator.localize("label." + propertyName + "-" + option);
+            final JRadioButton button = new JRadioButton(optionLabel);
+            button.addActionListener(action);
+            button.setActionCommand(option);
+            button.setFont(font);
+            button.setName(option);
+            buttonGroup.add(button);
+            add(button);
+        }
+        
+        build();
+        
+        Model.getPump().addModelEventListener(
+                this, umlElement, propertyName);
+    }
+    
+    /**
+     * Remove listeners when this component is removed
+     */
+    public void removeNotify() {
+        Model.getPump().addModelEventListener(
+                this, umlElement, propertyName);
+        
+        final Enumeration<AbstractButton> en =
+            buttonGroup.getElements();
+        en.nextElement();
+        while (en.hasMoreElements()) {
+            JRadioButton b = (JRadioButton) en.nextElement();
+            b.removeActionListener(b.getAction());
+        }
+    }
+    
+    private GetterSetterManager getGetterSetter() {
+        return getterSetterManager;
+    }
+    
+    public void setEnabled(boolean enabled) {
+        for (final Component component : getComponents()) {
+            component.setEnabled(enabled);
+        }
+    }
+
+    /*
+     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+     */
+    public void propertyChange(PropertyChangeEvent e) {
+        if (e.getPropertyName().equals(propertyName)) {
+            build();
+        }
+    }
+
+    private void build() {
+        final String value =
+            (String) getGetterSetter().get(umlElement, propertyName);
+        final Enumeration<AbstractButton> en =
+            buttonGroup.getElements();
+        if (value == null) {
+            en.nextElement().setSelected(true);
+            return;
+        }
+        while (en.hasMoreElements()) {
+            AbstractButton b = en.nextElement();
+            if (value.equals(b.getActionCommand())) {
+                b.setSelected(true);
+                break;
+            }
+        }
+    }
+    
+    /**
+     * This action sets the Visibility of a ModelElement. 
+     * Next to a ModelElement, this also works for an 
+     * ElementResidence and ElementImport.
+     *
+     * @author [email protected]
+     * @since Jan 4, 2003
+     */
+    private static class SetAction extends UndoableAction {
+
+        private final GetterSetterManager getterSetter;
+        private final String propertyName;
+        private Object modelElement;
+        
+        /**
+         * Constructor for ActionSetElementOwnershipSpecification.
+         */
+        protected SetAction(
+                final GetterSetterManager getterSetter, 
+                final Object modelElement,
+                final String propertyName) {
+            this.modelElement = modelElement;
+            this.getterSetter = getterSetter;
+            this.propertyName = propertyName;
+        }
+
+        /*
+         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+         */
+        public void actionPerformed(ActionEvent e) {
+            super.actionPerformed(e);
+            JRadioButton source = (JRadioButton) e.getSource();
+            getterSetter.set(
+                    modelElement, 
+                    source.getActionCommand(), 
+                    propertyName);
+        }
+    }
+}

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java?view=diff&pathrev=17693&r1=17692&r2=17693
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java	2009-12-21 02:56:15-0800
@@ -1,3 +1,16 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Bob Tarling - Post GSOC improvements
+ *******************************************************************************
+ */
+
 // $Id$
 // Copyright (c) 2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -38,13 +51,6 @@
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
 import org.argouml.uml.ui.UMLComboBoxNavigator;
-import org.argouml.uml.ui.UMLRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLAssociationEndAggregationRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLAssociationEndChangeabilityRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLModelElementVisibilityRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLOperationConcurrencyRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLParameterDirectionKindRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLStructuralFeatureChangeabilityRadioButtonPanel;
 import org.tigris.swidgets.GridLayout2;
 
 /**
@@ -201,52 +207,16 @@
     private void buildOptionBox(JPanel panel, Object target,
             PropertyMeta prop) {
         
-        UMLRadioButtonPanel control = null;
-        
-        if ("visibility".equals(prop.getName())) {
-            UMLRadioButtonPanel visibilityPanel =   
-                new UMLModelElementVisibilityRadioButtonPanel(
-                    Translator.localize("label.visibility"), 
-                    true); 
-            visibilityPanel.setTarget(target);
-            control = visibilityPanel;
-        } else if ("changeability".equals(prop.getName())) {
-            UMLRadioButtonPanel cPanel = null;
-            if (Model.getFacade().isAAssociationEnd(target)) {
-                cPanel = 
-                    new UMLAssociationEndChangeabilityRadioButtonPanel(
-                            "label.changeability", true);
-            } else {
-                cPanel =   
-                    new UMLStructuralFeatureChangeabilityRadioButtonPanel(
-                            Translator.localize("label.changeability"), 
-                            true);
-            }
-            cPanel.setTarget(target);
-            control = cPanel;
+        final String propertyName = prop.getName();
 
-        } else if ("concurrency".equals(prop.getName())) { 
-            UMLRadioButtonPanel cPanel =   
-                new UMLOperationConcurrencyRadioButtonPanel(
-                        Translator.localize("label.concurrency"), true); 
-            cPanel.setTarget(target);
-            control = cPanel;
-            
-        } else if ("kind".equals(prop.getName())) {
-            UMLRadioButtonPanel cPanel = 
-                new UMLParameterDirectionKindRadioButtonPanel(
-                    Translator.localize("label.parameter.kind"), true);
-            cPanel.setTarget(target);
-            control = cPanel;   
-        } else if ("aggregation".equals(prop.getName())) {
-            UMLRadioButtonPanel cPanel = 
-                new UMLAssociationEndAggregationRadioButtonPanel(
-                        "label.aggregation", true);
-            cPanel.setTarget(target);
-            control = cPanel;   
-        }
-        
-        if (control != null) {
+        final GetterSetterManager getterSetter = GetterSetterManager.getGetterSetter();
+
+        if (getterSetter.contains(propertyName)) {
+            JPanel control = new RadioButtonPanel(
+                    target, 
+                    propertyName, 
+                    true, 
+                    getterSetter);
             addControl(panel, null, control);
         }
     }
@@ -278,7 +248,7 @@
         
         final String propertyName = prop.getName();
         
-        final GetterSetter getterSetter = GetterSetter.getGetterSetter();
+        final GetterSetterManager getterSetter = GetterSetterManager.getGetterSetter();
 
         String label;
         if (propertyName.startsWith("is")) {
@@ -288,39 +258,8 @@
         }
         label = Translator.localize(label);        
         
-        CheckBox checkbox = null;
-        if ("derived".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isAbstract".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isLeaf".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isRoot".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isActive".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("ownerScope".equals(propertyName)) {   
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("targetScope".equals(propertyName)) {
-            // TODO: An alternative property name will need to be inserted for
-            // UML 2.x
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isQuery".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isNavigable".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("ordering".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isAsynchronous".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("isSynch".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        } else if ("derived".equals(propertyName)) {
-            checkbox = new CheckBox(label, target, propertyName, getterSetter);
-        }
-        
-        if (checkbox != null) {
-            panel.add(checkbox);
+        if (getterSetter.contains(propertyName)) {
+            panel.add(new CheckBox(label, target, propertyName, getterSetter));
         }
     }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2431940

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.