svn commit: r17684 - 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-19 04:26:35-0800
New Revision: 17684

Removed:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java
Modified:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java

Log:
Make Actions inner classes of whatever uses them

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java?view=markup&pathrev=17683

Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java?view=markup&pathrev=17683

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java	2009-12-19 04:26:35-0800
@@ -24,9 +24,15 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
+import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionRemoveElement;
 
 /**
  * @author mkl
@@ -34,6 +40,11 @@
 class UMLOFSStateListModel extends UMLModelElementListModel {
 
     /**
+     * The class uid
+     */
+    private static final long serialVersionUID = -9214579555300746872L;
+
+    /**
      * Constructor for UMLOFSStateListModel.
      */
     public UMLOFSStateListModel(Object modelElement) {
@@ -77,4 +88,138 @@
         }
         return false;
     }
+    
+    /**
+     * @author mkl
+     */
+    private static class ActionAddOFSState extends AbstractActionAddModelElement2 {
+        private Object choiceClass = Model.getMetaTypes().getState();
+
+
+        /**
+         * The constructor.
+         */
+        public ActionAddOFSState() {
+            super();
+            setMultiSelect(true);
+        }
+
+
+        protected void doIt(Collection selected) {
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                Object type = Model.getFacade().getType(t);
+                if (Model.getFacade().isAClassifierInState(type)) {
+                    Model.getActivityGraphsHelper().setInStates(type, selected);
+                } else if (Model.getFacade().isAClassifier(type)
+                        && (selected != null)
+                        && (selected.size() > 0)) {
+                    /* So, we found a Classifier
+                     * that is not a ClassifierInState.
+                     * And at least one state has been selected.
+                     * Well, let's correct that:
+                     */
+                    Object cis =
+                        Model.getActivityGraphsFactory()
+                            .buildClassifierInState(type, selected);
+                    Model.getCoreHelper().setType(t, cis);
+                }
+            }
+        }
+
+
+        protected List getChoices() {
+            List ret = new ArrayList();
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                Object classifier = getType(t);
+                if (Model.getFacade().isAClassifier(classifier)) {
+                    ret.addAll(Model.getModelManagementHelper()
+                            .getAllModelElementsOfKindWithModel(classifier,
+                                    choiceClass));
+                }
+                removeTopStateFrom(ret);
+            }
+            return ret;
+        }
+
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-state");
+        }
+
+
+        protected List getSelected() {
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                Object type = Model.getFacade().getType(t);
+                if (Model.getFacade().isAClassifierInState(type)) {
+                    return new ArrayList(Model.getFacade().getInStates(type));
+                }
+            }
+            return new ArrayList();
+        }
+        
+        private static Object getType(Object target) {
+            Object type = Model.getFacade().getType(target);
+            if (Model.getFacade().isAClassifierInState(type)) {
+                type = Model.getFacade().getType(type);
+            }
+            return type;
+        }
+        /**
+         * Utility function to remove the top states
+         * from a given collection of states.
+         *
+         * @param ret a collection of states
+         */
+        static void removeTopStateFrom(Collection ret) {
+            Collection tops = new ArrayList();
+            for (Object state : ret) {
+                if (Model.getFacade().isACompositeState(state)
+                        && Model.getFacade().isTop(state)) {
+                    tops.add(state);
+                }
+            }
+            ret.removeAll(tops);
+        }
+    }
+    
+    /**
+     * @author mkl
+     */
+    private static class ActionRemoveOFSState extends AbstractActionRemoveElement {
+
+        /**
+         * The class uid
+         */
+        private static final long serialVersionUID = 4745674604611374936L;
+
+        /**
+         * Constructor.
+         */
+        public ActionRemoveOFSState() {
+            super(Translator.localize("menu.popup.remove"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            super.actionPerformed(e);
+            Object state = getObjectToRemove();
+            if (state != null) {
+                Object t = getTarget();
+                if (Model.getFacade().isAObjectFlowState(t)) {
+                    Object type = Model.getFacade().getType(t);
+                    if (Model.getFacade().isAClassifierInState(type)) {
+                        Collection states =
+                            new ArrayList(
+                                Model.getFacade().getInStates(type));
+                        states.remove(state);
+                        Model.getActivityGraphsHelper()
+                                .setInStates(type, states);
+                    }
+                }
+            }
+        }
+    }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java	2009-12-19 04:26:35-0800
@@ -24,7 +24,16 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionNewModelElement;
+import org.argouml.uml.ui.AbstractActionRemoveElement;
 
 /**
  * @author mkl
@@ -32,6 +41,11 @@
 class UMLObjectFlowStateParameterListModel extends UMLModelElementListModel {
 
     /**
+     * The class uid
+     */
+    private static final long serialVersionUID = -6095531893213309195L;
+
+    /**
      * Constructor for UMLObjectFlowStateParameterListModel.
      */
     public UMLObjectFlowStateParameterListModel(Object modelElement, String propertyName) {
@@ -59,5 +73,123 @@
         return Model.getFacade().getParameters(getTarget()).contains(
                 element);
     }
+    
+    /**
+     * @author mkl
+     */
+    private static class ActionAddOFSParameter extends AbstractActionAddModelElement2 {
+        private Object choiceClass = Model.getMetaTypes().getParameter();
+
+        /**
+         * The constructor.
+         */
+        public ActionAddOFSParameter() {
+            super();
+            setMultiSelect(true);
+        }
+
 
+        protected void doIt(Collection selected) {
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                Model.getActivityGraphsHelper().setParameters(t, selected);
+            }
+        }
+
+
+        protected List getChoices() {
+            List ret = new ArrayList();
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                Object classifier = getType(t);
+                if (Model.getFacade().isAClassifier(classifier)) {
+                    ret.addAll(Model.getModelManagementHelper()
+                            .getAllModelElementsOfKindWithModel(classifier,
+                                    choiceClass));
+                }
+
+                // TODO: We may want to restrict the list to parameters which 
+                // conform to the following WFR:
+//              parameter.type = ofstype
+//              or (parameter.kind = #in
+//              and ofstype.allSupertypes->includes(type))
+//              or ((parameter.kind = #out or parameter.kind = #return)
+//              and type.allSupertypes->includes(ofstype))
+//              or (parameter.kind = #inout
+//              and ( ofstype.allSupertypes->includes(type)
+//              or type.allSupertypes->includes(ofstype))))
+
+            }
+            return ret;
+        }
+
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-state");
+        }
+
+
+        protected List getSelected() {
+            Object t = getTarget();
+            if (Model.getFacade().isAObjectFlowState(t)) {
+                return new ArrayList(Model.getFacade().getParameters(t));
+            }
+            return new ArrayList();
+        }
+        
+        private static Object getType(Object target) {
+            Object type = Model.getFacade().getType(target);
+            if (Model.getFacade().isAClassifierInState(type)) {
+                type = Model.getFacade().getType(type);
+            }
+            return type;
+        }
+    }
+    
+    /**
+     * @author mkl
+     */
+    private static class ActionNewOFSParameter extends AbstractActionNewModelElement {
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            Object target = getTarget();
+            if (Model.getFacade().isAObjectFlowState(target)) {
+                Object type = getType(target);
+                Object parameter = Model.getCoreFactory().createParameter();
+                Model.getCoreHelper().setType(parameter, type);
+                Model.getActivityGraphsHelper().addParameter(target, parameter);
+            }
+        }
+        private static Object getType(Object target) {
+            Object type = Model.getFacade().getType(target);
+            if (Model.getFacade().isAClassifierInState(type)) {
+                type = Model.getFacade().getType(type);
+            }
+            return type;
+        }
+    }
+    
+    /**
+     * @author mkl
+     */
+    private static class ActionRemoveOFSParameter extends AbstractActionRemoveElement {
+        /**
+         * Constructor.
+         */
+        public ActionRemoveOFSParameter() {
+            super(Translator.localize("menu.popup.remove"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            super.actionPerformed(e);
+            Object param = getObjectToRemove();
+            if (param != null) {
+                Object t = getTarget();
+                if (Model.getFacade().isAObjectFlowState(t)) {
+                    Model.getActivityGraphsHelper().removeParameter(t, param);
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java	2009-12-19 04:26:35-0800
@@ -24,7 +24,13 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
 
 /**
  * @author mkl
@@ -49,5 +55,53 @@
         Object partition = getTarget();
         return Model.getFacade().getContents(partition).contains(element);
     }
-    
+
+    /**
+     * @author mkl
+     */
+    private static class ActionAddPartitionContent extends AbstractActionAddModelElement2 {
+
+        /**
+         * The class uid
+         */
+        private static final long serialVersionUID = -3371454533555822156L;
+
+        public ActionAddPartitionContent() {
+            super();
+            setMultiSelect(true);
+        }
+
+        @Override
+        protected void doIt(Collection selected) {
+            Object partition = getTarget();
+            if (Model.getFacade().isAPartition(partition)) {
+                Model.getActivityGraphsHelper().setContents(
+                        partition, selected);
+            }
+        }
+
+        protected List getChoices() {
+            List ret = new ArrayList();
+            if (Model.getFacade().isAPartition(getTarget())) {
+                Object partition = getTarget();
+                Object ag = Model.getFacade().getActivityGraph(partition);
+                if (ag != null) {
+                    Object top = Model.getFacade().getTop(ag);
+                    /* There are no composite states, so this will work: */
+                    ret.addAll(Model.getFacade().getSubvertices(top));
+                }
+            }
+            return ret;
+        }
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-contents");
+        }
+
+        protected List getSelected() {
+            List ret = new ArrayList();
+            ret.addAll(Model.getFacade().getContents(getTarget()));
+            return ret;
+        }
+    }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java	2009-12-19 04:26:35-0800
@@ -24,9 +24,16 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.argouml.i18n.Translator;
+import org.argouml.kernel.ProjectManager;
 import org.argouml.model.Model;
-import org.argouml.uml.ui.UMLModelElementListModel2;
-import org.argouml.uml.ui.behavior.common_behavior.ActionAddContextSignal;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionRemoveElement;
 
 /**
  * The model for the listbox showing the contexts of a signal.
@@ -36,6 +43,11 @@
 class UMLSignalContextListModel extends UMLModelElementListModel {
 
     /**
+     * The class uid
+     */
+    private static final long serialVersionUID = 2002737769556890982L;
+    
+    /**
      * The constructor.
      */
     public UMLSignalContextListModel(Object modelElement) {
@@ -64,4 +76,75 @@
                         element);
     }
 
+    /**
+     * This Action removes a Context from a Signal.
+     * 
+     * @author Michiel
+     */
+    private static class ActionRemoveContextSignal extends AbstractActionRemoveElement {
+
+        /**
+         * The serial version.
+         */
+        private static final long serialVersionUID = -3345844954130000669L;
+
+        /**
+         * Construct an Action which removes a Context from a Signal.
+         */
+        public ActionRemoveContextSignal() {
+            super(Translator.localize("menu.popup.remove"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            super.actionPerformed(e);
+            Object context = getObjectToRemove(); 
+            if (context != null) {
+                Object signal = getTarget();
+                if (Model.getFacade().isASignal(signal)) {
+                    Model.getCommonBehaviorHelper().removeContext(signal, context);
+                }
+            }
+        }
+    }
+    
+    /**
+     * This action adds a context to a signal.
+     *
+     * @author [email protected]
+     */
+    private static class ActionAddContextSignal extends AbstractActionAddModelElement2 {
+
+        /**
+         * The constructor.
+         */
+        public ActionAddContextSignal() {
+            super();
+        }
+
+        protected List getChoices() {
+            List ret = new ArrayList();
+            Object model =
+                ProjectManager.getManager().getCurrentProject().getModel();
+            if (getTarget() != null) {
+                ret.addAll(Model.getModelManagementHelper()
+                        .getAllBehavioralFeatures(model));
+            }
+            return ret;
+        }
+
+        protected List getSelected() {
+            List ret = new ArrayList();
+            ret.addAll(Model.getFacade().getContexts(getTarget()));
+            return ret;
+        }
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-contexts");
+        }
+
+        protected void doIt(Collection selected) {
+            Model.getCommonBehaviorHelper().setContexts(getTarget(), selected);
+        }
+    }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java	2009-12-19 04:26:35-0800
@@ -24,19 +24,33 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.swing.Action;
+import javax.swing.Icon;
 import javax.swing.JPopupMenu;
 
+import org.argouml.application.helpers.ResourceLoaderWrapper;
+import org.argouml.i18n.Translator;
+import org.argouml.model.Model;
+import org.argouml.ui.targetmanager.TargetManager;
 import org.argouml.uml.ui.AbstractActionAddModelElement2;
-import org.argouml.uml.ui.behavior.common_behavior.ActionNewSignal;
+import org.argouml.uml.ui.AbstractActionNewModelElement;
 
 /**
- *
  * @author MarkusK
- *
  */
 class UMLSignalEventSignalList extends UMLMutableLinkedList {
 
     /**
+     * The class uid
+     */
+    private static final long serialVersionUID = -1557658052001738064L;
+
+    /**
      * Constructor for UMLTransitionTriggerList.
      * @param dataModel the model
      */
@@ -49,9 +63,120 @@
      */
     public JPopupMenu getPopupMenu() {
         JPopupMenu menu = new JPopupMenu();
-        ActionAddSignalsToSignalEvent.SINGLETON.setTarget(getTarget());
-        menu.add(ActionAddSignalsToSignalEvent.SINGLETON);
+        menu.add(new ActionAddSignalsToSignalEvent(getTarget()));
         menu.add(new ActionNewSignal());
         return menu;
     }
+    
+    /**
+     * Provide a dialog which helps the user to select one event
+     * out of an existing list,
+     * which will be used as the trigger of the transition.
+     *
+     * @author MarkusK
+     *
+     */
+    private static class ActionAddSignalsToSignalEvent extends AbstractActionAddModelElement2 {
+
+        /**
+         * Constructor for ActionAddClassifierRoleBase.
+         */
+        public ActionAddSignalsToSignalEvent(Object target) {
+            super();
+            setMultiSelect(false);
+            setTarget(target);
+        }
+
+
+        protected List getChoices() {
+            List vec = new ArrayList();
+
+            vec.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind(
+                    Model.getFacade().getRoot(getTarget()),
+                    Model.getMetaTypes().getSignal()));
+
+            return vec;
+        }
+
+
+        protected List getSelected() {
+            List vec = new ArrayList();
+            Object signal = Model.getFacade().getSignal(getTarget());
+            if (signal != null) {
+                vec.add(signal);
+            }
+            return vec;
+        }
+
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-signal");
+        }
+
+
+        @Override
+        protected void doIt(Collection selected) {
+            Object event = getTarget();
+            if (selected == null || selected.size() == 0) {
+                Model.getCommonBehaviorHelper().setSignal(event, null);
+            } else {
+                Model.getCommonBehaviorHelper().setSignal(event,
+                        selected.iterator().next());
+            }
+        }
+
+        /**
+         * The UID.
+         */
+        private static final long serialVersionUID = 6890869588365483936L;
+    }
+    
+    /**
+     * Create a new Signal.
+     */
+    public class ActionNewSignal extends AbstractActionNewModelElement {
+
+        /**
+         * The class uid
+         */
+        private static final long serialVersionUID = -1905204858078372670L;
+
+        /**
+         * The constructor.
+         */
+        public ActionNewSignal() {
+            super("button.new-signal");
+            putValue(Action.NAME, Translator.localize("button.new-signal"));
+            Icon icon = ResourceLoaderWrapper.lookupIcon("SignalSending");
+            putValue(Action.SMALL_ICON, icon);
+        }
+
+        /**
+         * Creates a new signal and in case of a SignalEvent as target also set the
+         * Signal for this event.<p>
+         * {@inheritDoc}
+         */
+        public void actionPerformed(ActionEvent e) {
+            Object target = TargetManager.getInstance().getModelTarget();
+            if (Model.getFacade().isASignalEvent(target)
+                    || Model.getFacade().isASendAction(target)
+                    || Model.getFacade().isAReception(target)
+                    || Model.getFacade().isABehavioralFeature(target)) {
+                Object newSig = 
+                    Model.getCommonBehaviorFactory().buildSignal(target);
+                TargetManager.getInstance().setTarget(newSig);
+            } else {
+                Object ns = null;
+                if (Model.getFacade().isANamespace(target)) {
+                    ns = target;
+                } else {
+                    ns = Model.getFacade().getNamespace(target);
+                }
+                Object newElement = Model.getCommonBehaviorFactory().createSignal();
+                TargetManager.getInstance().setTarget(newElement);
+                Model.getCoreHelper().setNamespace(newElement, ns);
+            }
+            super.actionPerformed(e);
+        }
+    }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java	2009-12-19 04:26:35-0800
@@ -24,8 +24,16 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.argouml.i18n.Translator;
+import org.argouml.kernel.ProjectManager;
 import org.argouml.model.Model;
-import org.argouml.uml.ui.UMLModelElementListModel2;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionRemoveElement;
 
 /**
  * The model for the listbox showing the receptions of a signal.
@@ -35,6 +43,11 @@
 class UMLSignalReceptionListModel extends UMLModelElementListModel {
 
     /**
+     * The class uid
+     */
+    private static final long serialVersionUID = 1045014158284951739L;
+
+    /**
      * Construct a list model showing the receptions of a signal.
      */
     public UMLSignalReceptionListModel(Object modelElement) {
@@ -67,4 +80,86 @@
             && Model.getFacade().getReceptions(getTarget()).contains(element);
     }
 
+    /**
+     * This Action adds a Reception to a Signal.
+     * 
+     * @author Michiel
+     */
+    private static class ActionAddReceptionSignal extends AbstractActionAddModelElement2 {
+
+        /**
+         * Construct an Action which adds a Reception to a Signal.
+         */
+        public ActionAddReceptionSignal() {
+            super();
+        }
+
+
+        protected List getChoices() {
+            List ret = new ArrayList();
+            Object model =
+                ProjectManager.getManager().getCurrentProject().getModel();
+            if (getTarget() != null) {
+                ret.addAll(Model.getModelManagementHelper()
+                    .getAllModelElementsOfKind(model, 
+                        Model.getMetaTypes().getReception()));
+            }
+            return ret;
+        }
+
+
+        protected List getSelected() {
+            List ret = new ArrayList();
+            ret.addAll(Model.getFacade().getReceptions(getTarget()));
+            return ret;
+        }
+
+
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-receptions");
+        }
+
+
+        @Override
+        protected void doIt(Collection selected) {
+            Model.getCommonBehaviorHelper().setReception(getTarget(), selected);
+        }
+
+    }
+    
+    /**
+     * This Action removes a Reception from a Signal.
+     * 
+     * @author Michiel
+     */
+    private static class ActionRemoveReceptionSignal extends AbstractActionRemoveElement {
+
+        /**
+         * The class uid
+         */
+        private static final long serialVersionUID = 8213584329453727152L;
+
+        /**
+         * Construct an Action which removes a Reception from a Signal.
+         */
+        public ActionRemoveReceptionSignal() {
+            super(Translator.localize("menu.popup.remove"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            super.actionPerformed(e);
+            Object reception = getObjectToRemove(); 
+            if (reception != null) {
+                Object signal = getTarget();
+                if (Model.getFacade().isASignal(signal)) {
+                    // TODO: Should we delete the Reception?  A Reception
+                    // without a Signal violates the cardinality of 1 in
+                    // the metamodel - tfm - 20070308
+                    Model.getCommonBehaviorHelper().removeReception(signal, 
+                            reception);
+                }
+            }
+        }
+    }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java	2009-12-19 04:26:35-0800
@@ -24,11 +24,19 @@
 
 package org.argouml.core.propertypanels.ui;
 
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
+import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
-import org.argouml.uml.ui.UMLModelElementListModel2;
+import org.argouml.uml.ui.AbstractActionAddModelElement2;
+import org.argouml.uml.ui.AbstractActionRemoveElement;
 
 /**
  * The list model for the BaseClasses of the stereotype.
@@ -67,4 +75,109 @@
         }
         return false;
     }
+    
+    /**
+     * The Action to add a baseclass to the stereotype.
+     *
+     * @author Michiel
+     */
+    private static class ActionAddStereotypeBaseClass extends AbstractActionAddModelElement2 {
+
+        private List<String> metaClasses;
+        
+        public ActionAddStereotypeBaseClass() {
+            super();
+            initMetaClasses();
+        }
+        
+        /**
+         * Initialize the meta-classes list. <p>
+         * 
+         * All this code is necessary to be independent of 
+         * model repository implementation, 
+         * i.e. to ensure that we have a 
+         * sorted list of strings.
+         */
+        void initMetaClasses() {
+            Collection<String> tmpMetaClasses = 
+                Model.getCoreHelper().getAllMetatypeNames();
+            if (tmpMetaClasses instanceof List) {
+                metaClasses = (List<String>) tmpMetaClasses;
+            } else {
+                metaClasses = new LinkedList<String>(tmpMetaClasses);
+            }
+            try {
+                Collections.sort(metaClasses);
+            } catch (UnsupportedOperationException e) {
+                // We got passed an unmodifiable List.  Copy it and sort the result
+                metaClasses = new LinkedList<String>(tmpMetaClasses);
+                Collections.sort(metaClasses);
+            }
+        }
+        
+        @Override
+        protected List<String> getChoices() {
+            return Collections.unmodifiableList(metaClasses);
+        }
+
+        @Override
+        protected String getDialogTitle() {
+            return Translator.localize("dialog.title.add-baseclasses");
+        }
+
+        @Override
+        protected List<String> getSelected() {
+            List<String> result = new ArrayList<String>();
+            if (Model.getFacade().isAStereotype(getTarget())) {
+                Collection<String> bases = 
+                    Model.getFacade().getBaseClasses(getTarget());
+                result.addAll(bases);
+            }
+            return result;
+        }
+
+        @Override
+        protected void doIt(Collection selected) {
+            Object stereo = getTarget();
+            Set<Object> oldSet = new HashSet<Object>(getSelected());
+            Set toBeRemoved = new HashSet<Object>(oldSet);
+
+            for (Object o : selected) {
+                if (oldSet.contains(o)) {
+                    toBeRemoved.remove(o);
+                } else {
+                    Model.getExtensionMechanismsHelper()
+                            .addBaseClass(stereo, o);
+                }
+            }
+            for (Object o : toBeRemoved) {
+                Model.getExtensionMechanismsHelper().removeBaseClass(stereo, o);
+            }
+        }
+        
+    }
+    
+    /**
+     * The Action to remove a baseclass from a stereotype.
+     *
+     * @author Michiel
+     */
+    private static class ActionDeleteStereotypeBaseClass extends AbstractActionRemoveElement {
+
+        public ActionDeleteStereotypeBaseClass() {
+            super(Translator.localize("menu.popup.remove"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            Object baseclass = getObjectToRemove();
+            if (baseclass != null) {
+                Object st = getTarget();
+                if (Model.getFacade().isAStereotype(st)) {
+                    Model.getExtensionMechanismsHelper().removeBaseClass(st,
+                            baseclass);
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

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

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.