Search in sources :

Example 36 with MemberHoldingTypeDetails

use of org.springframework.roo.classpath.details.MemberHoldingTypeDetails in project spring-roo by spring-projects.

the class WebMvcConfigurationMetadataProviderImpl method getLocalMidToRequest.

@Override
protected String getLocalMidToRequest(final ItdTypeDetails itdTypeDetails) {
    // Determine the governor for this ITD, and whether any metadata is even
    // hoping to hear about changes to that JavaType and its ITDs
    final JavaType governor = itdTypeDetails.getName();
    final String localMid = domainTypeToServiceMidMap.get(governor);
    if (localMid != null) {
        return localMid;
    }
    final MemberHoldingTypeDetails memberHoldingTypeDetails = getTypeLocationService().getTypeDetails(governor);
    if (memberHoldingTypeDetails != null) {
        for (final JavaType type : memberHoldingTypeDetails.getLayerEntities()) {
            final String localMidType = domainTypeToServiceMidMap.get(type);
            if (localMidType != null) {
                return localMidType;
            }
        }
    }
    return null;
}
Also used : JavaType(org.springframework.roo.model.JavaType) RooJavaType(org.springframework.roo.model.RooJavaType) MemberHoldingTypeDetails(org.springframework.roo.classpath.details.MemberHoldingTypeDetails)

Example 37 with MemberHoldingTypeDetails

use of org.springframework.roo.classpath.details.MemberHoldingTypeDetails in project spring-roo by spring-projects.

the class MemberDetailsBuilder method doModification.

private void doModification(final MemberHoldingTypeDetails type, final CustomData customData) {
    final MemberHoldingTypeDetails memberHoldingTypeDetails = memberHoldingTypeDetailsMap.get(type.getDeclaredByMetadataId());
    if (memberHoldingTypeDetails != null) {
        if (memberHoldingTypeDetails.getName().equals(type.getName()) && !memberHoldingTypeDetails.getCustomData().keySet().containsAll(customData.keySet())) {
            final TypeDetailsBuilder typeDetailsBuilder = getTypeDetailsBuilder(memberHoldingTypeDetails);
            typeDetailsBuilder.getCustomData().append(customData);
            changed = true;
        }
    }
}
Also used : MemberHoldingTypeDetails(org.springframework.roo.classpath.details.MemberHoldingTypeDetails) ClassOrInterfaceTypeDetailsBuilder(org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetailsBuilder) AbstractMemberHoldingTypeDetailsBuilder(org.springframework.roo.classpath.details.AbstractMemberHoldingTypeDetailsBuilder) ItdTypeDetailsBuilder(org.springframework.roo.classpath.details.ItdTypeDetailsBuilder)

Example 38 with MemberHoldingTypeDetails

use of org.springframework.roo.classpath.details.MemberHoldingTypeDetails in project spring-roo by spring-projects.

the class MemberDetailsScannerImpl method getMemberDetails.

