org.apache.openjpa.persistence.meta
Class SourceAnnotationHandler

java.lang.Object
  extended by org.apache.openjpa.persistence.meta.SourceAnnotationHandler
All Implemented Interfaces:
MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>

public class SourceAnnotationHandler
extends Object
implements MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>

Extracts persistent metadata information by analyzing available annotation in *.java source files. Requires JDK6 Annotation Processing environment available.

Since:
2.0.0
Author:
Pinaki Poddar

Nested Class Summary
(package private) static class SourceAnnotationHandler.AccessFilter
          Selects elements which is annotated with @Access annotation and that annotation has the given AccessType value.
(package private) static class SourceAnnotationHandler.AnnotatedFilter
          Selects all annotated element.
(package private) static class SourceAnnotationHandler.GetterFilter
          Selects getter method.
(package private) static class SourceAnnotationHandler.KindFilter
          Selects elements of given kind.
(package private) static class SourceAnnotationHandler.SetterFilter
          Selects setter method.
(package private) static class SourceAnnotationHandler.TransientFilter
          Selects all non-transient element.
 
Field Summary
protected  SourceAnnotationHandler.AnnotatedFilter annotatedFilter
           
protected  SourceAnnotationHandler.AccessFilter fieldAccessFilter
           
protected  SourceAnnotationHandler.KindFilter fieldFilter
           
protected  SourceAnnotationHandler.GetterFilter getterFilter
           
protected static List<Class<? extends Annotation>> mappingAnnos
           
protected  SourceAnnotationHandler.KindFilter methodFilter
           
protected  SourceAnnotationHandler.TransientFilter nonTransientFilter
           
protected  SourceAnnotationHandler.AccessFilter propertyAccessFilter
          Set of Inclusion Filters based on member type, access type or transient annotations.
protected  SourceAnnotationHandler.SetterFilter setterFilter
           
 
Constructor Summary
SourceAnnotationHandler(javax.annotation.processing.ProcessingEnvironment processingEnv, CompileTimeLogger logger)
          Construct with JDK6 annotation processing environment.
 
Method Summary
 javax.lang.model.type.TypeMirror box(javax.lang.model.type.TypeMirror t)
           
 int determineMemberAccess(javax.lang.model.element.Element m)
          Determine the access type of the given member.
 int determineTypeAccess(javax.lang.model.element.TypeElement type)
          Determine the access type of the given type.
static boolean equalsByValue(Enum<?> e, Object v)
          Affirms if the given enum equals the given value.
 String extractFieldName(javax.lang.model.element.ExecutableElement method)
           
(package private)
<T extends javax.lang.model.element.Element>
Set<T>
filter(Collection<T> coll, org.apache.openjpa.persistence.meta.SourceAnnotationHandler.InclusiveFilter... filters)
          Filter the given collection with the conjunction of filters.
static Object getAnnotationValue(javax.lang.model.element.Element decl, Class<? extends Annotation> anno)
          Gets the value of the given annotation, if present, in the given declaration.
static Object getAnnotationValue(javax.lang.model.element.Element e, Class<? extends Annotation> anno, String attr)
          Gets the value of the given attribute of the given annotation, if present, in the given declaration.
(package private)  javax.lang.model.type.TypeMirror getDeclaredType(javax.lang.model.element.Element e)
          Gets the declared type of the given member.
(package private)  String getDeclaredTypeName(javax.lang.model.type.TypeMirror mirror)
           
(package private)  String getDeclaredTypeName(javax.lang.model.type.TypeMirror mirror, boolean box)
          Get the element name of the class the given mirror represents.
(package private)  AccessType getExplicitAccessType(javax.lang.model.element.TypeElement type)
          Get access type of the given class, if specified explicitly.
(package private)  String getPersistentMemberName(javax.lang.model.element.Element e)
           
 Set<javax.lang.model.element.Element> getPersistentMembers(javax.lang.model.element.TypeElement type)
          Gets the list of persistent fields and/or methods for the given type.
 javax.lang.model.element.TypeElement getPersistentSupertype(javax.lang.model.element.TypeElement cls)
           
(package private)  javax.lang.model.type.TypeMirror getTargetEntityType(javax.lang.model.element.Element e)
           
(package private)  javax.lang.model.type.TypeMirror getTypeParameter(javax.lang.model.element.Element e, javax.lang.model.type.TypeMirror mirror, int index, boolean checkTarget)
          Gets the parameter type argument at the given index of the given type.
static boolean isAnnotated(javax.lang.model.element.Element e)
          Affirms if the given element is annotated with any javax.persistence.* or org.apache.openjpa.* annotation.
(package private)  boolean isAnnotatedAsEntity(javax.lang.model.element.Element e)
          Affirms if the given declaration has the given annotation.
static boolean isAnnotatedWith(javax.lang.model.element.Element e, Class<? extends Annotation> anno)
          Affirms if the given declaration has the given annotation.
