Author: linus
Date: 2010-04-14 13:34:56-0700
New Revision: 18260

Removed:
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java
Modified:
   branches/BRANCH_0_30_x/   (props changed)
   branches/BRANCH_0_30_x/src/argouml-app/   (props changed)
   branches/BRANCH_0_30_x/src/argouml-app/tests/org/argouml/profile/   (props 
changed)
   
branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java

Log:
Merging rev 18205 from trunk for Issue: 6021.

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
  (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
  2010-04-14 13:34:56-0700
@@ -539,6 +539,37 @@
                     Parameter.class,
                     TemplateParameter.class
                 });
+        
+        // specifies valid elements for an State to contain
+        validContainmentMap.put(State.class, 
+                new Class<?>[] { 
+                    CallEvent.class, ChangeEvent.class, SignalEvent.class, 
TimeEvent.class
+                });
+        
+        // specifies valid elements for an CallState to contain
+        validContainmentMap.put(CallState.class, 
+                new Class<?>[] { 
+                    CallEvent.class, ChangeEvent.class, SignalEvent.class, 
TimeEvent.class
+                });
+        
+        // specifies valid elements for an SimpleState to contain
+        validContainmentMap.put(SimpleState.class, 
+                new Class<?>[] { 
+                    CallEvent.class, ChangeEvent.class, SignalEvent.class, 
TimeEvent.class
+                });
+        
+        // specifies valid elements for an SubactivityState to contain
+        validContainmentMap.put(SubactivityState.class, 
+                new Class<?>[] { 
+                    CallEvent.class, ChangeEvent.class, SignalEvent.class, 
TimeEvent.class
+                });
+        
+        // specifies valid elements for an ActionState to contain
+        validContainmentMap.put(ActionState.class, 
+                new Class<?>[] { 
+                    CallEvent.class, ChangeEvent.class, SignalEvent.class, 
TimeEvent.class
+                });
+        
     }
     
     public Object buildConnection(Object elementType, Object fromElement,
@@ -788,16 +819,32 @@
             ((Transition) container).setEffect((Action) element);
         } else if (elementType == metaTypes.getCallEvent()) {
             element = Model.getStateMachinesFactory().createCallEvent();
-            setNewTrigger((Transition) container, (Event) element);
+            if (container instanceof Transition) {
+                setNewTrigger((Transition) container, (Event) element);
+            } else if (container instanceof State) {
+                setNewDeferrableEvent((State) container, (Event) element);
+            }
         } else if (elementType == metaTypes.getChangeEvent()) {
             element = Model.getStateMachinesFactory().createChangeEvent();
-            setNewTrigger((Transition) container, (Event) element);
+            if (container instanceof Transition) {
+                setNewTrigger((Transition) container, (Event) element);
+            } else if (container instanceof State) {
+                setNewDeferrableEvent((State) container, (Event) element);
+            }
         } else if (elementType == metaTypes.getSignalEvent()) {
             element = Model.getStateMachinesFactory().createSignalEvent();
-            setNewTrigger((Transition) container, (Event) element);
+            if (container instanceof Transition) {
+                setNewTrigger((Transition) container, (Event) element);
+            } else if (container instanceof State) {
+                setNewDeferrableEvent((State) container, (Event) element);
+            }
         } else if (elementType == metaTypes.getTimeEvent()) {
             element = Model.getStateMachinesFactory().createTimeEvent();
-            setNewTrigger((Transition) container, (Event) element);
+            if (container instanceof Transition) {
+                setNewTrigger((Transition) container, (Event) element);
+            } else if (container instanceof State) {
+                setNewDeferrableEvent((State) container, (Event) element);
+            }
         } else {
             // build all other elements using existing buildNode
             element = buildNode(elementType);
@@ -827,6 +874,22 @@
         event.setNamespace(namespace);
     }
     
