1 package org.simantics.db.layer0.request;
\r
3 import java.util.Collection;
\r
4 import java.util.Map;
\r
5 import java.util.Set;
\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
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
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
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
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
59 Binding defaultBinding = requiredDatatype != null ? Bindings.getBinding(requiredDatatype) : null;
\r
61 return new PropertyInfo(predicate, name, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange);
\r
64 public boolean hasClassification(String classification) {
\r
65 return classifications.contains(classification);
\r
68 public String toString() {
\r
69 StringBuilder sb = new StringBuilder();
\r
70 sb.append("PropertyInfo [")
\r
73 .append(requiredDatatype)
\r
75 .append(requiredValueType)
\r
76 .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
89 return sb.toString();
\r