/*
* Copyright 2010 Impetus Infotech.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.impetus.kundera.metadata.processor;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Temporal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.impetus.kundera.metadata.EntityMetadata;
import com.impetus.kundera.metadata.MetadataProcessor;
/**
* The Class AbstractEntityFieldProcessor.
*
* @author animesh.kumar
*/
public abstract class AbstractEntityFieldProcessor implements MetadataProcessor {
/** The Constant log. */
private static final Log log = LogFactory.getLog(ColumnFamilyProcessor.class);
/**
* Gets the valid jpa column.
*
* @param entity
* the entity
* @param f
* the f
*
* @return the valid jpa column
*/
protected final String getValidJPAColumnName(Class<?> entity, Field f) {
String name = null;
if (f.isAnnotationPresent(Column.class)) {
Column c = f.getAnnotation(Column.class);
if (!c.name().isEmpty()) {
name = c.name();
} else {
name = f.getName();
}
} else if (f.isAnnotationPresent(Basic.class)) {
name = f.getName();
}
if (f.isAnnotationPresent(Temporal.class)) {
if (!f.getType().equals(Date.class)) {
log.error("@Temporal must map to java.util.Date for @Entity(" + entity.getName() + "." + f.getName() + ")");
return name;
}
if (null == name) {
name = f.getName();
}
}
return name;
}
/**
* Populates @Id accesser methods like, getId and setId of clazz to
* metadata.
*
* @param metadata
* the metadata
* @param clazz
* the clazz
* @param f
* the f
*/
protected final void populateIdAccessorMethods (EntityMetadata metadata, Class<?> clazz, Field f) {
try {
BeanInfo info = Introspector.getBeanInfo(clazz);
for (PropertyDescriptor descriptor : info.getPropertyDescriptors()) {
if (descriptor.getName().equals(f.getName())) {
metadata.setReadIdentifierMethod(descriptor.getReadMethod());
metadata.setWriteIdentifierMethod(descriptor.getWriteMethod());
return;
}
}
} catch (IntrospectionException e) {
throw new RuntimeException(e);
}
}
protected final void populateIdColumn(EntityMetadata metadata, Class<?> clazz, Field f) {
if(f.isAnnotationPresent(Column.class)) {
Column c = f.getAnnotation(Column.class);
if (!c.name().isEmpty()) {
metadata.setIdColumn(metadata.new Column(c.name(), f));
}
}
}
}