From: Tuukka Lehtonen Date: Tue, 20 Nov 2018 09:11:35 +0000 (+0000) Subject: Merge "Update structure and value cache when refreshing variable" X-Git-Tag: v1.43.0~136^2~259 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=31a36bcdcd31bedc2e5106dba68ae057ba9c1875;hp=9cfc6c61008c1b6b278bac6c8585df478dddf55f Merge "Update structure and value cache when refreshing variable" --- diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeCache.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeCache.java index 309efe31e..5ed9678e9 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeCache.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeCache.java @@ -116,6 +116,24 @@ public class NodeCache { scheduleExpiration(node, System.nanoTime() + defaultExpirationTimeInNs); } + public synchronized void remove(Node node) { + if (disposed) + return; + Long expTime = exp.get(node); + if (expTime != null) { + expirationTimes.remove(expTime); + } + map.remove(node); + } + + public synchronized void clear() { + if (disposed) + return; + expirationTimes.clear(); + exp.clear(); + map.clear(); + } + public synchronized void dispose() { disposed = true; expirationTimes.clear(); diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java index 79bc4eb5e..3ac88ae67 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java @@ -5,6 +5,8 @@ import java.util.concurrent.TimeUnit; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.db.layer0.variable.Variables.NodeStructure; import org.simantics.simulator.variable.NodeManager; +import org.simantics.simulator.variable.exceptions.NoValueException; +import org.simantics.simulator.variable.exceptions.NodeManagerException; /** * @author Antti Villberg @@ -55,6 +57,18 @@ public class NodeSupport { && manager.equals(other.manager); } + public void refreshCache(Node node) throws NodeManagerException { + VariableNode variableNode = new VariableNode<>(this, node); + NodeStructure ns = NodeStructureRequest.get(variableNode); + structureCache.put(node, ns); + try { + Variant value = manager.getValue(node); + valueCache.put(node, value); + } catch (NoValueException e) { + valueCache.remove(node); + }; + } + public void dispose() { valueCache.dispose(); structureCache.dispose(); diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java index a08d733d1..aefa672d4 100644 --- a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java @@ -16,6 +16,9 @@ import org.simantics.db.layer0.variable.NodeSupport; import org.simantics.simulator.toolkit.StandardNodeManager; import org.simantics.simulator.toolkit.StandardNodeManagerSupport; import org.simantics.simulator.toolkit.StandardRealm; +import org.simantics.simulator.variable.exceptions.NodeManagerException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Adds support for Layer0 Variable interface in StandardNodeManager @@ -24,6 +27,7 @@ import org.simantics.simulator.toolkit.StandardRealm; */ public class StandardVariableNodeManager> extends StandardNodeManager { + private static final Logger LOGGER = LoggerFactory.getLogger(StandardVariableNodeManager.class); protected NodeSupport support; public StandardVariableNodeManager(StandardRealm realm, Node root) { @@ -33,9 +37,13 @@ public class StandardVariableNodeManager