]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/Path.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/Path.java
new file mode 100644 (file)
index 0000000..9f5b7df
--- /dev/null
@@ -0,0 +1,132 @@
+package org.simantics.document.linking.report.evaluator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.document.linking.Activator;\r
+import org.simantics.document.linking.ontology.DocumentLink;\r
+import org.simantics.document.linking.report.DocumentLine;\r
+import org.simantics.objmap.graph.annotations.OrderedSetType;\r
+import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
+import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
+\r
+@OrderedSetType(DocumentLink.URIs.EvaluatorTree_Path)\r
+public class Path extends EvaluatorNode implements StringEditableNode{\r
+       \r
+       String separator;\r
+       \r
+       public Path() {\r
+               separator = "/";\r
+       }\r
+       \r
+       public Path(String separator) {\r
+               this.separator = separator;\r
+       }\r
+       \r
+       @Override\r
+       public String toString() {\r
+               return "path " + "(" + separator +")" ;\r
+       }\r
+       \r
+       @Override\r
+       public String setValue(String value) {\r
+               separator = value;\r
+               return null;\r
+       }\r
+       \r
+       @RelatedSetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
+       public void _setValue(String value) {\r
+               separator = value;\r
+       }\r
+       \r
+       @RelatedGetValue(DocumentLink.URIs.EvaluatorTree_HasValue)\r
+       @Override\r
+       public String getValue() {\r
+               return separator;\r
+       }\r
+       \r
+       @Override\r
+       public String getValue(ReadGraph graph, Variable variable,\r
+                       Map<Object, Object> context) throws DatabaseException {\r
+               Resource model = (Resource)context.get("model");\r
+               String text = "";\r
+               Variable parent = variable.getParent(graph);\r
+               while (parent != null) {\r
+                       text = children.get(0).getValue(graph, parent, context) + separator + text;\r
+                       parent = parent.getParent(graph);\r
+                       if (model.equals(parent.getRepresents(graph)))\r
+                               parent = null;\r
+               }\r
+               if (text.length() == 0)\r
+                       return null;\r
+               return text.substring(0,text.length()-separator.length());\r
+       }\r
+       \r
+       @Override\r
+       public List<DocumentLine> getLines(ReadGraph graph, Variable variable,\r
+                       Map<Object, Object> context) throws DatabaseException {\r
+               List<DocumentLine> result = new ArrayList<DocumentLine>();\r
+               Resource model = (Resource)context.get("model");\r
+               for (int i = 0 ; i < children.size(); i++) {\r
+                       Variable parent = variable.getParent(graph);\r
+                       while (parent != null) {\r
+                               List<DocumentLine> list = children.get(i).getLines(graph, parent, context);\r
+                               for (int j = 0; j < list.size(); j++) {\r
+                                       DocumentLine line = list.get(j); \r
+                                       if (j <= result.size()) {\r
+                                               result.add(line);\r
+                                       } else {\r
+                                               DocumentLine extLine = result.get(j);\r
+                                               String combined = line.getLine() + separator + extLine.getLine();\r
+                                               Map<Object,Object> combinedSet = new HashMap<Object, Object>();\r
+                                               combinedSet.putAll(extLine.getHints());\r
+                                               combinedSet.putAll(line.getHints());\r
+                                               \r
+                                               result.set(j, new DocumentLine(combined,combinedSet));\r
+                                       }\r
+                               }\r
+                               parent = parent.getParent(graph);\r
+                               if (model.equals(parent.getRepresents(graph)))\r
+                                       parent = null;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       @Override\r
+       public ImageDescriptor getImage() {\r
+               return Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/folder.png");\r
+       }\r
+       \r
+       @Override\r
+       public EvaluatorItem copy() {\r
+               Path path = new Path();\r
+               return path;\r
+       }\r
+       \r
+       @Override\r
+       public List<Class<? extends EvaluatorItem>> getPossibleChildren(boolean add) {\r
+               if (add && children.size() > 0)\r
+                       return Collections.emptyList();\r
+               return super.getPossibleChildren(add);\r
+       }\r
+       \r
+       @Override\r
+       public boolean acceptChild(EvaluatorItem item) {\r
+               return children.size() == 0;\r
+       }\r
+       \r
+       @Override\r
+       public boolean acceptChild(int index, EvaluatorItem item) {\r
+               return children.size() == 0;\r
+       }\r
+\r
+}\r