svn commit: r18102 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels: meta model ui

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2010-03-16 13:31:06-0700
New Revision: 18102

Modified:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels2.xml
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java

Log:
provide a button to add new reception for class

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml?view=diff&pathrev=18102&r1=18101&r2=18102
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	2010-03-16 13:31:06-0700
@@ -174,7 +174,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />
@@ -205,7 +205,7 @@
     <list name="specialization" type="GeneralizableElement" />
     <separator />
     <list name="feature" type="org.omg.uml.foundation.core.Attribute" label="label.attributes" />
-    <list name="feature" type="org.omg.uml.foundation.core.Operation" label="label.operations" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" label="label.operations" />
     <list name="association" type="Classifier" />    
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
 	
@@ -1167,7 +1167,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />
@@ -1388,7 +1388,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />
@@ -1435,7 +1435,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />
@@ -3790,7 +3790,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />
@@ -3908,7 +3908,7 @@
     <separator />
     <list name="specialization" type="GeneralizableElement" />
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
-    <list name="feature" type="Feature" />
+    <list name="feature" type="org.omg.uml.foundation.core.Operation,org.omg.uml.behavioralelements.commonbehavior.Reception" />
     <list name="powertypeRange" type="Generalization" />
     <list name="typedFeature" type="Classifier" />
     <list name="typedParameter" type="Classifier" />

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels2.xml
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels2.xml?view=diff&pathrev=18102&r1=18101&r2=18102
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels2.xml	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels2.xml	2010-03-16 13:31:06-0700
@@ -205,7 +205,7 @@
     <list name="specialization" type="GeneralizableElement" />
     <separator />
     <list name="feature" type="org.eclipse.uml2.uml.Property" label="label.attributes" />
-    <list name="feature" type="org.eclipse.uml2.uml.Operation" label="label.operations" />
+    <list name="feature" type="org.eclipse.uml2.uml.Operation,org.eclipse.uml2.uml.Reception" label="label.operations" />
     <list name="association" type="Classifier" />    
     <list name="ownedElement" type="ModelElement" label="label.owned-elements"/>
 	<debug />

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18102&r1=18101&r2=18102
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	2010-03-16 13:31:06-0700
@@ -16,6 +16,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.StringTokenizer;
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
@@ -58,7 +59,7 @@
         addGetterSetter("kind", new ParameterDirectionGetterSetter());
         addGetterSetter("changeability", new ChangeabilityGetterSetter());
         addGetterSetter("concurrency", new ConcurrencyGetterSetter());
-        addGetterSetter("feature", new FeatureGetterSetter(type));
+        addGetterSetter("feature", new FeatureGetterSetter());
         addGetterSetter("parameter", new ParameterGetterSetter());
         addGetterSetter("receiver", new ReceiverGetterSetter());
         addGetterSetter("sender", new SenderGetterSetter());
@@ -102,7 +103,10 @@
         return null;
     }
     
