X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;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=0baa5046293de0c7805a05e10b990e9ceba03313;hp=6ecfb8eadf126834b958fefe5f2b850ea05d3ee3;hb=4b6820a8ec78410eb22f90e87e3e36572b9ba1f5;hpb=b8e4909d7723ad4bffcae324ade14d94d837e6da 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 index 6ecfb8ead..0baa50462 100644 --- 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 @@ -30,6 +30,7 @@ import org.simantics.utils.datastructures.Pair; public class PropertyInfo { public final Resource predicate; public final String name; + public final boolean isImmutable; public final boolean isHasProperty; public final boolean isFunctional; public final Set classifications; @@ -42,9 +43,10 @@ public class PropertyInfo { public final Map> subliteralPredicates; public final ValueAccessor valueAccessor; public final boolean hasEnumerationRange; - public PropertyInfo(Resource predicate, String name, boolean isFunctional, boolean isHasProperty, Set classifications, VariableBuilder builder, Resource literalRange, Datatype requiredDatatype, String definedUnit, String requiredValueType, Binding defaultBinding, Map> subliteralPredicates, ValueAccessor valueAccessor, boolean hasEnumerationRange) { + public PropertyInfo(Resource predicate, String name, boolean isImmutable, boolean isFunctional, 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.isImmutable = isImmutable; this.isFunctional = isFunctional; this.isHasProperty = isHasProperty; this.classifications = classifications; @@ -59,7 +61,6 @@ public class PropertyInfo { this.hasEnumerationRange = hasEnumerationRange; } public static PropertyInfo make(ReadGraph graph, Resource predicate, String name, boolean isFunctional, 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); @@ -68,11 +69,8 @@ public class PropertyInfo { if(requiredDatatype == null) requiredDatatype = dt; } } - Binding defaultBinding = requiredDatatype != null ? Bindings.getBinding(requiredDatatype) : null; - - return new PropertyInfo(predicate, name, isFunctional, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange); - + return new PropertyInfo(predicate, name, graph.isImmutable(predicate), isFunctional, isHasProperty, classifications, builder, literalRange, requiredDatatype, definedUnit, requiredValueType, defaultBinding, subliteralPredicates, valueAccessor, hasEnumerationRange); } public boolean hasClassification(String classification) { return classifications.contains(classification); @@ -107,20 +105,22 @@ public class PropertyInfo { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((builder == null) ? 0 : builder.hashCode()); - result = prime * result + ((classifications == null) ? 0 : classifications.hashCode()); - result = prime * result + ((defaultBinding == null) ? 0 : defaultBinding.hashCode()); - result = prime * result + ((definedUnit == null) ? 0 : definedUnit.hashCode()); - result = prime * result + (hasEnumerationRange ? 1231 : 1237); - result = prime * result + (isFunctional ? 1231 : 1237); - result = prime * result + (isHasProperty ? 1231 : 1237); - result = prime * result + ((literalRange == null) ? 0 : literalRange.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((predicate == null) ? 0 : predicate.hashCode()); - result = prime * result + ((requiredDatatype == null) ? 0 : requiredDatatype.hashCode()); - result = prime * result + ((requiredValueType == null) ? 0 : requiredValueType.hashCode()); - result = prime * result + ((subliteralPredicates == null) ? 0 : subliteralPredicates.hashCode()); - result = prime * result + ((valueAccessor == null) ? 0 : valueAccessor.hashCode()); + if (!isImmutable) { + result = prime * result + ((builder == null) ? 0 : builder.hashCode()); + result = prime * result + ((classifications == null) ? 0 : classifications.hashCode()); + result = prime * result + ((defaultBinding == null) ? 0 : defaultBinding.hashCode()); + result = prime * result + ((definedUnit == null) ? 0 : definedUnit.hashCode()); + result = prime * result + (hasEnumerationRange ? 1231 : 1237); + result = prime * result + (isFunctional ? 1231 : 1237); + result = prime * result + (isHasProperty ? 1231 : 1237); + result = prime * result + ((literalRange == null) ? 0 : literalRange.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((requiredDatatype == null) ? 0 : requiredDatatype.hashCode()); + result = prime * result + ((requiredValueType == null) ? 0 : requiredValueType.hashCode()); + result = prime * result + ((subliteralPredicates == null) ? 0 : subliteralPredicates.hashCode()); + result = prime * result + ((valueAccessor == null) ? 0 : valueAccessor.hashCode()); + } return result; } @Override @@ -132,6 +132,13 @@ public class PropertyInfo { if (getClass() != obj.getClass()) return false; PropertyInfo other = (PropertyInfo) obj; + if (predicate == null) { + if (other.predicate != null) + return false; + } else if (!predicate.equals(other.predicate)) + return false; + if(isImmutable) + return true; if (builder == null) { if (other.builder != null) return false; @@ -168,11 +175,6 @@ public class PropertyInfo { return false; } else if (!name.equals(other.name)) return false; - if (predicate == null) { - if (other.predicate != null) - return false; - } else if (!predicate.equals(other.predicate)) - return false; if (requiredDatatype == null) { if (other.requiredDatatype != null) return false;