]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/And.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / evaluator / And.java
1 package org.simantics.document.linking.report.evaluator;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.HashMap;\r
5 import java.util.List;\r
6 import java.util.Map;\r
7 \r
8 import org.eclipse.jface.resource.ImageDescriptor;\r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.variable.Variable;\r
12 import org.simantics.document.linking.Activator;\r
13 import org.simantics.document.linking.ontology.DocumentLink;\r
14 import org.simantics.document.linking.report.DocumentLine;\r
15 import org.simantics.objmap.graph.annotations.OrderedSetType;\r
16 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
17 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
18 \r
19 /**\r
20  * And node combines contents of the child nodes with configurable separator (default " ")\r
21  * \r
22  * If all children return null, the return value is null.\r
23  * \r
24  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
25  *\r
26  */\r
27 @OrderedSetType(DocumentLink.URIs.EvaluatorTree_And)\r
28 public class And extends EvaluatorNode implements StringEditableNode{\r
29         \r
30         String separator;\r
31         \r
32         \r
33         public And() {\r
34                 separator = " ";\r
35         }\r
36         \r
37         public And(String separator) {\r
38                 this.separator = separator;\r
39         }\r
40         \r
41         public void setSeparator(String separator) {\r
42                 this.separator = separator;\r
43         }\r
44         \r
45         public String getSeparator() {\r
46                 return separator;\r
47         }\r
48         \r
49         \r
50         @Override\r
51         public String getValue(ReadGraph graph, Variable variable, Map<Object, Object> context) throws DatabaseException {\r
52                 String s = "";\r
53                 for (int i = 0 ; i < children.size(); i++) {\r
54                         String s2 = children.get(i).getValue(graph, variable, context);\r
55                         if (s2 != null) {\r
56                                 s+= s2;\r
57                                 if (i < children.size()-1)\r
58                                         s+=separator;\r
59                         }\r
60                 }\r
61                 if (s.length() == 0)\r
62                         return null;\r
63                 return s;\r
64         }\r
65         \r
66         @Override\r
67         public List<DocumentLine> getLines(ReadGraph graph,     Variable variable, Map<Object, Object> context) throws DatabaseException {\r
68                 List<DocumentLine> result = new ArrayList<DocumentLine>();\r
69                 for (int i = 0 ; i < children.size(); i++) {\r
70                         List<DocumentLine> list = children.get(i).getLines(graph, variable, context);\r
71                         for (int j = 0; j < list.size(); j++) {\r
72                                 DocumentLine line = list.get(j); \r
73                                 if (j <= result.size()) {\r
74                                         result.add(line);\r
75                                 } else {\r
76                                         DocumentLine extLine = result.get(j);\r
77                                         String combined = extLine.getLine() + separator + line.getLine();\r
78                                         Map<Object,Object> combinedSet = new HashMap<Object, Object>();\r
79                                         combinedSet.putAll(extLine.getHints());\r
80                                         combinedSet.putAll(line.getHints());\r
81                                         \r
82                                         result.set(j, new DocumentLine(combined,combinedSet));\r
83                                 }\r
84                         }\r
85                 }\r
86                 return result;\r
87         }\r
88         \r
89 \r
90         @Override\r
91         public String toString() {\r
92                 return "and " + "(" + separator +")" ;\r
93         }\r
94         \r
95         @RelatedGetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
96         @Override\r
97         public String getValue() {\r
98                 return separator;\r
99         }\r
100         \r
101         @Override\r
102         public String setValue(String value) {\r
103                 separator = value;\r
104                 return null;\r
105         }\r
106         \r
107         @RelatedSetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
108         public void _setValue(String value) {\r
109                 separator = value;\r
110         }\r
111         \r
112         @Override\r
113         public EvaluatorItem copy() {\r
114                 And a = new And(separator);\r
115                 copyChildren(a);\r
116                 return a;\r
117         }\r
118         \r
119         @Override\r
120         public ImageDescriptor getImage() {\r
121                 return Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/text_columns.png");\r
122         }\r
123 \r
124 }\r