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]].

Reply via email to