1 package org.simantics.db.layer0.variable;
\r
3 import java.util.concurrent.TimeUnit;
\r
5 import org.simantics.databoard.binding.mutable.Variant;
\r
6 import org.simantics.db.layer0.variable.Variables.NodeStructure;
\r
7 import org.simantics.simulator.variable.NodeManager;
\r
10 * @author Antti Villberg
\r
15 public class NodeSupport<Node> {
\r
17 public final NodeManager<Node> manager;
\r
18 public final NodeCache<Node,Variant> valueCache;
\r
19 public final NodeCache<Node,NodeStructure> structureCache;
\r
21 public NodeSupport(NodeManager<Node> manager) {
\r
22 this(manager, 1, TimeUnit.SECONDS);
\r
25 public NodeSupport(NodeManager<Node> manager, long defaultExpirationTime, TimeUnit expirationTimeUnit) {
\r
26 if (manager == null)
\r
27 throw new NullPointerException("null NodeManager");
\r
28 long ns = expirationTimeUnit.toNanos(defaultExpirationTime);
\r
29 this.manager = manager;
\r
30 this.valueCache = new NodeCache<>(ns);
\r
31 this.structureCache = new NodeCache<>(ns);
\r
35 public int hashCode() {
\r
36 final int prime = 31;
\r
38 result = prime * result + valueCache.hashCode();
\r
39 result = prime * result + structureCache.hashCode();
\r
40 result = prime * result + manager.hashCode();
\r
45 public boolean equals(Object obj) {
\r
50 if (getClass() != obj.getClass())
\r
52 NodeSupport<?> other = (NodeSupport<?>) obj;
\r
53 return valueCache.equals(other.valueCache)
\r
54 && structureCache.equals(other.structureCache)
\r
55 && manager.equals(other.manager);
\r
58 public void dispose() {
\r
59 valueCache.dispose();
\r
60 structureCache.dispose();
\r