Package org.springframework.roo.classpath.details

Source Code of org.springframework.roo.classpath.details.AbstractIdentifiableAnnotatedJavaStructureProvider

package org.springframework.roo.classpath.details;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang3.Validate;
import org.springframework.roo.classpath.details.annotations.AnnotationMetadata;
import org.springframework.roo.model.CustomData;
import org.springframework.roo.model.JavaType;
import org.springframework.roo.support.util.CollectionUtils;

/**
* Abstract class for {@link IdentifiableAnnotatedJavaStructure} subclasses.
*
* @author Ben Alex
* @since 1.1
*/
public abstract class AbstractIdentifiableAnnotatedJavaStructureProvider extends
        AbstractIdentifiableJavaStructureProvider implements
        IdentifiableAnnotatedJavaStructure {

    private final List<AnnotationMetadata> annotations = new ArrayList<AnnotationMetadata>();

    /**
     * Constructor
     *
     * @param customData
     * @param declaredByMetadataId
     * @param modifier
     * @param annotations can be <code>null</code> for none
     */
    protected AbstractIdentifiableAnnotatedJavaStructureProvider(
            final CustomData customData, final String declaredByMetadataId,
            final int modifier, final Collection<AnnotationMetadata> annotations) {
        super(customData, declaredByMetadataId, modifier);
        CollectionUtils.populate(this.annotations, annotations);
    }

    public AnnotationMetadata getAnnotation(final JavaType type) {
        Validate.notNull(type, "Annotation type to locate required");
        for (final AnnotationMetadata md : getAnnotations()) {
            if (md.getAnnotationType().equals(type)) {
                return md;
            }
        }
        return null;
    }

    public List<AnnotationMetadata> getAnnotations() {
        return Collections.unmodifiableList(annotations);
    }

    public AnnotationMetadata getTypeAnnotation(final JavaType annotationType) {
        Validate.notNull(annotationType, "Annotation type required");
        IdentifiableAnnotatedJavaStructure current = this;
        while (current != null) {
            final AnnotationMetadata result = current
                    .getAnnotation(annotationType);
            if (result != null) {
                return result;
            }
            if (current instanceof ClassOrInterfaceTypeDetails) {
                current = ((ClassOrInterfaceTypeDetails) current)
                        .getSuperclass();
            }
            else {
                current = null;
            }
        }
        return null;
    }
}
TOP

Related Classes of org.springframework.roo.classpath.details.AbstractIdentifiableAnnotatedJavaStructureProvider

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.