X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fscl%2FScriptNodeMap.java;h=b7a7de03e8b52f244e42aa49f45b73e308f8c389;hb=refs%2Fchanges%2F08%2F3908%2F2;hp=37b124e3f49757fdf2461ac3a8b9ceb012221041;hpb=53d55c24c779745f188bdb18d32f71d20acb61b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java b/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java index 37b124e3..b7a7de03 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java +++ b/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java @@ -1,15 +1,17 @@ package org.simantics.g3d.scl; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Deque; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Stack; import org.simantics.db.ReadGraph; -import org.simantics.db.Session; +import org.simantics.db.RequestProcessor; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.request.WriteRequest; @@ -40,12 +42,12 @@ import org.simantics.utils.datastructures.Pair; * * @param */ -public abstract class ScriptNodeMap implements NodeMap, IMappingListener, NodeListener { +public abstract class ScriptNodeMap implements NodeMap, IMappingListener, NodeListener { private static final boolean DEBUG = false; - protected Session session; - protected IMapping mapping; + protected RequestProcessor session; + protected IMapping mapping; protected ParentNode rootNode; @@ -53,7 +55,7 @@ public abstract class ScriptNodeMap implements NodeMap mapping, ParentNode rootNode) { + public ScriptNodeMap(RequestProcessor session, IMapping mapping, ParentNode rootNode) { this.session = session; this.mapping = mapping; this.rootNode = rootNode; @@ -89,10 +91,9 @@ public abstract class ScriptNodeMap implements NodeMap getRootNode() { - return (ParentNode)rootNode; + return rootNode; } @@ -118,11 +119,9 @@ public abstract class ScriptNodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap n : removed) { @@ -338,6 +337,7 @@ public abstract class ScriptNodeMap implements NodeMap 0) System.out.println("Delete"); for (E n : delete) { @@ -360,6 +360,27 @@ public abstract class ScriptNodeMap implements NodeMap stack = new ArrayDeque(); + for (Pair n : added) { + stack.add(n.first); + } + while (!stack.isEmpty()) { + E n = stack.pop(); + for (int i = removed.size()-1; i >= 0; i--) { + if (removed.get(i).first == n) { + removed.remove(i); + break; + } + } + if (n instanceof ParentNode) { + ParentNode pn = (ParentNode)n; + for (INode cn : pn.getNodes()) { + stack.push((E)cn); + } + } + } + rem.addAll(removed); add.addAll(added); for (E e : updated.getKeys()) { @@ -538,7 +559,8 @@ public abstract class ScriptNodeMap implements NodeMap getMapping() { + @Override + public IMapping getMapping() { return mapping; }