/**
*
*/
package org.minnal.instrument.entity.metadata.handler;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javax.persistence.ElementCollection;
import javax.persistence.OneToMany;
import org.minnal.instrument.entity.metadata.AssociationMetaData;
import org.minnal.instrument.entity.metadata.EntityMetaData;
import org.minnal.utils.reflection.ClassUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author ganeshs
*
*/
public class ElementCollectionAnnotationHandler extends AbstractEntityAnnotationHandler {
private static final Logger logger = LoggerFactory.getLogger(ElementCollectionAnnotationHandler.class);
@Override
public Class<?> getAnnotationType() {
return ElementCollection.class;
}
@Override
public void handle(EntityMetaData metaData, Annotation annotation, Method method) {
if (ClassUtils.hasAnnotation(method, OneToMany.class)) {
logger.debug("Has OneToMany annotation as well. Leaving it to OneToManyAnnotationHandler to process");
return;
}
Class<?> elementType = getElementType(method.getGenericReturnType());
AssociationMetaData associationMetaData = new AssociationMetaData(getGetterName(method, false), elementType, isEntity(elementType));
metaData.addAssociation(associationMetaData);
}
@Override
public void handle(EntityMetaData metaData, Annotation annotation, Field field) {
if (ClassUtils.hasAnnotation(field, OneToMany.class)) {
logger.debug("Has OneToMany annotation as well. Leaving it to OneToManyAnnotationHandler to process");
return;
}
Class<?> elementType = getElementType(field.getGenericType());
AssociationMetaData associationMetaData = new AssociationMetaData(field.getName(), elementType, isEntity(elementType));
metaData.addAssociation(associationMetaData);
}
}