@SuppressWarnings("unchecked") private <T> T getValue(RecordId id, Type<T> type) { if (type == BINARY) { return (T) reader.readBlob(id); // load binaries lazily } String value = reader.readString(id); if (type == STRING || type == URI || type == DATE || type == NAME || type == PATH || type == REFERENCE || type == WEAKREFERENCE) { return (T) value; // no conversion needed for string types } Type<?> base = getType(); if (base.isArray()) { base = base.getBaseType(); } Converter converter = Conversions.convert(value, base); if (type == BOOLEAN) { return (T) Boolean.valueOf(converter.toBoolean()); } else if (type == DECIMAL) { return (T) converter.toDecimal(); } else if (type == DOUBLE) { return (T) Double.valueOf(converter.toDouble()); } else if (type == LONG) { return (T) Long.valueOf(converter.toLong()); } else { throw new UnsupportedOperationException( "Unknown type: " + type); } }
@NotNull @Override public Calendar perform() throws RepositoryException { PropertyDelegate dlg = getPropertyOrThrow(JcrConstants.JCR_CREATED); return Conversions.convert(dlg.getDate()).toCalendar(); } });
return newValue(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) { return createValue(Conversions.convert(value).toBoolean()); case PropertyType.NAME: String oakName = namePathMapper.getOakNameOrNull(value); return newValue(GenericPropertyState.uriProperty("", value), namePathMapper); case PropertyType.DECIMAL: return createValue(Conversions.convert(value).toDecimal()); default: throw new ValueFormatException("Invalid type: " + type);
return newValue(BinaryPropertyState.binaryProperty("", value), namePathMapper, getBlobAccessProvider()); 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) { return createValue(Conversions.convert(value).toBoolean()); case PropertyType.NAME: String oakName = namePathMapper.getOakNameOrNull(value); return newValue(GenericPropertyState.uriProperty("", value), namePathMapper, getBlobAccessProvider()); case PropertyType.DECIMAL: return createValue(Conversions.convert(value).toDecimal()); default: throw new ValueFormatException("Invalid type: " + type);
String number = reader.getToken(); type = PropertyType.LONG; values.add(Conversions.convert(number).toLong()); } else if (reader.matches(JsopReader.TRUE)) { type = PropertyType.BOOLEAN; throw new UnsupportedOperationException(); } else if (type == PropertyType.DOUBLE) { values.add(Conversions.convert(value).toDouble()); } else if (type == PropertyType.DECIMAL) { values.add(Conversions.convert(value).toDecimal()); } else { values.add(value);
/** * @see javax.jcr.Value#getDate() */ @Override public Calendar getDate() throws RepositoryException { try { switch (getType()) { case PropertyType.STRING: case PropertyType.BINARY: case PropertyType.DATE: String value = getValue(Type.DATE, index); return Conversions.convert(value).toCalendar(); case PropertyType.LONG: case PropertyType.DOUBLE: case PropertyType.DECIMAL: return Conversions.convert(getValue(Type.LONG, index)).toCalendar(); default: throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType())); } } catch (IllegalArgumentException e) { throw new ValueFormatException("Error converting value to date", e); } }
/** * @see javax.jcr.Value#getDate() */ @Override public Calendar getDate() throws RepositoryException { try { switch (getType()) { case PropertyType.STRING: case PropertyType.BINARY: case PropertyType.DATE: String value = getValue(Type.DATE, index); return Conversions.convert(value).toCalendar(); case PropertyType.LONG: case PropertyType.DOUBLE: case PropertyType.DECIMAL: return Conversions.convert(getValue(Type.LONG, index)).toCalendar(); default: throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType())); } } catch (IllegalArgumentException e) { throw new ValueFormatException("Error converting value to date", e); } }
/** * Create a {@code PropertyState} from a string. * @param name The name of the property state * @param value The value of the property state * @param type The type of the property state * @return The new property state */ @NotNull public static PropertyState createProperty(String name, String value, int type) { switch (type) { case PropertyType.STRING: return StringPropertyState.stringProperty(name, value); case PropertyType.BINARY: return BinaryPropertyState.binaryProperty(name, Conversions.convert(value).toBinary()); case PropertyType.LONG: return LongPropertyState.createLongProperty(name, Conversions.convert(value).toLong()); case PropertyType.DOUBLE: return DoublePropertyState.doubleProperty(name, Conversions.convert(value).toDouble()); case PropertyType.BOOLEAN: return BooleanPropertyState.booleanProperty(name, Conversions.convert(value).toBoolean()); case PropertyType.DECIMAL: return DecimalPropertyState.decimalProperty(name, Conversions.convert(value).toDecimal()); default: return new GenericPropertyState(name, value, Type.fromTag(type, false)); } }
/** * Create a {@code PropertyState} from a string. * @param name The name of the property state * @param value The value of the property state * @param type The type of the property state * @return The new property state */ @Nonnull public static PropertyState createProperty(String name, String value, int type) { switch (type) { case PropertyType.STRING: return StringPropertyState.stringProperty(name, value); case PropertyType.BINARY: return BinaryPropertyState.binaryProperty(name, Conversions.convert(value).toBinary()); case PropertyType.LONG: return LongPropertyState.createLongProperty(name, Conversions.convert(value).toLong()); case PropertyType.DOUBLE: return DoublePropertyState.doubleProperty(name, Conversions.convert(value).toDouble()); case PropertyType.BOOLEAN: return BooleanPropertyState.booleanProperty(name, Conversions.convert(value).toBoolean()); case PropertyType.DECIMAL: return DecimalPropertyState.decimalProperty(name, Conversions.convert(value).toDecimal()); default: return new GenericPropertyState(name, value, Type.fromTag(type, false)); } }
@SuppressWarnings("unchecked") private <S> S convertTo(Type<S> type, int index) { switch (type.tag()) { case PropertyType.STRING: return (S) getConverter(values.get(index)).toString(); case PropertyType.BINARY: return (S) getConverter(values.get(index)).toBinary(); case PropertyType.LONG: return (S) (Long) getConverter(values.get(index)).toLong(); case PropertyType.DOUBLE: return (S) (Double) getConverter(values.get(index)).toDouble(); case PropertyType.DATE: return (S) getConverter(values.get(index)).toString(); case PropertyType.BOOLEAN: return (S) (Boolean) getConverter(values.get(index)).toBoolean(); case PropertyType.NAME: return (S) getConverter(values.get(index)).toString(); case PropertyType.PATH: return (S) getConverter(values.get(index)).toString(); case PropertyType.REFERENCE: return (S) getConverter(values.get(index)).toString(); case PropertyType.WEAKREFERENCE: return (S) getConverter(values.get(index)).toString(); case PropertyType.URI: return (S) getConverter(values.get(index)).toString(); case PropertyType.DECIMAL: return (S) getConverter(values.get(index)).toDecimal(); default: throw new IllegalArgumentException("Unknown type:" + type); } }
@SuppressWarnings("unchecked") private <S> S convertTo(Type<S> type, int index) { switch (type.tag()) { case PropertyType.STRING: return (S) getConverter(values.get(index)).toString(); case PropertyType.BINARY: return (S) getConverter(values.get(index)).toBinary(); case PropertyType.LONG: return (S) (Long) getConverter(values.get(index)).toLong(); case PropertyType.DOUBLE: return (S) (Double) getConverter(values.get(index)).toDouble(); case PropertyType.DATE: return (S) getConverter(values.get(index)).toString(); case PropertyType.BOOLEAN: return (S) (Boolean) getConverter(values.get(index)).toBoolean(); case PropertyType.NAME: return (S) getConverter(values.get(index)).toString(); case PropertyType.PATH: return (S) getConverter(values.get(index)).toString(); case PropertyType.REFERENCE: return (S) getConverter(values.get(index)).toString(); case PropertyType.WEAKREFERENCE: return (S) getConverter(values.get(index)).toString(); case PropertyType.URI: return (S) getConverter(values.get(index)).toString(); case PropertyType.DECIMAL: return (S) getConverter(values.get(index)).toDecimal(); default: throw new IllegalArgumentException("Unknown type:" + type); } }
@SuppressWarnings("unchecked") private <S> S convertTo(Type<S> type) { switch (type.tag()) { case PropertyType.STRING: return (S) getConverter().toString(); case PropertyType.BINARY: return (S) getConverter().toBinary(); case PropertyType.LONG: return (S) (Long) getConverter().toLong(); case PropertyType.DOUBLE: return (S) (Double) getConverter().toDouble(); case PropertyType.DATE: return (S) getConverter().toDate(); case PropertyType.BOOLEAN: return (S) (Boolean) getConverter().toBoolean(); case PropertyType.NAME: return (S) getConverter().toString(); case PropertyType.PATH: return (S) getConverter().toString(); case PropertyType.REFERENCE: return (S) getConverter().toString(); case PropertyType.WEAKREFERENCE: return (S) getConverter().toString(); case PropertyType.URI: return (S) getConverter().toString(); case PropertyType.DECIMAL: return (S) getConverter().toDecimal(); default: throw new IllegalArgumentException("Unknown type:" + type); } }
@SuppressWarnings("unchecked") private <S> S convertTo(Type<S> type) { switch (type.tag()) { case PropertyType.STRING: return (S) getConverter().toString(); case PropertyType.BINARY: return (S) getConverter().toBinary(); case PropertyType.LONG: return (S) (Long) getConverter().toLong(); case PropertyType.DOUBLE: return (S) (Double) getConverter().toDouble(); case PropertyType.DATE: return (S) getConverter().toDate(); case PropertyType.BOOLEAN: return (S) (Boolean) getConverter().toBoolean(); case PropertyType.NAME: return (S) getConverter().toString(); case PropertyType.PATH: return (S) getConverter().toString(); case PropertyType.REFERENCE: return (S) getConverter().toString(); case PropertyType.WEAKREFERENCE: return (S) getConverter().toString(); case PropertyType.URI: return (S) getConverter().toString(); case PropertyType.DECIMAL: return (S) getConverter().toDecimal(); default: throw new IllegalArgumentException("Unknown type:" + type); } }
/** * Convert to decimal. This default implementation is based on {@code new BigDecimal(String)}. * @return decimal representation of the converted value * @throws NumberFormatException */ public BigDecimal toDecimal() { return new BigDecimal(toString()); } }