public final MemberDetails getMemberDetails(final String requestingClass, ClassOrInterfaceTypeDetails cid) {
    if (metadataService == null) {
        metadataService = getMetadataService();
    }
    if (providers.isEmpty()) {
        bindProviders();
    }
    if (decorators.isEmpty()) {
        bindDecorators();
    }
    if (cid == null) {
        return null;
    }
    synchronized (lock) {
        // Create a list of discovered members
        final List<MemberHoldingTypeDetails> memberHoldingTypeDetails = new ArrayList<MemberHoldingTypeDetails>();
        // Build a List representing the class hierarchy, where the first
        // element is the absolute superclass
        final List<ClassOrInterfaceTypeDetails> cidHierarchy = new ArrayList<ClassOrInterfaceTypeDetails>();
        while (cid != null) {
            // Note to the top of the list
            cidHierarchy.add(0, cid);
            cid = cid.getSuperclass();
        }
        // Now we add this governor, plus all of its superclasses
        for (final ClassOrInterfaceTypeDetails currentClass : cidHierarchy) {
            memberHoldingTypeDetails.add(currentClass);
            // thus MemberHoldingTypeDetails information
            for (final MetadataProvider mp : providers) {
                // Skip non-ITD providers
                if (!(mp instanceof ItdMetadataProvider)) {
                    continue;
                }
                // Skip myself
                if (mp.getClass().getName().equals(requestingClass)) {
                    continue;
                }
                // Determine the key the ITD provider uses for this
                // particular type
                final String key = ((ItdMetadataProvider) mp).getIdForPhysicalJavaType(currentClass.getDeclaredByMetadataId());
                Validate.isTrue(MetadataIdentificationUtils.isIdentifyingInstance(key), "ITD metadata provider '%s' returned an illegal key ('%s')", mp, key);
                // Get the metadata and ensure we have ITD type details
                // available
                final MetadataItem metadataItem = metadataService.get(key);
                if (metadataItem == null || !metadataItem.isValid()) {
                    continue;
                }
                Validate.isInstanceOf(ItdTypeDetailsProvidingMetadataItem.class, metadataItem, "ITD metadata provider '%s' failed to return the correct metadata type", mp);
                final ItdTypeDetailsProvidingMetadataItem itdTypeDetailsMd = (ItdTypeDetailsProvidingMetadataItem) metadataItem;
                if (itdTypeDetailsMd.getMemberHoldingTypeDetails() == null) {
                    continue;
                }
                // Capture the member details
                memberHoldingTypeDetails.add(itdTypeDetailsMd.getMemberHoldingTypeDetails());
            }
        }
        // Turn out list of discovered members into a result
        MemberDetails result = new MemberDetailsImpl(memberHoldingTypeDetails);
        // Loop until such time as we complete a full loop where no changes
        // are made to the result
        boolean additionalLoopRequired = true;
        while (additionalLoopRequired) {
            additionalLoopRequired = false;
            for (final MemberDetailsDecorator decorator : decorators) {
                final MemberDetails newResult = decorator.decorate(requestingClass, result);
                Validate.isTrue(newResult != null, "Decorator '%s' returned an illegal result", decorator.getClass().getName());
                if (newResult != null && !newResult.equals(result)) {
                    additionalLoopRequired = true;
                }
                result = newResult;
            }
        }
        return result;
    }
}
Also used : ItdTypeDetailsProvidingMetadataItem(org.springframework.roo.classpath.itd.ItdTypeDetailsProvidingMetadataItem) ArrayList(java.util.ArrayList) ItdMetadataProvider(org.springframework.roo.classpath.itd.ItdMetadataProvider) MetadataProvider(org.springframework.roo.metadata.MetadataProvider) MemberHoldingTypeDetails(org.springframework.roo.classpath.details.MemberHoldingTypeDetails) ItdMetadataProvider(org.springframework.roo.classpath.itd.ItdMetadataProvider) ClassOrInterfaceTypeDetails(org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetails) MetadataItem(org.springframework.roo.metadata.MetadataItem) ItdTypeDetailsProvidingMetadataItem(org.springframework.roo.classpath.itd.ItdTypeDetailsProvidingMetadataItem)

Aggregations

MemberHoldingTypeDetails (org.springframework.roo.classpath.details.MemberHoldingTypeDetails)38 JavaType (org.springframework.roo.model.JavaType)29 RooJavaType (org.springframework.roo.model.RooJavaType)26 ArrayList (java.util.ArrayList)7 ClassOrInterfaceTypeDetails (org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetails)7 FieldMetadata (org.springframework.roo.classpath.details.FieldMetadata)7 AnnotatedJavaType (org.springframework.roo.classpath.details.annotations.AnnotatedJavaType)7 JpaJavaType (org.springframework.roo.model.JpaJavaType)7 ClassOrInterfaceTypeDetailsBuilder (org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetailsBuilder)6 MethodMetadata (org.springframework.roo.classpath.details.MethodMetadata)6 AbstractMemberHoldingTypeDetailsBuilder (org.springframework.roo.classpath.details.AbstractMemberHoldingTypeDetailsBuilder)4 ItdTypeDetailsBuilder (org.springframework.roo.classpath.details.ItdTypeDetailsBuilder)4 MemberDetails (org.springframework.roo.classpath.scanner.MemberDetails)4 JavaSymbolName (org.springframework.roo.model.JavaSymbolName)4 ConstructorMetadata (org.springframework.roo.classpath.details.ConstructorMetadata)3 ImportMetadata (org.springframework.roo.classpath.details.ImportMetadata)2 AnnotationMetadata (org.springframework.roo.classpath.details.annotations.AnnotationMetadata)2 Path (org.springframework.roo.project.Path)2 File (java.io.File)1 HashSet (java.util.HashSet)1