]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java
79bc4eb5ee2926e52c6cce934c80382651ee2357
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / NodeSupport.java
1 package org.simantics.db.layer0.variable;
2
3 import java.util.concurrent.TimeUnit;
4
5 import org.simantics.databoard.binding.mutable.Variant;
6 import org.simantics.db.layer0.variable.Variables.NodeStructure;
7 import org.simantics.simulator.variable.NodeManager;
8
9 /**
10  * @author Antti Villberg
11  *
12  * @param <Node>
13  * @since 1.23
14  */
15 public class NodeSupport<Node> {
16
17         public final NodeManager<Node> manager;
18         public final NodeCache<Node,Variant> valueCache;
19         public final NodeCache<Node,NodeStructure> structureCache;
20
21         public NodeSupport(NodeManager<Node> manager) {
22                 this(manager, 1, TimeUnit.SECONDS);
23         }
24
25         public NodeSupport(NodeManager<Node> manager, long defaultExpirationTime, TimeUnit expirationTimeUnit) {
26                 if (manager == null)
27                         throw new NullPointerException("null NodeManager");
28                 long ns = expirationTimeUnit.toNanos(defaultExpirationTime);
29                 this.manager = manager;
30                 this.valueCache = new NodeCache<>(ns);
31                 this.structureCache = new NodeCache<>(ns);
32         }
33
34         @Override
35         public int hashCode() {
36                 final int prime = 31;
37                 int result = 1;
38                 result = prime * result + valueCache.hashCode();
39                 result = prime * result + structureCache.hashCode();
40                 result = prime * result + manager.hashCode();
41                 return result;
42         }
43
44         @Override
45         public boolean equals(Object obj) {
46                 if (this == obj)
47                         return true;
48                 if (obj == null)
49                         return false;
50                 if (getClass() != obj.getClass())
51                         return false;
52                 NodeSupport<?> other = (NodeSupport<?>) obj;
53                 return valueCache.equals(other.valueCache)
54                                 && structureCache.equals(other.structureCache)
55                                 && manager.equals(other.manager);
56         }
57
58         public void dispose() {
59                 valueCache.dispose();
60                 structureCache.dispose();
61         }
62
63 }