svn commit: r18205 - trunk/src: argouml-core-model-mdr/src/org/argouml/model/mdr argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model 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: 2010-03-31 14:32:46-0700
New Revision: 18205

Removed:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java
Modified:
   trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java

Log:
Issue 6021 - show buttons for deferred events

Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java	(original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java?view=diff&pathrev=18205&r1=18204&r2=18205
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	2010-03-31 14:32:46-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: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStateDeferrableEventList.java?view=markup&pathrev=18204

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

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.