+    /**
+     * Add a newly created event to a trigger
+     * @param transition
+     * @param event
+     */
+    private void setNewDeferrableEvent(final State state, final Event event) {
+        ((State) state).getDeferrableEvent().add((Event) event);
+        event.setName("");
+        Object parent = state;
+        do {
+            parent = ((RefObject) parent).refImmediateComposite();
+        } while (!(parent instanceof Namespace));
+        
+        event.setNamespace((Namespace) parent);
+    }
+    
     public boolean isConnectionType(Object connectionType) {
         // If our map has any entries for this type, it's a connection type
         return (validConnectionMap.get(connectionType) != null);

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
       (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
       2010-04-14 13:34:56-0700
@@ -2746,7 +2746,7 @@
     <attribute name="entry" type="Action" />
     <separator />
     <attribute name="exit" type="Action" />
-    <list name="deferrableEvent" type="Event" label="label.deferrable" />
+    <list name="deferrableEvent" 
type="org.omg.uml.behavioralelements.statemachines.CallEvent,org.omg.uml.behavioralelements.statemachines.ChangeEvent,org.omg.uml.behavioralelements.statemachines.SignalEvent,org.omg.uml.behavioralelements.statemachines.TimeEvent"
 label="label.deferrable" />
     <list name="internalTransition" type="Transition" 
label="label.internal-transitions" />
     <attribute name="doActivity" type="Action" />
     <attribute name="stateMachine" type="StateMachine" />
@@ -3035,7 +3035,7 @@
     <list name="entry" type="Action" />
     <list name="exit" type="Action" />
     <list name="doActivity" type="Action" label="label.do-activity" />
-    <list name="deferrableEvent" type="Event" label="label.deferrable" />
+    <list name="deferrableEvent" 
type="org.omg.uml.behavioralelements.statemachines.CallEvent,org.omg.uml.behavioralelements.statemachines.ChangeEvent,org.omg.uml.behavioralelements.statemachines.SignalEvent,org.omg.uml.behavioralelements.statemachines.TimeEvent"
 label="label.deferrable" />
     <list name="outgoing" type="Transition" />
     <list name="incoming" type="Transition" />    
     <list name="internalTransition" type="Transition" 
label="label.internal-transitions" />
@@ -3616,7 +3616,7 @@
     <attribute name="entry" type="Action" />
     <separator />
     <attribute name="exit" type="Action" />
-    <list name="deferrableEvent" type="Event" label="label.deferrable" />
+    <list name="deferrableEvent" 
type="org.omg.uml.behavioralelements.statemachines.CallEvent,org.omg.uml.behavioralelements.statemachines.ChangeEvent,org.omg.uml.behavioralelements.statemachines.SignalEvent,org.omg.uml.behavioralelements.statemachines.TimeEvent"
 label="label.deferrable" />
     <list name="internalTransition" type="Transition" 
label="label.internal-transitions" />
     <attribute name="doActivity" type="Action" />
     <attribute name="stateMachine" type="StateMachine" />
@@ -3631,7 +3631,7 @@
     <text name="name" type="Name" />
     <singlerow name="container" type="CompositeState" />
     <list name="entry" type="Action" />
-    <list name="deferrableEvent" type="Event" label="label.deferrable" />    
+    <list name="deferrableEvent" 
type="org.omg.uml.behavioralelements.statemachines.CallEvent,org.omg.uml.behavioralelements.statemachines.ChangeEvent,org.omg.uml.behavioralelements.statemachines.SignalEvent,org.omg.uml.behavioralelements.statemachines.TimeEvent"
 label="label.deferrable" />
     <separator />
     <list name="outgoing" type="Transition" />
     <list name="incoming" type="Transition" />
@@ -3673,7 +3673,7 @@
     <text name="name" type="Name" />
     <singlerow name="container" type="CompositeState" />
     <list name="entry" type="Action" />
-    <list name="deferrableEvent" type="Event" label="label.deferrable" />
+    <list name="deferrableEvent" 
type="org.omg.uml.behavioralelements.statemachines.CallEvent,org.omg.uml.behavioralelements.statemachines.ChangeEvent,org.omg.uml.behavioralelements.statemachines.SignalEvent,org.omg.uml.behavioralelements.statemachines.TimeEvent"
 label="label.deferrable" />
     <separator />
     <list name="outgoing" type="Transition" />
     <list name="incoming" type="Transition" />

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
    (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
    2010-04-14 13:34:56-0700
@@ -87,6 +87,7 @@
         addGetterSetter("elementImport", new ElementImportGetterSetter());
         addGetterSetter("templateParameter", new 
TemplateParameterGetterSetter());
         addGetterSetter("reception", new ReceptionGetterSetter());
+        addGetterSetter("deferrableEvent", new DeferrableEventGetterSetter());
         
         // UML2 only
         addGetterSetter("ownedOperation", new FeatureGetterSetter());
@@ -1158,6 +1159,116 @@
        }
     }
     
+    private class DeferrableEventGetterSetter extends ListGetterSetter 
implements Addable, Removeable {
+        
+        public Collection getOptions(Object modelElement, String type) {
+            return Model.getFacade().getDeferrableEvents(modelElement);
+        }
+      
+        public Object get(Object modelElement, String type) {
+            // not needed
+            return null;
+        }
+        
+        public boolean isFullBuildOnly() {
+               return false;
+        }
+      
+        public void set(Object element, Object x) {
+            // not needed
+        }
+
+        public boolean isValidElement(Object element, String type) {
+            return getOptions(element, type).contains(element);
+        }
+        
+        public Object getMetaType() {
+            return Model.getMetaTypes().getEvent();
+        }
+        
+        public Command getAddCommand(Object modelElement) {
+               return new AddCommand(modelElement);
+        }
+        
+        public Command getRemoveCommand(Object modelElement, Object 
objectToRemove) {
+               return new RemoveCommand(modelElement, objectToRemove);
+        }
+        
+        private class AddCommand extends AddModelElementCommand {
+
+            /**
+             * Constructor for ActionAddPackageImport.
+             */
+            public AddCommand(Object target) {
+                super(target);
+            }
+
+
+            protected List getChoices() {
+                List list = new ArrayList();
+                
list.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind(
+                        Model.getFacade().getRoot(getTarget()),
+                        Model.getMetaTypes().getEvent()));
+                return list;
+            }
+
+
+            protected List getSelected() {
+                List list = new ArrayList();
+                
list.addAll(Model.getFacade().getDeferrableEvents(getTarget()));
+                return list;
+            }
+
+
+            protected String getDialogTitle() {
+                return Translator.localize("dialog.title.add-events");
+            }
+
+
+            @Override
+            protected void doIt(Collection selected) {
+                Object state = getTarget();
+                assert (Model.getFacade().isAState(state));
+                
+                Collection oldOnes = new ArrayList(Model.getFacade()
+                        .getDeferrableEvents(state));
+                Collection toBeRemoved = new ArrayList(oldOnes);
+                for (Object o : selected) {
+                    if (oldOnes.contains(o)) {
+                        toBeRemoved.remove(o);
+                    } else {
+                        
Model.getStateMachinesHelper().addDeferrableEvent(state, o);
+                    }
+                }
+                for (Object o : toBeRemoved) {
+                    
Model.getStateMachinesHelper().removeDeferrableEvent(state, o);
+                }
+            }
+        }
+        
+        private class RemoveCommand extends NonUndoableCommand {
+               
+               private final Object target;
+               private final Object objectToRemove;
+               
+           public RemoveCommand(final Object target, final Object 
objectToRemove) {
+               this.target = target;
+               this.objectToRemove = objectToRemove;
+           }
+           
+           /*
+            * @see 
java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+            */
+           public Object execute() {
+               Model.getStateMachinesHelper()
+                   .removeDeferrableEvent(target, objectToRemove);
+               return null;
+           }
+       }
+    }
+    
+    
+    
     private class ReceptionGetterSetter extends ListGetterSetter implements 
