]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/PropertyInfo.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / PropertyInfo.java
1 package org.simantics.db.layer0.request;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Map;\r
5 import java.util.Set;\r
6 \r
7 import org.simantics.databoard.Bindings;\r
8 import org.simantics.databoard.accessor.reference.ChildReference;\r
9 import org.simantics.databoard.binding.Binding;\r
10 import org.simantics.databoard.type.Datatype;\r
11 import org.simantics.db.ReadGraph;\r
12 import org.simantics.db.Resource;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.db.layer0.variable.ValueAccessor;\r
15 import org.simantics.db.layer0.variable.VariableBuilder;\r
16 import org.simantics.layer0.Layer0;\r
17 import org.simantics.utils.datastructures.Pair;\r
18 \r
19 public class PropertyInfo {\r
20         public final Resource predicate;\r
21         public final String name;\r
22         public final boolean isHasProperty;\r
23         public final Set<String> classifications;\r
24         public final VariableBuilder builder;\r
25         public final Resource literalRange;\r
26         public final Datatype requiredDatatype;\r
27         public final String requiredValueType;\r
28         public final String definedUnit;\r
29         public final Binding defaultBinding;\r
30         public final Map<String,Pair<Resource, ChildReference>> subliteralPredicates;\r
31         public final ValueAccessor valueAccessor;\r
32         public final boolean hasEnumerationRange;\r
33         public PropertyInfo(Resource predicate, String name, boolean isHasProperty, Set<String> classifications, VariableBuilder builder, Resource literalRange, Datatype requiredDatatype, String definedUnit, String requiredValueType, Binding defaultBinding, Map<String,Pair<Resource, ChildReference>> subliteralPredicates, ValueAccessor valueAccessor, boolean hasEnumerationRange) {\r
34                 this.predicate = predicate;\r
35                 this.name = name;\r
36                 this.isHasProperty = isHasProperty;\r
37                 this.classifications = classifications;\r
38                 this.builder = builder;\r
39                 this.literalRange = literalRange;\r
40                 this.requiredDatatype = requiredDatatype;\r
41                 this.definedUnit = definedUnit;\r
42                 this.requiredValueType = requiredValueType;\r
43                 this.defaultBinding = defaultBinding;\r
44                 this.subliteralPredicates = subliteralPredicates;\r
45                 this.valueAccessor = valueAccessor;\r
46                 this.hasEnumerationRange = hasEnumerationRange;\r
47         }\r
48         public static PropertyInfo make(ReadGraph graph, Resource predicate, String name, boolean isHasProperty, Set<String> classifications, VariableBuilder builder, Resource literalRange, Datatype requiredDatatype, String definedUnit, String requiredValueType, Map<String,Pair<Resource, ChildReference>> subliteralPredicates, ValueAccessor valueAccessor, boolean hasEnumerationRange) throws DatabaseException {\r
49 \r
50                 Layer0 L0 = Layer0.getInstance(graph);\r
51                 if(literalRange != null) {\r
52                         Collection<Resource> dts = graph.getAssertedObjects(literalRange, L0.HasDataType);\r
53                         if(dts.size() == 1) {\r
54                                 Datatype dt = graph.getPossibleValue(dts.iterator().next(), Bindings.getBindingUnchecked(Datatype.class));\r
55                                 if(requiredDatatype == null) requiredDatatype = dt;\r
56                         }\r
57                 }\r
58                 \r
59                 Binding defaultBinding = requiredDatatype != null ? Bindings.getBinding(requiredDatatype) : null;\r
60                 \r
61                 return new PropertyInfo(predicate, name, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange);\r
62 \r
63         }\r
64         public boolean hasClassification(String classification) {\r
65                 return classifications.contains(classification);\r
66         }\r
67         @Override\r
68         public String toString() {\r
69                 StringBuilder sb = new StringBuilder();\r
70                 sb.append("PropertyInfo [")\r
71                 .append(name)\r
72                 .append(" : ")\r
73                 .append(requiredDatatype)\r
74                 .append(" :: ")\r
75                 .append(requiredValueType)\r
76                 .append(", predicate=")\r
77                 .append(predicate)\r
78                 .append(", isHasProperty=")\r
79                 .append(isHasProperty)\r
80                 .append(", hasEnumerationRange=")\r
81                 .append(hasEnumerationRange)\r
82                 .append(", definedUnit=")\r
83                 .append(definedUnit != null ? definedUnit : "<none>")\r
84                 .append(", defaultBinding=")\r
85                 .append(defaultBinding)\r
86                 .append(", valueAccessor=")\r
87                 .append(valueAccessor)\r
88                 .append("]");\r
89                 return sb.toString();\r
90         }\r
91 }\r