static boolean isAnnotatedWith(javax.lang.model.element.Element e, Set<String> annos)
          Affirms if the given element is annotated with any of the given annotations.
static boolean isBoolean(javax.lang.model.type.TypeMirror type)
          Affirms if the given mirror represents a primitive or non-primitive boolean.
static boolean isBooleanGetter(javax.lang.model.element.ExecutableElement method)
          Affirms if the given method matches the following signature public boolean isXyz() public Boolean isXyz()
static boolean isGetter(javax.lang.model.element.ExecutableElement method)
           
static boolean isMethod(javax.lang.model.element.Element e)
          Affirms if the given element represents a method.
 boolean isMixedAccess(javax.lang.model.element.TypeElement t)
          Affirms if the members of given type are using both field and property based access.
static boolean isNormalGetter(javax.lang.model.element.ExecutableElement method)
          Affirms if the given method matches the following signature public T getXXX() where T is any non-void type.
static boolean isRootObject(javax.lang.model.type.TypeMirror type)
          Affirms if the given mirror represents root java.lang.Object.
static boolean isSetter(javax.lang.model.element.ExecutableElement method)
          Affirms if the given method matches the following signature public void setXXX(T t)
static boolean isVoid(javax.lang.model.type.TypeMirror type)
          Affirms if the given mirror represents a void.
(package private)  Set<javax.lang.model.element.Element> merge(Set<? extends javax.lang.model.element.Element> a, Set<? extends javax.lang.model.element.Element> b)
           
static boolean startsWith(String full, String head)
          Affirms if the given full string starts with the given head.
(package private)  String toDetails(javax.lang.model.element.Element e)
           
static String toString(Collection<? extends javax.lang.model.element.Element> elements)
           
 List<Exception> validateAccess(javax.lang.model.element.TypeElement t)
          Gets the violations, if any.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

propertyAccessFilter

protected SourceAnnotationHandler.AccessFilter propertyAccessFilter
Set of Inclusion Filters based on member type, access type or transient annotations. Used to determine the subset of available field/method that are persistent.


fieldAccessFilter

protected SourceAnnotationHandler.AccessFilter fieldAccessFilter

fieldFilter

protected SourceAnnotationHandler.KindFilter fieldFilter

methodFilter

protected SourceAnnotationHandler.KindFilter methodFilter

nonTransientFilter

protected SourceAnnotationHandler.TransientFilter nonTransientFilter

annotatedFilter

protected SourceAnnotationHandler.AnnotatedFilter annotatedFilter

getterFilter

protected SourceAnnotationHandler.GetterFilter getterFilter

setterFilter

protected SourceAnnotationHandler.SetterFilter setterFilter

mappingAnnos

protected static List<Class<? extends Annotation>> mappingAnnos
Constructor Detail

SourceAnnotationHandler

public SourceAnnotationHandler(javax.annotation.processing.ProcessingEnvironment processingEnv,
                               CompileTimeLogger logger)
Construct with JDK6 annotation processing environment.

Method Detail

determineTypeAccess

public int determineTypeAccess(javax.lang.model.element.TypeElement type)
Description copied from interface: MetadataProcessor
Determine the access type of the given type.

Specified by:
determineTypeAccess in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>
Returns:
an integer denoting the type of access. The integer value corresponds to ClassMetaData#getAccessType().

determineMemberAccess

public int determineMemberAccess(javax.lang.model.element.Element m)
Description copied from interface: MetadataProcessor
Determine the access type of the given member.

Specified by:
determineMemberAccess in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>
Returns:
an integer denoting the type of access. The integer value corresponds to FieldMetaData#getAccessType().

validateAccess

public List<Exception> validateAccess(javax.lang.model.element.TypeElement t)
Description copied from interface: MetadataProcessor
Gets the violations, if any.

Specified by:
validateAccess in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>
Returns:
null or empty list if no exceptions.

isMixedAccess

public boolean isMixedAccess(javax.lang.model.element.TypeElement t)
Description copied from interface: MetadataProcessor
Affirms if the members of given type are using both field and property based access.

Specified by:
isMixedAccess in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>

getPersistentMembers

public Set<javax.lang.model.element.Element> getPersistentMembers(javax.lang.model.element.TypeElement type)
Gets the list of persistent fields and/or methods for the given type. Scans relevant @AccessType annotation and field/method as per JPA specification to determine the candidate set of field/methods.

Specified by:
getPersistentMembers in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>

merge

Set<javax.lang.model.element.Element> merge(Set<? extends javax.lang.model.element.Element> a,
                                            Set<? extends javax.lang.model.element.Element> b)

filter

<T extends javax.lang.model.element.Element> Set<T> filter(Collection<T> coll,
                                                           org.apache.openjpa.persistence.meta.SourceAnnotationHandler.InclusiveFilter... filters)
Filter the given collection with the conjunction of filters. The given collection itself is not modified.


getExplicitAccessType

