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]>

Reply via email to