]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulator.variable/src/org/simantics/simulator/variable/impl/AbstractNodeManager.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.simulator.variable / src / org / simantics / simulator / variable / impl / AbstractNodeManager.java
diff --git a/bundles/org.simantics.simulator.variable/src/org/simantics/simulator/variable/impl/AbstractNodeManager.java b/bundles/org.simantics.simulator.variable/src/org/simantics/simulator/variable/impl/AbstractNodeManager.java
new file mode 100644 (file)
index 0000000..0eb5fc3
--- /dev/null
@@ -0,0 +1,167 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.simulator.variable.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.VariantBinding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.simulator.variable.NodeManager;\r
+import org.simantics.simulator.variable.exceptions.NoSuchNodeException;\r
+import org.simantics.simulator.variable.exceptions.NodeManagerException;\r
+\r
+/**\r
+ * AbstractNodeManager gives default implementations to some methods\r
+ * of NodeManager.\r
+ * \r
+ * @author Hannu Niemistö\r
+ */\r
+public abstract class AbstractNodeManager<Node> implements NodeManager<Node> {\r
+       \r
+\r
+    final static Binding NO_BINDING = new VariantBinding() {\r
+\r
+        @Override\r
+        public Object getContent(Object variant, Binding contentBinding) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public Object getContent(Object variant) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public Datatype getContentType(Object variant) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public Binding getContentBinding(Object variant) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public Object create(Binding contentBinding, Object content) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public void setContent(Object variant, Binding contentBinding, Object content) throws BindingException {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public boolean isInstance(Object obj) {\r
+            return true;\r
+        }\r
+\r
+        @Override\r
+        public void assertInstaceIsValid(Object obj, Set<Object> validInstances) throws BindingException {\r
+            throw new Error();\r
+        }\r
+        \r
+        @Override\r
+        public int compare(Object o1, Object o2) throws org.simantics.databoard.binding.error.RuntimeBindingException {\r
+               if(o1 == null) {\r
+                       if(o2 == null) {\r
+                               return 0;\r
+                       } else {\r
+                               return  - System.identityHashCode(o2);\r
+                       }\r
+               } else {\r
+                       if(o2 == null) {\r
+                               return  System.identityHashCode(o1);\r
+                       } else {\r
+                               if(o1.equals(o2)) return 0;\r
+                               return System.identityHashCode(o1) - System.identityHashCode(o2);       \r
+                       }\r
+               }\r
+        }\r
+\r
+    };\r
+    \r
+       @Override\r
+       public List<String> getChildNames(Node node) throws NodeManagerException {\r
+               List<Node> children = getChildren(node);\r
+               ArrayList<String> names = new ArrayList<String>(children.size());\r
+               for(Node child : children)\r
+                       names.add(getName(child));\r
+               return names;\r
+       }\r
+       \r
+       @Override\r
+       public List<String> getPropertyNames(Node node) throws NodeManagerException {\r
+               List<Node> properties = getProperties(node);\r
+               ArrayList<String> names = new ArrayList<String>(properties.size());\r
+               for(Node property : properties)\r
+                       names.add(getName(property));\r
+               return names;\r
+       }\r
+       \r
+       @Override\r
+       public Object getValue(Node node, String propertyName, Binding binding)\r
+                       throws NodeManagerException, BindingException {\r
+               Node property = getProperty(node, propertyName);\r
+               if(property == null)\r
+                       throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
+               return getValue(property, binding);\r
+       }\r
+       \r
+       @Override\r
+       public void setValue(Node node, String propertyName, Object value,\r
+                       Binding binding) throws NodeManagerException, BindingException {\r
+               Node property = getProperty(node, propertyName);\r
+               if(property == null)\r
+                       throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
+               setValue(property, value, binding);\r
+       }\r
+       \r
+       @Override\r
+       public Variant getValue(Node node) throws NodeManagerException {\r
+               Datatype datatype = getDatatype(node);\r
+               Binding binding = datatype != null ? Bindings.getBinding(datatype) : NO_BINDING;\r
+               try {\r
+                       Object value = getValue(node, binding);\r
+                       if (value instanceof Variant)\r
+                               return (Variant)value;\r
+                       else\r
+                               return new Variant(binding, value);\r
+               } catch (BindingException e) {\r
+                       // Shouldn't really happen\r
+                       assert(false);\r
+                       return new Variant();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public Variant getValue(Node node, String propertyName)\r
+                       throws NodeManagerException {\r
+               Node property = getProperty(node, propertyName);\r
+               if(property == null)\r
+                       throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
+               return getValue(property);\r
+       }\r
+       \r
+    @Override\r
+    public String getPropertyURI(Node parent, Node property) {\r
+        return null;\r
+    }  \r
+\r
+}\r