[105191] Enhancing data migration mechanism.
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 957cdbe..0dbed47 100644
--- a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore
+++ b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2ecore
@@ -145,6 +145,9 @@
     <outputs href="UML.ecore#//InterruptibleActivityRegion/node"/>
   </nested>
   <nested>
+    <nested>
+      <outputs href="UML.ecore#//InteractionUse/argument"/>
+    </nested>
     <inputs href="../../org.eclipse.uml2/model/UML2.ecore#//InteractionOccurrence"/>
     <outputs href="UML.ecore#//InteractionUse"/>
   </nested>
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 cad96fb..4a7c2d9 100644
--- a/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml
+++ b/plugins/org.eclipse.uml2.uml/model/UML2_2_UML.ecore2xml
@@ -125,6 +125,10 @@
     <value name="InteractionOccurrence" targetNamespace="http://www.eclipse.org/uml2/1.0.0/UML"/>
   </ecoreToXMLInfo>
   <ecoreToXMLInfo>
+    <key xsi:type="ecore:EReference" href="UML.ecore#//InteractionUse/argument"/>
+    <value xMLRepresentation="0"/>
+  </ecoreToXMLInfo>
+  <ecoreToXMLInfo>
     <key xsi:type="ecore:EClass" href="UML.ecore#//BehaviorExecutionSpecification"/>
     <value name="ExecutionOccurrence" targetNamespace="http://www.eclipse.org/uml2/1.0.0/UML"/>
   </ecoreToXMLInfo>
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLHandler.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLHandler.java
index d4e64cc..694cec5 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLHandler.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLHandler.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UML22UMLHandler.java,v 1.3 2006/04/13 01:13:49 khussey Exp $
+ * $Id: UML22UMLHandler.java,v 1.4 2006/04/13 15:52:25 khussey Exp $
  */
 package org.eclipse.uml2.uml.internal.resource;
 
@@ -41,13 +41,20 @@
 		typeToTypeMap.put("uml:Stop", featureMap); //$NON-NLS-1$
 
 		typeMap = new BasicEMap();
+		typeMap.put(UMLPackage.Literals.DESTROY_LINK_ACTION, "uml:LinkEndDestructionData"); //$NON-NLS-1$
+		featureMap = new BasicEMap();
+		featureMap.put("endData", typeMap); //$NON-NLS-1$
+		typeToTypeMap.put("uml:LinkEndCreationData", featureMap); //$NON-NLS-1$
+		typeToTypeMap.put("uml:LinkEndData", featureMap); //$NON-NLS-1$
+
+		typeMap = new BasicEMap();
 		typeMap.put(UMLPackage.Literals.ACTIVITY, "uml:CallBehaviorAction"); //$NON-NLS-1$
 		featureMap = new BasicEMap();
 		featureMap.put("node", typeMap); //$NON-NLS-1$
 		typeToTypeMap.put("uml:ApplyFunctionAction", featureMap); //$NON-NLS-1$
 
 		typeMap = new BasicEMap();
-		typeMap.put(UMLPackage.Literals.ACTIVITY, "uml:WriteStructuralFeatureAction"); //$NON-NLS-1$
+		typeMap.put(UMLPackage.Literals.ACTIVITY, "uml:OpaqueAction"); //$NON-NLS-1$
 		featureMap = new BasicEMap();
 		featureMap.put("node", typeMap); //$NON-NLS-1$
 		typeToTypeMap.put("uml:DurationObservationAction", featureMap); //$NON-NLS-1$
@@ -76,7 +83,11 @@
 		EMap typeMap = null;
 
 		typeMap = new BasicEMap();
-		typeMap.put(UMLPackage.Literals.WRITE_STRUCTURAL_FEATURE_ACTION, "uml:Duration"); //$NON-NLS-1$
+		typeMap.put(UMLPackage.Literals.INTERACTION_USE, "uml:InputPin"); //$NON-NLS-1$
+		featureToTypeMap.put("argument", typeMap); //$NON-NLS-1$
+
+		typeMap = new BasicEMap();
+		typeMap.put(UMLPackage.Literals.OPAQUE_ACTION, "uml:Duration"); //$NON-NLS-1$
 		featureToTypeMap.put("duration", typeMap); //$NON-NLS-1$
 
 		typeMap = new BasicEMap();
@@ -88,7 +99,7 @@
 		featureToTypeMap.put("formalParameter", typeMap); //$NON-NLS-1$
 
 		typeMap = new BasicEMap();
-		typeMap.put(UMLPackage.Literals.WRITE_STRUCTURAL_FEATURE_ACTION, "uml:TimeExpression"); //$NON-NLS-1$
+		typeMap.put(UMLPackage.Literals.OPAQUE_ACTION, "uml:TimeExpression"); //$NON-NLS-1$
 		featureToTypeMap.put("now", typeMap); //$NON-NLS-1$
 
 		typeMap = new BasicEMap();
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetadata.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetadata.java
index ecf5b9c..dc33097 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetadata.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetadata.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  * 
- * $Id: UML22UMLExtendedMetadata.java,v 1.5 2006/04/13 01:13:49 khussey Exp $
+ * $Id: UML22UMLExtendedMetadata.java,v 1.6 2006/04/13 15:52:25 khussey Exp $
  */
 package org.eclipse.uml2.uml.resource;
 
