]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.report.evaluator;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import org.simantics.objmap.graph.annotations.OrderedElementsAdd;\r
7 import org.simantics.objmap.graph.annotations.OrderedElementsGet;\r
8 import org.simantics.objmap.graph.annotations.OrderedElementsRem;\r
9 \r
10 public abstract class EvaluatorNode implements EvaluatorItem{\r
11         \r
12         EvaluatorNode parent;\r
13         \r
14         List<EvaluatorItem> children = new ArrayList<EvaluatorItem>();\r
15         \r
16         \r
17         @Override\r
18         public EvaluatorNode getParent() {\r
19                 return parent;\r
20         }\r
21         \r
22         @Override\r
23         public void setParent(EvaluatorNode parent) {\r
24                 this.parent = parent;\r
25         }\r
26         \r
27         @OrderedElementsGet\r
28         public List<EvaluatorItem> getChildren() {\r
29                 return children;\r
30         }\r
31         \r
32         public boolean acceptChild(EvaluatorItem item) {\r
33                 return true;\r
34         }\r
35         \r
36         public boolean acceptChild(int index, EvaluatorItem item) {\r
37                 return true;\r
38         }\r
39         \r
40         public void addChild(EvaluatorItem item) {\r
41                 children.add(item);\r
42                 item.setParent(this);\r
43         }\r
44         \r
45         @OrderedElementsAdd\r
46         public void addChild(int index, EvaluatorItem item) {\r
47                 children.add(index, item);\r
48                 item.setParent(this);\r
49         }\r
50         \r
51         public int indexOf(EvaluatorItem item) {\r
52                 return children.indexOf(item);\r
53         }\r
54         \r
55         @OrderedElementsRem\r
56         public void removeChild(EvaluatorItem item) {\r
57                 children.remove(item);\r
58                 item.setParent(null);\r
59         }\r
60         \r
61         \r
62         public List<Class<? extends EvaluatorItem>> getPossibleChildren(boolean add) {\r
63                 List<Class<? extends EvaluatorItem>> classes = new ArrayList<Class<? extends EvaluatorItem>>();\r
64                 classes.add(And.class);\r
65                 classes.add(Or.class);\r
66                 classes.add(If.class);\r
67                 classes.add(Constant.class);\r
68                 classes.add(Variable.class);\r
69                 classes.add(Date.class);\r
70                 classes.add(Path.class);\r
71                 EvaluatorRoot root = getRoot();\r
72                 if (root != null && root.isSupportStyles()) {\r
73                         classes.add(TextSizeHint.class);\r
74                         classes.add(AlignmentHint.class);\r
75                 }\r
76                 \r
77                 return classes;\r
78         }\r
79         \r
80         @SuppressWarnings("unchecked")\r
81         public <T extends EvaluatorItem> T createChild(Class<T> cls) {\r
82                 EvaluatorItem child;\r
83                 try {\r
84                         child = cls.newInstance();\r
85                         if (child instanceof EvaluatorNode)\r
86                                 ((EvaluatorNode)child).parent = this;\r
87                         else if (child instanceof EvaluatorLeaf) {\r
88                                 ((EvaluatorLeaf)child).parent = this;\r
89                         }\r
90                         addChild(child);\r
91                         return (T)child;\r
92                 } catch (Exception e) {\r
93                         \r
94                 } \r
95                 return null;\r
96         }\r
97         \r
98         @SuppressWarnings("unchecked")\r
99         public <T extends EvaluatorItem> T createChild(int index, Class<T> cls) {\r
100                 EvaluatorItem child;\r
101                 try {\r
102                         child = cls.newInstance();\r
103                         if (child instanceof EvaluatorNode)\r
104                                 ((EvaluatorNode)child).parent = this;\r
105                         else if (child instanceof EvaluatorLeaf) {\r
106                                 ((EvaluatorLeaf)child).parent = this;\r
107                         }\r
108                         addChild(child);\r
109                         return (T)child;\r
110                 } catch (Exception e) {\r
111                         \r
112                 } \r
113                 return null;\r
114                 \r
115         }\r
116         \r
117         @Override\r
118         public EvaluatorRoot getRoot() {\r
119                 if (parent == null)\r
120                         return null;\r
121                 return parent.getRoot();\r
122         }\r
123         \r
124         protected void copyChildren(EvaluatorNode copy) {\r
125                 for (EvaluatorItem i : children) {\r
126                         copy.addChild(i.copy());\r
127                 }\r
128         }\r
129 \r
130 }\r