package org.springframework.roo.addon.json; import static org.springframework.roo.model.RooJavaType.ROO_IDENTIFIER; import static org.springframework.roo.model.RooJavaType.ROO_JSON; 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.plural.PluralMetadata; import org.springframework.roo.classpath.PhysicalTypeIdentifier; import org.springframework.roo.classpath.PhysicalTypeMetadata; 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 JsonMetadata}. * * @author Stefan Schmidt * @since 1.1 */ @Component(immediate = true) @Service public class JsonMetadataProvider extends AbstractItdMetadataProvider { protected void activate(final ComponentContext context) { metadataDependencyRegistry.registerDependency( PhysicalTypeIdentifier.getMetadataIdentiferType(), getProvidesType()); addMetadataTriggers(ROO_JSON, ROO_IDENTIFIER); } @Override protected String createLocalIdentifier(final JavaType javaType, final LogicalPath path) { return JsonMetadata.createIdentifier(javaType, path); } protected void deactivate(final ComponentContext context) { metadataDependencyRegistry.deregisterDependency( PhysicalTypeIdentifier.getMetadataIdentiferType(), getProvidesType()); removeMetadataTriggers(ROO_JSON, ROO_IDENTIFIER); } @Override protected String getGovernorPhysicalTypeIdentifier( final String metadataIdentificationString) { final JavaType javaType = JsonMetadata .getJavaType(metadataIdentificationString); final LogicalPath path = JsonMetadata .getPath(metadataIdentificationString); final String physicalTypeIdentifier = PhysicalTypeIdentifier .createIdentifier(javaType, path); return physicalTypeIdentifier; } public String getItdUniquenessFilenameSuffix() { return "Json"; } @Override protected ItdTypeDetailsProvidingMetadataItem getMetadata( final String metadataIdentificationString, final JavaType aspectName, final PhysicalTypeMetadata governorPhysicalTypeMetadata, final String itdFilename) { // Acquire bean info (we need getters details, specifically) final JavaType javaType = JsonMetadata .getJavaType(metadataIdentificationString); final LogicalPath path = JsonMetadata .getPath(metadataIdentificationString); // We need to parse the annotation, if it is not present we will simply // get the default annotation values final JsonAnnotationValues annotationValues = new JsonAnnotationValues( governorPhysicalTypeMetadata); String plural = javaType.getSimpleTypeName() + "s"; final PluralMetadata pluralMetadata = (PluralMetadata) metadataService .get(PluralMetadata.createIdentifier(javaType, path)); if (pluralMetadata != null) { plural = pluralMetadata.getPlural(); } return new JsonMetadata(metadataIdentificationString, aspectName, governorPhysicalTypeMetadata, plural, annotationValues); } public String getProvidesType() { return JsonMetadata.getMetadataIdentiferType(); } }