--- /dev/null
+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