AccessType getExplicitAccessType(javax.lang.model.element.TypeElement type)
Get access type of the given class, if specified explicitly. null otherwise.

Parameters:
type -
Returns:
FIELD or PROPERTY

getAnnotationValue

public static Object getAnnotationValue(javax.lang.model.element.Element decl,
                                        Class<? extends Annotation> anno)
Gets the value of the given annotation, if present, in the given declaration. Otherwise, null.


getAnnotationValue

public static Object getAnnotationValue(javax.lang.model.element.Element e,
                                        Class<? extends Annotation> anno,
                                        String attr)
Gets the value of the given attribute of the given annotation, if present, in the given declaration. Otherwise, null.


toString

public static String toString(Collection<? extends javax.lang.model.element.Element> elements)

toDetails

String toDetails(javax.lang.model.element.Element e)

getPersistentMemberName

String getPersistentMemberName(javax.lang.model.element.Element e)

extractFieldName

public String extractFieldName(javax.lang.model.element.ExecutableElement method)

isAnnotated

public static boolean isAnnotated(javax.lang.model.element.Element e)
Affirms if the given element is annotated with any javax.persistence.* or org.apache.openjpa.* annotation.


isAnnotatedAsEntity

boolean isAnnotatedAsEntity(javax.lang.model.element.Element e)
Affirms if the given declaration has the given annotation.


isAnnotatedWith

public static boolean isAnnotatedWith(javax.lang.model.element.Element e,
                                      Class<? extends Annotation> anno)
Affirms if the given declaration has the given annotation.


isAnnotatedWith

public static boolean isAnnotatedWith(javax.lang.model.element.Element e,
                                      Set<String> annos)
Affirms if the given element is annotated with any of the given annotations.

Parameters:
annos - null checks for any annotation that starts with 'javax.persistence.' or 'openjpa.*'.

getTargetEntityType

javax.lang.model.type.TypeMirror getTargetEntityType(javax.lang.model.element.Element e)

getDeclaredTypeName

String getDeclaredTypeName(javax.lang.model.type.TypeMirror mirror)

getDeclaredTypeName

String getDeclaredTypeName(javax.lang.model.type.TypeMirror mirror,
                           boolean box)
Get the element name of the class the given mirror represents. If the mirror is primitive then returns the corresponding boxed class name. If the mirror is parameterized returns only the generic type i.e. if the given declared type is java.util.Set<java.lang.String> this method will return java.util.Set.


getDeclaredType

javax.lang.model.type.TypeMirror getDeclaredType(javax.lang.model.element.Element e)
Gets the declared type of the given member. For fields, returns the declared type while for method returns the return type.

Parameters:
e - a field or method.
Throws:
if - given member is neither a field nor a method.

box

public javax.lang.model.type.TypeMirror box(javax.lang.model.type.TypeMirror t)

getTypeParameter

javax.lang.model.type.TypeMirror getTypeParameter(javax.lang.model.element.Element e,
                                                  javax.lang.model.type.TypeMirror mirror,
                                                  int index,
                                                  boolean checkTarget)
Gets the parameter type argument at the given index of the given type.

Returns:
if the given type represents a parameterized type, then the indexed parameter type argument. Otherwise null.

getPersistentSupertype

public javax.lang.model.element.TypeElement getPersistentSupertype(javax.lang.model.element.TypeElement cls)
Specified by:
getPersistentSupertype in interface MetadataProcessor<javax.lang.model.element.TypeElement,javax.lang.model.element.Element>

isBoolean

public static boolean isBoolean(javax.lang.model.type.TypeMirror type)
Affirms if the given mirror represents a primitive or non-primitive boolean.


isVoid

public static boolean isVoid(javax.lang.model.type.TypeMirror type)
Affirms if the given mirror represents a void.


isMethod

public static boolean isMethod(javax.lang.model.element.Element e)
Affirms if the given element represents a method.


isNormalGetter

public static boolean isNormalGetter(javax.lang.model.element.ExecutableElement method)
Affirms if the given method matches the following signature public T getXXX() where T is any non-void type.


isBooleanGetter

public static boolean isBooleanGetter(javax.lang.model.element.ExecutableElement method)
Affirms if the given method matches the following signature public boolean isXyz() public Boolean isXyz()


isGetter

public static boolean isGetter(javax.lang.model.element.ExecutableElement method)

isSetter

public static boolean isSetter(javax.lang.model.element.ExecutableElement method)
Affirms if the given method matches the following signature public void setXXX(T t)


isRootObject

public static boolean isRootObject(javax.lang.model.type.TypeMirror type)
Affirms if the given mirror represents root java.lang.Object.


startsWith

public static boolean startsWith(String full,
                                 String head)
Affirms if the given full string starts with the given head.


equalsByValue

public static boolean equalsByValue(Enum<?> e,
                                    Object v)
Affirms if the given enum equals the given value.



Copyright © 2006-2010 Apache Software Foundation. All Rights Reserved.