207358 Elements misplaced in activity diagrams when copying capability patterns
diff --git a/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramCommand.java b/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramCommand.java
index a23d08b..4cf80de 100644
--- a/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramCommand.java
+++ b/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramCommand.java
@@ -45,6 +45,7 @@
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.gmf.runtime.notation.Node;
 import org.eclipse.uml2.uml.ActivityParameterNode;
+import org.eclipse.uml2.uml.ActivityPartition;
 import org.eclipse.uml2.uml.StructuredActivityNode;
 
 /**
@@ -189,7 +190,19 @@
 	 */
 	public void updateReferences(Diagram copy) {
 		int diagramType = DiagramHelper.getDiagramType(copy);
+		List<Object> children = new ArrayList<Object>();
+		// collect all children first e.g. for ActivityPartition
+		// we don't have partition into partition so just getting one level sub-children
+		// are enough for now.
 		for (Iterator<?> itor = copy.getChildren().iterator(); itor.hasNext();) {
+			Node node = (Node) itor.next();
+			EObject obj = node.getElement();
+			children.add(node);
+			if (obj instanceof ActivityPartition){
+				children.addAll(node.getChildren());
+			}
+		}
+		for (Iterator<?> itor = children.iterator(); itor.hasNext();) {
 
 			Node node = (Node) itor.next();
 			EObject obj = node.getElement();
diff --git a/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramForDeepCopyCommand.java b/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramForDeepCopyCommand.java
index 63ff36f..d2f42b8 100644
--- a/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramForDeepCopyCommand.java
+++ b/org.eclipse.epf.diagram.core/src/org/eclipse/epf/diagram/core/commands/CopyDiagramForDeepCopyCommand.java
@@ -54,6 +54,7 @@
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.gmf.runtime.notation.Node;
 import org.eclipse.uml2.uml.ActivityParameterNode;
+import org.eclipse.uml2.uml.ActivityPartition;
 import org.eclipse.uml2.uml.StructuredActivityNode;
 
 import com.ibm.icu.util.StringTokenizer;
@@ -323,7 +324,19 @@
 	public void updateReferences(Diagram copy, Activity copyActivity, Activity origActivity) {
 		int diagramType = DiagramHelper.getDiagramType(copy);
 		CopyFinder copyFinder = new CopyFinder(origActivity, copyActivity);
-		for (Iterator itor = copy.getChildren().iterator(); itor.hasNext();) {
+		List<Object> children = new ArrayList<Object>();
+		// collect all children first e.g. for ActivityPartition
+		// we don't have partition into partition so just getting one level sub-children
+		// are enough for now.
+		for (Iterator<?> itor = copy.getChildren().iterator(); itor.hasNext();) {
+			Node node = (Node) itor.next();
+			EObject obj = node.getElement();
+			children.add(node);
+			if (obj instanceof ActivityPartition){
+				children.addAll(node.getChildren());
+			}
+		}
+		for (Iterator<?> itor = children.iterator(); itor.hasNext();) {
 			Node node = (Node) itor.next();
 			EObject obj = node.getElement();
 
@@ -360,7 +373,7 @@
 					}
 
 					// do mapping for its children
-					List nodes = nodeContainer.getNodes();
+					List<?> nodes = nodeContainer.getNodes();
 
 					for (int i = 0; i < nodes.size(); i++) {
 						NamedNode namedNode = (NamedNode) nodes.get(i);