Author: arminw
Date: Thu Aug 10 15:51:20 2006
New Revision: 430577
URL: http://svn.apache.org/viewvc?rev=430577&view=rev
Log:
apply patch by Tom Antony
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/tools/org/apache/ojb/tools/mapping/forward/RepositoryXmlProcessor.java
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/tools/org/apache/ojb/tools/mapping/forward/RepositoryXmlProcessor.java
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/tools/org/apache/ojb/tools/mapping/forward/RepositoryXmlProcessor.java?rev=430577&r1=430576&r2=430577&view=diff
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/tools/org/apache/ojb/tools/mapping/forward/RepositoryXmlProcessor.java
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/tools/org/apache/ojb/tools/mapping/forward/RepositoryXmlProcessor.java
Thu Aug 10 15:51:20 2006
@@ -39,11 +39,18 @@
* Utility to process OJB's repository.xml file and generate Java bean source
code and
* SQL schema in Torque XML format.
*
+ * Persistent inner classes
+ * ------------------------
+ *
+ * The utility supports persistent inner classes. In case the outer class is
not defined in the OR mapping
+ * metadata an artificial outer class is generated to hold the inner class(es).
+ *
* Auto generated indirection tables
* ---------------------------------
*
* If there are no explicit mappings for an indirection table, the utility
generates the SQL
- * schema for it including referential constraints.
+ * schema for it including referential constraints. The utility also takes
care of one sided
+ * m:n mappings where the indirection table is specified by only one party.
*
* An indirection table associates two tables. So it will contain two
referential constraints,
* one for each of the associated table. The primary key will be a combination
of the foreign
@@ -112,10 +119,10 @@
/**
* Creates a new instance of the repository xml processor.
*
- * @param repositoryXml the path of the repository.xml to be processed.
- * @param dbOutputDirectory the output directory into which java beans
and Torque xml are
+ * @param repositoryXml the path of the repository.xml to be processed.
+ * @param dbOutputDirectory the output directory into which java beans and
Torque xml are
* generated, specify null for current directory.
- * @param beanOutputDirectory the name of the Torque xml file, specify
null for the default
+ * @param beanOutputDirectory the name of the Torque xml file, specify
null for the default
* which is is 'ojb-torque.xml'.
*/
public RepositoryXmlProcessor(String repositoryXml, String
dbOutputDirectory, String beanOutputDirectory) throws Exception
@@ -134,18 +141,18 @@
}
/*
- * Convinience method.
- */
+ * Convinience method.
+ */
private Table getTableInfo(Element clsDescElem)
{
return getTableInfo(clsDescElem, true);
}
- /*
- * Get the table description associated with a <class-descriptor>
element.
- * If recurse is true, explore <reference-descriptor> elements, else
return after
- * filling in the columns.
- */
+ /*
+ * Get the table description associated with a <class-descriptor>
element.
+ * If recurse is true, explore <reference-descriptor> elements, else
return after
+ * filling in the columns.
+ */
private Table getTableInfo(Element clsDescElem, boolean recurse)
{
Table table = new Table();
@@ -248,8 +255,8 @@
}
/*
- * Returns set of all table names.
- */
+ * Returns set of all table names.
+ */
private Set allTables(Document doc)
{
Set tableNames = new HashSet();
@@ -264,33 +271,33 @@
}
/*
- * Returns set of names of tables mapped to multiple classes. This
includes tables used as indirection tables
- * betwen two entities in addition to having explicit mappings.
- */
+ * Returns set of names of tables mapped to multiple classes. This
includes tables used as indirection tables
+ * betwen two entities in addition to having explicit mappings.
+ */
private Set duplicateTables(Document doc)
{
Set workingSet = new HashSet();
Set duplicateSet = new HashSet();
- NodeList clsDescList =
doc.getElementsByTagName("class-descriptor");
+ NodeList clsDescList = doc.getElementsByTagName("class-descriptor");
- /* First collect all indirection tables into the working set. */
- for(int i = 0; i < clsDescList.getLength(); i++)
- {
- Element clsDescElem = (Element) clsDescList.item(i);
+ /* First collect all indirection tables into the working set. */
+ for(int i = 0; i < clsDescList.getLength(); i++)
+ {
+ Element clsDescElem = (Element) clsDescList.item(i);
NodeList colDescList =
clsDescElem.getElementsByTagName("collection-descriptor");
- for(int j = 0; j < colDescList.getLength(); j++)
- {
- Element colDescElem = (Element)
colDescList.item(j);
+ for(int j = 0; j < colDescList.getLength(); j++)
+ {
+ Element colDescElem = (Element) colDescList.item(j);
String indirectionTableName =
colDescElem.getAttribute("indirection-table");
if(StringUtils.isNotBlank(indirectionTableName))
{
- workingSet.add(indirectionTableName);
- }
- }
- }
+ workingSet.add(indirectionTableName);
+ }
+ }
+ }
for(int i = 0; i < clsDescList.getLength(); i++)
{
@@ -305,8 +312,8 @@
}
/*
- * Merge the src table into the target.
- */
+ * Merge the src table into the target.
+ */
private void mergeTables(Table target, Table src)
{
// merge columns
@@ -340,7 +347,9 @@
}
}
- /** Generate the Torque format SQL schema definitions. */
+ /**
+ * Generate the Torque format SQL schema definitions.
+ */
public void generateSQL() throws Exception
{
Set allTables = allTables(doc);
@@ -362,10 +371,10 @@
{
try
{
- /*
- * If table has multiple class mappings, keep the table
structure in the deferred
- * list and keep merging later definitions we encounter.
- */
+ /*
+ * If table has multiple class mappings, keep the
table structure in the deferred
+ * list and keep merging later definitions we
encounter.
+ */
if(duplicateTables.contains(tableName))
{
Table existingTable = (Table)
deferredTables.get(tableName);
@@ -392,67 +401,131 @@
{
Table indirectionTable = (Table)
indirectionTables.get(indirectionTableName);
+ /*
+ * Who ever who sees the
'indirection-table' first handles filling up
+ * all details. This also takes care of a
corner case where only one party
+ * defines the 'indirection-table' i.e
one-sided m:n mapping.
+ */
if(indirectionTable == null)
{
indirectionTable = new Table();
indirectionTable.name = indirectionTableName;
indirectionTables.put(indirectionTableName,
indirectionTable);
- }
- // Generate one foreign key constraint for the
current table.
- ForeignKey foreignKey = new ForeignKey();
+ // Generate one foreign key constraint for the
current table.
+ ForeignKey foreignKey = new ForeignKey();
- indirectionTable.foreignKeys.add(foreignKey);
+ indirectionTable.foreignKeys.add(foreignKey);
- foreignKey.foreignTable = currentTable.name;
+ foreignKey.foreignTable = currentTable.name;
- NodeList fkSelfList =
colDescElem.getElementsByTagName("fk-pointing-to-this-class");
- for(int k = 0; k < fkSelfList.getLength(); k++)
- {
- Element fkSelfElem = (Element)
fkSelfList.item(k);
- String columnName =
fkSelfElem.getAttribute("column");
+ NodeList fkSelfList =
colDescElem.getElementsByTagName("fk-pointing-to-this-class");
+ for(int k = 0; k < fkSelfList.getLength(); k++)
+ {
+ Element fkSelfElem = (Element)
fkSelfList.item(k);
+ String columnName =
fkSelfElem.getAttribute("column");
- Column column = new Column();
- indirectionTable.columns.add(column);
+ Column column = new Column();
+ indirectionTable.columns.add(column);
- column.name = columnName;
- foreignKey.localColumns.add(columnName);
+ column.name = columnName;
+ foreignKey.localColumns.add(columnName);
- /*
- * Foreign keys pointing to current table
in the <collection-descriptor>
- * element should match primary keys of
current table in the same sequence.
- * Match attributes for indirection
columns with corresponding primary key columns.
- */
- String foreignColumnName = null;
- String foreignColumnType = null;
- String foreignColumnLength = null;
+ /*
+ * Foreign keys pointing
to current table in the <collection-descriptor>
+ * element should match
primary keys of current table in the same sequence.
+ * Match attributes for
indirection columns with corresponding primary key columns.
+ */
+ String foreignColumnName = null;
+ String foreignColumnType = null;
+ String foreignColumnLength = null;
- int primaryKeyCounter = 0;
- for(int q = 0; q <
currentTable.columns.size(); q++)
- {
- Column currentTableColumn = (Column)
currentTable.columns.get(q);
- if(currentTableColumn.isPrimaryKey)
+ int primaryKeyCounter = 0;
+ for(int q = 0; q <
currentTable.columns.size(); q++)
{
- if(primaryKeyCounter == k)
+ Column currentTableColumn = (Column)
currentTable.columns.get(q);
+ if(currentTableColumn.isPrimaryKey)
{
- foreignColumnName =
currentTableColumn.name;
- foreignColumnType =
currentTableColumn.jdbcType;
- foreignColumnLength =
currentTableColumn.length;
- break;
+ if(primaryKeyCounter == k)
+ {
+ foreignColumnName =
currentTableColumn.name;
+ foreignColumnType =
currentTableColumn.jdbcType;
+ foreignColumnLength =
currentTableColumn.length;
+ break;
+ }
+ else
+ primaryKeyCounter++;
}
- else
- primaryKeyCounter++;
}
+
+ column.jdbcType = foreignColumnType;
+ column.length = foreignColumnLength;
+
foreignKey.foreignColumns.add(foreignColumnName);
+
+ // All indirection columns become part of
primary key for indirection table.
+ column.isPrimaryKey = true;
+ column.isNullable = false;
}
- column.jdbcType = foreignColumnType;
- column.length = foreignColumnLength;
-
foreignKey.foreignColumns.add(foreignColumnName);
-
- // All indirection columns become part of
primary key for indirection table.
- column.isPrimaryKey = true;
- column.isNullable = false;
+ // Generate one foreign key constraint for the
other table.
+ ForeignKey otherForeignKey = new ForeignKey();
+
indirectionTable.foreignKeys.add(otherForeignKey);
+
+ NodeList fkOtherList =
colDescElem.getElementsByTagName("fk-pointing-to-element-class");
+ for(int k = 0; k < fkOtherList.getLength();
k++)
+ {
+ Element fkOtherElem = (Element)
fkOtherList.item(k);
+ String columnName =
fkOtherElem.getAttribute("column");
+
+ Column column = new Column();
+ indirectionTable.columns.add(column);
+
+ column.name = columnName;
+
otherForeignKey.localColumns.add(columnName);
+
+ /*
+ * Foreign keys pointing
to other table in the <collection-descriptor>
+ * element should match
primary keys of other table in the same sequence.
+ * Match attributes for
indirection columns with corresponding primary key columns.
+ */
+ String foreignColumnName = null;
+ String foreignColumnType = null;
+ String foreignColumnLength = null;
+
+ String otherClass =
colDescElem.getAttribute("element-class-ref");
+
+ Element otherClassElem = findClass(doc,
otherClass);
+ Table otherTable =
getTableInfo(otherClassElem);
+
+ otherForeignKey.foreignTable =
otherTable.name;
+
+ int primaryKeyCounter = 0;
+ for(int q = 0; q <
otherTable.columns.size(); q++)
+ {
+ Column otherTableColumn = (Column)
otherTable.columns.get(q);
+ if(otherTableColumn.isPrimaryKey)
+ {
+ if(primaryKeyCounter == k)
+ {
+ foreignColumnName =
otherTableColumn.name;
+ foreignColumnType =
otherTableColumn.jdbcType;
+ foreignColumnLength =
otherTableColumn.length;
+ break;
+ }
+ else
+ primaryKeyCounter++;
+ }
+ }
+
+ column.jdbcType = foreignColumnType;
+ column.length = foreignColumnLength;
+
otherForeignKey.foreignColumns.add(foreignColumnName);
+
+ // All indirection columns become part of
primary key for indirection table.
+ column.isPrimaryKey = true;
+ column.isNullable = false;
+ }
}
}
}
@@ -465,24 +538,23 @@
}
/*
- * Deferred tables also includes tables which are also used as
indirection tables in addition to
- * having explicit mapping. So merge them with the corresponding
indirection table if any.
- */
+ * Deferred tables also includes tables which are also used as
indirection tables in addition to
+ * having explicit mapping. So merge them with the corresponding
indirection table if any.
+ */
Set defKeySet = deferredTables.keySet();
- Iterator defKeysItr = defKeySet.iterator();
- while(defKeysItr.hasNext())
- {
- String tableName = (String) defKeysItr.next();
-
- Table defferedTable = (Table)
deferredTables.get(tableName);
- Table indirectionTable = (Table)
indirectionTables.get(tableName);
-
- if(indirectionTable != null)
- {
- mergeTables(defferedTable, indirectionTable);
- }
+ Iterator defKeysItr = defKeySet.iterator();
+ while(defKeysItr.hasNext())
+ {
+ String tableName = (String) defKeysItr.next();
+
+ Table defferedTable = (Table) deferredTables.get(tableName);
+ Table indirectionTable = (Table) indirectionTables.get(tableName);
- }
+ if(indirectionTable != null)
+ {
+ mergeTables(defferedTable, indirectionTable);
+ }
+ }
/* Generate deferred tables at the end. */
@@ -497,21 +569,20 @@
fwr.write(tableStr);
}
- /*
- * Generate tables for indirection tables at the end. Table
structure for an
- * indirection table gets filled up after processing both of the
association tables.
- */
-
+ /*
+ * Generate tables for indirection tables at the end. Table
structure for an
+ * indirection table gets filled up after processing both of the
association tables.
+ */
Set indKeySet = indirectionTables.keySet();
Iterator indKeysItr = indKeySet.iterator();
while(indKeysItr.hasNext())
{
String tableName = (String) indKeysItr.next();
- /*
- * Sometimes there can be explicit mappings for
indirection tables. In such cases
- * skip the auto generation of indirection table.
- */
+ /*
+ * Sometimes there can be explicit mappings for
indirection tables. In such cases
+ * skip the auto generation of indirection table.
+ */
if(allTables.contains(tableName))
continue;
@@ -525,234 +596,233 @@
fwr.close();
}
- /**
- * Return bean descriptor for a class descriptor element.
- * This method always returns an empty list for inner classes.
- */
- private BeanDescriptor getBeanDescriptor(Element clsDescElem)
- {
- String clsName = clsDescElem.getAttribute("class");
-
- String packageName = null;
- String className;
-
- /* Handle inner class names */
- if(clsName.indexOf("$") != -1)
- {
- int index = clsName.indexOf("$");
- className = clsName.substring(index + 1);
- }
- else
- {
- int indexDot = clsName.lastIndexOf(".");
- if(indexDot == -1)
- className = clsName;
- else
- {
- packageName = clsName.substring(0, indexDot);
- className = clsName.substring(indexDot + 1);
- }
- }
-
- String baseClass = null;
- ArrayList attributes = new ArrayList();
- ArrayList types = new ArrayList();
-
- NodeList refDescList =
clsDescElem.getElementsByTagName("reference-descriptor");
- for(int j = 0; j < refDescList.getLength(); j++)
- {
- Element refDescElem = (Element) refDescList.item(j);
-
- String fieldName = refDescElem.getAttribute("name");
- String classRef = refDescElem.getAttribute("class-ref");
- classRef = classRef.replace('$', '.'); // handle inner
classes
-
- // handle super references
- if(fieldName.equals("super"))
- {
- baseClass = classRef;
- }
- else
- {
- attributes.add(fieldName);
- types.add(classRef);
- }
- }
-
- NodeList fldDescList =
clsDescElem.getElementsByTagName("field-descriptor");
- for(int j = 0; j < fldDescList.getLength(); j++)
- {
- Element fldDescElem = (Element) fldDescList.item(j);
-
- String fieldName = fldDescElem.getAttribute("name");
- String jdbcType = fldDescElem.getAttribute("jdbc-type");
- String primaryKey =
fldDescElem.getAttribute("primarykey");
- boolean isPrimaryKey = primaryKey != null &&
primaryKey.equals("true");
- String type = (String) typeMap.get(jdbcType);
-
- /*
- * If baseClass is set using the 'super'
reference then primary key
- * fields are being repeated only for join
purpose.
- */
- if(baseClass == null || !isPrimaryKey)
- {
- attributes.add(fieldName);
- types.add(type);
- }
- }
-
- NodeList colDescList =
clsDescElem.getElementsByTagName("collection-descriptor");
- for(int j = 0; j < colDescList.getLength(); j++)
- {
- Element colDescElem = (Element) colDescList.item(j);
-
- String fieldName = colDescElem.getAttribute("name");
- String type = "java.util.List";
-
- attributes.add(fieldName);
- types.add(type);
- }
+ /**
+ * Return bean descriptor for a class descriptor element.
+ * This method always returns an empty list for inner classes.
+ */
+ private BeanDescriptor getBeanDescriptor(Element clsDescElem)
+ {
+ String clsName = clsDescElem.getAttribute("class");
+
+ String packageName = null;
+ String className;
+
+ /* Handle inner class names */
+ if(clsName.indexOf("$") != -1)
+ {
+ int index = clsName.indexOf("$");
+ className = clsName.substring(index + 1);
+ }
+ else
+ {
+ int indexDot = clsName.lastIndexOf(".");
+ if(indexDot == -1)
+ className = clsName;
+ else
+ {
+ packageName = clsName.substring(0, indexDot);
+ className = clsName.substring(indexDot + 1);
+ }
+ }
+
+ String baseClass = null;
+ ArrayList attributes = new ArrayList();
+ ArrayList types = new ArrayList();
+
+ NodeList refDescList =
clsDescElem.getElementsByTagName("reference-descriptor");
+ for(int j = 0; j < refDescList.getLength(); j++)
+ {
+ Element refDescElem = (Element) refDescList.item(j);
+
+ String fieldName = refDescElem.getAttribute("name");
+ String classRef = refDescElem.getAttribute("class-ref");
+ classRef = classRef.replace('$', '.'); // handle inner classes
+
+ // handle super references
+ if(fieldName.equals("super"))
+ {
+ baseClass = classRef;
+ }
+ else
+ {
+ attributes.add(fieldName);
+ types.add(classRef);
+ }
+ }
+
+ NodeList fldDescList =
clsDescElem.getElementsByTagName("field-descriptor");
+ for(int j = 0; j < fldDescList.getLength(); j++)
+ {
+ Element fldDescElem = (Element) fldDescList.item(j);
+
+ String fieldName = fldDescElem.getAttribute("name");
+ String jdbcType = fldDescElem.getAttribute("jdbc-type");
+ String primaryKey = fldDescElem.getAttribute("primarykey");
+ boolean isPrimaryKey = primaryKey != null &&
primaryKey.equals("true");
+ String type = (String) typeMap.get(jdbcType);
+
+ /*
+ * If baseClass is set using the 'super' reference then
primary key
+ * fields are being repeated only for join purpose.
+ */
+ if(baseClass == null || !isPrimaryKey)
+ {
+ attributes.add(fieldName);
+ types.add(type);
+ }
+ }
+
+ NodeList colDescList =
clsDescElem.getElementsByTagName("collection-descriptor");
+ for(int j = 0; j < colDescList.getLength(); j++)
+ {
+ Element colDescElem = (Element) colDescList.item(j);
+
+ String fieldName = colDescElem.getAttribute("name");
+ String type = "java.util.List";
+
+ attributes.add(fieldName);
+ types.add(type);
+ }
- ArrayList innerClasses = new ArrayList();
+ ArrayList innerClasses = new ArrayList();
return new BeanDescriptor(packageName, className, baseClass, null,
- attributes, types, innerClasses);
- }
+ attributes, types, innerClasses);
+ }
/**
- * Generate the source for Java beans mapped to tables.
+ * Generate the source for Java beans mapped to tables.
*
- * For inner classes, if the parent is not a persistent class defined in
the mapping metadata, then a holder parent
- * class will be generated to hold the inner classes.
+ * For inner classes, if the parent is not a persistent class defined in
the mapping metadata, then a holder parent
+ * class will be generated to hold the inner classes.
*/
public void generateJavaCode() throws Exception
{
- /*
- First form a mapping of inner classes to their outer classes,
with outer class as the key
- and a list of inner class names as the value.
- */
- HashMap innerOuterClassMap = new HashMap();
-
- NodeList clsDescList =
doc.getElementsByTagName("class-descriptor");
-
- for(int i = 0; i < clsDescList.getLength(); i++)
- {
- Element clsDescElem = (Element) clsDescList.item(i);
+ /*
+ First form a mapping of inner classes to their outer classes, with
outer class as the key
+ and a list of inner class names as the value.
+ */
+ HashMap innerOuterClassMap = new HashMap();
+
+ NodeList clsDescList = doc.getElementsByTagName("class-descriptor");
+
+ for(int i = 0; i < clsDescList.getLength(); i++)
+ {
+ Element clsDescElem = (Element) clsDescList.item(i);
String clsName = clsDescElem.getAttribute("class");
- if(clsName.indexOf("$") != -1)
- {
- int index = clsName.indexOf("$");
- String outerClass = clsName.substring(0,index);
- String innerClass = clsName.substring(index +
1);
- if(innerOuterClassMap.get(outerClass) == null)
- {
- ArrayList list = new ArrayList();
- list.add(innerClass);
- innerOuterClassMap.put(outerClass,
list);
- }
- else
- {
- ArrayList list = (ArrayList)
innerOuterClassMap.get(outerClass);
- list.add(innerClass);
- }
- }
- }
+ if(clsName.indexOf("$") != -1)
+ {
+ int index = clsName.indexOf("$");
+ String outerClass = clsName.substring(0, index);
+ String innerClass = clsName.substring(index + 1);
+ if(innerOuterClassMap.get(outerClass) == null)
+ {
+ ArrayList list = new ArrayList();
+ list.add(innerClass);
+ innerOuterClassMap.put(outerClass, list);
+ }
+ else
+ {
+ ArrayList list = (ArrayList)
innerOuterClassMap.get(outerClass);
+ list.add(innerClass);
+ }
+ }
+ }
- /* A map holding descriptions for inner classes. */
- HashMap innerDescriptionsMap = new HashMap();
+ /* A map holding descriptions for inner classes. */
+ HashMap innerDescriptionsMap = new HashMap();
- /* Also collect the inner class descriptions upfront before
generating outer class definitions. */
+ /* Also collect the inner class descriptions upfront before generating
outer class definitions. */
for(int i = 0; i < clsDescList.getLength(); i++)
{
Element clsDescElem = (Element) clsDescList.item(i);
- String clsName = clsDescElem.getAttribute("class");
+ String clsName = clsDescElem.getAttribute("class");
- if(clsName.indexOf("$") != -1)
- {
- int index = clsName.indexOf("$");
- String innerClass = clsName.substring(index +
1);
+ if(clsName.indexOf("$") != -1)
+ {
+ int index = clsName.indexOf("$");
+ String innerClass = clsName.substring(index + 1);
- BeanDescriptor descriptor =
getBeanDescriptor(clsDescElem);
+ BeanDescriptor descriptor = getBeanDescriptor(clsDescElem);
- innerDescriptionsMap.put(innerClass,
descriptor);
- }
+ innerDescriptionsMap.put(innerClass, descriptor);
+ }
}
- /* Now generate class definitions for persistent outer classes
defined in metadata */
+ /* Now generate class definitions for persistent outer classes defined
in metadata */
for(int i = 0; i < clsDescList.getLength(); i++)
- {
- Element clsDescElem = (Element) clsDescList.item(i);
-
- String clsName = clsDescElem.getAttribute("class");
+ {
+ Element clsDescElem = (Element) clsDescList.item(i);
- if(clsName.indexOf("$") == -1)
- {
- BeanDescriptor descriptor =
getBeanDescriptor(clsDescElem);
+ String clsName = clsDescElem.getAttribute("class");
- /* Set innerClasses list (if present) for the
outer class. */
+ if(clsName.indexOf("$") == -1)
+ {
+ BeanDescriptor descriptor = getBeanDescriptor(clsDescElem);
- ArrayList innerDescriptors =
descriptor.innerClasses();
+ /* Set innerClasses list (if present) for the outer class. */
- ArrayList innerClassList = (ArrayList)
innerOuterClassMap.get(clsName);
+ ArrayList innerDescriptors = descriptor.innerClasses();
- if(innerClassList != null)
- {
- for(int j = 0; j <
innerClassList.size(); j++)
- {
- String innerClass = (String)
innerClassList.get(j);
+ ArrayList innerClassList = (ArrayList)
innerOuterClassMap.get(clsName);
- BeanDescriptor innerDescriptor
= (BeanDescriptor) innerDescriptionsMap.get(innerClass);
+ if(innerClassList != null)
+ {
+ for(int j = 0; j < innerClassList.size(); j++)
+ {
+ String innerClass = (String) innerClassList.get(j);
-
innerDescriptors.add(innerDescriptor);
- }
- }
+ BeanDescriptor innerDescriptor = (BeanDescriptor)
innerDescriptionsMap.get(innerClass);
+ innerDescriptors.add(innerDescriptor);
+ }
+ }
- BeanGenerator generator = new
BeanGenerator(beanOutputDirectory);
- generator.generate(descriptor);
+ BeanGenerator generator = new
BeanGenerator(beanOutputDirectory);
+ generator.generate(descriptor);
- /* Remove persistent outer classes from
mappings for the next stage. */
- innerOuterClassMap.remove(clsName);
- }
+ /* Remove persistent outer classes from mappings for the next
stage. */
+ innerOuterClassMap.remove(clsName);
+ }
}
/* Generate holder outer classes for inner classes without persistent
outer classes defined */
Iterator itr = innerOuterClassMap.keySet().iterator();
while(itr.hasNext())
{
- String outerClass = (String) itr.next();
+ String outerClass = (String) itr.next();
- ArrayList innerDescriptors = new ArrayList();
+ ArrayList innerDescriptors = new ArrayList();
- ArrayList innerClassList = (ArrayList)
innerOuterClassMap.get(outerClass);
- for(int i = 0; i < innerClassList.size(); i++)
- {
- String innerClass = (String)
innerClassList.get(i);
- BeanDescriptor innerDescriptor =
(BeanDescriptor) innerDescriptionsMap.get(innerClass);
- innerDescriptors.add(innerDescriptor);
- }
-
- String packageName = null;
- String className;
- int indexDot = outerClass.lastIndexOf(".");
- if(indexDot == -1)
- className = outerClass;
- else
- {
- packageName = outerClass.substring(0, indexDot);
- className = outerClass.substring(indexDot + 1);
- }
-
- /* Generate an artificial outer class for holding the
inner classes */
- BeanDescriptor descriptor = new
BeanDescriptor(packageName, className, null, null,
-
new ArrayList(), new ArrayList(), innerDescriptors);
+ ArrayList innerClassList = (ArrayList)
innerOuterClassMap.get(outerClass);
+ for(int i = 0; i < innerClassList.size(); i++)
+ {
+ String innerClass = (String) innerClassList.get(i);
+ BeanDescriptor innerDescriptor = (BeanDescriptor)
innerDescriptionsMap.get(innerClass);
+ innerDescriptors.add(innerDescriptor);
+ }
- BeanGenerator generator = new
BeanGenerator(beanOutputDirectory);
- generator.generate(descriptor);
+ String packageName = null;
+ String className;
+ int indexDot = outerClass.lastIndexOf(".");
+ if(indexDot == -1)
+ className = outerClass;
+ else
+ {
+ packageName = outerClass.substring(0, indexDot);
+ className = outerClass.substring(indexDot + 1);
+ }
+
+ /* Generate an artificial outer class for holding the inner
classes */
+ BeanDescriptor descriptor = new BeanDescriptor(packageName,
className, null, null,
+ new ArrayList(), new ArrayList(), innerDescriptors);
+
+ BeanGenerator generator = new BeanGenerator(beanOutputDirectory);
+ generator.generate(descriptor);
- }
+ }
}
Element findClass(Document doc, String name)
@@ -826,12 +896,14 @@
public static void main(String [] args) throws Exception
{
+ RepositoryXmlProcessor processor = new RepositoryXmlProcessor
+ ("repository.xml", "target/test", "target/test");
+// RepositoryXmlProcessor processor = new RepositoryXmlProcessor
+// ("repository.xml", "target/test", "target/test");
// RepositoryXmlProcessor processor = new RepositoryXmlProcessor
-// ("repository.xml", "target/test", "target/test");
- RepositoryXmlProcessor processor = new RepositoryXmlProcessor
- ("E:/repository_test.xml", "target/test", "target/test");
+// ("E:/repository_test.xml", "target/test/forward",
"target/test/forward");
processor.generateSQL();
processor.generateJavaCode();
- }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]