X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Frequest%2FPropertyInfo.java;fp=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Frequest%2FPropertyInfo.java;h=1bcd0bc4988c2d2e53f9758ff22ee94269e34de8;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/PropertyInfo.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/PropertyInfo.java new file mode 100644 index 000000000..1bcd0bc49 --- /dev/null +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/PropertyInfo.java @@ -0,0 +1,91 @@ +package org.simantics.db.layer0.request; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.accessor.reference.ChildReference; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.type.Datatype; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.ValueAccessor; +import org.simantics.db.layer0.variable.VariableBuilder; +import org.simantics.layer0.Layer0; +import org.simantics.utils.datastructures.Pair; + +public class PropertyInfo { + public final Resource predicate; + public final String name; + public final boolean isHasProperty; + public final Set classifications; + public final VariableBuilder builder; + public final Resource literalRange; + public final Datatype requiredDatatype; + public final String requiredValueType; + public final String definedUnit; + public final Binding defaultBinding; + public final Map> subliteralPredicates; + public final ValueAccessor valueAccessor; + public final boolean hasEnumerationRange; + public PropertyInfo(Resource predicate, String name, boolean isHasProperty, Set classifications, VariableBuilder builder, Resource literalRange, Datatype requiredDatatype, String definedUnit, String requiredValueType, Binding defaultBinding, Map> subliteralPredicates, ValueAccessor valueAccessor, boolean hasEnumerationRange) { + this.predicate = predicate; + this.name = name; + this.isHasProperty = isHasProperty; + this.classifications = classifications; + this.builder = builder; + this.literalRange = literalRange; + this.requiredDatatype = requiredDatatype; + this.definedUnit = definedUnit; + this.requiredValueType = requiredValueType; + this.defaultBinding = defaultBinding; + this.subliteralPredicates = subliteralPredicates; + this.valueAccessor = valueAccessor; + this.hasEnumerationRange = hasEnumerationRange; + } + public static PropertyInfo make(ReadGraph graph, Resource predicate, String name, boolean isHasProperty, Set classifications, VariableBuilder builder, Resource literalRange, Datatype requiredDatatype, String definedUnit, String requiredValueType, Map> subliteralPredicates, ValueAccessor valueAccessor, boolean hasEnumerationRange) throws DatabaseException { + + Layer0 L0 = Layer0.getInstance(graph); + if(literalRange != null) { + Collection dts = graph.getAssertedObjects(literalRange, L0.HasDataType); + if(dts.size() == 1) { + Datatype dt = graph.getPossibleValue(dts.iterator().next(), Bindings.getBindingUnchecked(Datatype.class)); + if(requiredDatatype == null) requiredDatatype = dt; + } + } + + Binding defaultBinding = requiredDatatype != null ? Bindings.getBinding(requiredDatatype) : null; + + return new PropertyInfo(predicate, name, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange); + + } + public boolean hasClassification(String classification) { + return classifications.contains(classification); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("PropertyInfo [") + .append(name) + .append(" : ") + .append(requiredDatatype) + .append(" :: ") + .append(requiredValueType) + .append(", predicate=") + .append(predicate) + .append(", isHasProperty=") + .append(isHasProperty) + .append(", hasEnumerationRange=") + .append(hasEnumerationRange) + .append(", definedUnit=") + .append(definedUnit != null ? definedUnit : "") + .append(", defaultBinding=") + .append(defaultBinding) + .append(", valueAccessor=") + .append(valueAccessor) + .append("]"); + return sb.toString(); + } +}