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