[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)