]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 /*******************************************************************************\r
2  * Copyright (c) 2013 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *     Semantum Oy - initial API and implementation\r
12  *******************************************************************************/\r
13 package org.simantics.simulator.variable.impl;\r
14 \r
15 import java.util.ArrayList;\r
16 import java.util.List;\r
17 import java.util.Set;\r
18 \r
19 import org.simantics.databoard.Bindings;\r
20 import org.simantics.databoard.binding.Binding;\r
21 import org.simantics.databoard.binding.VariantBinding;\r
22 import org.simantics.databoard.binding.error.BindingException;\r
23 import org.simantics.databoard.binding.mutable.Variant;\r
24 import org.simantics.databoard.type.Datatype;\r
25 import org.simantics.simulator.variable.NodeManager;\r
26 import org.simantics.simulator.variable.exceptions.NoSuchNodeException;\r
27 import org.simantics.simulator.variable.exceptions.NodeManagerException;\r
28 \r
29 /**\r
30  * AbstractNodeManager gives default implementations to some methods\r
31  * of NodeManager.\r
32  * \r
33  * @author Hannu Niemistö\r
34  */\r
35 public abstract class AbstractNodeManager<Node> implements NodeManager<Node> {\r
36         \r
37 \r
38     final static Binding NO_BINDING = new VariantBinding() {\r
39 \r
40         @Override\r
41         public Object getContent(Object variant, Binding contentBinding) throws BindingException {\r
42             throw new Error();\r
43         }\r
44 \r
45         @Override\r
46         public Object getContent(Object variant) throws BindingException {\r
47             throw new Error();\r
48         }\r
49 \r
50         @Override\r
51         public Datatype getContentType(Object variant) throws BindingException {\r
52             throw new Error();\r
53         }\r
54 \r
55         @Override\r
56         public Binding getContentBinding(Object variant) throws BindingException {\r
57             throw new Error();\r
58         }\r
59 \r
60         @Override\r
61         public Object create(Binding contentBinding, Object content) throws BindingException {\r
62             throw new Error();\r
63         }\r
64 \r
65         @Override\r
66         public void setContent(Object variant, Binding contentBinding, Object content) throws BindingException {\r
67             throw new Error();\r
68         }\r
69 \r
70         @Override\r
71         public boolean isInstance(Object obj) {\r
72             return true;\r
73         }\r
74 \r
75         @Override\r
76         public void assertInstaceIsValid(Object obj, Set<Object> validInstances) throws BindingException {\r
77             throw new Error();\r
78         }\r
79         \r
80         @Override\r
81         public int compare(Object o1, Object o2) throws org.simantics.databoard.binding.error.RuntimeBindingException {\r
82                 if(o1 == null) {\r
83                         if(o2 == null) {\r
84                                 return 0;\r
85                         } else {\r
86                                 return  - System.identityHashCode(o2);\r
87                         }\r
88                 } else {\r
89                         if(o2 == null) {\r
90                                 return  System.identityHashCode(o1);\r
91                         } else {\r
92                                 if(o1.equals(o2)) return 0;\r
93                                 return System.identityHashCode(o1) - System.identityHashCode(o2);       \r
94                         }\r
95                 }\r
96         }\r
97 \r
98     };\r
99     \r
100         @Override\r
101         public List<String> getChildNames(Node node) throws NodeManagerException {\r
102                 List<Node> children = getChildren(node);\r
103                 ArrayList<String> names = new ArrayList<String>(children.size());\r
104                 for(Node child : children)\r
105                         names.add(getName(child));\r
106                 return names;\r
107         }\r
108         \r
109         @Override\r
110         public List<String> getPropertyNames(Node node) throws NodeManagerException {\r
111                 List<Node> properties = getProperties(node);\r
112                 ArrayList<String> names = new ArrayList<String>(properties.size());\r
113                 for(Node property : properties)\r
114                         names.add(getName(property));\r
115                 return names;\r
116         }\r
117         \r
118         @Override\r
119         public Object getValue(Node node, String propertyName, Binding binding)\r
120                         throws NodeManagerException, BindingException {\r
121                 Node property = getProperty(node, propertyName);\r
122                 if(property == null)\r
123                         throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
124                 return getValue(property, binding);\r
125         }\r
126         \r
127         @Override\r
128         public void setValue(Node node, String propertyName, Object value,\r
129                         Binding binding) throws NodeManagerException, BindingException {\r
130                 Node property = getProperty(node, propertyName);\r
131                 if(property == null)\r
132                         throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
133                 setValue(property, value, binding);\r
134         }\r
135         \r
136         @Override\r
137         public Variant getValue(Node node) throws NodeManagerException {\r
138                 Datatype datatype = getDatatype(node);\r
139                 Binding binding = datatype != null ? Bindings.getBinding(datatype) : NO_BINDING;\r
140                 try {\r
141                         Object value = getValue(node, binding);\r
142                         if (value instanceof Variant)\r
143                                 return (Variant)value;\r
144                         else\r
145                                 return new Variant(binding, value);\r
146                 } catch (BindingException e) {\r
147                         // Shouldn't really happen\r
148                         assert(false);\r
149                         return new Variant();\r
150                 }\r
151         }\r
152         \r
153         @Override\r
154         public Variant getValue(Node node, String propertyName)\r
155                         throws NodeManagerException {\r
156                 Node property = getProperty(node, propertyName);\r
157                 if(property == null)\r
158                         throw new NoSuchNodeException("Didn't find a property " + propertyName);\r
159                 return getValue(property);\r
160         }\r
161         \r
162     @Override\r
163     public String getPropertyURI(Node parent, Node property) {\r
164         return null;\r
165     }   \r
166 \r
167 }\r