[174011] Correcting processing of triggers during migration.
diff --git a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore
index d50a371..ec31597 100644
--- a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore
+++ b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore
@@ -211,6 +211,15 @@
<nested>
<inputs href="../../org.eclipse.uml2/model/UML2.ecore#//StateMachine/stateMachine_redefinitionContext"/>
</nested>
+ <nested>
+ <outputs href="UML.ecore#//AcceptEventAction/trigger"/>
+ </nested>
+ <nested>
+ <outputs href="UML.ecore#//State/deferrableTrigger"/>
+ </nested>
+ <nested>
+ <outputs href="UML.ecore#//Transition/trigger"/>
+ </nested>
<inputs href="../../org.eclipse.uml2/model/UML2.ecore#/"/>
<outputs href="UML.ecore#/"/>
</ecore2ecore:Ecore2EcoreMappingRoot>
diff --git a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml
index 9316e6a..262fbdd 100644
--- a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml
+++ b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml
@@ -164,4 +164,16 @@
<key xsi:type="ecore:EReference" href="UML.ecore#//Message/signature"/>
<value xMLRepresentation="1"/>
</ecoreToXMLInfo>
+ <ecoreToXMLInfo>
+ <key xsi:type="ecore:EReference" href="UML.ecore#//AcceptEventAction/trigger"/>
+ <value xMLRepresentation="0"/>
+ </ecoreToXMLInfo>
+ <ecoreToXMLInfo>
+ <key xsi:type="ecore:EReference" href="UML.ecore#//State/deferrableTrigger"/>
+ <value xMLRepresentation="0"/>
+ </ecoreToXMLInfo>
+ <ecoreToXMLInfo>
+ <key xsi:type="ecore:EReference" href="UML.ecore#//Transition/trigger"/>
+ <value xMLRepresentation="0"/>
+ </ecoreToXMLInfo>
</ecore2xml:XMLMap>
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
index fba5cd0..7ef6d0d 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
* Contributors:
* IBM - initial API and implementation
*
- * $Id: UML22UMLResourceHandler.java,v 1.26.2.5 2006/11/17 19:33:23 khussey Exp $
+ * $Id: UML22UMLResourceHandler.java,v 1.26.2.6 2007/02/14 04:28:50 khussey Exp $
*/
package org.eclipse.uml2.uml.resource;
@@ -48,6 +48,7 @@
import org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler;
import org.eclipse.emf.ecore.xml.type.AnyType;
import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.AcceptEventAction;
import org.eclipse.uml2.uml.Action;
import org.eclipse.uml2.uml.Activity;
import org.eclipse.uml2.uml.Behavior;
@@ -100,6 +101,7 @@
import org.eclipse.uml2.uml.SendSignalEvent;
import org.eclipse.uml2.uml.Signal;
import org.eclipse.uml2.uml.SignalEvent;
+import org.eclipse.uml2.uml.State;
import org.eclipse.uml2.uml.StateMachine;
import org.eclipse.uml2.uml.Stereotype;
import org.eclipse.uml2.uml.StringExpression;
@@ -346,6 +348,35 @@
UMLSwitch umlSwitch = new UMLSwitch() {
+ public Object caseAcceptEventAction(
+ AcceptEventAction acceptEventAction) {
+ AnyType extension = getExtension(resource, acceptEventAction);
+
+ if (extension != null) {
+ EList triggers = acceptEventAction.getTriggers();
+
+ for (Iterator values = getValues(
+ extension.getAnyAttribute(), "trigger", true) //$NON-NLS-1$
+ .iterator(); values.hasNext();) {
+
+ Object value = values.next();
+
+ if (value instanceof String) {
+ EObject eObject = resource
+ .getEObject((String) value);
+
+ if (eObject != null) {
+ doSwitch(eObject);
+
+ triggers.add(EcoreUtil.copy(eObject));
+ }
+ }
+ }
+ }
+
+ return super.caseAcceptEventAction(acceptEventAction);
+ }
+
public Object caseAction(Action action) {
AnyType extension = getExtension(resource, action);
@@ -503,7 +534,7 @@
if (extension != null) {
Boolean isFirstEvent = Boolean.valueOf(!"false" //$NON-NLS-1$
.equals(getValue(extension.getAnyAttribute(),
- "isFirstTime"))); //$NON-NLS-1$
+ "isFirstTime", true))); //$NON-NLS-1$
Collection values = getValues(extension.getAnyAttribute(),
"event", true); //$NON-NLS-1$
@@ -621,7 +652,8 @@
value = getValue(extension.getMixed(), "body", true); //$NON-NLS-1$
if (value instanceof AnyType) {
- value = getValue(((AnyType) value).getMixed(), "text"); //$NON-NLS-1$
+ value = getValue(((AnyType) value).getMixed(),
+ "text", true); //$NON-NLS-1$
if (value instanceof String) {
UMLUtil.setTaggedValue(expression, stereotype,
@@ -653,7 +685,7 @@
AnyType extension = getExtension(resource, extensionEnd);
if (extension == null
- || getValue(extension.getMixed(), "lowerValue") == null) { //$NON-NLS-1$
+ || getValue(extension.getMixed(), "lowerValue", true) == null) { //$NON-NLS-1$
extensionEnd.setLower(1);
}
@@ -1462,6 +1494,34 @@
return super.caseRealization(realization);
}
+ public Object caseState(State state) {
+ AnyType extension = getExtension(resource, state);
+
+ if (extension != null) {
+ EList deferrableTriggers = state.getDeferrableTriggers();
+
+ for (Iterator values = getValues(
+ extension.getAnyAttribute(), "deferrableTrigger", true) //$NON-NLS-1$
+ .iterator(); values.hasNext();) {
+
+ Object value = values.next();
+
+ if (value instanceof String) {
+ EObject eObject = resource
+ .getEObject((String) value);
+
+ if (eObject != null) {
+ doSwitch(eObject);
+
+ deferrableTriggers.add(EcoreUtil.copy(eObject));
+ }
+ }
+ }
+ }
+
+ return super.caseState(state);
+ }
+
public Object caseTemplateParameter(
TemplateParameter templateParameter) {
AnyType extension = getExtension(resource, templateParameter);
@@ -1593,7 +1653,7 @@
if (extension != null) {
boolean firstEvent = !"false".equals(getValue(extension //$NON-NLS-1$
- .getAnyAttribute(), "isFirstTime")); //$NON-NLS-1$
+ .getAnyAttribute(), "isFirstTime", true)); //$NON-NLS-1$
Object value = getValue(extension.getAnyAttribute(),
"event", true); //$NON-NLS-1$
@@ -1627,16 +1687,40 @@
}
}
+ AnyType extension = getExtension(resource, transition);
+
+ if (extension != null) {
+ EList triggers = transition.getTriggers();
+
+ for (Iterator values = getValues(
+ extension.getAnyAttribute(), "trigger", true) //$NON-NLS-1$
+ .iterator(); values.hasNext();) {
+
+ Object value = values.next();
+
+ if (value instanceof String) {
+ EObject eObject = resource
+ .getEObject((String) value);
+
+ if (eObject != null) {
+ doSwitch(eObject);
+
+ triggers.add(EcoreUtil.copy(eObject));
+ }
+ }
+ }
+ }
+
return super.caseTransition(transition);
}
public Object caseTrigger(Trigger trigger) {
- Event event = null;
+ Event event = trigger.getEvent();
AnyType extension = getExtension(resource, trigger);
if (extension != null) {
Object value = getValue(extension.getMixed(),
- "changeExpression"); //$NON-NLS-1$
+ "changeExpression", true); //$NON-NLS-1$
if (value instanceof ValueSpecification) {
event = (Event) trigger.getNearestPackage()
@@ -1646,7 +1730,7 @@
.setChangeExpression((ValueSpecification) value);
} else {
value = getValue(extension.getAnyAttribute(),
- "operation"); //$NON-NLS-1$
+ "operation", true); //$NON-NLS-1$
if (value instanceof String) {
EObject eObject = resource
@@ -1661,7 +1745,7 @@
}
} else {
value = getValue(extension.getAnyAttribute(),
- "signal"); //$NON-NLS-1$
+ "signal", true); //$NON-NLS-1$
if (value instanceof String) {
EObject eObject = resource
@@ -1677,7 +1761,8 @@
.setSignal((Signal) eObject);
}
} else {
- value = getValue(extension.getMixed(), "when"); //$NON-NLS-1$
+ value = getValue(extension.getMixed(),
+ "when", true); //$NON-NLS-1$
if (value instanceof ValueSpecification) {
event = (TimeEvent) trigger
@@ -1689,7 +1774,7 @@
.setWhen((ValueSpecification) value);
value = getValue(extension
- .getAnyAttribute(), "isRelative"); //$NON-NLS-1$
+ .getAnyAttribute(), "isRelative", true); //$NON-NLS-1$
if (value instanceof String) {
((TimeEvent) event)