1 package org.simantics.db.layer0.request;
3 import java.util.Collection;
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;
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;
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;
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 {
52 Layer0 L0 = Layer0.getInstance(graph);
53 if(literalRange != null) {
54 Collection<Resource> dts = graph.getAssertedObjects(literalRange, L0.HasDataType);
56 Datatype dt = graph.getPossibleValue(dts.iterator().next(), Bindings.DATATYPE);
57 if(requiredDatatype == null) requiredDatatype = dt;
61 Binding defaultBinding = requiredDatatype != null ? Bindings.getBinding(requiredDatatype) : null;
63 return new PropertyInfo(predicate, name, isFunctional, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange);
66 public boolean hasClassification(String classification) {
67 return classifications.contains(classification);
70 public String toString() {
71 StringBuilder sb = new StringBuilder();
72 sb.append("PropertyInfo [")
75 .append(requiredDatatype)
77 .append(requiredValueType)
78 .append(", predicate=")
80 .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)