Index: codegen/src/main/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactory.java =================================================================== --- codegen/src/main/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactory.java (revision 7721) +++ codegen/src/main/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactory.java (working copy) @@ -1,5 +1,5 @@ /* - * Copyright 2008 Filip Hianik, Vanja Culafic + * Copyright 2008 Filip Hianik, Vanja Culafic * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,17 @@ */ package org.exolab.castor.builder.descriptors; +import java.util.List; + import org.exolab.castor.builder.BuilderConfiguration; import org.exolab.castor.builder.info.ClassInfo; +import org.exolab.castor.builder.info.FieldInfo; import org.exolab.castor.builder.info.nature.JDOClassInfoNature; +import org.exolab.castor.builder.info.nature.JDOFieldInfoNature; +import org.exolab.castor.builder.info.nature.XMLInfoNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToManyNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToOneNature; +import org.exolab.castor.builder.types.XSType; import org.exolab.castor.xml.XMLConstants; import org.exolab.javasource.JClass; import org.exolab.javasource.JConstructor; @@ -26,180 +34,798 @@ /** * A class for creating the source code of JDO-specific descriptor classes. - * + * * @author Filip Hianik * @author Vanja Culafic * @since 1.2.1 - * + * * @see DescriptorSourceFactory * @see JDODescriptorJClass - * + * */ public final class JDOClassDescriptorFactory { - /** - * The BuilderConfiguration instance. - */ - private final BuilderConfiguration _config; + /** + * The BuilderConfiguration instance. + */ + private final BuilderConfiguration _config; - /** - * Contains all fields exclusive identities. - */ - private String _fields = null; + /** + * Contains all fields exclusive identities. + */ + private String _fields = null; - /** - * Contains all identities. - */ - private String _identities = null; + /** + * Contains all identities. + */ + private String _identities = null; - /** - * Creates a new {@link JDOClassDescriptorFactory} with the given - * configuration. - * - * @param config - * A {@link BuilderConfiguration} instance - */ - public JDOClassDescriptorFactory(final BuilderConfiguration config) { - if (config == null) { - String err = "The argument 'config' must not be null."; - throw new IllegalArgumentException(err); - } - _config = config; - } + /** + * Creates a new {@link JDOClassDescriptorFactory} with the given + * configuration. + * + * @param config + * A {@link BuilderConfiguration} instance + */ + public JDOClassDescriptorFactory(final BuilderConfiguration config) { + if (config == null) { + String err = "The argument 'config' must not be null."; + throw new IllegalArgumentException(err); + } + _config = config; + } - /** - * Creates the Source code of a ClassInfo for a given XML Schema element - * declaration. - * - * @param classInfo - * the XML Schema element declaration - * @return the JClass representing the ClassInfo source code - */ - public JClass createSource(final ClassInfo classInfo) { - JClass jClass = classInfo.getJClass(); - String descriptorClassName = getQualifiedJDODescriptorClassName(jClass - .getName()); - JDODescriptorJClass classDesc = new JDODescriptorJClass(_config, - descriptorClassName, jClass); - JDOClassInfoNature cNature = new JDOClassInfoNature(classInfo); + /** + * Creates the Source code of a ClassInfo for a given XML Schema element + * declaration. + * + * @param classInfo + * the XML Schema element declaration + * @return the JClass representing the ClassInfo source code + */ + public JClass createSource(final ClassInfo classInfo) { + if (!checkClassInfoNature(classInfo)) { + return null; + } - // -- get handle to default constructor - JConstructor ctor = classDesc.getConstructor(0); - JSourceCode jsc = ctor.getSourceCode(); + JClass jClass = classInfo.getJClass(); + String descriptorClassName = + getQualifiedJDODescriptorClassName(jClass.getName()); + JDODescriptorJClass classDesc = + new JDODescriptorJClass(_config, descriptorClassName, jClass); + JDOClassInfoNature cNature = new JDOClassInfoNature(classInfo); - jsc.add(""); + //-- get handle to default constructor + JConstructor ctor = classDesc.getConstructor(0); + JSourceCode jsc = ctor.getSourceCode(); - // -- set table name - String tableName = cNature.getTableName(); - if ((tableName != null) && (tableName.length() > 0)) { - jsc.add("setTableName(\""); - jsc.append(tableName); - jsc.append("\");"); - } + jsc = createClassInfoPart(classInfo, jsc); - // -- set corresponding Java class - // TODO OR BETTER FROM THE localClassName VARIABLE? - String className = classInfo.getJClass().getLocalName(); - if ((className != null) && (className.length() > 0)) { - jsc.add("setJavaClass("); - jsc.append(className); - jsc.append(".class);"); - } + //================= + // FieldDescriptors + //================= - // -- set access mode - String accessMode = cNature.getAccessMode().getName(); - if ((accessMode != null) && (accessMode.length() > 0)) { - jsc.add("setAccessMode(AccessMode.valueOf(\""); - jsc.append(accessMode); - jsc.append("\"));"); - } + for (int i = 0; i < classInfo.getElementFields().length; i++) { + FieldInfo fInfo = classInfo.getElementFields()[i]; + if (checkFieldInfoNatures(fInfo)) { + + if (fInfo.hasNature(JDOOneToOneNature.class.getName())) { + jsc = createOneToOneFieldInfoPart(fInfo, jsc); + + } else if (fInfo.hasNature(JDOOneToManyNature.class.getName())) { + jsc = createOneToManyFieldInfoPart(fInfo, jsc); + } else { + jsc = createEntityFieldInfoPart(fInfo, jsc); + } + } + } - // -- set cache key - String fullName = classInfo.getJClass().getName(); - if ((fullName != null) && (fullName.length() > 0)) { - jsc.add("addCacheParam(\"name\",\""); - jsc.append(fullName); - jsc.append("\");"); - } + _fields = setFields(classInfo.getElementFields()); + _identities = setIdentities(cNature.getPrimaryKeys()); - jsc.add(""); + jsc.add(""); - // -- Configure class mapping - String cmat = cNature.getAccessMode().getName(); - if ((cmat != null) && (cmat.length() > 0)) { - jsc.add("mapping.setAccess(ClassMappingAccessType.valueOf(\""); - jsc.append(cmat); - jsc.append("\"));"); - } + jsc.add("setFields(new FieldDescriptor[] {" + _fields + "});"); + jsc.add("setIdentities(new FieldDescriptor[] {" + _identities + "});"); - /* - * String autoComplete = Boolean.toString(classInfo.isAutoComplete()); - * if ((autoComplete != null) && (autoComplete.length() > 0)) { - * jsc.add("mapping.setAutoComplete("); jsc.append(autoComplete); - * jsc.append(");"); } - */ - // TODO Why should that be set to TRUE ? - jsc.add("mapping.setAutoComplete(true);"); + return classDesc; + } - // -- set name - if ((fullName != null) && (fullName.length() > 0)) { - jsc.add("mapping.setName(\""); - jsc.append(fullName); - jsc.append("\");"); - } + /** + * Returns the fully-qualified class name of the JDODescriptor to create. + * Given the fully-qualified class name of the class we are creating a + * JDODescriptor for, return the correct fully-qualified name for the + * JDODescriptor. + * + * @param name + * fully-qualified class name of the class we are describing + * @return the fully-qualified class name of the JDODescriptor to create + */ + private String getQualifiedJDODescriptorClassName(final String name) { + String descPackage = JNaming.getPackageFromClassName(name); + String descClassName = JNaming.getLocalNameFromClassName(name); - // -- set class choice - jsc.add("mapping.setClassChoice(choice);"); + if (descPackage != null && descPackage.length() > 0) { + descPackage = descPackage + "." + + XMLConstants.JDO_DESCRIPTOR_PACKAGE + "."; + } else { + descPackage = ""; + } + // TODO integrate XMLConstants.JDO_DESCRIPTOR_SUFFIX; + return descPackage + descClassName + "JDODescriptor"; + } - // -- set table - String table = cNature.getTableName(); - if ((table != null) && (table.length() > 0)) { - jsc.add("mapTo.setTable(\""); - jsc.append(table); - jsc.append("\");"); - } + /** + * Returns the modified string with the first letter upperCase. + * @param string String to upper case + * @return the string with first letter upperCase + */ + private static String toUpperCaseFirstLetter(final String string) { + return string.substring(0, 1).toUpperCase() + string.substring(1); + } - // -- set table mapping - jsc.add("mapping.setMapTo(mapTo);"); + /** + * Returns the string which contains names of all FieldDescriptors + * for Fields that are not identities. Names are separated by comma. + * @param fInfos Array of FieldInfos + * @return names of all FieldDescriptors as one String (separated by comma) + */ + private String setFields(final FieldInfo[] fInfos) { + String str = ""; - // -- set mapping - jsc.add("setMapping(mapping);"); + FieldInfo fInfo; + ClassInfo cInfo; + for (int i = 0; i < fInfos.length; i++) { + fInfo = fInfos[i]; + cInfo = fInfo.getDeclaringClassInfo(); + JDOClassInfoNature cNature = new JDOClassInfoNature(cInfo); + if (cNature.getPrimaryKeys() != null) { + if (cNature.getPrimaryKeys().contains(new XMLInfoNature(fInfo).getNodeName())) { + continue; + } + } + if (str.equals("")) { + str = str + new XMLInfoNature(fInfo).getNodeName() + "FieldDescr"; + } else { + str = str + "," + new XMLInfoNature(fInfo).getNodeName() + "FieldDescr"; + } + } + return str; + } - // _fields = setFields(classInfo.getElementFields()); - // //_identities = setIdentities(classInfo.getElementFields()); - // _identities = setIdentities(cNature.getPrimaryKeys()); - // - // jsc.add(""); - // - // jsc.add("setFields(new FieldDescriptor[] {" + _fields + "});"); - // jsc.add("setIdentities(new FieldDescriptor[] {" + _identities + - // "});"); + /** + * Returns the string which contains names of all FieldDescriptors + * for Fields that are identities. Names are separated by comma. + * @param primaryKeys Array of primary keys. + * @return names of all FieldDescriptors as one String (separated by comma) + */ + private String setIdentities(final List primaryKeys) { + String identities = ""; + Object[] pkArray = null; + if (primaryKeys != null) { + pkArray = primaryKeys.toArray(); + for (int i = 0; i < pkArray.length; i++) { + if (identities.equals("")) { + identities = identities + pkArray[i] + "FieldDescr"; + } else { + identities = identities + "," + pkArray[i] + "FieldDescr"; + } + } + } + return identities; + } + + /** + * Checks if ClassInfo has the JDOClassNature and if their required + * attributes are properly set. + * @param cInfo the ClassInfo object + * @return true when ClassInfo has a JDOClassNature with all required + * attributes properly set, false otherwise + */ + private boolean checkClassInfoNature(final ClassInfo cInfo) { + if (cInfo.hasNature(JDOClassInfoNature.class.getName())) { + JDOClassInfoNature cNature = new JDOClassInfoNature(cInfo); + if (cNature.getAccessMode() == null + || cNature.getPrimaryKeys() == null + || cNature.getPrimaryKeys().isEmpty() + || cNature.getTableName() == null + || cNature.getTableName().length() == 0) { + return false; + } + return true; + } + return false; + } - return classDesc; - } + /** + * Checks if FieldInfo has the XMLInfoNature and JDOFieldNature and if + * their required attributes are properly set. + * @param fInfo the FieldInfo object + * @return true when FieldInfo has a XMLInfoNature and JDOFieldNature + * with all required attributes properly set, false otherwise + */ + private boolean checkFieldInfoNatures(final FieldInfo fInfo) { + if (!fInfo.hasNature(XMLInfoNature.class.getName())) { + return false; + } + + if (fInfo.hasNature(JDOFieldInfoNature.class.getName())) { + JDOFieldInfoNature fNature = new JDOFieldInfoNature(fInfo); + if (fNature.getColumnName() == null + || fNature.getColumnName().length() == 0 + || fNature.getColumnType() == null) { + return false; + } + return true; + } + + if (fInfo.hasNature(JDOOneToOneNature.class.getName())) { + JDOOneToOneNature oneNature = new JDOOneToOneNature(fInfo); + if (oneNature.getForeignKeys().size() != 1) { + return false; + } + return true; + } + + if (fInfo.hasNature(JDOOneToManyNature.class.getName())) { + JDOOneToManyNature manyNature = new JDOOneToManyNature(fInfo); + if (manyNature.getForeignKeys().size() != 1) { + return false; + } + return true; + } + return false; + } - /** - * Returns the fully-qualified class name of the JDODescriptor to create. - * Given the fully-qualified class name of the class we are creating a - * JDODescriptor for, return the correct fully-qualified name for the - * JDODescriptor. - * - * @param name - * fully-qualified class name of the class we are describing - * @return the fully-qualified class name of the JDODescriptor to create - */ - private String getQualifiedJDODescriptorClassName(final String name) { - String descPackage = JNaming.getPackageFromClassName(name); - String descClassName = JNaming.getLocalNameFromClassName(name); + /** + * Creates the ClassInfo part of the JDOClassDescriptor. + * @param classInfo ClassInfo object + * @param jsc JSourceCode + * @return JSourceCode created in this method + */ + private JSourceCode createClassInfoPart(final ClassInfo classInfo, final JSourceCode jsc) { - if (descPackage != null && descPackage.length() > 0) { - descPackage = descPackage + "." - + XMLConstants.JDO_DESCRIPTOR_PACKAGE + "."; - } else { - descPackage = ""; - } - // TODO integrate XMLConstants.JDO_DESCRIPTOR_SUFFIX; - return descPackage + descClassName + "JDODescriptor"; - } + JDOClassInfoNature cNature = new JDOClassInfoNature(classInfo); + jsc.add(""); + + //-- set table name + String tableName = cNature.getTableName(); + jsc.add("setTableName(\"" + tableName + "\");"); + + //-- set corresponding Java class + // TODO IS THERE A NEED TO CHECK THIS?! + String className = classInfo.getJClass().getLocalName(); + if ((className != null) && (className.length() > 0)) { + jsc.add("setJavaClass("); + jsc.append(className); + jsc.append(".class);"); + } + + //-- set access mode + String accessMode = cNature.getAccessMode().getName(); + jsc.add("setAccessMode(AccessMode.valueOf(\"" + accessMode + "\"));"); + + //-- set cache key + // TODO IS THERE A NEED TO CHECK THIS?! + String fullName = classInfo.getJClass().getName(); + if ((fullName != null) && (fullName.length() > 0)) { + jsc.add("addCacheParam(\"name\",\""); + jsc.append(fullName); + jsc.append("\");"); + } + + jsc.add(""); + + //-- Configure class mapping + jsc.add("mapping.setAccess(ClassMappingAccessType.valueOf(\""); + jsc.append(accessMode + "\"));"); + + jsc.add("mapping.setAutoComplete(true);"); + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((fullName != null) && (fullName.length() > 0)) { + jsc.add("mapping.setName(\""); + jsc.append(fullName); + jsc.append("\");"); + } + + //-- set class choice + jsc.add("mapping.setClassChoice(choice);"); + + //-- set table + String table = cNature.getTableName(); + jsc.add("mapTo.setTable(\"" + table + "\");"); + + //-- set table mapping + jsc.add("mapping.setMapTo(mapTo);"); + + //-- set mapping + jsc.add("setMapping(mapping);"); + + return jsc; + } + + /** + * Creates the source code of the FieldInfo part appeding it to + * the source code generated till now. + * @param fInfo FieldInfo object + * @param jsc JSourceCode created till now + * @return JSourceCode created in this method + */ + private JSourceCode createEntityFieldInfoPart(final FieldInfo fInfo, final JSourceCode jsc) { + JDOFieldInfoNature fNature = new JDOFieldInfoNature(fInfo); + JDOClassInfoNature cNature = new JDOClassInfoNature(fInfo.getDeclaringClassInfo()); + XMLInfoNature xmlNature = new XMLInfoNature(fInfo); + + //-- set name + String name = xmlNature.getNodeName(); + jsc.add(""); + jsc.add("//" + name + " field"); + + jsc.add("String " + name + "FieldName = \"" + name + "\";"); + + //-- initialize objects + jsc.add("JDOFieldDescriptorImpl " + name + "FieldDescr;"); + + jsc.add("FieldMapping " + name + "FM = new FieldMapping();"); + + //-- set typeInfo + String type = null; + XSType schemaType; + + schemaType = xmlNature.getSchemaType(); + type = schemaType.getJType().toString(); + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.add("TypeInfo " + name + + "Type = new TypeInfo(" + type + ".class);"); + } + + jsc.add("// Set columns required (= not null)"); + jsc.add(name + "Type.setRequired(" + + Boolean.toString(xmlNature.isRequired()) + ");"); + + jsc.add(""); + + jsc.add("FieldHandler " + name + "Handler;"); + jsc.add("try {"); + + //-- get/set methods + jsc.indent(); + // TODO HOW ABOUT GETTING THE NAME FROM NATURE? + String className = fInfo.getDeclaringClassInfo().getJClass().getLocalName(); + // TODO IS THERE A NEED TO CHECK THIS?! + if ((className != null) && (className.length() > 0)) { + jsc.add("Method " + name + "GetMethod = " + + className + ".class.getMethod(\"get" + + toUpperCaseFirstLetter(name) + "\", null);"); + jsc.add("Method " + name + "SetMethod = " + + className + ".class.getMethod(\"set" + + toUpperCaseFirstLetter(name) + "\", new Class[]{"); + } + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.addIndented(type + ".class});"); + } + + jsc.add(""); + jsc.add(name + "Handler = new FieldHandlerImpl(" + name + "FieldName, "); + jsc.append("null, null,"); + jsc.addIndented(name + "GetMethod, " + name + "SetMethod, " + name + "Type);"); + jsc.unindent(); + jsc.add(""); + + //-- Catch of exceptions + jsc.add("} catch (SecurityException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (MappingException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (NoSuchMethodException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("}"); + + + //-- JDOFieldDescriptorImpl constructor + jsc.add("// Instantiate " + name + " field descriptor"); + jsc.add(name + "FieldDescr = new JDOFieldDescriptorImpl("); + jsc.append(name + "FieldName, " + name + "Type,"); + jsc.indent(); + jsc.add(name + "Handler, "); + jsc.append(Boolean.toString(fInfo.isTransient()) + ", "); + String sqlName = new JDOFieldInfoNature(fInfo).getColumnName(); + jsc.append("new String[] { " + sqlName + " },"); + jsc.add("new int[] {SQLTypeInfos"); + jsc.indent(); + jsc.add(".javaType2sqlTypeNum("); + + // TODO IS THERE NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.append(type + ".class) },"); + } + + jsc.unindent(); + jsc.add("null, new String[] {}, "); + jsc.append(Boolean.toString(fNature.isDirty()) + ", "); + jsc.append(Boolean.toString(fNature.isReadOnly()) + ");"); + jsc.unindent(); + + jsc.add(""); + + //-- parent class descriptor + jsc.add(name + "FieldDescr.setContainingClassDescriptor(this);"); + + boolean isPrimaryKey = false; + if (cNature.getPrimaryKeys() != null) { + isPrimaryKey = (cNature.getPrimaryKeys().contains(xmlNature.getNodeName())); + } + + jsc.add(name + "FieldDescr.setIdentity(" + + Boolean.toString(isPrimaryKey) + ");"); + + //-- fieldmapping + jsc.add(name + "FM.setIdentity(" + Boolean.toString(isPrimaryKey) + ");"); + jsc.add(name + "FM.setDirect(false);"); + jsc.add(name + "FM.setName(\"" + name + "\");"); + jsc.add(name + "FM.setRequired(" + xmlNature.isRequired() + ");"); + jsc.add(name + "FM.setSetMethod(\"set" + + toUpperCaseFirstLetter(name) + "\");"); + jsc.add(name + "FM.setGetMethod(\"get" + + toUpperCaseFirstLetter(name) + "\");"); + + //-- sql part + jsc.add("Sql " + name + "Sql = new Sql();"); + jsc.add(name + "Sql.addName(\"" + name + "\");"); + + String sqlType = fNature.getColumnType(); + if ((sqlType != null) && (sqlType.length() > 0)) { + jsc.add(name + "Sql.setType(\"" + sqlType + "\");"); + } + + jsc.add(name + "FM.setSql(" + name + "Sql);"); + + if ((type != null) && (type.length() > 0)) { + jsc.add(name + "FM.setType(\"" + type + "\");"); + } + + jsc.add("choice.addFieldMapping(" + name + "FM);"); + + return jsc; + } + + /** + * Creates the source code of the FieldInfo part with + * one-to-one relation appeding it to + * the source code generated till now. + * @param fInfo FieldInfo object + * @param jsc JSourceCode created till now + * @return JSourceCode created in this method + */ + private JSourceCode createOneToOneFieldInfoPart(final FieldInfo fInfo, final JSourceCode jsc) { + JDOFieldInfoNature fNature = new JDOFieldInfoNature(fInfo); + JDOClassInfoNature cNature = new JDOClassInfoNature(fInfo.getDeclaringClassInfo()); + JDOOneToOneNature oneNature = new JDOOneToOneNature(fInfo); + XMLInfoNature xmlNature = new XMLInfoNature(fInfo); + + //-- set name + String name = xmlNature.getNodeName(); + jsc.add(""); + jsc.add("//" + name + " field"); + jsc.add("String " + name + "FieldName = \"" + name + "\";"); + + String sqlName = oneNature.getForeignKeys().get(0).toString(); + jsc.add("String " + name + "SqlName = \"" + sqlName + "\";"); + + //-- initialize objects + jsc.add("JDOFieldDescriptorImpl " + name + "FieldDescr;"); + jsc.add("FieldMapping " + name + "FM = new FieldMapping();"); + + //-- set typeInfo + String type = null; + XSType schemaType; + + schemaType = xmlNature.getSchemaType(); + type = schemaType.getJType().toString(); + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.add("TypeInfo " + name + + "Type = new TypeInfo(" + getLocalName(type) + ".class);"); + } + + jsc.add("// Set columns required (= not null)"); + jsc.add(name + "Type.setRequired(" + + Boolean.toString(xmlNature.isRequired()) + ");"); + + jsc.add(""); + + jsc.add("FieldHandler " + name + "Handler;"); + jsc.add("try {"); + + //-- get/set methods + jsc.indent(); + // TODO HOW ABOUT GETTING THE NAME FROM NATURE? + String className = fInfo.getDeclaringClassInfo().getJClass().getLocalName(); + // TODO IS THERE A NEED TO CHECK THIS?! + if ((className != null) && (className.length() > 0)) { + jsc.add("Method " + name + "GetMethod = " + + className + ".class.getMethod(\"get" + + toUpperCaseFirstLetter(name) + "\", null);"); + jsc.add("Method " + name + "SetMethod = " + + className + ".class.getMethod(\"set" + + toUpperCaseFirstLetter(name) + "\", new Class[]{"); + } + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.addIndented(getLocalName(type) + ".class});"); + } + + jsc.add(""); + jsc.add(name + "Handler = new FieldHandlerImpl(" + name + "FieldName, "); + jsc.append("null, null,"); + jsc.addIndented(name + "GetMethod, " + name + "SetMethod, " + name + "Type);"); + jsc.unindent(); + jsc.add(""); + + //-- Catch of exceptions + jsc.add("} catch (SecurityException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (MappingException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (NoSuchMethodException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("}"); + + + //-- JDOFieldDescriptorImpl constructor + jsc.add("// Instantiate " + name + " field descriptor"); + jsc.add(name + "FieldDescr = new JDOFieldDescriptorImpl("); + jsc.append(name + "FieldName, " + name + "Type,"); + jsc.indent(); + jsc.add(name + "Handler, "); + jsc.append(Boolean.toString(fInfo.isTransient()) + ", "); + jsc.append("new String[] { " + name + "SqlName },"); + jsc.add("new int[] {SQLTypeInfos"); + jsc.indent(); + jsc.add(".javaType2sqlTypeNum("); + + // TODO IS THERE NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.append(getLocalName(type) + ".class) },"); + } + + jsc.unindent(); + jsc.add("null, new String[] { " + name + "SqlName }, "); + jsc.append(Boolean.toString(fNature.isDirty()) + ", "); + jsc.append(Boolean.toString(fNature.isReadOnly()) + ");"); + jsc.unindent(); + + jsc.add(""); + + //-- parent class descriptor + jsc.add(name + "FieldDescr.setContainingClassDescriptor(this);"); + jsc.add(name + "FieldDescr.setClassDescriptor(new " + getLocalName(type) + + "JDODescriptor());"); + + boolean isPrimaryKey = false; + if (cNature.getPrimaryKeys() != null) { + isPrimaryKey = (cNature.getPrimaryKeys().contains(xmlNature.getNodeName())); + } + + //-- fieldmapping + jsc.add(name + "FM.setIdentity(" + Boolean.toString(isPrimaryKey) + ");"); + jsc.add(name + "FM.setDirect(false);"); + jsc.add(name + "FM.setName(\"" + name + "\");"); + jsc.add(name + "FM.setRequired(" + xmlNature.isRequired() + ");"); + jsc.add(name + "FM.setSetMethod(\"set" + + toUpperCaseFirstLetter(name) + "\");"); + jsc.add(name + "FM.setGetMethod(\"get" + + toUpperCaseFirstLetter(name) + "\");"); + + //-- sql part + jsc.add("Sql " + name + "Sql = new Sql();"); + jsc.add(name + "Sql.addName(\"" + sqlName + "\");"); + + String sqlType = fNature.getColumnType(); + if ((sqlType != null) && (sqlType.length() > 0)) { + jsc.add(name + "Sql.setType(\"" + sqlType + "\");"); + } + + jsc.add(name + "Sql.setManyKey(new String[] {\"" + sqlName + "\"});"); + jsc.add(name + "FM.setSql(" + name + "Sql);"); + + if ((type != null) && (type.length() > 0)) { + jsc.add(name + "FM.setType(\"" + type + "\");"); + } + + jsc.add("choice.addFieldMapping(" + name + "FM);"); + return jsc; + } + + /** + * Creates the source code of the FieldInfo part with + * one-to-one relation appeding it to + * the source code generated till now. + * @param fInfo FieldInfo object + * @param jsc JSourceCode created till now + * @return JSourceCode created in this method + */ + private JSourceCode createOneToManyFieldInfoPart(final FieldInfo fInfo, final JSourceCode jsc) { + + JDOFieldInfoNature fNature = new JDOFieldInfoNature(fInfo); + JDOClassInfoNature cNature = new JDOClassInfoNature(fInfo.getDeclaringClassInfo()); + JDOOneToManyNature manyNature = new JDOOneToManyNature(fInfo); + XMLInfoNature xmlNature = new XMLInfoNature(fInfo); + + //-- set name + String name = xmlNature.getNodeName(); + jsc.add(""); + jsc.add("//" + name + " field"); + jsc.add("String " + name + "FieldName = \"" + name + "\";"); + + String sqlName = manyNature.getForeignKeys().get(0).toString(); + jsc.add("String " + name + "SqlName = \"" + sqlName + "\";"); + + //-- initialize objects + jsc.add("JDOFieldDescriptorImpl " + name + "FieldDescr;"); + jsc.add("FieldMapping " + name + "FM = new FieldMapping();"); + + //-- set typeInfo + String type = null; + XSType schemaType; + + schemaType = xmlNature.getSchemaType(); + type = schemaType.getJType().toString(); + + // TODO IS THERE A NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.add("TypeInfo " + name + + "Type = new TypeInfo(" + getLocalName(type) + ".class);"); + } + + jsc.add("// Set columns required (= not null)"); + jsc.add(name + "Type.setRequired(" + + Boolean.toString(xmlNature.isRequired()) + ");"); + + jsc.add(""); + + jsc.add("FieldHandler " + name + "Handler;"); + jsc.add("try {"); + + //-- get/set methods + jsc.indent(); + // TODO HOW ABOUT GETTING THE NAME FROM NATURE? + String className = fInfo.getDeclaringClassInfo().getJClass().getLocalName(); + // TODO IS THERE A NEED TO CHECK THIS?! + if ((className != null) && (className.length() > 0)) { + jsc.add("Method " + name + "GetMethod = " + + className + ".class.getMethod(\"get" + + toUpperCaseFirstLetter(name) + "\", null);"); + jsc.add("Method " + name + "SetMethod = " + + className + ".class.getMethod(\"set" + + toUpperCaseFirstLetter(name) + "\", new Class[]{List.class});"); + } + + jsc.add(""); + jsc.add(name + "Handler = new FieldHandlerImpl(" + name + "FieldName, "); + jsc.append("null, null,"); + jsc.addIndented(name + "GetMethod, " + name + "SetMethod, " + name + "Type);"); + jsc.unindent(); + jsc.add(""); + + //-- Catch of exceptions + jsc.add("} catch (SecurityException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (MappingException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("} catch (NoSuchMethodException e1) {"); + jsc.indent(); + jsc.add("e1.printStackTrace();"); + jsc.add("throw new RuntimeException(e1.getMessage());"); + jsc.unindent(); + jsc.add("}"); + + + //-- JDOFieldDescriptorImpl constructor + jsc.add("// Instantiate " + name + " field descriptor"); + jsc.add(name + "FieldDescr = new JDOFieldDescriptorImpl("); + jsc.append(name + "FieldName, " + name + "Type,"); + jsc.indent(); + jsc.add(name + "Handler, "); + jsc.append(Boolean.toString(fInfo.isTransient()) + ", "); + jsc.append("new String[] { " + name + "SqlName },"); + jsc.add("new int[] {SQLTypeInfos"); + jsc.indent(); + jsc.add(".javaType2sqlTypeNum("); + + // TODO IS THERE NEED TO CHECK THIS?! + if ((type != null) && (type.length() > 0)) { + jsc.append(getLocalName(type) + ".class) },"); + } + + jsc.unindent(); + jsc.add("null, new String[] { " + name + "SqlName }, "); + jsc.append(Boolean.toString(fNature.isDirty()) + ", "); + jsc.append(Boolean.toString(fNature.isReadOnly()) + ");"); + jsc.unindent(); + + jsc.add(""); + + //-- parent class descriptor + jsc.add(name + "FieldDescr.setContainingClassDescriptor(this);"); + jsc.add(name + "FieldDescr.setClassDescriptor(new " + getLocalName(type) + + "JDODescriptor());"); + jsc.add(name + "FieldDescr.setMultivalued(true);"); + + boolean isPrimaryKey = false; + if (cNature.getPrimaryKeys() != null) { + isPrimaryKey = (cNature.getPrimaryKeys().contains(xmlNature.getNodeName())); + } + + //-- fieldmapping + jsc.add(name + "FM.setIdentity(" + Boolean.toString(isPrimaryKey) + ");"); + jsc.add(name + "FM.setDirect(false);"); + jsc.add(name + "FM.setName(\"" + name + "\");"); + jsc.add(name + "FM.setRequired(" + xmlNature.isRequired() + ");"); + // TODO support of other collection types + jsc.add(name + "FM.setCollection(FieldMappingCollectionType.ARRAYLIST);"); + + //-- sql part + jsc.add("Sql " + name + "Sql = new Sql();"); + jsc.add(name + "Sql.addName(\"" + sqlName + "\");"); + + String sqlType = fNature.getColumnType(); + if ((sqlType != null) && (sqlType.length() > 0)) { + jsc.add(name + "Sql.setType(\"" + sqlType + "\");"); + } + + jsc.add(name + "Sql.setManyKey(new String[] {\"" + sqlName + "\"});"); + jsc.add(name + "FM.setSql(" + name + "Sql);"); + + if ((type != null) && (type.length() > 0)) { + jsc.add(name + "FM.setType(\"" + type + "\");"); + } + + jsc.add("choice.addFieldMapping(" + name + "FM);"); + + return jsc; + } + + /** + * Returns the unqualified Java type name (i.e. without package). + * + * @param name the qualified Java type name. + * @return The unqualified Java type name. + */ + private String getLocalName(final String name) { + // -- use getName method in case it's been overloaded + return JNaming.getLocalNameFromClassName(name); + } } \ No newline at end of file Index: codegen/src/main/java/org/exolab/castor/builder/descriptors/JDODescriptorJClass.java =================================================================== --- codegen/src/main/java/org/exolab/castor/builder/descriptors/JDODescriptorJClass.java (revision 7721) +++ codegen/src/main/java/org/exolab/castor/builder/descriptors/JDODescriptorJClass.java (working copy) @@ -115,6 +115,7 @@ addImport("org.exolab.castor.jdo.engine.JDOFieldDescriptorImpl"); addImport("org.exolab.castor.mapping.AccessMode"); addImport("org.exolab.castor.mapping.FieldDescriptor"); + addImport("org.exolab.castor.mapping.FieldHandler"); addImport("org.exolab.castor.mapping.MappingException"); addImport("org.exolab.castor.mapping.loader.FieldHandlerImpl"); addImport("org.exolab.castor.mapping.loader.TypeInfo"); @@ -125,6 +126,7 @@ addImport("org.exolab.castor.mapping.xml.Sql"); addImport("org.exolab.castor.mapping.xml.types.ClassMappingAccessType"); addImport("org.castor.core.exception.IllegalClassDescriptorInitialization"); + addImport("import org.exolab.castor.mapping.xml.types.FieldMappingCollectionType"); addImport("java.lang.reflect.Method"); } Index: codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java =================================================================== --- codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java (revision 0) +++ codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java (revision 0) @@ -0,0 +1,962 @@ +package org.exolab.castor.builder.descriptors; + +import java.util.Iterator; +import java.util.Vector; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.castor.xml.JavaNamingImpl; +import org.exolab.castor.builder.BuilderConfiguration; +import org.exolab.castor.builder.factory.FieldMemberAndAccessorFactory; +import org.exolab.castor.builder.info.ClassInfo; +import org.exolab.castor.builder.info.FieldInfo; +import org.exolab.castor.builder.info.nature.JDOClassInfoNature; +import org.exolab.castor.builder.info.nature.JDOFieldInfoNature; +import org.exolab.castor.builder.info.nature.XMLInfoNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToManyNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToOneNature; +import org.exolab.castor.builder.types.XSClass; +import org.exolab.castor.builder.types.XSInt; +import org.exolab.castor.builder.types.XSString; +import org.exolab.castor.mapping.AccessMode; +import org.exolab.javasource.JClass; +import org.exolab.javasource.JCodeStatement; +import org.exolab.javasource.JSourceCode; + + + + + +/** + * Unit test of the JDOClassDescriptorFactory + * @author Filip Hianik + * + */ +public class JDOClassDescriptorFactoryTest extends TestCase { + + /** + * Logger. + */ + private static final Log LOG = LogFactory.getLog(JDOClassDescriptorFactoryTest.class); + + private JDOClassDescriptorFactory _factory; + private ClassInfo _classInfo; + private BuilderConfiguration _config; + private JClass _jClass; + private JSourceCode _jsc; + private JClass _classDesc; + private String _statement; + private Vector _vector; + private Iterator _vIterator; + private JCodeStatement _jStatement; + private FieldInfo _fieldInfo; + private JDOClassInfoNature _cNature; + private JDOFieldInfoNature _fNature; + private XMLInfoNature _xmlNature; + private FieldMemberAndAccessorFactory _memberAndAccessorFactory; + + /** + * + * @return JUnit Test + * @throws Exception + * while creating the suite + */ + public static Test suite() throws Exception { + TestSuite suite = new TestSuite("Test JDOClassDescriptorFactory"); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceEntity")); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceOneToOne")); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceOneToMany")); + return suite; + } + + /** + * Default Constructor. + */ + public JDOClassDescriptorFactoryTest() { + super(); + } + + /** + * Constructor that sets the name of the test. + * + * @param name + * of the test. + */ + public JDOClassDescriptorFactoryTest(final String name) { + super(name); + } + + /** + * Test SetUp Method. + * + * @throws Exception + * If an error during SetUp occured. + */ + protected final void setUp() throws Exception { + LOG.debug("SetUp"); + super.setUp(); + + _config = new BuilderConfiguration(); + _factory = new JDOClassDescriptorFactory(_config); + + //-- FieldInfo initialization + JavaNamingImpl naming = new JavaNamingImpl(); + _memberAndAccessorFactory = new FieldMemberAndAccessorFactory(naming); + } + + /** + * Test TearDown Method. + * + * @throws Exception + * If an error during TearDown occured. + */ + protected final void tearDown() throws Exception { + LOG.debug("TearDown"); + super.tearDown(); + } + + public final void testCreateSourceEntity() { + + //-- ClassInfo initialization + _jClass = new JClass("com.assembla.ase2.jdo.entity.Book"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("book"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSString type = new XSString(); + + //-- ISBN field + String fieldName = "isbn"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("isbn"); + _fNature.setColumnType("varchar"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_xmlNature.getNodeName()); + + //-- TITLE field + fieldName = "title"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("title"); + _fNature.setColumnType("varchar"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"book\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(Book.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"com.assembla.ase2.jdo.entity.Book\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"com.assembla.ase2.jdo.entity.Book\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"book\");"; + assertTrue(checkSource(_statement)); + + //-- ISBN + _statement = "String isbnFieldName = \"isbn\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl isbnFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping isbnFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo isbnType = new TypeInfo(java.lang.String.class);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler isbnHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method isbnGetMethod = Book.class.getMethod(\"getIsbn\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method isbnSetMethod = Book.class.getMethod(\"setIsbn\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.String.class});"; + assertTrue(checkSource(_statement)); + + _statement = "isbnHandler = new FieldHandlerImpl(isbnFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "isbnGetMethod, isbnSetMethod, isbnType);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr = new JDOFieldDescriptorImpl(isbnFieldName, isbnType,"; + assertTrue(checkSource(_statement)); + + _statement = "isbnHandler, false, new String[] { isbn },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.String.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setName(\"isbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setSetMethod(\"setIsbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setGetMethod(\"getIsbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql isbnSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "isbnSql.addName(\"isbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnSql.setType(\"varchar\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setSql(isbnSql);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setType(\"java.lang.String\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(isbnFM);"; + assertTrue(checkSource(_statement)); + + //-- TITLE + _statement = "String titleFieldName = \"title\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl titleFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping titleFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo titleType = new TypeInfo(java.lang.String.class);"; + assertTrue(checkSource(_statement)); + + _statement = "titleType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler titleHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method titleGetMethod = Book.class.getMethod(\"getTitle\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method titleSetMethod = Book.class.getMethod(\"setTitle\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.String.class});"; + assertTrue(checkSource(_statement)); + + _statement = "titleHandler = new FieldHandlerImpl(titleFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "titleGetMethod, titleSetMethod, titleType);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr = new JDOFieldDescriptorImpl(titleFieldName, titleType,"; + assertTrue(checkSource(_statement)); + + _statement = "titleHandler, false, new String[] { title },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.String.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr.setIdentity(false)"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setName(\"title\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setSetMethod(\"setTitle\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setGetMethod(\"getTitle\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql titleSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "titleSql.addName(\"title\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleSql.setType(\"varchar\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setSql(titleSql);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setType(\"java.lang.String\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(titleFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {titleFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {isbnFieldDescr});"; + assertTrue(checkSource(_statement)); + + } + + public final void testCreateSourceOneToOne() { + + //-- ClassInfo initialization + _jClass = new JClass("ctf.jdo.sg.onetoone.Employee"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("employee"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSInt type = new XSInt(true); + + //-- ID + String fieldName = "id"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("id"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_fieldInfo.getName()); + + //-- ADDRESS_ID + XSClass type2 = new XSClass(new JClass("ctf.jdo.sg.onetoone.Address")); + fieldName = "address"; + _fieldInfo = new FieldInfo(type2, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + _fieldInfo.addNature(JDOOneToOneNature.class.getName()); + + JDOOneToOneNature oneNature = new JDOOneToOneNature(_fieldInfo); + oneNature.addForeignKey("address_id"); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("address"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(Employee.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"ctf.jdo.sg.onetoone.Employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"ctf.jdo.sg.onetoone.Employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"employee\");"; + assertTrue(checkSource(_statement)); + + //-- ID + _statement = "String idFieldName = \"id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl idFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping idFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo idType = new TypeInfo(java.lang.Integer.class);"; + assertTrue(checkSource(_statement)); + + _statement = "idType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler idHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method idGetMethod = Employee.class.getMethod(\"getId\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method idSetMethod = Employee.class.getMethod(\"setId\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.Integer.class});"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler = new FieldHandlerImpl(idFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "idGetMethod, idSetMethod, idType);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr = new JDOFieldDescriptorImpl(idFieldName, idType,"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler, false, new String[] { id },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.Integer.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSetMethod(\"setId\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setGetMethod(\"getId\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql idSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.addName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSql(idSql);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setType(\"java.lang.Integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(idFM);"; + assertTrue(checkSource(_statement)); + + //-- ADDRESS_ID + _statement = "String addressFieldName = \"address\";"; + assertTrue(checkSource(_statement)); + + _statement = "String addressSqlName = \"address_id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl addressFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping addressFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo addressType = new TypeInfo(Address.class);"; + assertTrue(checkSource(_statement)); + + _statement = "addressType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler addressHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method addressGetMethod = Employee.class.getMethod(\"getAddress\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method addressSetMethod = Employee.class.getMethod(\"setAddress\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "Address.class});"; + assertTrue(checkSource(_statement)); + + _statement = "addressHandler = new FieldHandlerImpl(addressFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "addressGetMethod, addressSetMethod, addressType);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr = new JDOFieldDescriptorImpl(addressFieldName, addressType,"; + assertTrue(checkSource(_statement)); + + _statement = "addressHandler, false, new String[] { addressSqlName },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(Address.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] { addressSqlName }, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr.setClassDescriptor(new AddressJDODescriptor());"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setName(\"address\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setSetMethod(\"setAddress\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setGetMethod(\"getAddress\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql addressSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.addName(\"address_id\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.setManyKey(new String[] {\"address_id\"});"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setSql(addressSql);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setType(\"ctf.jdo.sg.onetoone.Address\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(addressFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {addressFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {idFieldDescr});"; + assertTrue(checkSource(_statement)); + } + + public final void testCreateSourceOneToMany() { + + //-- ClassInfo initialization + _jClass = new JClass("org.castor.cpa.functional.onetomany.House"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("house"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSInt type = new XSInt(true); + + //-- ID + String fieldName = "id"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("id"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_fieldInfo.getName()); + + //-- FLAT_ID + XSClass type2 = new XSClass(new JClass("org.castor.cpa.functional.onetomany.Flat")); + fieldName = "flat"; + _fieldInfo = new FieldInfo(type2, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + _fieldInfo.addNature(JDOOneToManyNature.class.getName()); + + JDOOneToManyNature manyNature = new JDOOneToManyNature(_fieldInfo); + manyNature.addForeignKey("flat_id"); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("flat"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"house\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(House.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"org.castor.cpa.functional.onetomany.House\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"org.castor.cpa.functional.onetomany.House\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"house\");"; + assertTrue(checkSource(_statement)); + + //-- ID + _statement = "String idFieldName = \"id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl idFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping idFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo idType = new TypeInfo(java.lang.Integer.class);"; + assertTrue(checkSource(_statement)); + + _statement = "idType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler idHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method idGetMethod = House.class.getMethod(\"getId\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method idSetMethod = House.class.getMethod(\"setId\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.Integer.class});"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler = new FieldHandlerImpl(idFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "idGetMethod, idSetMethod, idType);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr = new JDOFieldDescriptorImpl(idFieldName, idType,"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler, false, new String[] { id },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.Integer.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSetMethod(\"setId\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setGetMethod(\"getId\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql idSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.addName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSql(idSql);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setType(\"java.lang.Integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(idFM);"; + assertTrue(checkSource(_statement)); + + //-- FLAT_ID + _statement = "String flatFieldName = \"flat\";"; + assertTrue(checkSource(_statement)); + + _statement = "String flatSqlName = \"flat_id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl flatFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping flatFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo flatType = new TypeInfo(Flat.class);"; + assertTrue(checkSource(_statement)); + + _statement = "flatType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler flatHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method flatGetMethod = House.class.getMethod(\"getFlat\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method flatSetMethod = House.class.getMethod(\"setFlat\", new Class[]{List.class});"; + assertTrue(checkSource(_statement)); + + _statement = "flatHandler = new FieldHandlerImpl(flatFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "flatGetMethod, flatSetMethod, flatType);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr = new JDOFieldDescriptorImpl(flatFieldName, flatType,"; + assertTrue(checkSource(_statement)); + + _statement = "flatHandler, false, new String[] { flatSqlName },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(Flat.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] { flatSqlName }, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setClassDescriptor(new FlatJDODescriptor());"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setMultivalued(true);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setName(\"flat\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setCollection(FieldMappingCollectionType.ARRAYLIST);"; + assertTrue(checkSource(_statement)); + + _statement = "Sql flatSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.addName(\"flat_id\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.setManyKey(new String[] {\"flat_id\"});"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setSql(flatSql);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setType(\"org.castor.cpa.functional.onetomany.Flat\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(flatFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {flatFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {idFieldDescr});"; + assertTrue(checkSource(_statement)); + + } + + //------- + // Helper + //------- + /** + * Checks if the statement was correctly created. + * @param statement Statement which is to find + * @return true if Statement is in JSourceCode, false otherwise + */ + private boolean checkSource(final String statement) { + while (_vIterator.hasNext()) { + _jStatement = (JCodeStatement) _vIterator.next(); + if (_jStatement.toString().indexOf(statement) > -1) { + return true; + } + } + return false; + } + +} Index: codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java =================================================================== --- codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java (revision 0) +++ codegen/src/test/java/org/exolab/castor/builder/descriptors/JDOClassDescriptorFactoryTest.java (revision 0) @@ -0,0 +1,962 @@ +package org.exolab.castor.builder.descriptors; + +import java.util.Iterator; +import java.util.Vector; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.castor.xml.JavaNamingImpl; +import org.exolab.castor.builder.BuilderConfiguration; +import org.exolab.castor.builder.factory.FieldMemberAndAccessorFactory; +import org.exolab.castor.builder.info.ClassInfo; +import org.exolab.castor.builder.info.FieldInfo; +import org.exolab.castor.builder.info.nature.JDOClassInfoNature; +import org.exolab.castor.builder.info.nature.JDOFieldInfoNature; +import org.exolab.castor.builder.info.nature.XMLInfoNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToManyNature; +import org.exolab.castor.builder.info.nature.relation.JDOOneToOneNature; +import org.exolab.castor.builder.types.XSClass; +import org.exolab.castor.builder.types.XSInt; +import org.exolab.castor.builder.types.XSString; +import org.exolab.castor.mapping.AccessMode; +import org.exolab.javasource.JClass; +import org.exolab.javasource.JCodeStatement; +import org.exolab.javasource.JSourceCode; + + + + + +/** + * Unit test of the JDOClassDescriptorFactory + * @author Filip Hianik + * + */ +public class JDOClassDescriptorFactoryTest extends TestCase { + + /** + * Logger. + */ + private static final Log LOG = LogFactory.getLog(JDOClassDescriptorFactoryTest.class); + + private JDOClassDescriptorFactory _factory; + private ClassInfo _classInfo; + private BuilderConfiguration _config; + private JClass _jClass; + private JSourceCode _jsc; + private JClass _classDesc; + private String _statement; + private Vector _vector; + private Iterator _vIterator; + private JCodeStatement _jStatement; + private FieldInfo _fieldInfo; + private JDOClassInfoNature _cNature; + private JDOFieldInfoNature _fNature; + private XMLInfoNature _xmlNature; + private FieldMemberAndAccessorFactory _memberAndAccessorFactory; + + /** + * + * @return JUnit Test + * @throws Exception + * while creating the suite + */ + public static Test suite() throws Exception { + TestSuite suite = new TestSuite("Test JDOClassDescriptorFactory"); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceEntity")); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceOneToOne")); + suite.addTest(new JDOClassDescriptorFactoryTest("testCreateSourceOneToMany")); + return suite; + } + + /** + * Default Constructor. + */ + public JDOClassDescriptorFactoryTest() { + super(); + } + + /** + * Constructor that sets the name of the test. + * + * @param name + * of the test. + */ + public JDOClassDescriptorFactoryTest(final String name) { + super(name); + } + + /** + * Test SetUp Method. + * + * @throws Exception + * If an error during SetUp occured. + */ + protected final void setUp() throws Exception { + LOG.debug("SetUp"); + super.setUp(); + + _config = new BuilderConfiguration(); + _factory = new JDOClassDescriptorFactory(_config); + + //-- FieldInfo initialization + JavaNamingImpl naming = new JavaNamingImpl(); + _memberAndAccessorFactory = new FieldMemberAndAccessorFactory(naming); + } + + /** + * Test TearDown Method. + * + * @throws Exception + * If an error during TearDown occured. + */ + protected final void tearDown() throws Exception { + LOG.debug("TearDown"); + super.tearDown(); + } + + public final void testCreateSourceEntity() { + + //-- ClassInfo initialization + _jClass = new JClass("com.assembla.ase2.jdo.entity.Book"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("book"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSString type = new XSString(); + + //-- ISBN field + String fieldName = "isbn"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("isbn"); + _fNature.setColumnType("varchar"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_xmlNature.getNodeName()); + + //-- TITLE field + fieldName = "title"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("title"); + _fNature.setColumnType("varchar"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"book\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(Book.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"com.assembla.ase2.jdo.entity.Book\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"com.assembla.ase2.jdo.entity.Book\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"book\");"; + assertTrue(checkSource(_statement)); + + //-- ISBN + _statement = "String isbnFieldName = \"isbn\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl isbnFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping isbnFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo isbnType = new TypeInfo(java.lang.String.class);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler isbnHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method isbnGetMethod = Book.class.getMethod(\"getIsbn\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method isbnSetMethod = Book.class.getMethod(\"setIsbn\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.String.class});"; + assertTrue(checkSource(_statement)); + + _statement = "isbnHandler = new FieldHandlerImpl(isbnFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "isbnGetMethod, isbnSetMethod, isbnType);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr = new JDOFieldDescriptorImpl(isbnFieldName, isbnType,"; + assertTrue(checkSource(_statement)); + + _statement = "isbnHandler, false, new String[] { isbn },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.String.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setName(\"isbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setSetMethod(\"setIsbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setGetMethod(\"getIsbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql isbnSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "isbnSql.addName(\"isbn\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnSql.setType(\"varchar\");"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setSql(isbnSql);"; + assertTrue(checkSource(_statement)); + + _statement = "isbnFM.setType(\"java.lang.String\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(isbnFM);"; + assertTrue(checkSource(_statement)); + + //-- TITLE + _statement = "String titleFieldName = \"title\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl titleFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping titleFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo titleType = new TypeInfo(java.lang.String.class);"; + assertTrue(checkSource(_statement)); + + _statement = "titleType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler titleHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method titleGetMethod = Book.class.getMethod(\"getTitle\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method titleSetMethod = Book.class.getMethod(\"setTitle\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.String.class});"; + assertTrue(checkSource(_statement)); + + _statement = "titleHandler = new FieldHandlerImpl(titleFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "titleGetMethod, titleSetMethod, titleType);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr = new JDOFieldDescriptorImpl(titleFieldName, titleType,"; + assertTrue(checkSource(_statement)); + + _statement = "titleHandler, false, new String[] { title },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.String.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFieldDescr.setIdentity(false)"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setName(\"title\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setSetMethod(\"setTitle\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setGetMethod(\"getTitle\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql titleSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "titleSql.addName(\"title\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleSql.setType(\"varchar\");"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setSql(titleSql);"; + assertTrue(checkSource(_statement)); + + _statement = "titleFM.setType(\"java.lang.String\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(titleFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {titleFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {isbnFieldDescr});"; + assertTrue(checkSource(_statement)); + + } + + public final void testCreateSourceOneToOne() { + + //-- ClassInfo initialization + _jClass = new JClass("ctf.jdo.sg.onetoone.Employee"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("employee"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSInt type = new XSInt(true); + + //-- ID + String fieldName = "id"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("id"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_fieldInfo.getName()); + + //-- ADDRESS_ID + XSClass type2 = new XSClass(new JClass("ctf.jdo.sg.onetoone.Address")); + fieldName = "address"; + _fieldInfo = new FieldInfo(type2, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + _fieldInfo.addNature(JDOOneToOneNature.class.getName()); + + JDOOneToOneNature oneNature = new JDOOneToOneNature(_fieldInfo); + oneNature.addForeignKey("address_id"); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("address"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(Employee.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"ctf.jdo.sg.onetoone.Employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"ctf.jdo.sg.onetoone.Employee\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"employee\");"; + assertTrue(checkSource(_statement)); + + //-- ID + _statement = "String idFieldName = \"id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl idFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping idFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo idType = new TypeInfo(java.lang.Integer.class);"; + assertTrue(checkSource(_statement)); + + _statement = "idType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler idHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method idGetMethod = Employee.class.getMethod(\"getId\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method idSetMethod = Employee.class.getMethod(\"setId\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.Integer.class});"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler = new FieldHandlerImpl(idFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "idGetMethod, idSetMethod, idType);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr = new JDOFieldDescriptorImpl(idFieldName, idType,"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler, false, new String[] { id },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.Integer.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSetMethod(\"setId\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setGetMethod(\"getId\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql idSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.addName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSql(idSql);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setType(\"java.lang.Integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(idFM);"; + assertTrue(checkSource(_statement)); + + //-- ADDRESS_ID + _statement = "String addressFieldName = \"address\";"; + assertTrue(checkSource(_statement)); + + _statement = "String addressSqlName = \"address_id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl addressFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping addressFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo addressType = new TypeInfo(Address.class);"; + assertTrue(checkSource(_statement)); + + _statement = "addressType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler addressHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method addressGetMethod = Employee.class.getMethod(\"getAddress\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method addressSetMethod = Employee.class.getMethod(\"setAddress\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "Address.class});"; + assertTrue(checkSource(_statement)); + + _statement = "addressHandler = new FieldHandlerImpl(addressFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "addressGetMethod, addressSetMethod, addressType);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr = new JDOFieldDescriptorImpl(addressFieldName, addressType,"; + assertTrue(checkSource(_statement)); + + _statement = "addressHandler, false, new String[] { addressSqlName },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(Address.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] { addressSqlName }, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFieldDescr.setClassDescriptor(new AddressJDODescriptor());"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setName(\"address\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setSetMethod(\"setAddress\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setGetMethod(\"getAddress\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql addressSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.addName(\"address_id\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "addressSql.setManyKey(new String[] {\"address_id\"});"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setSql(addressSql);"; + assertTrue(checkSource(_statement)); + + _statement = "addressFM.setType(\"ctf.jdo.sg.onetoone.Address\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(addressFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {addressFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {idFieldDescr});"; + assertTrue(checkSource(_statement)); + } + + public final void testCreateSourceOneToMany() { + + //-- ClassInfo initialization + _jClass = new JClass("org.castor.cpa.functional.onetomany.House"); + _classInfo = new ClassInfo(_jClass); + _classInfo.addNature(JDOClassInfoNature.class.getName()); + _cNature = new JDOClassInfoNature(_classInfo); + + //-- classInfo settings + _cNature.setTableName("house"); + _cNature.setAccessMode(AccessMode.Shared); + + //-- fieldInfo settings + XSInt type = new XSInt(true); + + //-- ID + String fieldName = "id"; + _fieldInfo = new FieldInfo(type, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("id"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + _cNature.addPrimaryKey(_fieldInfo.getName()); + + //-- FLAT_ID + XSClass type2 = new XSClass(new JClass("org.castor.cpa.functional.onetomany.Flat")); + fieldName = "flat"; + _fieldInfo = new FieldInfo(type2, fieldName, _memberAndAccessorFactory); + _fieldInfo.addNature(JDOFieldInfoNature.class.getName()); + _fieldInfo.addNature(JDOOneToManyNature.class.getName()); + + JDOOneToManyNature manyNature = new JDOOneToManyNature(_fieldInfo); + manyNature.addForeignKey("flat_id"); + + _xmlNature = new XMLInfoNature(_fieldInfo); + _xmlNature.setNodeName(fieldName); + _xmlNature.setRequired(true); + + _fNature = new JDOFieldInfoNature(_fieldInfo); + _fNature.setColumnName("flat"); + _fNature.setColumnType("integer"); + _fNature.setDirty(false); + _fNature.setReadOnly(false); + + _classInfo.addFieldInfo(_fieldInfo); + + //-- creating of source + _classDesc = _factory.createSource(_classInfo); + _jsc = _classDesc.getConstructor(0).getSourceCode(); + _vector = _jsc.getSource(); + _vIterator = _vector.iterator(); + + //-- assertions + _statement = "setTableName(\"house\");"; + assertTrue(checkSource(_statement)); + + _statement = "setJavaClass(House.class);"; + assertTrue(checkSource(_statement)); + + _statement = "setAccessMode(AccessMode.valueOf(\"shared\"))"; + assertTrue(checkSource(_statement)); + + _statement = "addCacheParam(\"name\",\"org.castor.cpa.functional.onetomany.House\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setAccess(ClassMappingAccessType.valueOf(\"shared\"));"; + assertTrue(checkSource(_statement)); + + _statement = "mapping.setName(\"org.castor.cpa.functional.onetomany.House\");"; + assertTrue(checkSource(_statement)); + + _statement = "mapTo.setTable(\"house\");"; + assertTrue(checkSource(_statement)); + + //-- ID + _statement = "String idFieldName = \"id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl idFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping idFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo idType = new TypeInfo(java.lang.Integer.class);"; + assertTrue(checkSource(_statement)); + + _statement = "idType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler idHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method idGetMethod = House.class.getMethod(\"getId\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method idSetMethod = House.class.getMethod(\"setId\", new Class[]{"; + assertTrue(checkSource(_statement)); + + _statement = "java.lang.Integer.class});"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler = new FieldHandlerImpl(idFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "idGetMethod, idSetMethod, idType);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr = new JDOFieldDescriptorImpl(idFieldName, idType,"; + assertTrue(checkSource(_statement)); + + _statement = "idHandler, false, new String[] { id },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(java.lang.Integer.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] {}, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "idFieldDescr.setIdentity(true)"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setIdentity(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSetMethod(\"setId\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setGetMethod(\"getId\");"; + assertTrue(checkSource(_statement)); + + _statement = "Sql idSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.addName(\"id\");"; + assertTrue(checkSource(_statement)); + + _statement = "idSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setSql(idSql);"; + assertTrue(checkSource(_statement)); + + _statement = "idFM.setType(\"java.lang.Integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(idFM);"; + assertTrue(checkSource(_statement)); + + //-- FLAT_ID + _statement = "String flatFieldName = \"flat\";"; + assertTrue(checkSource(_statement)); + + _statement = "String flatSqlName = \"flat_id\";"; + assertTrue(checkSource(_statement)); + + _statement = "JDOFieldDescriptorImpl flatFieldDescr;"; + assertTrue(checkSource(_statement)); + + _statement = "FieldMapping flatFM = new FieldMapping();"; + assertTrue(checkSource(_statement)); + + _statement = "TypeInfo flatType = new TypeInfo(Flat.class);"; + assertTrue(checkSource(_statement)); + + _statement = "flatType.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "FieldHandler flatHandler;"; + assertTrue(checkSource(_statement)); + + _statement = "Method flatGetMethod = House.class.getMethod(\"getFlat\", null);"; + assertTrue(checkSource(_statement)); + + _statement = "Method flatSetMethod = House.class.getMethod(\"setFlat\", new Class[]{List.class});"; + assertTrue(checkSource(_statement)); + + _statement = "flatHandler = new FieldHandlerImpl(flatFieldName, null, null"; + assertTrue(checkSource(_statement)); + + _statement = "flatGetMethod, flatSetMethod, flatType);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr = new JDOFieldDescriptorImpl(flatFieldName, flatType,"; + assertTrue(checkSource(_statement)); + + _statement = "flatHandler, false, new String[] { flatSqlName },"; + assertTrue(checkSource(_statement)); + + _statement = "new int[] {SQLTypeInfos"; + assertTrue(checkSource(_statement)); + + _statement = ".javaType2sqlTypeNum(Flat.class) },"; + assertTrue(checkSource(_statement)); + + _statement = "null, new String[] { flatSqlName }, false, false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setContainingClassDescriptor(this);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setClassDescriptor(new FlatJDODescriptor());"; + assertTrue(checkSource(_statement)); + + _statement = "flatFieldDescr.setMultivalued(true);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setIdentity(false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setDirect(false);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setName(\"flat\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setRequired(true);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setCollection(FieldMappingCollectionType.ARRAYLIST);"; + assertTrue(checkSource(_statement)); + + _statement = "Sql flatSql = new Sql();"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.addName(\"flat_id\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.setType(\"integer\");"; + assertTrue(checkSource(_statement)); + + _statement = "flatSql.setManyKey(new String[] {\"flat_id\"});"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setSql(flatSql);"; + assertTrue(checkSource(_statement)); + + _statement = "flatFM.setType(\"org.castor.cpa.functional.onetomany.Flat\");"; + assertTrue(checkSource(_statement)); + + _statement = "choice.addFieldMapping(flatFM);"; + assertTrue(checkSource(_statement)); + + _statement = "setFields(new FieldDescriptor[] {flatFieldDescr});"; + assertTrue(checkSource(_statement)); + + _statement = "setIdentities(new FieldDescriptor[] {idFieldDescr});"; + assertTrue(checkSource(_statement)); + + } + + //------- + // Helper + //------- + /** + * Checks if the statement was correctly created. + * @param statement Statement which is to find + * @return true if Statement is in JSourceCode, false otherwise + */ + private boolean checkSource(final String statement) { + while (_vIterator.hasNext()) { + _jStatement = (JCodeStatement) _vIterator.next(); + if (_jStatement.toString().indexOf(statement) > -1) { + return true; + } + } + return false; + } + +}