Addable, Removeable {
         
         public Collection getOptions(Object modelElement, String type) {

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   2010-04-14 13:34:56-0700
@@ -93,10 +93,6 @@
             model = new UMLPartitionContentListModel(modelElement);
         } else if ("context".equals(propName)) {
             model = new UMLSignalContextListModel(modelElement);
-        } else if ("deferrableEvent".equals(propName)) {
-            model = new UMLStateDeferrableEventListModel(modelElement);
-            JList l = new 
UMLStateDeferrableEventList((UMLModelElementListModel) model);
-            list = new OldScrollList(l);                    
         } else if ("definedTag".equals(propName)) {
             model = new UMLStereotypeTagDefinitionListModel(modelElement);
         } else if ("deployedComponent".equals(propName)) {

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   2010-04-14 13:34:56-0700
@@ -352,7 +352,20 @@
                        
                 // Create actions and expander if we have multiple rows
                 final ArrayList<Action> actions = new ArrayList<Action>(6);
+                
+                // Create add and remove buttons if needed first
+                if (addAction != null) {
+                    actions.add(addAction);
+                }
+                if (removeAction != null) {
+                    actions.add(removeAction);
+                    deleteAction = null;
+                } else {
+                    deleteAction = new DeleteAction();
+                    actions.add(deleteAction);
+                }
 
+                // then any new buttons
                 for (Object meta : metaTypes) {
                     if (Model.getUmlFactory().isContainmentValid(meta, 
target)) {
                         final String label =
@@ -364,16 +377,6 @@
                         actions.add(createAction);
                     }
                 }
-                if (addAction != null) {
-                    actions.add(addAction);
-                }
-                if (removeAction != null) {
-                    actions.add(removeAction);
-                    deleteAction = null;
-                } else {
-                    deleteAction = new DeleteAction();
-                    actions.add(deleteAction);
-                }
 
                 if (Model.getUmlHelper().isMovable(metaType)) {
                     moveUpAction = new MoveUpAction();

Modified: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java?view=diff&pathrev=18260&r1=18259&r2=18260
==============================================================================
--- 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
       (original)
+++ 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
       2010-04-14 13:34:56-0700
@@ -68,7 +68,7 @@
         super();
         this.getterSetterManager = getterSetterManager;
         this.type = type;
-        metaTypes = new ArrayList(2);
+        metaTypes = new ArrayList(4);
         try {
             final StringTokenizer st = new StringTokenizer(type, ",");
             while (st.hasMoreTokens()) {
@@ -106,6 +106,10 @@
     }
     
     public List getMetaTypes() {
+       if (propertyName.equals("deferrableEvent")) {
+               int x = 0;
+               x=5;
+       }
         return metaTypes;
     }
     

Removed: 
branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java
Url: 
http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java?view=markup&pathrev=18259

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

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to