@@ -1669,7 +1669,7 @@
 			fragmentMap.put("_m9neRK86EdiEh75YJ_3n8g", "InteractionUse"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9neRq86EdiEh75YJ_3n8g", "InteractionUse-refersTo"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9neR686EdiEh75YJ_3n8g", "InteractionUse-actualGate"); //$NON-NLS-1$ //$NON-NLS-2$
-			fragmentMap.put("_m9neSq86EdiEh75YJ_3n8g", "InteractionUse-argument"); //$NON-NLS-1$ //$NON-NLS-2$
+			fragmentMap.put("_m9neSq86EdiEh75YJ_3n8g", "CallBehaviorAction-argument"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4Kfw8enEdm17tz62ORDiA", "_ownedMember.415"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4KfxMenEdm17tz62ORDiA", "_ownedMember.415-_ownedEnd.0"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4KfxcenEdm17tz62ORDiA", "_ownedMember.416"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1973,8 +1973,8 @@
 			fragmentMap.put("_m9ng_q86EdiEh75YJ_3n8g", "DurationObservation-event"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4Khd8enEdm17tz62ORDiA", "_ownedMember.548"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4KheMenEdm17tz62ORDiA", "_ownedMember.548-_ownedEnd.0"); //$NON-NLS-1$ //$NON-NLS-2$
-			fragmentMap.put("_m9nhA686EdiEh75YJ_3n8g", "WriteStructuralFeatureAction"); //$NON-NLS-1$ //$NON-NLS-2$
-			fragmentMap.put("_m9nhBa86EdiEh75YJ_3n8g", "WriteStructuralFeatureAction-value"); //$NON-NLS-1$ //$NON-NLS-2$
+			fragmentMap.put("_m9nhA686EdiEh75YJ_3n8g", "OpaqueAction"); //$NON-NLS-1$ //$NON-NLS-2$
+			fragmentMap.put("_m9nhBa86EdiEh75YJ_3n8g", "ValuePin-value"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4KhfsenEdm17tz62ORDiA", "_ownedMember.550"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4Khf8enEdm17tz62ORDiA", "_ownedMember.550-_ownedEnd.0"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9nhDq86EdiEh75YJ_3n8g", "DurationInterval"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1988,8 +1988,8 @@
 			fragmentMap.put("_m9nhIK86EdiEh75YJ_3n8g", "TimeConstraint"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9nhJq86EdiEh75YJ_3n8g", "IntervalConstraint"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9nhLK86EdiEh75YJ_3n8g", "TimeInterval"); //$NON-NLS-1$ //$NON-NLS-2$
-			fragmentMap.put("_m9nhMq86EdiEh75YJ_3n8g", "WriteStructuralFeatureAction"); //$NON-NLS-1$ //$NON-NLS-2$
-			fragmentMap.put("_m9nhNK86EdiEh75YJ_3n8g", "WriteStructuralFeatureAction-value"); //$NON-NLS-1$ //$NON-NLS-2$
+			fragmentMap.put("_m9nhMq86EdiEh75YJ_3n8g", "OpaqueAction"); //$NON-NLS-1$ //$NON-NLS-2$
+			fragmentMap.put("_m9nhNK86EdiEh75YJ_3n8g", "ValuePin-value"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4Khl8enEdm17tz62ORDiA", "_ownedMember.559"); //$NON-NLS-1$ //$NON-NLS-2$
 //			fragmentMap.put("_h4KhmMenEdm17tz62ORDiA", "_ownedMember.559-_ownedEnd.0"); //$NON-NLS-1$ //$NON-NLS-2$
 			fragmentMap.put("_m9nhPa86EdiEh75YJ_3n8g", "DurationConstraint"); //$NON-NLS-1$ //$NON-NLS-2$
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 95efb66..3b690c5 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
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  * 
- * $Id: UML22UMLResourceHandler.java,v 1.7 2006/04/13 01:13:49 khussey Exp $
+ * $Id: UML22UMLResourceHandler.java,v 1.8 2006/04/13 15:52:25 khussey Exp $
  */
 package org.eclipse.uml2.uml.resource;
 
@@ -41,6 +41,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.Activity;
 import org.eclipse.uml2.uml.BehavioralFeature;
 import org.eclipse.uml2.uml.BehavioredClassifier;
 import org.eclipse.uml2.uml.CallBehaviorAction;
@@ -55,12 +56,15 @@
 import org.eclipse.uml2.uml.Extension;
 import org.eclipse.uml2.uml.ExtensionEnd;
 import org.eclipse.uml2.uml.FunctionBehavior;
+import org.eclipse.uml2.uml.InputPin;
+import org.eclipse.uml2.uml.InteractionUse;
 import org.eclipse.uml2.uml.Message;
 import org.eclipse.uml2.uml.MessageEnd;
 import org.eclipse.uml2.uml.MessageSort;
 import org.eclipse.uml2.uml.MultiplicityElement;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Namespace;
+import org.eclipse.uml2.uml.OpaqueAction;
 import org.eclipse.uml2.uml.OpaqueExpression;
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.PackageImport;
@@ -82,7 +86,6 @@
 import org.eclipse.uml2.uml.ValuePin;
 import org.eclipse.uml2.uml.ValueSpecification;
 import org.eclipse.uml2.uml.VisibilityKind;
-import org.eclipse.uml2.uml.WriteStructuralFeatureAction;
 import org.eclipse.uml2.uml.util.UMLSwitch;
 import org.eclipse.uml2.uml.util.UMLUtil;
 
@@ -354,6 +357,26 @@
 				return super.caseExtensionEnd(extensionEnd);
 			}
 
+			public Object caseInteractionUse(InteractionUse interactionUse) {
+				AnyType extension = getExtension(resource, interactionUse);
+
+				if (extension != null) {
+					InputPin argument = (InputPin) getValue(extension
+						.getMixed(), "argument", true); //$NON-NLS-1$
+
+					if (argument != null) {
+						doSwitch(argument);
+
+						((CallBehaviorAction) interactionUse.createArgument(
+							argument.getName(),
+							UMLPackage.Literals.CALL_BEHAVIOR_ACTION))
+							.getArguments().add(argument);
+					}
+				}
+
+				return super.caseInteractionUse(interactionUse);
+			}
+
 			public Object caseMultiplicityElement(
 					MultiplicityElement multiplicityElement) {
 				AnyType extension = getExtension(resource, multiplicityElement);
@@ -429,10 +452,12 @@
 					for (Iterator pi = getValues(extension.getMixed(),
 						"packageImport", true).iterator(); pi.hasNext();) { //$NON-NLS-1$
 
-						PackageImport packageImport = (PackageImport) pi.next();
+						EObject packageImport = (EObject) pi.next();
 
-						doSwitch(packageImport);
-						packageImports.add(packageImport);
+						if (packageImport instanceof PackageImport) {
+							doSwitch(packageImport);
+							packageImports.add(packageImport);
+						}
 					}
 				}
 
@@ -800,38 +825,48 @@
 				return super.caseTrigger(trigger);
 			}
 
-			public Object caseWriteStructuralFeatureAction(
-					WriteStructuralFeatureAction writeStructuralFeatureAction) {
-				AnyType extension = getExtension(resource,
-					writeStructuralFeatureAction);
+			public Object caseOpaqueAction(OpaqueAction opaqueAction) {
+				AnyType extension = getExtension(resource, opaqueAction);
 
 				if (extension != null) {
-					Duration duration = (Duration) getValue(extension
-						.getMixed(), "duration", true); //$NON-NLS-1$
+					Activity activity = opaqueAction.getActivity();
 
-					if (duration != null) {
-						doSwitch(duration);
+					if (activity != null) {
+						Duration duration = (Duration) getValue(extension
+							.getMixed(), "duration", true); //$NON-NLS-1$
 
-						((ValuePin) writeStructuralFeatureAction.createValue(
-							duration.getName(), duration.getType(),
-							UMLPackage.Literals.VALUE_PIN)).setValue(duration);
-					}
+						if (duration != null) {
+							doSwitch(duration);
 
-					TimeExpression timeExpression = (TimeExpression) getValue(
-						extension.getMixed(), "now", true); //$NON-NLS-1$
+							ValuePin inputValue = (ValuePin) activity
+								.createNode(duration.getName(),
+									UMLPackage.Literals.VALUE_PIN);
 
-					if (timeExpression != null) {
-						doSwitch(timeExpression);
+							inputValue.setType(duration.getType());
+							inputValue.setValue(duration);
 
-						((ValuePin) writeStructuralFeatureAction.createValue(
-							timeExpression.getName(), timeExpression.getType(),
-							UMLPackage.Literals.VALUE_PIN))
-							.setValue(timeExpression);
+							opaqueAction.getInputValues().add(inputValue);
+						}
+
+						TimeExpression timeExpression = (TimeExpression) getValue(
+							extension.getMixed(), "now", true); //$NON-NLS-1$
+
+						if (timeExpression != null) {
+							doSwitch(timeExpression);
+
+							ValuePin inputValue = (ValuePin) activity
+								.createNode(timeExpression.getName(),
+									UMLPackage.Literals.VALUE_PIN);
+
+							inputValue.setType(timeExpression.getType());
+							inputValue.setValue(timeExpression);
+
+							opaqueAction.getInputValues().add(inputValue);
+						}
 					}
 				}
 
-				return super
-					.caseWriteStructuralFeatureAction(writeStructuralFeatureAction);
+				return super.caseOpaqueAction(opaqueAction);
 			}
 
 			public Object defaultCase(EObject eObject) {