Package org.springframework.roo.addon.property.editor

Source Code of org.springframework.roo.addon.property.editor.EditorMetadataProvider

package org.springframework.roo.addon.property.editor;

import static org.springframework.roo.model.RooJavaType.ROO_EDITOR;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.springframework.roo.addon.jpa.activerecord.JpaActiveRecordMetadata;
import org.springframework.roo.classpath.PhysicalTypeIdentifier;
import org.springframework.roo.classpath.PhysicalTypeMetadata;
import org.springframework.roo.classpath.details.MethodMetadata;
import org.springframework.roo.classpath.itd.AbstractItdMetadataProvider;
import org.springframework.roo.classpath.itd.ItdTypeDetailsProvidingMetadataItem;
import org.springframework.roo.model.JavaType;
import org.springframework.roo.project.LogicalPath;

/**
* Provides {@link EditorMetadata}.
*
* @author Stefan Schmidt
* @since 1.0
*/
@Component(immediate = true)
@Service
public class EditorMetadataProvider extends AbstractItdMetadataProvider {

    protected void activate(final ComponentContext context) {
        metadataDependencyRegistry.registerDependency(
                PhysicalTypeIdentifier.getMetadataIdentiferType(),
                getProvidesType());
        addMetadataTrigger(ROO_EDITOR);
    }

    @Override
    protected String createLocalIdentifier(final JavaType javaType,
            final LogicalPath path) {
        return EditorMetadata.createIdentifier(javaType, path);
    }

    protected void deactivate(final ComponentContext context) {
        metadataDependencyRegistry.deregisterDependency(
                PhysicalTypeIdentifier.getMetadataIdentiferType(),
                getProvidesType());
        removeMetadataTrigger(ROO_EDITOR);
    }

    @Override
    protected String getGovernorPhysicalTypeIdentifier(
            final String metadataIdentificationString) {
        final JavaType javaType = EditorMetadata
                .getJavaType(metadataIdentificationString);
        final LogicalPath path = EditorMetadata
                .getPath(metadataIdentificationString);
        return PhysicalTypeIdentifier.createIdentifier(javaType, path);
    }

    public String getItdUniquenessFilenameSuffix() {
        return "Editor";
    }

    @Override
    protected ItdTypeDetailsProvidingMetadataItem getMetadata(
            final String metadataIdentificationString,
            final JavaType aspectName,
            final PhysicalTypeMetadata governorPhysicalTypeMetadata,
            final String itdFilename) {
        // We know governor type details are non-null and can be safely cast

        // We need to parse the annotation, which we expect to be present
        final EditorAnnotationValues annotationValues = new EditorAnnotationValues(
                governorPhysicalTypeMetadata);
        if (!annotationValues.isAnnotationFound()
                || annotationValues.getEditedType() == null) {
            return null;
        }

        // Lookup the form backing object's metadata
        final JavaType javaType = annotationValues.getEditedType();
        if (!typeLocationService.isInProject(javaType)) {
            return null;
        }

        final LogicalPath path = EditorMetadata
                .getPath(metadataIdentificationString);
        final String jpaActiveRecordMetadataKey = JpaActiveRecordMetadata
                .createIdentifier(javaType, path);

        // We need to lookup the metadata we depend on
        final JpaActiveRecordMetadata jpaActiveRecordMetadata = (JpaActiveRecordMetadata) metadataService
                .get(jpaActiveRecordMetadataKey);
        if (jpaActiveRecordMetadata == null
                || !jpaActiveRecordMetadata.isValid()) {
            return null;
        }

        // We need to be informed if our dependent metadata changes
        metadataDependencyRegistry.registerDependency(
                jpaActiveRecordMetadataKey, metadataIdentificationString);

        // We do not need to monitor the parent, as any changes to the java type
        // associated with the parent will trickle down to
        // the governing java type
        final JavaType identifierType = persistenceMemberLocator
                .getIdentifierType(javaType);
        if (identifierType == null) {
            return null;
        }

        final MethodMetadata identifierAccessor = persistenceMemberLocator
                .getIdentifierAccessor(javaType);
        if (identifierAccessor == null) {
            return null;
        }

        final MethodMetadata findMethod = jpaActiveRecordMetadata
                .getFindMethod();

        return new EditorMetadata(metadataIdentificationString, aspectName,
                governorPhysicalTypeMetadata, javaType, identifierType,
                identifierAccessor, findMethod);
    }

    public String getProvidesType() {
        return EditorMetadata.getMetadataIdentiferType();
    }
}
TOP

Related Classes of org.springframework.roo.addon.property.editor.EditorMetadataProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.