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