jmcnally 2002/06/20 16:55:15
Modified: src/dtd database.dtd
src/java/org/apache/torque/engine/database/model
Database.java Table.java
src/java/org/apache/torque/engine/database/transform
XmlToAppData.java
src/java/org/apache/torque/task TorqueDataModelTask.java
TorqueSQLTask.java
src/templates/om Control.vm Object.vm ObjectWithManager.vm
Peer.vm
Log:
added the ability to reference tables in a different schema. The objects
defined in the referencing schema are aware of the objects in the
referenced schema. But the object model in the referenced schema is
unaffected. Does not currently handle a circular relationship.
The tables in the related schemas should be in the same database.
Useful for addons/optional components that should not affect the core object
model. Might also be useful as a way to overcome the TurbineUser/security
tables problem that has confounded turbine users for years.
Revision Changes Path
1.13 +7 -2 jakarta-turbine-torque/src/dtd/database.dtd
Index: database.dtd
===================================================================
RCS file: /home/cvs/jakarta-turbine-torque/src/dtd/database.dtd,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- database.dtd 14 Mar 2002 00:54:33 -0000 1.12
+++ database.dtd 20 Jun 2002 23:55:14 -0000 1.13
@@ -31,7 +31,7 @@
to lowercase.
-->
-<!ELEMENT database (table+)>
+<!ELEMENT database (external-schema*, table+)>
<!ATTLIST database
name CDATA #IMPLIED
defaultIdMethod (idbroker|native|autoincrement|sequence|none) "none"
@@ -41,6 +41,11 @@
basePeer CDATA #IMPLIED
defaultJavaNamingMethod (nochange|underscore|javaname) "underscore"
heavyIndexing (true|false) "false"
+>
+
+<!ELEMENT external-schema EMPTY>
+<!ATTLIST external-schema
+ filename CDATA #REQUIRED
>
<!--
1.15 +2 -1
jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Database.java
Index: Database.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Database.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Database.java 8 May 2002 19:45:45 -0000 1.14
+++ Database.java 20 Jun 2002 23:55:14 -0000 1.15
@@ -314,6 +314,7 @@
tableList.add(tbl);
tablesByName.put(tbl.getName(), tbl);
tablesByJavaName.put(tbl.getJavaName(), tbl);
+ tbl.setPackage(getPackage());
}
/**
1.31 +44 -3
jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Table.java
Index: Table.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Table.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- Table.java 8 May 2002 19:45:45 -0000 1.30
+++ Table.java 20 Jun 2002 23:55:14 -0000 1.31
@@ -102,13 +102,14 @@
private boolean abstractValue;
private String alias;
private String enterface;
- // private String pkg;
+ private String pkg;
private String baseClass;
private String basePeer;
private Hashtable columnsByName;
private Hashtable columnsByJavaName;
private boolean needsTransactionInPostgres;
private boolean heavyIndexing;
+ private boolean forReferenceOnly;
/**
@@ -533,6 +534,7 @@
return imp;
}
+
/**
* Adds a new ID method parameter to the list and sets the parent
* table of the column associated with the supplied parameter to this table.
@@ -688,7 +690,7 @@
*/
public boolean isSkipSql()
{
- return (skipSql || isAlias());
+ return (skipSql || isAlias() || isForReferenceOnly());
}
/**
@@ -777,6 +779,24 @@
}
/**
+ * Get the value of package.
+ * @return value of package.
+ */
+ public String getPackage()
+ {
+ return pkg;
+ }
+
+ /**
+ * Set the value of package.
+ * @param v Value to assign to package.
+ */
+ public void setPackage(String v)
+ {
+ this.pkg = v;
+ }
+
+ /**
* Returns an Array containing all the columns in the table
*/
public Column[] getColumns()
@@ -943,6 +963,27 @@
return tableParent;
}
+
+ /**
+ * Flag to determine if code/sql gets created for this table.
+ * Table will be skipped, if return true.
+ * @return value of forReferenceOnly.
+ */
+ public boolean isForReferenceOnly()
+ {
+ return forReferenceOnly;
+ }
+
+ /**
+ * Flag to determine if code/sql gets created for this table.
+ * Table will be skipped, if set to true.
+ * @param v Value to assign to forReferenceOnly.
+ */
+ public void setForReferenceOnly(boolean v)
+ {
+ this.forReferenceOnly = v;
+ }
+
/**
* Returns a XML representation of this table.
*
1.14 +44 -4
jakarta-turbine-torque/src/java/org/apache/torque/engine/database/transform/XmlToAppData.java
Index: XmlToAppData.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/transform/XmlToAppData.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- XmlToAppData.java 11 Apr 2002 22:02:06 -0000 1.13
+++ XmlToAppData.java 20 Jun 2002 23:55:14 -0000 1.14
@@ -103,6 +103,10 @@
private boolean firstPass;
private Table foreignTable;
private String errorMessage;
+ private boolean isExternalSchema;
+ private String currentPackage;
+ private String currentXmlFile;
+ private String defaultPackage;
private static SAXParserFactory saxFactory;
@@ -119,9 +123,11 @@
* @param basePropsFilePath The base of the path to the properties
* file, including trailing slash.
*/
- public XmlToAppData(String databaseType, String basePropsFilePath)
+ public XmlToAppData(String databaseType, String defaultPackage,
+ String basePropsFilePath)
{
app = new AppData(databaseType, basePropsFilePath);
+ this.defaultPackage = defaultPackage;
firstPass = true;
errorMessage = "";
}
@@ -137,6 +143,8 @@
{
try
{
+ currentXmlFile = xmlFile;
+
SAXParser parser = saxFactory.newSAXParser();
FileReader fr = null;
@@ -164,7 +172,10 @@
{
e.printStackTrace();
}
- firstPass = false;
+ if (!isExternalSchema)
+ {
+ firstPass = false;
+ }
if ( errorMessage.length() > 0 )
{
System.out.println("Error in XML schema: " + errorMessage);
@@ -286,11 +297,40 @@
{
if (rawName.equals("database"))
{
- currDB = app.addDatabase(attributes);
+ if (isExternalSchema)
+ {
+ currentPackage = attributes.getValue("package");
+ if (currentPackage == null)
+ {
+ currentPackage = defaultPackage;
+ }
+ }
+ else
+ {
+ currDB = app.addDatabase(attributes);
+ }
+ }
+ else if (rawName.equals("external-schema"))
+ {
+ isExternalSchema = true;
+ String xmlFile = attributes.getValue("filename");
+ if (xmlFile.charAt(0) != '/')
+ {
+ File f = new File(currentXmlFile);
+ xmlFile = new File(f.getParent(), xmlFile).getPath();
+ }
+
+ parseFile(xmlFile);
+ isExternalSchema = false;
}
else if (rawName.equals("table"))
{
currTable = currDB.addTable(attributes);
+ if (isExternalSchema)
+ {
+ currTable.setForReferenceOnly(true);
+ currTable.setPackage(currentPackage);
+ }
}
else if (rawName.equals("column"))
{
1.16 +3 -1
jakarta-turbine-torque/src/java/org/apache/torque/task/TorqueDataModelTask.java
Index: TorqueDataModelTask.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/task/TorqueDataModelTask.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- TorqueDataModelTask.java 29 Apr 2002 19:47:46 -0000 1.15
+++ TorqueDataModelTask.java 20 Jun 2002 23:55:14 -0000 1.16
@@ -306,7 +306,8 @@
// Transform the XML database schema into
// data model object.
xmlParser =
- new XmlToAppData(getTargetDatabase(), getBasePathToDbProps());
+ new XmlToAppData(getTargetDatabase(), getTargetPackage(),
+ getBasePathToDbProps());
AppData ad = xmlParser.parseFile(xmlFile);
xmlParser.parseFile(xmlFile);
ad.setName(grokName(xmlFile));
@@ -328,6 +329,7 @@
{
File f = new File(srcDir, dataModelFiles[j]);
xmlParser = new XmlToAppData(getTargetDatabase(),
+ getTargetPackage(),
getBasePathToDbProps());
AppData ad = xmlParser.parseFile(f.toString());
xmlParser.parseFile(f.toString());
1.13 +2 -2
jakarta-turbine-torque/src/java/org/apache/torque/task/TorqueSQLTask.java
Index: TorqueSQLTask.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/task/TorqueSQLTask.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- TorqueSQLTask.java 17 Apr 2002 18:23:26 -0000 1.12
+++ TorqueSQLTask.java 20 Jun 2002 23:55:14 -0000 1.13
@@ -184,7 +184,7 @@
{
// Transform the XML database schema into
// data model object.
- XmlToAppData xmlParser = new XmlToAppData(getTargetDatabase(),
+ XmlToAppData xmlParser = new XmlToAppData(getTargetDatabase(), null,
getBasePathToDbProps());
AppData ad = xmlParser.parseFile(getIdTableXMLFile());
xmlParser.parseFile(getIdTableXMLFile());
1.8 +3 -2 jakarta-turbine-torque/src/templates/om/Control.vm
Index: Control.vm
===================================================================
RCS file: /home/cvs/jakarta-turbine-torque/src/templates/om/Control.vm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Control.vm 13 Mar 2002 21:31:23 -0000 1.7
+++ Control.vm 20 Jun 2002 23:55:14 -0000 1.8
@@ -30,7 +30,7 @@
$files.mkdir("$outputDirectory/$path")
#foreach ($tbl in $database.Tables)
-
+ #if (!$tbl.isForReferenceOnly())
$tbl.Name
#set ( $firstcap=$tbl.JavaName )
@@ -107,9 +107,10 @@
#if (!$files.file($basePath,$path).exists())
$generator.parse("om/MultiExtendObject.vm",$path,"child",$child)
#end
+ #end
#end
#end
+ #end
#end
-#end
#end
#end
1.34 +14 -0 jakarta-turbine-torque/src/templates/om/Object.vm
Index: Object.vm
===================================================================
RCS file: /home/cvs/jakarta-turbine-torque/src/templates/om/Object.vm,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Object.vm 13 Jun 2002 18:25:23 -0000 1.33
+++ Object.vm 20 Jun 2002 23:55:14 -0000 1.34
@@ -26,6 +26,20 @@
import org.apache.fulcrum.intake.Retrievable;
#end
+#foreach ($fk in $table.ForeignKeys)
+ #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) )
+ #set ( $className = $tblFK.JavaName )
+ #if ($tblFK.Interface)
+ #set ($className = $tblFK.Interface)
+ #end
+
+ #if ($tblFK.Package != $package)
+import ${tblFK.Package}.${className};
+import ${tblFK.Package}.${className}Manager;
+import ${tblFK.Package}.${tblFK.JavaName}Peer;
+ #end
+#end
+
/**
#if ($addTimeStamp)
* This class was autogenerated by Torque on:
1.12 +14 -0 jakarta-turbine-torque/src/templates/om/ObjectWithManager.vm
Index: ObjectWithManager.vm
===================================================================
RCS file: /home/cvs/jakarta-turbine-torque/src/templates/om/ObjectWithManager.vm,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ObjectWithManager.vm 13 Jun 2002 18:43:30 -0000 1.11
+++ ObjectWithManager.vm 20 Jun 2002 23:55:14 -0000 1.12
@@ -27,6 +27,20 @@
import org.apache.fulcrum.intake.Retrievable;
#end
+#foreach ($fk in $table.ForeignKeys)
+ #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) )
+ #set ( $className = $tblFK.JavaName )
+ #if ($tblFK.Interface)
+ #set ($className = $tblFK.Interface)
+ #end
+
+ #if ($tblFK.Package != $package)
+import ${tblFK.Package}.${className};
+import ${tblFK.Package}.${className}Manager;
+import ${tblFK.Package}.${tblFK.JavaName}Peer;
+ #end
+#end
+
/**
#if ($addTimeStamp)
* This class was autogenerated by Torque on:
1.32 +15 -0 jakarta-turbine-torque/src/templates/om/Peer.vm
Index: Peer.vm
===================================================================
RCS file: /home/cvs/jakarta-turbine-torque/src/templates/om/Peer.vm,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- Peer.vm 31 May 2002 20:08:12 -0000 1.31
+++ Peer.vm 20 Jun 2002 23:55:14 -0000 1.32
@@ -20,6 +20,15 @@
// Local classes
import ${package}.map.*;
+#foreach ($fk in $table.ForeignKeys)
+ #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) )
+
+ #if ($tblFK.Package != $package)
+import ${tblFK.Package}.${tblFK.JavaName};
+import ${tblFK.Package}.${tblFK.JavaName}Peer;
+ #end
+#end
+
/**
#if ($addTimeStamp)
* This class was autogenerated by Torque on:
@@ -1055,6 +1064,8 @@
#if ($countFK >= 1)
#foreach ($fk in $table.ForeignKeys)
+ #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) )
+ #if (!$tblFK.isForReferenceOnly())
## want to cover this case, but the code is not there yet.
#if ( !($fk.ForeignTableName.equals($table.Name)) )
@@ -1215,6 +1226,7 @@
return results;
}
#end
+ #end
#end
#end
@@ -1223,6 +1235,8 @@
#if ($countFK > 2)
#foreach ($fk in $table.ForeignKeys)
+ #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) )
+ #if (!$tblFK.isForReferenceOnly())
#set ( $excludeTable = $table.Database.getTable($fk.ForeignTableName) )
#set ( $excludeClassName = $excludeTable.JavaName )
@@ -1410,6 +1424,7 @@
}
return results;
}
+ #end
#end
#end
#end
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>