1 package org.simantics.document.linking.report.evaluator;
3 import java.util.ArrayList;
6 import org.simantics.objmap.graph.annotations.OrderedElementsAdd;
7 import org.simantics.objmap.graph.annotations.OrderedElementsGet;
8 import org.simantics.objmap.graph.annotations.OrderedElementsRem;
10 public abstract class EvaluatorNode implements EvaluatorItem{
14 List<EvaluatorItem> children = new ArrayList<EvaluatorItem>();
18 public EvaluatorNode getParent() {
23 public void setParent(EvaluatorNode parent) {
28 public List<EvaluatorItem> getChildren() {
32 public boolean acceptChild(EvaluatorItem item) {
36 public boolean acceptChild(int index, EvaluatorItem item) {
40 public void addChild(EvaluatorItem item) {
46 public void addChild(int index, EvaluatorItem item) {
47 children.add(index, item);
51 public int indexOf(EvaluatorItem item) {
52 return children.indexOf(item);
56 public void removeChild(EvaluatorItem item) {
57 children.remove(item);
62 public List<Class<? extends EvaluatorItem>> getPossibleChildren(boolean add) {
63 List<Class<? extends EvaluatorItem>> classes = new ArrayList<Class<? extends EvaluatorItem>>();
64 classes.add(And.class);
65 classes.add(Or.class);
66 classes.add(If.class);
67 classes.add(Constant.class);
68 classes.add(Variable.class);
69 classes.add(Date.class);
70 classes.add(Path.class);
71 EvaluatorRoot root = getRoot();
72 if (root != null && root.isSupportStyles()) {
73 classes.add(TextSizeHint.class);
74 classes.add(AlignmentHint.class);
80 @SuppressWarnings("unchecked")
81 public <T extends EvaluatorItem> T createChild(Class<T> cls) {
84 child = cls.newInstance();
85 if (child instanceof EvaluatorNode)
86 ((EvaluatorNode)child).parent = this;
87 else if (child instanceof EvaluatorLeaf) {
88 ((EvaluatorLeaf)child).parent = this;
92 } catch (Exception e) {
98 @SuppressWarnings("unchecked")
99 public <T extends EvaluatorItem> T createChild(int index, Class<T> cls) {
102 child = cls.newInstance();
103 if (child instanceof EvaluatorNode)
104 ((EvaluatorNode)child).parent = this;
105 else if (child instanceof EvaluatorLeaf) {
106 ((EvaluatorLeaf)child).parent = this;
110 } catch (Exception e) {
118 public EvaluatorRoot getRoot() {
121 return parent.getRoot();
124 protected void copyChildren(EvaluatorNode copy) {
125 for (EvaluatorItem i : children) {
126 copy.addChild(i.copy());