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