/**
*
*/
package org.exolab.castor.jdo.engine.jdo_descriptors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.castor.jdo.engine.SQLTypeInfos;
import org.exolab.castor.mapping.AccessMode;
import org.exolab.castor.mapping.FieldDescriptor;
import org.exolab.castor.mapping.FieldHandler;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.mapping.loader.ClassDescriptorImpl;
import org.exolab.castor.mapping.loader.FieldDescriptorImpl;
import org.exolab.castor.mapping.loader.FieldHandlerImpl;
import org.exolab.castor.mapping.loader.TypeInfo;
import org.exolab.castor.mapping.xml.ClassChoice;
import org.exolab.castor.mapping.xml.ClassMapping;
import org.exolab.castor.mapping.xml.FieldMapping;
import org.exolab.castor.mapping.xml.MapTo;
import org.exolab.castor.mapping.xml.Sql;
import org.exolab.castor.mapping.xml.types.ClassMappingAccessType;
import org.exolab.castor.jdo.engine.Address;
import org.exolab.castor.jdo.engine.nature.ClassDescriptorJDONature;
import org.exolab.castor.jdo.engine.nature.FieldDescriptorJDONature;
/**
* JDO descriptor class for Address type. Describes persistence information for
* entity Address including Java fields and SQL columns.
*
* @author Tobias Hochwallner, Lukas Lang
*
*/
public class AddressJDODescriptor extends ClassDescriptorImpl {
/**
* Logger.
*/
private static final Log LOG = LogFactory
.getLog(AddressJDODescriptor.class);
/**
* Default Constructor. Configures persistence of entity Book.
*/
public AddressJDODescriptor() {
super();
addNature(ClassDescriptorJDONature.class.getName());
ClassMapping mapping = new ClassMapping();
ClassChoice choice = new ClassChoice();
MapTo mapTo = new MapTo();
LOG.debug("Constructor invoked");
// Set DB table name
new ClassDescriptorJDONature(this).setTableName("address");
// Set corresponding Java class
setJavaClass(Address.class);
// Set access mode
new ClassDescriptorJDONature(this).setAccessMode(AccessMode.Shared);
// Set cache key
new ClassDescriptorJDONature(this).addCacheParam(
"name", "org.castor.cpa.functional.onetoone.Address");
// Configure class mapping
mapping.setAccess(ClassMappingAccessType.SHARED);
mapping.setAutoComplete(true);
mapping.setName("org.castor.cpa.functional.onetoone.Address");
// Set class choice
mapping.setClassChoice(choice);
// Set table mapping
mapping.setMapTo(mapTo);
// Set table
mapTo.setTable("address");
// Set mapping
setMapping(mapping);
FieldDescriptor idFieldDescr = initId(choice);
// Set fields
setFields(new FieldDescriptor[] {});
// Set identity
setIdentities((new FieldDescriptor[] {idFieldDescr}));
LOG.debug("Instantiation finished");
}
/**
* @param choice
* @return jdo field descriptor for id
*/
private FieldDescriptor initId(final ClassChoice choice) {
String idFieldName = "id";
FieldDescriptorImpl idFieldDescr;
FieldMapping idFM = new FieldMapping();
TypeInfo idType = new TypeInfo(java.lang.Integer.class);
// Set columns required (=not null)
idType.setRequired(true);
FieldHandler idHandler;
try {
idHandler = new FieldHandlerImpl(idFieldName, null, null,
Address.class.getMethod("getId"),
Address.class.getMethod("setId", new Class[] {int.class}),
idType);
} catch (SecurityException e1) {
e1.printStackTrace();
throw new RuntimeException(e1.getMessage());
} catch (MappingException e1) {
e1.printStackTrace();
throw new RuntimeException(e1.getMessage());
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
throw new RuntimeException(e1.getMessage());
}
// Instantiate title field descriptor
idFieldDescr = new FieldDescriptorImpl(idFieldName, idType, idHandler, false);
idFieldDescr.addNature(FieldDescriptorJDONature.class.getName());
FieldDescriptorJDONature idJdoNature = new FieldDescriptorJDONature(idFieldDescr);
idJdoNature.setSQLName(new String[] {idFieldName});
idJdoNature.setSQLType(
new int[] {SQLTypeInfos.javaType2sqlTypeNum(java.lang.Integer.class)});
idJdoNature.setManyKey(null);
idJdoNature.setDirtyCheck(false);
idJdoNature.setReadOnly(false);
// Set parent class descriptor
idFieldDescr.setContainingClassDescriptor(this);
idFieldDescr.setClassDescriptor(this);
idFieldDescr.setIdentity(true);
idFM.setIdentity(true);
idFM.setDirect(false);
idFM.setName("id");
idFM.setRequired(true);
idFM.setSetMethod("setId");
idFM.setGetMethod("getId");
idFM.setType("integer");
Sql idSql = new Sql();
idSql.addName("id");
idSql.setType("integer");
idFM.setSql(idSql);
// Add field mappings
choice.addFieldMapping(idFM);
return idFieldDescr;
}
}