@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();
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);
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);
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));
}
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<Datatype>(property, L0X.RequiresDataType, datatype_binging));
+ if(checkPropertyDatatype && property != null) {
+ Datatype requiredDataType = graph.syncRequest(new PossibleRelatedValue<Datatype>(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;
}
return null;
-
}
private static Datatype getPossibleDatatypeForValueType(String requiredValueType) throws DatabaseException {
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;
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;
}
}
Datatype type = getDatatype(graph, variable);
- if (type == null)
- throw new DatabaseException("No datatype available for variable " + variable.getURI(graph));
return Bindings.getBinding(type);
}
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.<PropertyInfo>instance());
+ info = graph.syncRequest(new PropertyInfoRequest(property), TransientCacheAsyncListener.<PropertyInfo>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);
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;
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;