From 7deaf70d1369bcd941abea7c237bbc4d10a4192f Mon Sep 17 00:00:00 2001 From: David McKnight Date: Thu, 16 Nov 2006 14:50:08 +0000 Subject: [PATCH] performance fix - when dealing with spirit stuff --- .../eclipse/dstore/core/util/XMLparser.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/util/XMLparser.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/util/XMLparser.java index 6b334feb530..e2eceaf3ec3 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/util/XMLparser.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/util/XMLparser.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.io.InterruptedIOException; import java.net.Socket; import java.net.SocketException; +import java.util.ArrayList; +import java.util.List; import java.util.Stack; import org.eclipse.dstore.core.model.DE; @@ -524,6 +526,42 @@ public class XMLparser } } } + + if (parent != null && parent.getNestedSize() > 0 && _dataStore.isVirtual()) + { + // end of children of parent + // find all spirits that match non-spirits + List toDelete = new ArrayList(); + for (int s= 0; s < parent.getNestedSize(); s++) + { + DataElement element = parent.get(s); + if (element.isSpirit()) + { + String name = element.getName(); + String value = element.getValue(); + + // delete this element if there's another one with the same name and value + for (int n = 0; n < parent.getNestedSize(); n++) + { + if (n != s) + { + DataElement compare = parent.get(n); + String cname = compare.getName(); + String cvalue = compare.getValue(); + if (!compare.isSpirit() && cname.equals(name) && cvalue.equals(value)) + toDelete.add(compare); + } + } + } + } + + // delete elements + for (int d = 0; d < toDelete.size(); d++) + { + DataElement delement = (DataElement)toDelete.get(d); + _dataStore.deleteObject(parent,delement); + } + } _tagStack.pop(); if (_tagStack.empty())