]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/NodeSupport.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / NodeSupport.java
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
new file mode 100644 (file)
index 0000000..be0a9cd
--- /dev/null
@@ -0,0 +1,63 @@
+package org.simantics.db.layer0.variable;\r
+\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.db.layer0.variable.Variables.NodeStructure;\r
+import org.simantics.simulator.variable.NodeManager;\r
+\r
+/**\r
+ * @author Antti Villberg\r
+ *\r
+ * @param <Node>\r
+ * @since 1.23\r
+ */\r
+public class NodeSupport<Node> {\r
+\r
+       public final NodeManager<Node> manager;\r
+       public final NodeCache<Node,Variant> valueCache;\r
+       public final NodeCache<Node,NodeStructure> structureCache;\r
+\r
+       public NodeSupport(NodeManager<Node> manager) {\r
+               this(manager, 1, TimeUnit.SECONDS);\r
+       }\r
+\r
+       public NodeSupport(NodeManager<Node> manager, long defaultExpirationTime, TimeUnit expirationTimeUnit) {\r
+               if (manager == null)\r
+                       throw new NullPointerException("null NodeManager");\r
+               long ns = expirationTimeUnit.toNanos(defaultExpirationTime);\r
+               this.manager = manager;\r
+               this.valueCache = new NodeCache<>(ns);\r
+               this.structureCache = new NodeCache<>(ns);\r
+       }\r
+\r
+       @Override\r
+       public int hashCode() {\r
+               final int prime = 31;\r
+               int result = 1;\r
+               result = prime * result + valueCache.hashCode();\r
+               result = prime * result + structureCache.hashCode();\r
+               result = prime * result + manager.hashCode();\r
+               return result;\r
+       }\r
+\r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if (this == obj)\r
+                       return true;\r
+               if (obj == null)\r
+                       return false;\r
+               if (getClass() != obj.getClass())\r
+                       return false;\r
+               NodeSupport<?> other = (NodeSupport<?>) obj;\r
+               return valueCache.equals(other.valueCache)\r
+                               && structureCache.equals(other.structureCache)\r
+                               && manager.equals(other.manager);\r
+       }\r
+\r
+       public void dispose() {\r
+               valueCache.dispose();\r
+               structureCache.dispose();\r
+       }\r
+\r
+}\r