public AdapterType adaptTo()

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);
    }