X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fvariable%2FNodeSupport.java;h=3ac88ae6769eb24bea768ac66077a502864dced2;hb=1ecae6e1ad40507badb8807fb14bb67b4adf199c;hp=be0a9cde77e2534df3ae5d76948f3ec64d54dfd3;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git 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 be0a9cde7..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 @@ -1,63 +1,77 @@ -package org.simantics.db.layer0.variable; - -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; - -/** - * @author Antti Villberg - * - * @param - * @since 1.23 - */ -public class NodeSupport { - - public final NodeManager manager; - public final NodeCache valueCache; - public final NodeCache structureCache; - - public NodeSupport(NodeManager manager) { - this(manager, 1, TimeUnit.SECONDS); - } - - public NodeSupport(NodeManager manager, long defaultExpirationTime, TimeUnit expirationTimeUnit) { - if (manager == null) - throw new NullPointerException("null NodeManager"); - long ns = expirationTimeUnit.toNanos(defaultExpirationTime); - this.manager = manager; - this.valueCache = new NodeCache<>(ns); - this.structureCache = new NodeCache<>(ns); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + valueCache.hashCode(); - result = prime * result + structureCache.hashCode(); - result = prime * result + manager.hashCode(); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - NodeSupport other = (NodeSupport) obj; - return valueCache.equals(other.valueCache) - && structureCache.equals(other.structureCache) - && manager.equals(other.manager); - } - - public void dispose() { - valueCache.dispose(); - structureCache.dispose(); - } - -} +package org.simantics.db.layer0.variable; + +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 + * + * @param + * @since 1.23 + */ +public class NodeSupport { + + public final NodeManager manager; + public final NodeCache valueCache; + public final NodeCache structureCache; + + public NodeSupport(NodeManager manager) { + this(manager, 1, TimeUnit.SECONDS); + } + + public NodeSupport(NodeManager manager, long defaultExpirationTime, TimeUnit expirationTimeUnit) { + if (manager == null) + throw new NullPointerException("null NodeManager"); + long ns = expirationTimeUnit.toNanos(defaultExpirationTime); + this.manager = manager; + this.valueCache = new NodeCache<>(ns); + this.structureCache = new NodeCache<>(ns); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + valueCache.hashCode(); + result = prime * result + structureCache.hashCode(); + result = prime * result + manager.hashCode(); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + NodeSupport other = (NodeSupport) obj; + return valueCache.equals(other.valueCache) + && structureCache.equals(other.structureCache) + && 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(); + } + +}