}
@Override
public Value createValue(String value, int type) throws ValueFormatException {
if (value == null) {
throw new ValueFormatException("null");
}
try {
switch (type) {
case PropertyType.STRING:
return createValue(value);
case PropertyType.BINARY:
return new ValueImpl(BinaryPropertyState.binaryProperty("", value), namePathMapper);
case PropertyType.LONG:
return createValue(Conversions.convert(value).toLong());
case PropertyType.DOUBLE:
return createValue(Conversions.convert(value).toDouble());
case PropertyType.DATE:
if (ISO8601.parse(value) == null) {
throw new ValueFormatException("Invalid date " + value);
}
return new ValueImpl(GenericPropertyState.dateProperty("", value), namePathMapper);
case PropertyType.BOOLEAN:
return createValue(Conversions.convert(value).toBoolean());
case PropertyType.NAME:
String oakName = namePathMapper.getOakNameOrNull(value);
if (oakName == null || !JcrNameParser.validate(oakName)) {
throw new ValueFormatException("Invalid name: " + value);
}
return new ValueImpl(GenericPropertyState.nameProperty("", oakName), namePathMapper);
case PropertyType.PATH:
String oakValue = value;
if (value.startsWith("[") && value.endsWith("]")) {
// identifier path; do no change
} else {
oakValue = namePathMapper.getOakPath(value);
if (oakValue == null || !JcrPathParser.validate(oakValue)) {
throw new ValueFormatException("Invalid path: " + value);
}
}
return new ValueImpl(GenericPropertyState.pathProperty("", oakValue), namePathMapper);
case PropertyType.REFERENCE:
if (!IdentifierManager.isValidUUID(value)) {
throw new ValueFormatException("Invalid reference value " + value);
}
return new ValueImpl(GenericPropertyState.referenceProperty("", value), namePathMapper);
case PropertyType.WEAKREFERENCE:
if (!IdentifierManager.isValidUUID(value)) {
throw new ValueFormatException("Invalid weak reference value " + value);
}
return new ValueImpl(GenericPropertyState.weakreferenceProperty("", value), namePathMapper);
case PropertyType.URI:
new URI(value);
return new ValueImpl(GenericPropertyState.uriProperty("", value), namePathMapper);
case PropertyType.DECIMAL:
return createValue(Conversions.convert(value).toDecimal());
default:
throw new ValueFormatException("Invalid type: " + type);
}
} catch (NumberFormatException e) {
throw new ValueFormatException("Invalid value " + value + " for type " + PropertyType.nameFromValue(type), e);
} catch (URISyntaxException e) {
throw new ValueFormatException("Invalid value " + value + " for type " + PropertyType.nameFromValue(type), e);
}
}