You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by dl...@apache.org on 2001/09/16 20:48:04 UTC

cvs commit: jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model Column.java Database.java JavaNameGenerator.java NameGenerator.java Table.java

dlr         01/09/16 11:48:04

  Modified:    src/dtd  database.dtd
               src/java/org/apache/torque/engine/database/model Column.java
                        Database.java JavaNameGenerator.java
                        NameGenerator.java Table.java
  Log:
  Patch by Byron Foster <by...@yahoo.com>:
  
  Here is a new patch that implements the java naming scheme
  through attributes in the database schema that works with the new code
  that you added.  the <database> element now has a new attribute
  defaultNameConversion that may be either underscore, javaname,
  or nochange.  The description of these are in the DTD.   Also the
  <table> and <column> elements have an optional attribute
  nameConversion that may also be one of the above.   Without any
  method specification the behavior of the name conversion is as it was
  before.
  
  Revision  Changes    Path
  1.3       +21 -1     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.2
  retrieving revision 1.3
  diff -u -u -r1.2 -r1.3
  --- database.dtd	2001/08/17 21:47:32	1.2
  +++ database.dtd	2001/09/16 18:48:03	1.3
  @@ -1,6 +1,6 @@
   <!-- 
       Torque XML database schema DTD 
  -    $Id: database.dtd,v 1.2 2001/08/17 21:47:32 dlr Exp $
  +    $Id: database.dtd,v 1.3 2001/09/16 18:48:03 dlr Exp $
   -->
   
   <!ELEMENT app-data (database+)>
  @@ -17,6 +17,22 @@
   centralized repository for brokering out clumps of id's in a database
   agnostic way.
   -->
  +
  +<!-- 
  +
  +defaultConversionMethod determines how a table or column name,
  +from the name attribute in the xml database file, is converted to a
  +Java class or method name.
  +
  +	 nochange   - indicates not change is performed.
  +	 underscore - Underscores are removed, First letter is
  +		      capitalized, first letter after an underscore
  +		      is capitalized, the rest of the letters are
  +		      converted to lowercase.
  +	 javaname   - same as underscore, but no letters are converted
  +		      to lowercase.
  +-->
  +
   <!ELEMENT database (table+)>
   <!ATTLIST database
     name CDATA #IMPLIED
  @@ -24,6 +40,8 @@
     package CDATA #IMPLIED
     baseClass CDATA #IMPLIED
     basePeer CDATA #IMPLIED
  +
  +  defaultNameConversion (nochange|underscore|javaname) "underscore"
   >
   
   <!ELEMENT table (column+,(foreign-key|index|unique|id-method-parameter)*)>
  @@ -36,6 +54,7 @@
     baseClass CDATA #IMPLIED
     basePeer CDATA #IMPLIED
     alias CDATA #IMPLIED
  +  nameConversion (nochange|underscore|javaname) #IMPLIED
   >
   
   <!ELEMENT id-method-parameter EMPTY>
  @@ -63,6 +82,7 @@
     autoIncrement (true|false) "false"
     inheritance (single|false) "false" 
     inputValidator CDATA #IMPLIED
  +  nameConversion (nochange|underscore|javaname) #IMPLIED
   >
   
   <!ELEMENT inheritance EMPTY>
  
  
  
  1.11      +13 -2     jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Column.java
  
  Index: Column.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/Column.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -u -r1.10 -r1.11
  --- Column.java	2001/08/22 21:26:12	1.10
  +++ Column.java	2001/09/16 18:48:03	1.11
  @@ -70,12 +70,13 @@
    * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
    * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
    * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
  - * @version $Id: Column.java,v 1.10 2001/08/22 21:26:12 dlr Exp $
  + * @version $Id: Column.java,v 1.11 2001/09/16 18:48:03 dlr Exp $
    */
   public class Column
   {
       private String name;
       private String javaName = null;
  +    private String nameConversion;
       private boolean isNotNull = false;
       private String size;
       private String torqueType;
  @@ -153,6 +154,15 @@
   
           javaName = attrib.getValue("javaName");
   
  +        // retrieves the method for converting from specified name to
  +        // a java name.
  +        nameConversion = attrib.getValue("nameConversion");
  +        if (nameConversion == null)
  +        {
  +          nameConversion =
  +            parentTable.getDatabase().getDefaultNameConversion();
  +        }
  +        
           //Primary Key
           String primaryKey = attrib.getValue("primaryKey");
           //Avoid NullPointerExceptions on string comparisons.
  @@ -219,8 +229,9 @@
       {
           if (javaName == null)
           {
  -            List inputs = new ArrayList(1);
  +            List inputs = new ArrayList(2);
               inputs.add(name);
  +            inputs.add(nameConversion);
               try
               {
                   javaName = NameFactory.generateName(NameFactory.JAVA_GENERATOR,
  
  
  
  1.4       +31 -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.3
  retrieving revision 1.4
  diff -u -u -r1.3 -r1.4
  --- Database.java	2001/08/22 20:04:33	1.3
  +++ Database.java	2001/09/16 18:48:03	1.4
  @@ -65,6 +65,9 @@
   import org.apache.torque.Torque;
   import org.apache.torque.TorqueException;
   
  +import org.apache.torque.engine.database.model.NameGenerator;
  +
  +
   /**
    * A class for holding application data structures.
    *
  @@ -72,7 +75,7 @@
    * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
    * @author <a href="mailto:mpoeschl@marmot.at>Martin Poeschl</a>
    * @author <a href="mailto:dlr@collab.net>Daniel Rall</a>
  - * @version $Id: Database.java,v 1.3 2001/08/22 20:04:33 dlr Exp $
  + * @version $Id: Database.java,v 1.4 2001/09/16 18:48:03 dlr Exp $
    */
   public class Database
   {
  @@ -84,6 +87,7 @@
       private String baseClass;
       private String basePeer;
       private String defaultIdMethod;
  +    private String defaultNameConversion;
       private AppData dbParent;
       private Hashtable tablesByName = new Hashtable();
       private Hashtable tablesByJavaName = new Hashtable();
  @@ -105,6 +109,12 @@
           baseClass = attrib.getValue("baseClass");
           basePeer = attrib.getValue("basePeer");
           defaultIdMethod = attrib.getValue("defaultIdMethod");
  +        defaultNameConversion = attrib.getValue("defaultNameConversion");
  +        if (defaultNameConversion == null)
  +        {
  +          defaultNameConversion = NameGenerator.CONV_METHOD_UNDERSCORE;
  +        }
  +        
       }
   
       /**
  @@ -204,6 +214,25 @@
       }
   
       /**
  +     * Get the value of defaultNameConversion which specifies the
  +     * method for converting schema names for table and column
  +     * to java names..
  +     * @return value of defaultNameConversion.  */
  +    public String getDefaultNameConversion()
  +    {
  +        return defaultNameConversion;
  +    }
  +
  +    /**
  +     * Set the value of defaultNameConversion.
  +     * @param v  Value to assign to defaultNameConversion.
  +     */
  +    public void setDefaultNameConversion(String  v)
  +    {
  +        this.defaultNameConversion = v;
  +    }
  +
  +    /**
        * Return an array of all tables
        */
       public Table[] getTables()
  @@ -242,6 +271,7 @@
       public Table addTable(Attributes attrib)
       {
           Table tbl = new Table();
  +        tbl.setDatabase (this);
           tbl.loadFromXML (attrib, this.getDefaultIdMethod());
           addTable (tbl);
           return tbl;
  
  
  
  1.2       +90 -7     jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/JavaNameGenerator.java
  
  Index: JavaNameGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/JavaNameGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -u -r1.1 -r1.2
  --- JavaNameGenerator.java	2001/08/22 21:14:10	1.1
  +++ JavaNameGenerator.java	2001/09/16 18:48:03	1.2
  @@ -66,23 +66,71 @@
    * A <code>NameGenerator</code> implementation for Java-esque names.
    *
    * @author <a href="mailto:dlr@finemaltcoding.com>Daniel Rall</a>
  - * @version $Id: JavaNameGenerator.java,v 1.1 2001/08/22 21:14:10 dlr Exp $
  + * @version $Id: JavaNameGenerator.java,v 1.2 2001/09/16 18:48:03 dlr Exp $
    */
   public class JavaNameGenerator implements NameGenerator
   {
       /**
  -     * <code>inputs</code> should consist of one element, the original
  -     * name of the database element.  The name is sectioned up using
  -     * any contained underscores.  The first element of each section
  -     * will be capitalized and the rest made lower case.
  +     * <code>inputs</code> should consist of two elements, the
  +     * original name of the database element and the method for
  +     * generating the name.  There are currently three methods:
  +     * CONV_METHOD_NOCHANGE - xml names are converted directly to java
  +     * names without modification.  CONV_METHOD_UNDERSCORE Will
  +     * capitalize the first letter, remove underscores, and capitalize
  +     * each letter before an underscore.  All other letters are
  +     * lowercased. "javaname" works the same as the
  +     * CONV_METHOD_JAVANAME method but will not lowercase any
  +     * characters.
        *
  +     * @param inputs list expected to contain two parameters, element
  +     * 0 contains name to convert, element 1 contains method for conversion.
  +     * @return generated name. 
  +     * @see org.apache.torque.engine.database.model.NameGenerator */
  +    
  +    public String generateName(List inputs)
  +    {
  +        String schemaName = (String)inputs.get(0);
  +        String method = (String)inputs.get(1);
  +        String javaName = null;
  +        
  +        if (CONV_METHOD_UNDERSCORE.equals(method))
  +        {
  +            javaName = underscoreMethod(schemaName);
  +        }
  +        else if (CONV_METHOD_JAVANAME.equals(method))
  +        {
  +            javaName = javanameMethod(schemaName);
  +        }
  +        else if (CONV_METHOD_NOCHANGE.equals(method))
  +        {
  +            javaName = nochangeMethod(schemaName);
  +        }
  +        else
  +        {
  +            // if for some reason nothing is defined then we default
  +            // to the traditional method.
  +            javaName = underscoreMethod(schemaName);
  +        }
  +
  +        return javaName;
  +    }
  +    
  +    /**
  +     * Converts a database schema name to java object name.  Removes
  +     * STD_SEPARATOR_CHAR, capitilizes first letter of name and each
  +     * letter after the STD_SEPERATOR, converts the rest of the
  +     * letters to lowercase.
  +     * @param schemaName name to be converted.
  +     * @return converted name.
        * @see org.apache.torque.engine.database.model.NameGenerator
  +     * @see #underscoreMethod(String)
        */
  -    public String generateName(List inputs)
  +
  +    public String underscoreMethod(String schemaName)
       {
           StringBuffer name = new StringBuffer();
           StringTokenizer tok = new StringTokenizer
  -            ((String) inputs.get(0), String.valueOf(STD_SEPARATOR_CHAR));
  +            (schemaName, String.valueOf(STD_SEPARATOR_CHAR));
           while (tok.hasMoreTokens())
           {
               String namePart = ((String) tok.nextElement()).toLowerCase();
  @@ -90,4 +138,39 @@
           }
           return name.toString();
       }
  +    
  +    /**
  +     * Converts a database schema name to java object name.  Operates
  +     * same as underscoreMethod but does not convert anything to
  +     * lowercase.
  +     * @param schemaName name to be converted.
  +     * @return converted name.
  +     * @see org.apache.torque.engine.database.model.NameGenerator
  +     * @see #underscoreMethod(String)
  +     */
  +
  +    public String javanameMethod(String schemaName)
  +    {
  +        StringBuffer name = new StringBuffer();
  +        StringTokenizer tok = new StringTokenizer
  +            (schemaName, String.valueOf(STD_SEPARATOR_CHAR));
  +        while (tok.hasMoreTokens())
  +        {
  +            String namePart = (String) tok.nextElement();
  +            name.append(StringUtils.firstLetterCaps(namePart));
  +        }
  +        return name.toString();
  +    }
  +
  +    /**
  +     * Converts a database schema name to java object name.  In this
  +     * case no conversion is made.
  +     */
  +    
  +    public String nochangeMethod(String name)
  +    {
  +        return name;
  +    }
  +    
  +
   }
  
  
  
  1.5       +25 -1     jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/NameGenerator.java
  
  Index: NameGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/engine/database/model/NameGenerator.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -u -r1.4 -r1.5
  --- NameGenerator.java	2001/08/21 00:10:29	1.4
  +++ NameGenerator.java	2001/09/16 18:48:03	1.5
  @@ -62,7 +62,7 @@
    * The generic interface to a name generation algorithm.
    *
    * @author <a href="mailto:dlr@finemaltcoding.com>Daniel Rall</a>
  - * @version $Id: NameGenerator.java,v 1.4 2001/08/21 00:10:29 dlr Exp $
  + * @version $Id: NameGenerator.java,v 1.5 2001/09/16 18:48:03 dlr Exp $
    */
   public interface NameGenerator
   {
  @@ -72,6 +72,30 @@
        */
       public static final char STD_SEPARATOR_CHAR = '_';
   
  +    /**
  +     * Traditional method for converting schema table and column names
  +     * to java names.  The CONV_METHOD_XXX constants define how names
  +     * for columns and tables in the database schema will be converted
  +     * to java source names.
  +     * @see JavaNameGenerator#underscoreMethod(String) */
  +
  +    public static final String CONV_METHOD_UNDERSCORE = "underscore";
  +
  +    /**
  +     * Similar to CONV_METHOD_UNDERSCORE except nothing is converted
  +     * to lowercase.
  +     * @see JavaNameGenerator#javanameMethod(String)
  +     */
  +
  +    public static final String CONV_METHOD_JAVANAME = "javaname";
  +
  +    /**
  +     * Specifies no modification when converting from a schema column
  +     * or table name to a java name.  to java names.
  +     */
  +
  +    public static final String CONV_METHOD_NOCHANGE = "nochange";
  +    
       /**
        * Given a list of <code>String</code> objects, implements an
        * algorithm which produces a name.
  
  
  
  1.13      +15 -2     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.12
  retrieving revision 1.13
  diff -u -u -r1.12 -r1.13
  --- Table.java	2001/08/22 21:14:53	1.12
  +++ Table.java	2001/09/16 18:48:03	1.13
  @@ -74,7 +74,7 @@
    * @author <a href="mailto:mpoeschl@marmot.at>Martin Poeschl</a>
    * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
    * @author <a href="mailto:dlr@collab.net>Daniel Rall</a>
  - * @version $Id: Table.java,v 1.12 2001/08/22 21:14:53 dlr Exp $
  + * @version $Id: Table.java,v 1.13 2001/09/16 18:48:03 dlr Exp $
    */
   public class Table implements IDMethod
   {
  @@ -89,6 +89,7 @@
       private String name;
       private String javaName;
       private String idMethod;
  +    private String nameConversion;
       private Database tableParent;
       private List referrers;
       private List foreignTableNames;
  @@ -134,6 +135,16 @@
           name = attrib.getValue("name");
           javaName = attrib.getValue("javaName");
           idMethod = attrib.getValue("idMethod");
  +
  +        // retrieves the method for converting from specified name to
  +        // a java name.
  +        nameConversion = attrib.getValue("nameConversion");
  +        if (nameConversion == null)
  +        {
  +          nameConversion = getDatabase().getDefaultNameConversion();
  +        }
  +        
  +
           if ("null".equals(idMethod))
           {
               idMethod = defaultIdMethod;
  @@ -345,6 +356,7 @@
       public Column addColumn(Attributes attrib)
       {
           Column col = new Column();
  +        col.setTable (this);
           col.loadFromXML (attrib);
           addColumn(col);
           return col;
  @@ -580,8 +592,9 @@
       {
           if (javaName == null)
           {
  -            List inputs = new ArrayList(1);
  +            List inputs = new ArrayList(2);
               inputs.add(name);
  +            inputs.add(nameConversion);
               try
               {
                   javaName = NameFactory.generateName(NameFactory.JAVA_GENERATOR,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org