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%2Futil%2FLayer0Utils.java;fp=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FLayer0Utils.java;h=62c7093da11e999d7e22b60a17ccb1221088fe18;hp=d89d7165226e7522fdf0a015a7209418e5185847;hb=5cd3522960b220eaba2be316076d6275054dffa2;hpb=7e1ba415e6f14478c2aa682a89ed534e7044ac43 diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java index d89d71652..62c7093da 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/Layer0Utils.java @@ -129,8 +129,6 @@ public class Layer0Utils { @SuppressWarnings("rawtypes") public static final ThreadLocal SCL_GRAPH = new ThreadLocal(); - final public static Binding datatype_binging = Bindings.getBindingUnchecked(Datatype.class); - public static Resource literal(WriteGraph g, String value) throws DatabaseException { Layer0 L0 = Layer0.getInstance(g); Resource r = g.newResource(); @@ -272,7 +270,7 @@ public class Layer0Utils { Resource range = graph.getPossibleObject(property, L0.HasRange); if(range != null && !L0.Value.equals(range)) return range; - Datatype requiredDataType = graph.getPossibleRelatedValue(property, L0X.RequiresDataType, datatype_binging); + Datatype requiredDataType = graph.getPossibleRelatedValue(property, L0X.RequiresDataType, Bindings.DATATYPE); if(requiredDataType != null) return getLiteralType(graph, requiredDataType); String requiredValueType = graph.getPossibleRelatedValue(property, L0.RequiresValueType, Bindings.STRING); @@ -388,7 +386,7 @@ public class Layer0Utils { Layer0 L0 = Layer0.getInstance(graph); Layer0X L0X = Layer0X.getInstance(graph); - Datatype literalDatatype = graph.getPossibleRelatedValue(value, L0.HasDataType, datatype_binging); + Datatype literalDatatype = graph.getPossibleRelatedValue(value, L0.HasDataType, Bindings.DATATYPE); if(literalDatatype != null) return getSCLType(literalDatatype); String literalValueType = graph.getPossibleRelatedValue(value, L0.HasValueType, Bindings.STRING); @@ -396,7 +394,7 @@ public class Layer0Utils { if(predicate != null) { - Datatype requiredDataType = graph.getPossibleRelatedValue(predicate, L0X.RequiresDataType, datatype_binging); + Datatype requiredDataType = graph.getPossibleRelatedValue(predicate, L0X.RequiresDataType, Bindings.DATATYPE); if(requiredDataType != null) return getSCLType(requiredDataType); throw new DatabaseException("Unidentified literal data type for property " + NameUtils.getURIOrSafeNameInternal(graph, predicate)); @@ -414,26 +412,30 @@ public class Layer0Utils { } public static Datatype getPossibleDatatype(ReadGraph graph, Variable variable) throws DatabaseException { + return getPossibleDatatype(graph, variable, null, true); + } + private static Datatype getPossibleDatatype(ReadGraph graph, Variable variable, PropertyInfo info, boolean checkPropertyDatatype) throws DatabaseException { Layer0 L0 = Layer0.getInstance(graph); Layer0X L0X = Layer0X.getInstance(graph); Resource property = variable.getPossiblePredicateResource(graph); - if(property != null) { -// Datatype requiredDataType = graph.getPossibleRelatedValue(property, L0X.RequiresDataType, datatype_binging); - Datatype requiredDataType = graph.syncRequest(new PossibleRelatedValue(property, L0X.RequiresDataType, datatype_binging)); + if(checkPropertyDatatype && property != null) { + Datatype requiredDataType = graph.syncRequest(new PossibleRelatedValue(property, L0X.RequiresDataType, Bindings.DATATYPE)); if(requiredDataType != null) return requiredDataType; } Resource literal = variable.getPossibleRepresents(graph); if(literal != null) { - Datatype literalDatatype = graph.getPossibleRelatedValue2(literal, L0.HasDataType, new StandardGraphPropertyVariable(graph, variable, null, literal, L0.HasDataType), datatype_binging); - if(literalDatatype != null) return literalDatatype; + Datatype literalDatatype = graph.getPossibleRelatedValue2(literal, L0.HasDataType, new StandardGraphPropertyVariable(graph, variable, null, literal, L0.HasDataType), Bindings.DATATYPE); + if(literalDatatype != null) return literalDatatype; } if(property != null) { - String requiredValueType = graph.getPossibleRelatedValue(property, L0.RequiresValueType, Bindings.STRING); + String requiredValueType = info != null + ? info.requiredValueType + : graph.getPossibleRelatedValue(property, L0.RequiresValueType, Bindings.STRING); if(requiredValueType != null) { Datatype datatype = getPossibleDatatypeForValueType(requiredValueType); if(datatype != null) return datatype; @@ -455,7 +457,6 @@ public class Layer0Utils { } return null; - } private static Datatype getPossibleDatatypeForValueType(String requiredValueType) throws DatabaseException { @@ -468,11 +469,9 @@ public class Layer0Utils { arrayType = requiredValueType.substring(1, requiredValueType.length()-1); } - if(arrayType != null) { - Datatype arrayDataType = getArrayDataTypeForType(arrayType); - if(arrayDataType != null) - return arrayDataType; - } + Datatype arrayDataType = getDatatypeForType(arrayType != null ? arrayType : requiredValueType, arrayType != null); + if(arrayDataType != null) + return arrayDataType; Datatype dt = Datatypes.getDatatype(requiredValueType); if(dt != null) return dt; @@ -483,18 +482,19 @@ public class Layer0Utils { return null; } - } - private static Datatype getArrayDataTypeForType(String type) { - if("Double".equals(type)) return Datatypes.DOUBLE_ARRAY; - else if("String".equals(type)) return Datatypes.STRING_ARRAY; - else if("Integer".equals(type)) return Datatypes.INTEGER_ARRAY; - else if("Long".equals(type)) return Datatypes.LONG_ARRAY; - else if("Float".equals(type)) return Datatypes.FLOAT_ARRAY; - else if("Byte".equals(type)) return Datatypes.BYTE_ARRAY; - else if("Boolean".equals(type)) return Datatypes.BOOLEAN_ARRAY; - else if("Variant".equals(type)) return Datatypes.VARIANT_ARRAY; + private static Datatype getDatatypeForType(String type, boolean isArray) { + switch (type) { + case "Double": return isArray ? Datatypes.DOUBLE_ARRAY : Datatypes.DOUBLE; + case "String": return isArray ? Datatypes.STRING_ARRAY : Datatypes.STRING; + case "Integer": return isArray ? Datatypes.INTEGER_ARRAY : Datatypes.INTEGER; + case "Long": return isArray ? Datatypes.LONG_ARRAY : Datatypes.LONG; + case "Float": return isArray ? Datatypes.FLOAT_ARRAY : Datatypes.FLOAT; + case "Byte": return isArray ? Datatypes.BYTE_ARRAY : Datatypes.BYTE; + case "Boolean": return isArray ? Datatypes.BOOLEAN_ARRAY : Datatypes.BOOLEAN; + case "Variant": return isArray ? Datatypes.VARIANT_ARRAY : Datatypes.VARIANT; + } return null; } @@ -507,8 +507,6 @@ public class Layer0Utils { } Datatype type = getDatatype(graph, variable); - if (type == null) - throw new DatabaseException("No datatype available for variable " + variable.getURI(graph)); return Bindings.getBinding(type); } @@ -516,12 +514,13 @@ public class Layer0Utils { public static Binding getPossibleDefaultBinding(ReadGraph graph, Variable variable) throws DatabaseException { Resource property = variable.getPossiblePredicateResource(graph); + PropertyInfo info = null; if(property != null) { - PropertyInfo info = graph.syncRequest(new PropertyInfoRequest(property), TransientCacheAsyncListener.instance()); + info = graph.syncRequest(new PropertyInfoRequest(property), TransientCacheAsyncListener.instance()); if(info.defaultBinding != null) return info.defaultBinding; } - Datatype type = getPossibleDatatype(graph, variable); + Datatype type = getPossibleDatatype(graph, variable, info, false); if (type == null) return null; return Bindings.getBinding(type); @@ -553,7 +552,7 @@ public class Layer0Utils { if(literal == null) return ""; - Datatype literalDatatype = graph.getPossibleRelatedValue2(literal, L0.HasDataType, new StandardGraphPropertyVariable(graph, variable, null, literal, L0.HasDataType), datatype_binging); + Datatype literalDatatype = graph.getPossibleRelatedValue2(literal, L0.HasDataType, new StandardGraphPropertyVariable(graph, variable, null, literal, L0.HasDataType), Bindings.DATATYPE); if(literalDatatype != null) { String unit = getPossibleUnit(literalDatatype); if(unit != null) return unit; @@ -562,7 +561,7 @@ public class Layer0Utils { Resource property = variable.getPossiblePredicateResource(graph); if(property != null) { - Datatype requiredDataType = graph.getPossibleRelatedValue(property, L0X.RequiresDataType, datatype_binging); + Datatype requiredDataType = graph.getPossibleRelatedValue(property, L0X.RequiresDataType, Bindings.DATATYPE); if(requiredDataType != null) { String unit = getPossibleUnit(requiredDataType); if(unit != null) return unit;