]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/VariableLabelRule.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / ge / VariableLabelRule.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/VariableLabelRule.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/VariableLabelRule.java
new file mode 100644 (file)
index 0000000..3f1a80e
--- /dev/null
@@ -0,0 +1,118 @@
+package org.simantics.document.linking.ge;\r
+\r
+import java.util.Map;\r
+\r
+import org.simantics.browsing.ui.model.labels.LabelRule;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.document.linking.ontology.DocumentLink;\r
+import org.simantics.document.linking.utils.SourceLinkUtil;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.utils.datastructures.ArrayMap;\r
+\r
+public class VariableLabelRule implements LabelRule {\r
+       \r
+       @Override\r
+       public boolean isCompatible(Class<?> contentType) {\r
+               return contentType.equals(Variable.class);\r
+       }\r
+       \r
+       @Override\r
+       public Map<String, String> getLabel(ReadGraph graph, Object content)\r
+                       throws DatabaseException {\r
+                Variable variable = (Variable) content;\r
+\r
+                Resource node = variable.getPossibleRepresents(graph);\r
+                \r
+                if (node == null)\r
+                        return null;\r
+               \r
+                Layer0 l0 = Layer0.getInstance(graph);\r
+                DocumentLink sl = DocumentLink.getInstance(graph);\r
+                \r
+                String keys[] = Constants.SOURCE_COLUMN_KEYS;\r
+                String labels[] = new String[keys.length];\r
+                       \r
+                if (graph.isInstanceOf(node, sl.Source)) {\r
+                       Resource reference = SourceLinkUtil.getReferredDocument(graph, node);\r
+                       String comment = graph.getPossibleRelatedValue(node, sl.hasSourceComment);\r
+                       labels[0] = "";\r
+                       labels[1] = "";\r
+                       labels[3] = comment != null ? comment : "";\r
+                       \r
+                       if (reference != null) {\r
+                               if (SourceLinkUtil.isValidReference(graph, reference)) {\r
+                                       labels[2] = NameUtils.getSafeLabel(graph, reference);\r
+                               } else {\r
+                                       labels[2] = "Deleted reference";\r
+                               }\r
+                               \r
+                       } else {\r
+                               if (graph.getPossibleRelatedValue(node, sl.hasSourceReferenceURI, Bindings.STRING) != null) {\r
+                                       labels[2] = "Reference does not exist";\r
+                               } else {\r
+                                       labels[2] = "Reference has not been set";\r
+                               }\r
+                       }\r
+                       \r
+                } else if (graph.isInstanceOf(node, l0.Literal) || graph.isInstanceOf(node, l0.SCLValue)) {\r
+                               Statement propertyOwner = graph.getPossibleStatement(node, l0.PropertyOf);\r
+                               Resource propertyRelation = null;\r
+                               boolean defaultValue = false;\r
+                               if (propertyOwner != null) {\r
+                                       propertyRelation = graph.getInverse(propertyOwner.getPredicate());\r
+                               \r
+                                       \r
+                               } else {\r
+                                       Resource objectInverse = graph.getPossibleObject(node, l0.HasObjectInverse);\r
+                                       if (objectInverse != null) {\r
+                                               propertyRelation = graph.getPossibleObject(objectInverse, l0.HasPredicate);\r
+                                               defaultValue = true;\r
+                                       } \r
+                               }\r
+                               if (propertyRelation != null) {\r
+                                       String propName = graph.getPossibleRelatedValue2(propertyRelation, l0.HasLabel);\r
+                                       if (propName == null || propName.length() == 0)\r
+                                               propName = graph.getRelatedValue(propertyRelation, l0.HasName); \r
+                                       labels[0] = propName;\r
+                                       \r
+                                       \r
+                               } else {\r
+                                       labels[0] = "";\r
+                               }\r
+                               \r
+                               if (graph.hasValue(node)) {\r
+                                       Object value = graph.getValue(node);\r
+                                       labels[1] = SourceLinkUtil.getValueString(value);\r
+                               } else if (!graph.isInstanceOf(node, l0.SCLValue)){\r
+                                       labels[1] = "No Value";\r
+                               } else {\r
+                                       labels[1] = "";\r
+                               }\r
+                               \r
+                               if (defaultValue) {\r
+                                       labels[1] +=" (default)";\r
+                               }\r
+                               labels[2] = "";\r
+                               labels[3] = "";\r
+                               \r
+                } else {\r
+\r
+                               labels[0] = NameUtils.getSafeLabel(graph, node);//graph.getRelatedValue(node, l0.HasName);\r
+                               if (labels[0].length() == 0)\r
+                                       labels[0] = NameUtils.getSafeName(graph, node);//graph.getRelatedValue(node, l0.HasName);\r
+                               labels[1] = "";\r
+                               labels[2] = "";\r
+                               labels[3] = "";\r
+                               \r
+                               \r
+                }\r
+                return ArrayMap.make(keys, labels);\r
+       }\r
+\r
+}\r