[209358] gmf_R2_0_maintenance crevells 071112 DiagramImpl.persistEdges does not guarantee parent hierarchy of source/target is persisted
diff --git a/org.eclipse.gmf.runtime.notation/src/org/eclipse/gmf/runtime/notation/impl/DiagramImpl.java b/org.eclipse.gmf.runtime.notation/src/org/eclipse/gmf/runtime/notation/impl/DiagramImpl.java index 4352faa..0059512 100644 --- a/org.eclipse.gmf.runtime.notation/src/org/eclipse/gmf/runtime/notation/impl/DiagramImpl.java +++ b/org.eclipse.gmf.runtime.notation/src/org/eclipse/gmf/runtime/notation/impl/DiagramImpl.java
@@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2004, 2006 IBM Corporation and others. + * Copyright (c) 2004, 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 @@ -527,14 +527,36 @@ View sourceView = edge.getSource(); View targetView = edge.getTarget(); if (sourceView != null) - sourceView.persist(); + persistCompleteHierarchy(sourceView); if (targetView != null) - targetView.persist(); + persistCompleteHierarchy(targetView); } } } /** + * Persist the view passed in and all its parent views if they are + * transient. + * + * @param view + * the view to persist + */ + private void persistCompleteHierarchy(View view) { + view.persist(); + EObject container = view.eContainer(); + while (container instanceof View) { + // if already persisted, quit + EStructuralFeature sFeature = container.eContainingFeature(); + if (sFeature != null && !sFeature.isTransient()) { + break; + } + + ((View) container).persist(); + container = container.eContainer(); + } + } + + /** * <!-- begin-user-doc --> <!-- end-user-doc --> */ public void removeEdge(Edge edge) {