X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fscl%2FScriptNodeMap.java;h=fc63fffc381cb2b5cb8da82d4ee349828496aa3d;hb=e7804ee146821cf2ea38e4671c5efdeaf73bf479;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..fc63fffc 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; @@ -25,6 +27,8 @@ import org.simantics.objmap.graph.IMapping; import org.simantics.objmap.graph.IMappingListener; import org.simantics.utils.datastructures.MapSet; import org.simantics.utils.datastructures.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * NodeMap implementation used with SCL scripts. @@ -40,12 +44,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; + private static final Logger LOGGER = LoggerFactory.getLogger(ScriptNodeMap.class); - protected Session session; - protected IMapping mapping; + protected RequestProcessor session; + protected IMapping mapping; protected ParentNode rootNode; @@ -53,7 +57,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 +93,9 @@ public abstract class ScriptNodeMap implements NodeMap getRootNode() { - return (ParentNode)rootNode; + return rootNode; } @@ -118,16 +121,14 @@ public abstract class ScriptNodeMap implements NodeMap n : added) { if (n.first.equals(node)) @@ -144,7 +145,7 @@ public abstract class ScriptNodeMap implements NodeMap n : removed) { if (n.first.equals(node)) @@ -158,9 +159,8 @@ public abstract class ScriptNodeMap implements NodeMap n : updated) { // if (n.first.equals(node)) @@ -192,7 +192,7 @@ public abstract class ScriptNodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap implements NodeMap n : removed) { @@ -325,10 +326,10 @@ public abstract class ScriptNodeMap implements NodeMap n : added) { deleteUC.remove(n.first); } - if (DEBUG && deleteUC.size() > 0) { - System.out.println("Delete sync"); + if (LOGGER.isTraceEnabled() && deleteUC.size() > 0) { + LOGGER.trace("Delete sync"); for (E n : delete) { - System.out.println(debugString(n)); + LOGGER.trace(debugString(n)); } } delete.addAll(deleteUC); @@ -338,10 +339,11 @@ public abstract class ScriptNodeMap implements NodeMap 0) System.out.println("Delete"); + if (LOGGER.isTraceEnabled() && delete.size() > 0) LOGGER.trace("Delete"); for (E n : delete) { - if (DEBUG) System.out.println(debugString(n)); + if (LOGGER.isTraceEnabled()) LOGGER.trace(debugString(n)); mapping.getRange().remove(n); } delete.clear(); @@ -360,6 +362,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()) { @@ -491,7 +514,7 @@ public abstract class ScriptNodeMap implements NodeMap void nodeAdded(ParentNode node, INode child, String rel) { - if (DEBUG) System.out.println("Node added " + child + " parent " + node); + if (LOGGER.isTraceEnabled()) LOGGER.trace("Node added " + child + " parent " + node); //receiveAdd((E)child, rel ,graphUpdates); receiveAdd((E)child, rel ,graphModified.contains(node)); @@ -501,7 +524,7 @@ public abstract class ScriptNodeMap implements NodeMap void nodeRemoved(ParentNode node, INode child, String rel) { - if (DEBUG) System.out.println("Node removed " + child + " parent " + node); + if (LOGGER.isTraceEnabled()) LOGGER.trace("Node removed " + child + " parent " + node); //receiveRemove((E)child, rel, graphUpdates); receiveRemove((E)child, rel, graphModified.contains(node)); @@ -538,7 +561,8 @@ public abstract class ScriptNodeMap implements NodeMap getMapping() { + @Override + public IMapping getMapping() { return mapping; }