From a479f0292672b5963e62ffe3055d4d9680b487cf Mon Sep 17 00:00:00 2001 From: David McKnight Date: Fri, 30 Nov 2007 19:00:55 +0000 Subject: [PATCH] dstore - problem with spirited elements - need to clean an element's children before clearing the elements data --- .../dstore/core/model/UpdateHandler.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java index 8d9444001b6..71035e3e27d 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java @@ -82,6 +82,8 @@ public abstract class UpdateHandler extends Handler DataElement parent = child.getParent(); DataElementRemover.addToRemovedCount(); + cleanChildren(child); // clean the children + if (child.isSpirit()) { // officially delete this now @@ -106,6 +108,30 @@ public abstract class UpdateHandler extends Handler _dataStore.getTempRoot().removeNestedData(); } + + /** + * Recursively clean children for deletion + * @param parent + */ + protected void cleanChildren(DataElement parent) + { + List nestedData = parent.getNestedData(); + if (nestedData != null) + { + for (int i = 0; i < nestedData.size(); i++){ + DataElement child = (DataElement)nestedData.get(i); + cleanChildren(child); + + if (child.isSpirit()) + { + // officially delete this now + child.delete(); + } + child.clear(); + parent.removeNestedData(child); + } + } + } /** * Adds a set of data objects to the update queue