/*
* Copyright 2005 Werner Guttmann
*
* 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 org.castor.jdo.jpa.info;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.castor.core.nature.PropertyHolder;
/**
* This class holds the necessary information so that Castor can properly map a
* JPA annotated classes member to the database.
*
* @author Peter Schmidt
* @since 1.3
*/
public class FieldInfo implements PropertyHolder {
/**
* {@link ClassInfo} instance which 'own' (declares) this {@link FieldInfo}.
*/
private ClassInfo _declaringClassInfo = null;
/**
* Map holding the properties set and read by Natures.
*/
private Map<String, Object> _properties = new HashMap<String, Object>();
/**
* Map holding the available natures.
*/
private Set<String> _natures = new HashSet<String>();
/**
* Name of the field.
*/
private String _fieldName;
/**
* Type of the field.
*/
private Class<?> _fieldType;
/**
* The reference to the getter method of the Field.
*/
private Method _getterMethod;
/**
* The reference to the setter method of the Field.
*/
private Method _setterMethod;
/**
* Creates a FieldInfo associated to the given {@link ClassInfo}, describing
* the given a field with the given name using method (property) access.
*
* @param declaringClassInfo
* The ClassInfo this FieldInfo is associated with.
* @param fieldType
* The type of the described field.
* @param fieldName
* The name of the described field.
* @param getterMethod
* The reference to the getter method of the Field.
* @param setterMethod
* The reference to the setter method of the Field.
*/
public FieldInfo(final ClassInfo declaringClassInfo,
final Class<?> fieldType, final String fieldName,
final Method getterMethod, final Method setterMethod) {
_fieldName = fieldName;
_fieldType = fieldType;
_declaringClassInfo = declaringClassInfo;
_getterMethod = getterMethod;
_setterMethod = setterMethod;
}
/**
* {@inheritDoc}
*
* @see org.castor.core.nature.NatureExtendable#addNature(java.lang.String)
*/
public void addNature(final String nature) {
_natures.add(nature);
}
/**
* {@inheritDoc}
*
* @see org.castor.core.nature.NatureExtendable#hasNature(java.lang.String)
*/
public boolean hasNature(final String nature) {
return _natures.contains(nature);
}
/**
* {@inheritDoc}
*
* @see org.castor.core.nature.PropertyHolder#getProperty(java.lang.String)
*/
public Object getProperty(final String name) {
return _properties.get(name);
}
/**
* {@inheritDoc}
*
* @see org.castor.core.nature.PropertyHolder#setProperty(java.lang.String,
* java.lang.Object)
*/
public void setProperty(final String name, final Object value) {
_properties.put(name, value);
}
/**
* Returns the declaring {@link ClassInfo} this {@link FieldInfo} is
* associated with.
*
* @return the declaring {@link ClassInfo} this {@link FieldInfo} is
* associated with.
*/
public ClassInfo getDeclaringClassInfo() {
return _declaringClassInfo;
}
/**
* Sets the reference to the declaring {@link ClassInfo} this
* {@link FieldInfo} is associated with.
*
* @param classInfo
* The ClassInfo this FieldInfo is associated with.
*/
public void setDeclaringClassInfo(final ClassInfo classInfo) {
_declaringClassInfo = classInfo;
}
/**
* Indicates the name of the field described by this {@link FieldInfo}.
*
* @return the name of the field described by this {@link FieldInfo}.
*/
public String getFieldName() {
return _fieldName;
}
/**
* Sets the name of the field described by this {@link FieldInfo}.
*
* @param fieldName
* set the name of the field described by this {@link FieldInfo}.
*/
public void setFieldName(final String fieldName) {
_fieldName = fieldName;
}
/**
* Indicates the type of the field described by this {@link FieldInfo}.
*
* @return the type of the field.
*/
public Class<?> getFieldType() {
return _fieldType;
}
/**
* Sets the type of the field described by this {@link FieldInfo}.
*
* @param fieldType
* The Type of the field.
*/
public void setFieldType(final Class<?> fieldType) {
_fieldType = fieldType;
}
/**
* Indicates the getter access method of the field.
*
* @return the getter method reference of the field.
*/
public Method getGetterMethod() {
return _getterMethod;
}
/**
* Sets the getter access method of the field.
*
* @param getterMethod
* the getter method reference.
*/
public void setGetterMethod(final Method getterMethod) {
_getterMethod = getterMethod;
}
/**
* Indicates the setter access method of the field.
*
* @return the setter method reference of the field.
*/
public Method getSetterMethod() {
return _setterMethod;
}
/**
* Sets the setter access method of the field.
*
* @param setterMethod
* the setter method reference.
*/
public void setSetterMethod(final Method setterMethod) {
_setterMethod = setterMethod;
}
}