1 package org.simantics.document.linking.report.evaluator;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\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
10 public abstract class EvaluatorNode implements EvaluatorItem{
\r
12 EvaluatorNode parent;
\r
14 List<EvaluatorItem> children = new ArrayList<EvaluatorItem>();
\r
18 public EvaluatorNode getParent() {
\r
23 public void setParent(EvaluatorNode parent) {
\r
24 this.parent = parent;
\r
28 public List<EvaluatorItem> getChildren() {
\r
32 public boolean acceptChild(EvaluatorItem item) {
\r
36 public boolean acceptChild(int index, EvaluatorItem item) {
\r
40 public void addChild(EvaluatorItem item) {
\r
42 item.setParent(this);
\r
46 public void addChild(int index, EvaluatorItem item) {
\r
47 children.add(index, item);
\r
48 item.setParent(this);
\r
51 public int indexOf(EvaluatorItem item) {
\r
52 return children.indexOf(item);
\r
56 public void removeChild(EvaluatorItem item) {
\r
57 children.remove(item);
\r
58 item.setParent(null);
\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
80 @SuppressWarnings("unchecked")
\r
81 public <T extends EvaluatorItem> T createChild(Class<T> cls) {
\r
82 EvaluatorItem child;
\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
92 } catch (Exception e) {
\r
98 @SuppressWarnings("unchecked")
\r
99 public <T extends EvaluatorItem> T createChild(int index, Class<T> cls) {
\r
100 EvaluatorItem child;
\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
110 } catch (Exception e) {
\r
118 public EvaluatorRoot getRoot() {
\r
119 if (parent == null)
\r
121 return parent.getRoot();
\r
124 protected void copyChildren(EvaluatorNode copy) {
\r
125 for (EvaluatorItem i : children) {
\r
126 copy.addChild(i.copy());
\r