]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.ge;\r
2 \r
3 import java.util.Map;\r
4 \r
5 import org.simantics.browsing.ui.model.labels.LabelRule;\r
6 import org.simantics.databoard.Bindings;\r
7 import org.simantics.db.ReadGraph;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.Statement;\r
10 import org.simantics.db.common.utils.NameUtils;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.db.layer0.variable.Variable;\r
13 import org.simantics.document.linking.ontology.DocumentLink;\r
14 import org.simantics.document.linking.utils.SourceLinkUtil;\r
15 import org.simantics.layer0.Layer0;\r
16 import org.simantics.utils.datastructures.ArrayMap;\r
17 \r
18 public class VariableLabelRule implements LabelRule {\r
19         \r
20         @Override\r
21         public boolean isCompatible(Class<?> contentType) {\r
22                 return contentType.equals(Variable.class);\r
23         }\r
24         \r
25         @Override\r
26         public Map<String, String> getLabel(ReadGraph graph, Object content)\r
27                         throws DatabaseException {\r
28                  Variable variable = (Variable) content;\r
29 \r
30                  Resource node = variable.getPossibleRepresents(graph);\r
31                  \r
32                  if (node == null)\r
33                          return null;\r
34                 \r
35                  Layer0 l0 = Layer0.getInstance(graph);\r
36                  DocumentLink sl = DocumentLink.getInstance(graph);\r
37                  \r
38                  String keys[] = Constants.SOURCE_COLUMN_KEYS;\r
39                  String labels[] = new String[keys.length];\r
40                         \r
41                  if (graph.isInstanceOf(node, sl.Source)) {\r
42                         Resource reference = SourceLinkUtil.getReferredDocument(graph, node);\r
43                         String comment = graph.getPossibleRelatedValue(node, sl.hasSourceComment);\r
44                         labels[0] = "";\r
45                         labels[1] = "";\r
46                         labels[3] = comment != null ? comment : "";\r
47                         \r
48                         if (reference != null) {\r
49                                 if (SourceLinkUtil.isValidReference(graph, reference)) {\r
50                                         labels[2] = NameUtils.getSafeLabel(graph, reference);\r
51                                 } else {\r
52                                         labels[2] = "Deleted reference";\r
53                                 }\r
54                                 \r
55                         } else {\r
56                                 if (graph.getPossibleRelatedValue(node, sl.hasSourceReferenceURI, Bindings.STRING) != null) {\r
57                                         labels[2] = "Reference does not exist";\r
58                                 } else {\r
59                                         labels[2] = "Reference has not been set";\r
60                                 }\r
61                         }\r
62                         \r
63                  } else if (graph.isInstanceOf(node, l0.Literal) || graph.isInstanceOf(node, l0.SCLValue)) {\r
64                                 Statement propertyOwner = graph.getPossibleStatement(node, l0.PropertyOf);\r
65                                 Resource propertyRelation = null;\r
66                                 boolean defaultValue = false;\r
67                                 if (propertyOwner != null) {\r
68                                         propertyRelation = graph.getInverse(propertyOwner.getPredicate());\r
69                                 \r
70                                         \r
71                                 } else {\r
72                                         Resource objectInverse = graph.getPossibleObject(node, l0.HasObjectInverse);\r
73                                         if (objectInverse != null) {\r
74                                                 propertyRelation = graph.getPossibleObject(objectInverse, l0.HasPredicate);\r
75                                                 defaultValue = true;\r
76                                         } \r
77                                 }\r
78                                 if (propertyRelation != null) {\r
79                                         String propName = graph.getPossibleRelatedValue2(propertyRelation, l0.HasLabel);\r
80                                         if (propName == null || propName.length() == 0)\r
81                                                 propName = graph.getRelatedValue(propertyRelation, l0.HasName); \r
82                                         labels[0] = propName;\r
83                                         \r
84                                         \r
85                                 } else {\r
86                                         labels[0] = "";\r
87                                 }\r
88                                 \r
89                                 if (graph.hasValue(node)) {\r
90                                         Object value = graph.getValue(node);\r
91                                         labels[1] = SourceLinkUtil.getValueString(value);\r
92                                 } else if (!graph.isInstanceOf(node, l0.SCLValue)){\r
93                                         labels[1] = "No Value";\r
94                                 } else {\r
95                                         labels[1] = "";\r
96                                 }\r
97                                 \r
98                                 if (defaultValue) {\r
99                                         labels[1] +=" (default)";\r
100                                 }\r
101                                 labels[2] = "";\r
102                                 labels[3] = "";\r
103                                 \r
104                  } else {\r
105 \r
106                                 labels[0] = NameUtils.getSafeLabel(graph, node);//graph.getRelatedValue(node, l0.HasName);\r
107                                 if (labels[0].length() == 0)\r
108                                         labels[0] = NameUtils.getSafeName(graph, node);//graph.getRelatedValue(node, l0.HasName);\r
109                                 labels[1] = "";\r
110                                 labels[2] = "";\r
111                                 labels[3] = "";\r
112                                 \r
113                                 \r
114                  }\r
115                  return ArrayMap.make(keys, labels);\r
116         }\r
117 \r
118 }\r