Example usage for org.springframework.data.rest.webmvc.json JacksonMetadata isReadOnly

List of usage examples for org.springframework.data.rest.webmvc.json JacksonMetadata isReadOnly

Introduction

In this page you can find the example usage for org.springframework.data.rest.webmvc.json JacksonMetadata isReadOnly.

Prototype

public boolean isReadOnly(PersistentProperty<?> property) 

Source Link

Document

Returns whether the given PersistentProperty is considered read-only by Jackson.

Usage

From source file:org.springframework.data.rest.webmvc.json.JacksonMetadataUnitTests.java

/**
 * @see DATAREST-644//from w  ww .ja v  a2 s . c  om
 */
@Test
public void reportsConstructorArgumentAsJacksonWritable() {

    JacksonMetadata metadata = new JacksonMetadata(mapper, Value.class);

    PersistentEntity<?, ?> entity = context.getPersistentEntity(Value.class);
    PersistentProperty<?> property = entity.getPersistentProperty("value");

    assertThat(metadata.isReadOnly(property), is(false));
}

From source file:org.springframework.data.rest.webmvc.json.JacksonMetadataUnitTests.java

/**
 * @see DATAREST-644//www.j a va  2 s  . co m
 */
@Test
public void detectsReadOnlyProperty() {

    JacksonMetadata metadata = new JacksonMetadata(mapper, User.class);

    PersistentEntity<?, ?> entity = context.getPersistentEntity(User.class);
    PersistentProperty<?> property = entity.getPersistentProperty("username");

    assertThat(metadata.isExported(property), is(true));
    assertThat(metadata.isReadOnly(property), is(true));
}

From source file:org.springframework.data.rest.webmvc.json.PersistentEntityToJsonSchemaConverter.java

private List<AbstractJsonSchemaProperty<?>> getPropertiesFor(Class<?> type, final ResourceMetadata metadata,
        final Definitions definitions) {

    final PersistentEntity<?, ?> entity = entities.getPersistentEntity(type);
    final JacksonMetadata jackson = new JacksonMetadata(objectMapper, type);

    if (entity == null) {
        return Collections.<AbstractJsonSchemaProperty<?>>emptyList();
    }/*w w w . j a v a2  s .  c  om*/

    JsonSchemaPropertyRegistrar registrar = new JsonSchemaPropertyRegistrar(jackson);

    for (BeanPropertyDefinition definition : jackson) {

        PersistentProperty<?> persistentProperty = entity.getPersistentProperty(definition.getInternalName());

        // First pass, early drops to avoid unnecessary calculation
        if (persistentProperty != null) {

            if (persistentProperty.isIdProperty() && !configuration.isIdExposedFor(type)) {
                continue;
            }

            if (persistentProperty.isVersionProperty()) {
                continue;
            }

            if (!definition.couldSerialize()) {
                continue;
            }
        }

        AnnotatedMember primaryMember = definition.getPrimaryMember();

        if (primaryMember == null) {
            continue;
        }

        TypeInformation<?> propertyType = persistentProperty == null
                ? ClassTypeInformation.from(primaryMember.getRawType())
                : persistentProperty.getTypeInformation();
        TypeInformation<?> actualPropertyType = propertyType.getActualType();
        Class<?> rawPropertyType = propertyType.getType();

        JsonSchemaFormat format = configuration.getMetadataConfiguration().getSchemaFormatFor(rawPropertyType);
        ResourceDescription description = persistentProperty == null
                ? jackson.getFallbackDescription(metadata, definition)
                : getDescriptionFor(persistentProperty, metadata);
        JsonSchemaProperty property = getSchemaProperty(definition, propertyType, description);

        boolean isSyntheticProperty = persistentProperty == null;
        boolean isNotWritable = !isSyntheticProperty && !persistentProperty.isWritable();
        boolean isJacksonReadOnly = !isSyntheticProperty && jackson.isReadOnly(persistentProperty);

        if (isSyntheticProperty || isNotWritable || isJacksonReadOnly) {
            property = property.withReadOnly();
        }

        if (format != null) {

            // Types with explicitly registered format -> value object with format
            registrar.register(property.withFormat(format), actualPropertyType);
            continue;
        }

        Pattern pattern = configuration.getMetadataConfiguration().getPatternFor(rawPropertyType);

        if (pattern != null) {
            registrar.register(property.withPattern(pattern), actualPropertyType);
            continue;
        }

        if (jackson.isValueType()) {
            registrar.register(property.with(STRING_TYPE_INFORMATION), actualPropertyType);
            continue;
        }

        if (persistentProperty == null) {
            registrar.register(property, actualPropertyType);
            continue;
        }

        if (configuration.isLookupType(persistentProperty.getActualType())) {
            registrar.register(property.with(propertyType), actualPropertyType);
        } else if (associations.isLinkableAssociation(persistentProperty)) {
            registrar.register(property.asAssociation(), null);
        } else {

            if (persistentProperty.isEntity()) {

                if (!definitions.hasDefinitionFor(propertyType)) {
                    definitions.addDefinition(propertyType,
                            new Item(propertyType, getNestedPropertiesFor(persistentProperty, definitions)));
                }

                registrar.register(property.with(propertyType, Definitions.getReference(propertyType)),
                        actualPropertyType);

            } else {

                registrar.register(property.with(propertyType), actualPropertyType);
            }
        }
    }

    return registrar.getProperties();
}