]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/Path.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / evaluator / Path.java
1 package org.simantics.document.linking.report.evaluator;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.HashMap;\r
6 import java.util.List;\r
7 import java.util.Map;\r
8 \r
9 import org.eclipse.jface.resource.ImageDescriptor;\r
10 import org.simantics.db.ReadGraph;\r
11 import org.simantics.db.Resource;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.db.layer0.variable.Variable;\r
14 import org.simantics.document.linking.Activator;\r
15 import org.simantics.document.linking.ontology.DocumentLink;\r
16 import org.simantics.document.linking.report.DocumentLine;\r
17 import org.simantics.objmap.graph.annotations.OrderedSetType;\r
18 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
19 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
20 \r
21 @OrderedSetType(DocumentLink.URIs.EvaluatorTree_Path)\r
22 public class Path extends EvaluatorNode implements StringEditableNode{\r
23         \r
24         String separator;\r
25         \r
26         public Path() {\r
27                 separator = "/";\r
28         }\r
29         \r
30         public Path(String separator) {\r
31                 this.separator = separator;\r
32         }\r
33         \r
34         @Override\r
35         public String toString() {\r
36                 return "path " + "(" + separator +")" ;\r
37         }\r
38         \r
39         @Override\r
40         public String setValue(String value) {\r
41                 separator = value;\r
42                 return null;\r
43         }\r
44         \r
45         @RelatedSetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
46         public void _setValue(String value) {\r
47                 separator = value;\r
48         }\r
49         \r
50         @RelatedGetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
51         @Override\r
52         public String getValue() {\r
53                 return separator;\r
54         }\r
55         \r
56         @Override\r
57         public String getValue(ReadGraph graph, Variable variable,\r
58                         Map<Object, Object> context) throws DatabaseException {\r
59                 Resource model = (Resource)context.get("model");\r
60                 String text = "";\r
61                 Variable parent = variable.getParent(graph);\r
62                 while (parent != null) {\r
63                         text = children.get(0).getValue(graph, parent, context) + separator + text;\r
64                         parent = parent.getParent(graph);\r
65                         if (model.equals(parent.getRepresents(graph)))\r
66                                 parent = null;\r
67                 }\r
68                 if (text.length() == 0)\r
69                         return null;\r
70                 return text.substring(0,text.length()-separator.length());\r
71         }\r
72         \r
73         @Override\r
74         public List<DocumentLine> getLines(ReadGraph graph, Variable variable,\r
75                         Map<Object, Object> context) throws DatabaseException {\r
76                 List<DocumentLine> result = new ArrayList<DocumentLine>();\r
77                 Resource model = (Resource)context.get("model");\r
78                 for (int i = 0 ; i < children.size(); i++) {\r
79                         Variable parent = variable.getParent(graph);\r
80                         while (parent != null) {\r
81                                 List<DocumentLine> list = children.get(i).getLines(graph, parent, context);\r
82                                 for (int j = 0; j < list.size(); j++) {\r
83                                         DocumentLine line = list.get(j); \r
84                                         if (j <= result.size()) {\r
85                                                 result.add(line);\r
86                                         } else {\r
87                                                 DocumentLine extLine = result.get(j);\r
88                                                 String combined = line.getLine() + separator + extLine.getLine();\r
89                                                 Map<Object,Object> combinedSet = new HashMap<Object, Object>();\r
90                                                 combinedSet.putAll(extLine.getHints());\r
91                                                 combinedSet.putAll(line.getHints());\r
92                                                 \r
93                                                 result.set(j, new DocumentLine(combined,combinedSet));\r
94                                         }\r
95                                 }\r
96                                 parent = parent.getParent(graph);\r
97                                 if (model.equals(parent.getRepresents(graph)))\r
98                                         parent = null;\r
99                         }\r
100                 }\r
101                 return result;\r
102         }\r
103         \r
104         @Override\r
105         public ImageDescriptor getImage() {\r
106                 return Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/folder.png");\r
107         }\r
108         \r
109         @Override\r
110         public EvaluatorItem copy() {\r
111                 Path path = new Path();\r
112                 return path;\r
113         }\r
114         \r
115         @Override\r
116         public List<Class<? extends EvaluatorItem>> getPossibleChildren(boolean add) {\r
117                 if (add && children.size() > 0)\r
118                         return Collections.emptyList();\r
119                 return super.getPossibleChildren(add);\r
120         }\r
121         \r
122         @Override\r
123         public boolean acceptChild(EvaluatorItem item) {\r
124                 return children.size() == 0;\r
125         }\r
126         \r
127         @Override\r
128         public boolean acceptChild(int index, EvaluatorItem item) {\r
129                 return children.size() == 0;\r
130         }\r
131 \r
132 }\r