in src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java [81:203]
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
// the property itself
if (type == Property.class || type == Item.class) {
return (AdapterType) getProperty();
}
// the property value
try {
if (type == String.class) {
return (AdapterType) getProperty().getString();
} else if (type == Boolean.class) {
return (AdapterType) Boolean.valueOf(getProperty().getBoolean());
} else if (type == Long.class) {
return (AdapterType) Long.valueOf(getProperty().getLong());
} else if (type == Double.class) {
return (AdapterType) new Double(getProperty().getDouble());
} else if (type == BigDecimal.class) {
return (AdapterType) getProperty().getDecimal();
} else if (type == Calendar.class) {
return (AdapterType) getProperty().getDate();
} else if (type == Value.class) {
return (AdapterType) getProperty().getValue();
} else if (type == Node.class
&& (getProperty().getType() == PropertyType.REFERENCE ||
getProperty().getType() == PropertyType.WEAKREFERENCE)) {
return (AdapterType) getProperty().getNode();
} else if (type == InputStream.class) {
return (AdapterType) getInputStream();
} else if (type == String[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final String[] result = new String[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getString();
}
return (AdapterType) result;
}
return (AdapterType) new String[]{getProperty().getString()};
} else if (type == Boolean[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final Boolean[] result = new Boolean[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getBoolean();
}
return (AdapterType) result;
}
return (AdapterType) new Boolean[]{getProperty().getBoolean()};
} else if (type == Long[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final Long[] result = new Long[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getLong();
}
return (AdapterType) result;
}
return (AdapterType) new Long[]{getProperty().getLong()};
} else if (type == Double[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final Double[] result = new Double[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getDouble();
}
return (AdapterType) result;
}
return (AdapterType) new Double[]{getProperty().getDouble()};
} else if (type == BigDecimal[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final BigDecimal[] result = new BigDecimal[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getDecimal();
}
return (AdapterType) result;
}
return (AdapterType) new BigDecimal[]{getProperty().getDecimal()};
} else if (type == Calendar[].class) {
if (getProperty().getDefinition().isMultiple()) {
final Value[] values = getProperty().getValues();
final Calendar[] result = new Calendar[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].getDate();
}
return (AdapterType) result;
}
return (AdapterType) new Calendar[]{getProperty().getDate()};
} else if (type == Value[].class) {
if (getProperty().getDefinition().isMultiple()) {
return (AdapterType) getProperty().getValues();
}
return (AdapterType) new Value[]{getProperty().getValue()};
}
} catch (ValueFormatException vfe) {
LOGGER.debug("adaptTo: Problem accessing the property value of {}: {}", getPath(), vfe.getMessage());
LOGGER.debug("adaptTo: Cause", vfe);
} catch (RepositoryException re) {
LOGGER.debug("adaptTo: Problem accessing the property " + getPath(), re);
}
// try to use adapter factories
return super.adaptTo(type);
}