-    public Collection getOptions(Object umlElement, String propertyName, String type) {
+    public Collection getOptions(
+            final Object umlElement,
+            final String propertyName,
+            final String type) {
         BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
         if (bgs instanceof OptionGetterSetter) {
             return ((OptionGetterSetter) bgs).getOptions(umlElement, type);
@@ -121,7 +125,10 @@
         return null;
     }
     
-    public boolean isValidElement(String propertyName, String type, Object element) {
+    public boolean isValidElement(
+            final String propertyName,
+            final String type,
+            final Object element) {
         BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
         if (bgs instanceof ListGetterSetter) {
             return ((ListGetterSetter) bgs).isValidElement(element, type);
@@ -559,24 +566,32 @@
             }
         }
     }
-    
+
     private class FeatureGetterSetter extends ListGetterSetter {
         
-        private Class metaType;
-        
-        public FeatureGetterSetter(String type) {
+        /**
+         * Get all the features for the model
+         * @param modelElement
+         * @param type
+         * @return
+         * @see org.argouml.core.propertypanels.model.GetterSetterManager.OptionGetterSetter#getOptions(java.lang.Object, java.lang.String)
+         */
+        public Collection getOptions(
+                final Object modelElement,
+                final String type /* TODO: change this to a metatype */ ) {
+            
+            StringTokenizer st = new StringTokenizer(type, ",");
             try {
-                metaType = Class.forName(type);
+                Class metaType = Class.forName(st.nextToken());
+                if (Model.getMetaTypes().getAttribute().equals(metaType)) {
+                    return Model.getFacade().getAttributes(modelElement);
+                } else if (Model.getMetaTypes().getOperation().equals(metaType)) {
+                    return Model.getFacade().getOperationsAndReceptions(modelElement);
+                } else {
+                    return Collections.EMPTY_LIST;
+                }
             } catch (ClassNotFoundException e) {
-                // ignore
-            }
-        }
-        public Collection getOptions(Object modelElement, String type) {
-            if (Model.getMetaTypes().getAttribute().equals(metaType)) {
-                return Model.getFacade().getAttributes(modelElement);
-            } else if (Model.getMetaTypes().getOperation().equals(metaType)) {
-                return Model.getFacade().getOperationsAndReceptions(modelElement);
-            } else {
+                LOG.error("Exception", e);
                 return Collections.EMPTY_LIST;
             }
         }
@@ -590,12 +605,14 @@
             // not needed
         }
 
-        protected boolean isValidElement(Object element, String type) {
+        protected boolean isValidElement(
+                final Object element,
+                final String type) {
             return getOptions(element, type).contains(element);
         }
         
         public Object getMetaType() {
-            return metaType;
+            return Model.getMetaTypes().getOperation();
         }
     }
     

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java?view=diff&pathrev=18102&r1=18101&r2=18102
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	2010-03-16 13:31:06-0700
@@ -47,6 +47,7 @@
 import java.awt.event.MouseListener;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import javax.swing.Action;
 import javax.swing.DefaultListModel;
@@ -237,6 +238,7 @@
         
         this.expandable = expandable;
         Object metaType = null;
+        List metaTypes = null;
 
         if (model instanceof UMLModelElementListModel) {
             // Temporary until SimpleListModel is used for all
@@ -247,6 +249,7 @@
         } else if (model instanceof org.argouml.core.propertypanels.ui.SimpleListModel) {
             target = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getUmlElement();
             metaType = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getMetaType();
+            metaTypes = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getMetaTypes();
             scroll = new ScrollListImpl(model, 1);
             readonly = Model.getModelManagementHelper().isReadOnly(target);
         } else {
@@ -257,6 +260,11 @@
         
         assert (target != null);
 
+        if (metaTypes == null) {
+            metaTypes = new ArrayList();
+            metaTypes.add(metaType);
+        }
+
         LOG.info("Creating list for " + target);
 
         LOG.info("model = " + model.getClass().getName());
@@ -290,18 +298,20 @@
             moveTopAction = null;
             moveBottomAction = null;
         } else {
-        	if (!readonly) {
+            if (!readonly) {
         		// TODO: Lets build this into a separate buildToolbar method
         		
                 // Create actions and expander if we have multiple rows
                 final ArrayList<Action> actions = new ArrayList<Action>(6);
 
-                if (Model.getUmlFactory().isContainmentValid(metaType, target)) {
-                    final Action createAction = new ActionCreateContainedModelElement(
-                            metaType,
-                            target,
-                            "button.new-" + Model.getMetaTypes().getName(metaType).toLowerCase());
-                    actions.add(createAction);
+                for (Object meta : metaTypes) {
+                    if (Model.getUmlFactory().isContainmentValid(meta, target)) {
+                        final Action createAction = new ActionCreateContainedModelElement(
+                                meta,
+                                target,
+                                "button.new-" + Model.getMetaTypes().getName(meta).toLowerCase());
+                        actions.add(createAction);
+                    }
                 }
                 deleteAction = new DeleteAction();
                 actions.add(deleteAction);

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java?view=diff&pathrev=18102&r1=18101&r2=18102
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	2010-03-16 13:31:06-0700
@@ -15,8 +15,10 @@
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.StringTokenizer;
 
 import javax.swing.DefaultListModel;
 import javax.swing.SwingUtilities;
@@ -47,6 +49,11 @@
      */
     private final String type;
     
+    /**
+     * The metatypes to provide buttons to create
+     */
+    private final ArrayList metaTypes;
+    
     private final Object umlElement;
     private final String propertyName;
 
@@ -60,6 +67,15 @@
         super();
         this.getterSetterManager = getterSetterManager;
         this.type = type;
+        metaTypes = new ArrayList(2);
+        try {
+            final StringTokenizer st = new StringTokenizer(type, ",");
+            while (st.hasMoreTokens()) {
+                metaTypes.add(Class.forName(st.nextToken()));
+            }
+        } catch (ClassNotFoundException e) {
+            LOG.warn("Exception", e);
+        }
         this.propertyName = propertyName;
         this.umlElement = umlElement;
 
@@ -73,9 +89,16 @@
     }
     
     public Object getMetaType() {
+        if (metaTypes.size() > 0) {
+            return metaTypes.get(0);
+        }
 	return getterSetterManager.getMetaType(propertyName);
     }
     
+    public List getMetaTypes() {
+        return metaTypes;
+    }
+    
     /*
      * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
      */

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

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.