]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/EvaluatorNode.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / evaluator / EvaluatorNode.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/EvaluatorNode.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/EvaluatorNode.java
new file mode 100644 (file)
index 0000000..0efafe1
--- /dev/null
@@ -0,0 +1,130 @@
+package org.simantics.document.linking.report.evaluator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.simantics.objmap.graph.annotations.OrderedElementsAdd;\r
+import org.simantics.objmap.graph.annotations.OrderedElementsGet;\r
+import org.simantics.objmap.graph.annotations.OrderedElementsRem;\r
+\r
+public abstract class EvaluatorNode implements EvaluatorItem{\r
+       \r
+       EvaluatorNode parent;\r
+       \r
+       List<EvaluatorItem> children = new ArrayList<EvaluatorItem>();\r
+       \r
+       \r
+       @Override\r
+       public EvaluatorNode getParent() {\r
+               return parent;\r
+       }\r
+       \r
+       @Override\r
+       public void setParent(EvaluatorNode parent) {\r
+               this.parent = parent;\r
+       }\r
+       \r
+       @OrderedElementsGet\r
+       public List<EvaluatorItem> getChildren() {\r
+               return children;\r
+       }\r
+       \r
+       public boolean acceptChild(EvaluatorItem item) {\r
+               return true;\r
+       }\r
+       \r
+       public boolean acceptChild(int index, EvaluatorItem item) {\r
+               return true;\r
+       }\r
+       \r
+       public void addChild(EvaluatorItem item) {\r
+               children.add(item);\r
+               item.setParent(this);\r
+       }\r
+       \r
+       @OrderedElementsAdd\r
+       public void addChild(int index, EvaluatorItem item) {\r
+               children.add(index, item);\r
+               item.setParent(this);\r
+       }\r
+       \r
+       public int indexOf(EvaluatorItem item) {\r
+               return children.indexOf(item);\r
+       }\r
+       \r
+       @OrderedElementsRem\r
+       public void removeChild(EvaluatorItem item) {\r
+               children.remove(item);\r
+               item.setParent(null);\r
+       }\r
+       \r
+       \r
+       public List<Class<? extends EvaluatorItem>> getPossibleChildren(boolean add) {\r
+               List<Class<? extends EvaluatorItem>> classes = new ArrayList<Class<? extends EvaluatorItem>>();\r
+               classes.add(And.class);\r
+               classes.add(Or.class);\r
+               classes.add(If.class);\r
+               classes.add(Constant.class);\r
+               classes.add(Variable.class);\r
+               classes.add(Date.class);\r
+               classes.add(Path.class);\r
+               EvaluatorRoot root = getRoot();\r
+               if (root != null && root.isSupportStyles()) {\r
+                       classes.add(TextSizeHint.class);\r
+                       classes.add(AlignmentHint.class);\r
+               }\r
+               \r
+               return classes;\r
+       }\r
+       \r
+       @SuppressWarnings("unchecked")\r
+       public <T extends EvaluatorItem> T createChild(Class<T> cls) {\r
+               EvaluatorItem child;\r
+               try {\r
+                       child = cls.newInstance();\r
+                       if (child instanceof EvaluatorNode)\r
+                               ((EvaluatorNode)child).parent = this;\r
+                       else if (child instanceof EvaluatorLeaf) {\r
+                               ((EvaluatorLeaf)child).parent = this;\r
+                       }\r
+                       addChild(child);\r
+                       return (T)child;\r
+               } catch (Exception e) {\r
+                       \r
+               } \r
+               return null;\r
+       }\r
+       \r
+       @SuppressWarnings("unchecked")\r
+       public <T extends EvaluatorItem> T createChild(int index, Class<T> cls) {\r
+               EvaluatorItem child;\r
+               try {\r
+                       child = cls.newInstance();\r
+                       if (child instanceof EvaluatorNode)\r
+                               ((EvaluatorNode)child).parent = this;\r
+                       else if (child instanceof EvaluatorLeaf) {\r
+                               ((EvaluatorLeaf)child).parent = this;\r
+                       }\r
+                       addChild(child);\r
+                       return (T)child;\r
+               } catch (Exception e) {\r
+                       \r
+               } \r
+               return null;\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public EvaluatorRoot getRoot() {\r
+               if (parent == null)\r
+                       return null;\r
+               return parent.getRoot();\r
+       }\r
+       \r
+       protected void copyChildren(EvaluatorNode copy) {\r
+               for (EvaluatorItem i : children) {\r
+                       copy.addChild(i.copy());\r
+               }\r
+       }\r
+\r
+}\r