X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.simulator.toolkit%2Fsrc%2Forg%2Fsimantics%2Fsimulator%2Ftoolkit%2FStandardNodeManager.java;h=b8a549087fdb1c745cb6287f95b5faf7ba88a892;hp=87ae4f32f3b7394d1e8168c705c2584ba0ae3f8c;hb=6b4432af6fe79c859dd1ddb31fd185d64c729863;hpb=14a4f7a9d486fba5be815e511fb2a497fca4eb70 diff --git a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java index 87ae4f32f..b8a549087 100644 --- a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java +++ b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java @@ -13,6 +13,7 @@ package org.simantics.simulator.toolkit; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -43,10 +44,10 @@ import gnu.trove.set.hash.THashSet; /** * StandardNodeManager gives default implementations to some methods * of NodeManager. - * + * * @author Antti Villberg */ -public abstract class StandardNodeManager> implements NodeManager { +public class StandardNodeManager> implements NodeManager { private static final Logger LOGGER = LoggerFactory.getLogger(StandardNodeManager.class); @@ -108,15 +109,15 @@ public abstract class StandardNodeManager valueCache = new THashMap<>(); - protected THashMap> listeners = new THashMap<>(); + THashMap valueCache = new THashMap<>(); + protected THashMap> listeners = new THashMap<>(); AtomicBoolean fireNodeListenersScheduled = new AtomicBoolean(false); Runnable fireNodeListeners = new Runnable() { @@ -136,7 +137,7 @@ public abstract class StandardNodeManager valueCache.clear(); + Runnable clearValueCache = () -> valueCache.clear(); public StandardNodeManager(StandardRealm realm, Node root) { assert(realm != null); @@ -263,6 +264,20 @@ public abstract class StandardNodeManager { + valueCache.remove(node); + synchronized(listeners) { + THashSet runnables = listeners.get(node); + if (runnables != null) { + for (Runnable r : runnables) { + r.run(); + } + } + } + }); + } + public void refreshVariables() { realm.asyncExec(clearValueCache); fireNodeListeners(); @@ -308,6 +323,23 @@ public abstract class StandardNodeManager references) throws NodeManagerException { + if(references.size() > 0) { + for(Node n : references) { + valueCache.remove(n); + } + } + updateValueInner(node, value, binding); + fireNodeListenersSync(); + } + + //Update the value of the node helper method + private void updateValueInner(Node node, Object value, Binding binding) throws NodeManagerException { checkThreadAccess(); Binding targetBinding = realm.getEngine().getEngineBinding(node); if(binding.equals(targetBinding)) { @@ -327,7 +359,6 @@ public abstract class StandardNodeManager getClassifications(Node node) throws NodeManagerException { + return Collections.emptySet(); + } + } \ No newline at end of file