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