Author: jgbutler
Date: Tue Nov 20 22:06:41 2007
New Revision: 596946

URL: http://svn.apache.org/viewvc?rev=596946&view=rev
Log:
Abator: Changes for IBATIS-468 - column renaming with regular expressions

Added:
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/configreference/columnRenamingRule.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/ColumnRenamingRule.java
Modified:
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/build/version.properties
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/doc/ReleaseNotes.txt
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/menu.html
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/AbatorContext.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/JDBCConnectionConfiguration.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/TableConfiguration.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/AbatorConfigurationParser.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/abator-config_1_0.dtd
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/DatabaseIntrospector.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/util/messages/messages.properties
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/CreateDB.sql
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/abatorConfig.xml
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/MiscellaneousTests.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/SqlMapConfig.xml

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/build/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/build/version.properties?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/tools/abator/core/build/version.properties 
(original)
+++ ibatis/trunk/java/mapper/mapper2/tools/abator/core/build/version.properties 
Tue Nov 20 22:06:41 2007
@@ -1,4 +1,4 @@
 #Abator build version info
-#Sat Nov 17 19:58:51 CST 2007
+#Tue Nov 20 23:15:11 CST 2007
 version=1.1.0
-buildNum=395
+buildNum=397

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/doc/ReleaseNotes.txt
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/doc/ReleaseNotes.txt?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/tools/abator/core/doc/ReleaseNotes.txt 
(original)
+++ ibatis/trunk/java/mapper/mapper2/tools/abator/core/doc/ReleaseNotes.txt Tue 
Nov 20 22:06:41 2007
@@ -39,6 +39,7 @@
 14. Added updateByExample generated method
 15. Java2 is now the default generator set
 16. IBATIS-470 - make legacy DAOs extendable
+17. IBATIS-468 - add <columnRenamingRule>
 
 -------------------------------------------------------------------------------
 Version 1.0.0:

Added: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/configreference/columnRenamingRule.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/configreference/columnRenamingRule.html?rev=596946&view=auto
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/configreference/columnRenamingRule.html
 (added)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/configreference/columnRenamingRule.html
 Tue Nov 20 22:06:41 2007
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
+<head>
+  <title>The &lt;columnRenamingRule&gt; Element</title>
+  <link type="text/css" rel="stylesheet" href="../abator.css"/>
+</head>
+<body>
+<h1>The &lt;columnRenamingRule&gt; Element</h1>
+<p>The &lt;columnRenamingRule&gt; element is used to tell Abator to rename
+database columns before calulating the corresponding property
+name in an introspected table.  This is useful when all columns
+in a table have a common prefix that should be removed before
+calculating the property name.  For example, suppose a table
+contains the following columns:</p>
+ <ul>
+   <li>CUST_NAME</li>
+   <li>CUST_ADDRESS</li>
+   <li>CUST_CITY</li>
+   <li>CUST_STATE</li>
+ </ul>
+<p>It might be annoying to have the generated properties
+ all containing the CUST prefix.  The prefix can be removed by
+ specifying a renimg rule like this:</p>
+ 
+<p><code>&lt;columnRenamingRule searchString="^CUST_" replaceString="" 
/&gt;</code></p>
+
+<p>Note that, internally, Abator uses the 
+ <code>java.util.regex.Matcher.replaceAll</code> method
+ for this function.  See the documentation for that method
+ and class for examples of the regular expression language used in
+ Java.</p>
+
+<p>This element will be ignored if the "useActualColumnNames" property
+  is set to "true" on the corresponding &lt;table&gt; element.
+  Further, if a &lt;columnOverride&gt; element matches a column,
+  it will take precedence over this renaming rule.</p>
+  
+<p>This element is an optional child
+element of the <a href="table.html">&lt;table&gt;</a> element.</p>
+
+<h2>Required Attributes</h2>
+<table border="1" cellspacing="0" cellpadding="5">
+  <tr>
+    <th>Attribute</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td>searchString</td>
+    <td>This is a regular expression that defines the substring to be 
replaced.</td>
+  </tr>
+</table>
+
+<h2>Optional Attributes</h2>
+<table border="1" cellspacing="0" cellpadding="5">
+  <tr>
+    <th>Attribute</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td>replaceString</td>
+    <td>This is a string to be substituted for every occurance of the
+        search string.  If not specified, the empty string is used.</td>
+  </tr>
+</table>
+
+<h2>Child Elements</h2>
+<p>None</p>
+
+</body>
+</html>

Modified: ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/menu.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/menu.html?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/menu.html 
(original)
+++ ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/menu.html Tue 
Nov 20 22:06:41 2007
@@ -21,6 +21,7 @@
   &nbsp;&nbsp;<a href="configreference/abatorContext.html" 
target="mainFrame">&lt;abatorContext&gt;</a><br/>
   &nbsp;&nbsp;<a href="configreference/classPathEntry.html" 
target="mainFrame">&lt;classPathEntry&gt;</a><br/>
   &nbsp;&nbsp;<a href="configreference/columnOverride.html" 
target="mainFrame">&lt;columnOverride&gt;</a><br/>
+  &nbsp;&nbsp;<a href="configreference/columnRenamingRule.html" 
target="mainFrame">&lt;columnRenamingRule&gt;</a><br/>
   &nbsp;&nbsp;<a href="configreference/daoGenerator.html" 
target="mainFrame">&lt;daoGenerator&gt;</a><br/>
   &nbsp;&nbsp;<a href="configreference/generatedKey.html" 
target="mainFrame">&lt;generatedKey&gt;</a><br/>
   &nbsp;&nbsp;<a href="configreference/ignoreColumn.html" 
target="mainFrame">&lt;ignoreColumn&gt;</a><br/>

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html 
(original)
+++ ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html 
Tue Nov 20 22:06:41 2007
@@ -66,6 +66,11 @@
   <li>Fixed bug - incorrect datatype mapping for JDBC BIT datatype</li>
   <li>Made the generated Example and Criteria classes extendable</li>
   <li>Made the legacy DAOs extendable</li>
+  <li>Added the ability to provide a renaming rule for columns.  This is for 
the 
+      use case where columns have a common prefix that should be removed before
+      calculating the property name.  See the
+      <a 
href="configreference/columnRenamingRule.html">&lt;columnRenamingRule&gt;</a>
+      reference page for more information</li>
 </ul>
 
 <h2>Version 1.0.0</h2>

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/AbatorContext.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/AbatorContext.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/AbatorContext.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/AbatorContext.java
 Tue Nov 20 22:06:41 2007
@@ -132,7 +132,12 @@
         * columns exist
         */
        public void validate(List errors) {
-               validateJdbcConnectionConfiguration(errors);
+        if (jdbcConnectionConfiguration == null) {
+            errors.add(Messages.getString("ValidationError.10")); //$NON-NLS-1$
+            return;
+        } else {
+            jdbcConnectionConfiguration.validate(errors);
+        }
 
         if (javaModelGeneratorConfiguration == null) {
             errors.add(Messages.getString("ValidationError.8")); //$NON-NLS-1$
@@ -178,60 +183,11 @@
                                TableConfiguration tc = (TableConfiguration) 
tableConfigurations
                                                .get(i);
 
-                               validateTableConfiguration(tc, errors, i);
+                               tc.validate(errors, i);
                        }
                }
        }
        
-       private void validateJdbcConnectionConfiguration(List errors) {
-        if (jdbcConnectionConfiguration == null) {
-            errors.add(Messages.getString("ValidationError.10")); //$NON-NLS-1$
-            return;
-        }
-        
-               if (!StringUtility.stringHasValue(jdbcConnectionConfiguration
-                               .getDriverClass())) {
-                       errors.add(Messages.getString("ValidationError.4")); 
//$NON-NLS-1$
-               }
-
-               if (!StringUtility.stringHasValue(jdbcConnectionConfiguration
-                               .getConnectionURL())) {
-                       errors.add(Messages.getString("ValidationError.5")); 
//$NON-NLS-1$
-               }
-       }
-
-       private void validateTableConfiguration(TableConfiguration tc, List 
errors,
-                       int listPosition) {
-        if (!StringUtility.stringHasValue(tc.getTableName())) {
-                       errors.add(Messages.getString("ValidationError.6", 
Integer.toString(listPosition))); //$NON-NLS-1$
-               }
-
-        String tableName = StringUtility.composeFullyQualifiedTableName(
-                tc.getCatalog(), tc.getSchema(), tc.getTableName(), '.');
-        
-               if (tc.getGeneratedKey() != null
-                               && 
!StringUtility.stringHasValue(tc.getGeneratedKey()
-                                               .getRuntimeSqlStatement())) {
-               errors
-                               .add(Messages.getString("ValidationError.7",  
//$NON-NLS-1$
-                                               tableName));
-               }
-        
-        if 
("true".equalsIgnoreCase(tc.getProperty(PropertyRegistry.TABLE_USE_COLUMN_INDEXES)))
 {  //$NON-NLS-1$
-            // when using column indexes, either both or neither query ids 
should be set
-            if (tc.isSelectByExampleStatementEnabled() && 
tc.isSelectByPrimaryKeyStatementEnabled()) {
-                boolean queryId1Set = 
StringUtility.stringHasValue(tc.getSelectByExampleQueryId());
-                boolean queryId2Set = 
StringUtility.stringHasValue(tc.getSelectByPrimaryKeyQueryId());
-            
-                if (queryId1Set != queryId2Set) {
-                    errors
-                    .add(Messages.getString("ValidationError.13",  
//$NON-NLS-1$
-                        tableName));
-                }
-            }
-        }
-       }
-
        /**
         * Generate iBATIS artifacts based on the configuration specified in the
         * constructor.  This method is long running.

Added: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/ColumnRenamingRule.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/ColumnRenamingRule.java?rev=596946&view=auto
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/ColumnRenamingRule.java
 (added)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/ColumnRenamingRule.java
 Tue Nov 20 22:06:41 2007
@@ -0,0 +1,92 @@
+/*
+ *  Copyright 2007 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.ibatis.abator.config;
+
+import java.util.List;
+
+import org.apache.ibatis.abator.api.dom.xml.Attribute;
+import org.apache.ibatis.abator.api.dom.xml.XmlElement;
+import org.apache.ibatis.abator.internal.util.StringUtility;
+import org.apache.ibatis.abator.internal.util.messages.Messages;
+
+/**
+ * This class is used to specify a renaming fule for columns
+ * in a table.  This renaming rule will be run against all
+ * column names before calculating the corresponding property name.
+ * The most common use case is when columns in a table are all
+ * prefixed by a certain value.
+ * 
+ * For example, if columns in a table are named:
+ * 
+ * <ul>
+ *   <li>CUST_NAME</li>
+ *   <li>CUST_ADDRESS</li>
+ *   <li>CUST_CITY</li>
+ *   <li>CUST_STATE</li>
+ * </ul>
+ * 
+ * it might be annoying to have the generated properties
+ * all containing the CUST prefix.  This class can be used to
+ * remove the prefix by specifying
+ * 
+ * <ul>
+ *   <li>searchString = "^CUST"</li>
+ *   <li>replaceString=""</li>
+ * </ul>
+ * 
+ * Note that internally, Abator uses the 
+ * <code>java.util.regex.Matcher.replaceAll</code> method
+ * for this function.  See the documentation of that method
+ * for example of the regular expression language used in
+ * Java.
+ * 
+ * @author Jeff Butler
+ *
+ */
+public class ColumnRenamingRule {
+    private String searchString;
+    private String replaceString;
+    
+    public String getReplaceString() {
+        return replaceString;
+    }
+    public void setReplaceString(String replaceString) {
+        this.replaceString = replaceString;
+    }
+    public String getSearchString() {
+        return searchString;
+    }
+    public void setSearchString(String searchString) {
+        this.searchString = searchString;
+    }
+    
+    public void validate(List errors) {
+        if (!StringUtility.stringHasValue(searchString)) {
+            errors.add(Messages.getString("ValidationError.14")); //$NON-NLS-1$
+        }
+    }
+    
+    public XmlElement toXmlElement() {
+        XmlElement xmlElement = new XmlElement("columnRenamingRule"); 
//$NON-NLS-1$
+        xmlElement.addAttribute(new Attribute("searchString", searchString)); 
//$NON-NLS-1$
+        
+        if (replaceString != null) {
+            xmlElement.addAttribute(new Attribute("replaceString", 
replaceString)); //$NON-NLS-1$
+        }
+        
+        return xmlElement;
+    }
+}

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/JDBCConnectionConfiguration.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/JDBCConnectionConfiguration.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/JDBCConnectionConfiguration.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/JDBCConnectionConfiguration.java
 Tue Nov 20 22:06:41 2007
@@ -22,6 +22,7 @@
 import org.apache.ibatis.abator.api.dom.xml.Attribute;
 import org.apache.ibatis.abator.api.dom.xml.XmlElement;
 import org.apache.ibatis.abator.internal.util.StringUtility;
+import org.apache.ibatis.abator.internal.util.messages.Messages;
 
 /**
  * 
@@ -111,5 +112,15 @@
         addPropertyXmlElements(xmlElement);
         
         return xmlElement;
+    }
+
+    public void validate(List errors) {
+        if (!StringUtility.stringHasValue(driverClass)) {
+            errors.add(Messages.getString("ValidationError.4")); //$NON-NLS-1$
+        }
+
+        if (!StringUtility.stringHasValue(connectionURL)) {
+            errors.add(Messages.getString("ValidationError.5")); //$NON-NLS-1$
+        }
     }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/TableConfiguration.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/TableConfiguration.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/TableConfiguration.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/TableConfiguration.java
 Tue Nov 20 22:06:41 2007
@@ -26,6 +26,7 @@
 import org.apache.ibatis.abator.internal.util.EqualsUtil;
 import org.apache.ibatis.abator.internal.util.HashCodeUtil;
 import org.apache.ibatis.abator.internal.util.StringUtility;
+import org.apache.ibatis.abator.internal.util.messages.Messages;
 
 /**
  * 
@@ -68,6 +69,8 @@
     private String configuredModelType;
     private boolean delimitIdentifiers;
     
+    private ColumnRenamingRule columnRenamingRule;
+    
        public TableConfiguration(AbatorContext abatorContext) {
                super();
         
@@ -412,6 +415,10 @@
             xmlElement.addElement(generatedKey.toXmlElement());
         }
         
+        if (columnRenamingRule != null) {
+            xmlElement.addElement(columnRenamingRule.toXmlElement());
+        }
+        
         if (ignoredColumns.size() > 0) {
             Iterator iter = ignoredColumns.keySet().iterator();
             while (iter.hasNext()) {
@@ -459,5 +466,47 @@
     public void setUpdateByExampleStatementEnabled(
             boolean updateByExampleStatementEnabled) {
         this.updateByExampleStatementEnabled = updateByExampleStatementEnabled;
+    }
+
+    public void validate(List errors, int listPosition) {
+        if (!StringUtility.stringHasValue(tableName)) {
+            errors.add(Messages.getString("ValidationError.6", 
Integer.toString(listPosition))); //$NON-NLS-1$
+        }
+
+        String fqTableName = StringUtility.composeFullyQualifiedTableName(
+                catalog, schema, tableName, '.');
+        
+        if (generatedKey != null
+                && 
!StringUtility.stringHasValue(generatedKey.getRuntimeSqlStatement())) {
+            errors
+                .add(Messages.getString("ValidationError.7",  //$NON-NLS-1$
+                        fqTableName));
+        }
+        
+        if 
("true".equalsIgnoreCase(getProperty(PropertyRegistry.TABLE_USE_COLUMN_INDEXES)))
 {  //$NON-NLS-1$
+            // when using column indexes, either both or neither query ids 
should be set
+            if (selectByExampleStatementEnabled && 
selectByPrimaryKeyStatementEnabled) {
+                boolean queryId1Set = 
StringUtility.stringHasValue(selectByExampleQueryId);
+                boolean queryId2Set = 
StringUtility.stringHasValue(selectByPrimaryKeyQueryId);
+            
+                if (queryId1Set != queryId2Set) {
+                    errors
+                    .add(Messages.getString("ValidationError.13",  
//$NON-NLS-1$
+                        fqTableName));
+                }
+            }
+        }
+        
+        if (columnRenamingRule != null) {
+            columnRenamingRule.validate(errors);
+        }
+    }
+
+    public ColumnRenamingRule getColumnRenamingRule() {
+        return columnRenamingRule;
+    }
+
+    public void setColumnRenamingRule(ColumnRenamingRule columnRenamingRule) {
+        this.columnRenamingRule = columnRenamingRule;
     }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/AbatorConfigurationParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/AbatorConfigurationParser.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/AbatorConfigurationParser.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/AbatorConfigurationParser.java
 Tue Nov 20 22:06:41 2007
@@ -32,6 +32,7 @@
 import org.apache.ibatis.abator.config.AbatorConfiguration;
 import org.apache.ibatis.abator.config.AbatorContext;
 import org.apache.ibatis.abator.config.ColumnOverride;
+import org.apache.ibatis.abator.config.ColumnRenamingRule;
 import org.apache.ibatis.abator.config.DAOGeneratorConfiguration;
 import org.apache.ibatis.abator.config.GeneratedKey;
 import org.apache.ibatis.abator.config.IgnoredColumn;
@@ -433,6 +434,8 @@
                 parseIgnoreColumn(tc, childNode);
             } else if ("generatedKey".equals(childNode.getNodeName())) { 
//$NON-NLS-1$
                 parseGeneratedKey(tc, childNode);
+            } else if ("columnRenamingRule".equals(childNode.getNodeName())) { 
//$NON-NLS-1$
+                parseColumnRenamingRule(tc, childNode);
             }
         }
     }
@@ -502,6 +505,22 @@
         tc.addIgnoredColumn(ic);
     }
 
+    private void parseColumnRenamingRule(TableConfiguration tc, Node node) {
+        Properties attributes = parseAttributes(node);
+        String searchString = attributes.getProperty("searchString"); 
//$NON-NLS-1$
+        String replaceString = attributes.getProperty("replaceString"); 
//$NON-NLS-1$
+        
+        ColumnRenamingRule crr = new ColumnRenamingRule();
+        
+        crr.setSearchString(searchString);
+        
+        if (StringUtility.stringHasValue(replaceString)) {
+            crr.setReplaceString(replaceString);
+        }
+
+        tc.setColumnRenamingRule(crr);
+    }
+    
     private void parseJavaTypeResolver(AbatorContext abatorContext, Node node) 
{
         JavaTypeResolverConfiguration javaTypeResolverConfiguration = new 
JavaTypeResolverConfiguration();
 

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/abator-config_1_0.dtd
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/abator-config_1_0.dtd?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/abator-config_1_0.dtd
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/xml/abator-config_1_0.dtd
 Tue Nov 20 22:06:41 2007
@@ -133,7 +133,7 @@
   The table element is used to specify a database table that will be the 
source information
   for a set of generated objects.
 -->
-<!ELEMENT table (property*, generatedKey?, (columnOverride | ignoreColumn)*) >
+<!ELEMENT table (property*, generatedKey?, columnRenamingRule?, 
(columnOverride | ignoreColumn)*) >
 <!ATTLIST table
   catalog CDATA #IMPLIED
   schema CDATA #IMPLIED
@@ -187,4 +187,13 @@
   sqlStatement CDATA #REQUIRED
   identity CDATA #IMPLIED
   type CDATA #IMPLIED>
+
+<!--
+  The columnRenamingRule element is used to specify a rule for renaming
+  columns before the corresponding property name is calculated
+-->
+<!ELEMENT columnRenamingRule EMPTY>
+<!ATTLIST columnRenamingRule
+  searchString CDATA #REQUIRED
+  replaceString CDATA #IMPLIED>
   

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/DatabaseIntrospector.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/DatabaseIntrospector.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/DatabaseIntrospector.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/DatabaseIntrospector.java
 Tue Nov 20 22:06:41 2007
@@ -24,6 +24,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.ibatis.abator.api.FullyQualifiedTable;
 import org.apache.ibatis.abator.api.JavaTypeResolver;
@@ -220,13 +222,29 @@
             Iterator tableColumns = ((List) entry.getValue()).iterator();
             while (tableColumns.hasNext()) {
                 ColumnDefinition cd = (ColumnDefinition) tableColumns.next();
+
+                Pattern pattern = null;
+                String replaceString = null;
+                if (tc.getColumnRenamingRule() != null) {
+                    pattern = 
Pattern.compile(tc.getColumnRenamingRule().getSearchString());
+                    
+                    replaceString = 
tc.getColumnRenamingRule().getReplaceString();
+                    replaceString = replaceString == null ? "" : 
replaceString;//$NON-NLS-1$
+                }
                 
                 if 
("true".equalsIgnoreCase(tc.getProperty(PropertyRegistry.TABLE_USE_ACTUAL_COLUMN_NAMES)))
 { //$NON-NLS-1$
                     cd.setJavaProperty(JavaBeansUtil.getValidPropertyName(cd
                             .getActualColumnName()));
                 } else {
-                    cd.setJavaProperty(JavaBeansUtil.getCamelCaseString(cd
+                    if (pattern != null) {
+                        Matcher matcher = 
pattern.matcher(cd.getActualColumnName());
+                        String renamedColumn = 
matcher.replaceAll(replaceString);
+                        
cd.setJavaProperty(JavaBeansUtil.getCamelCaseString(renamedColumn,
+                                false));
+                    } else {
+                        cd.setJavaProperty(JavaBeansUtil.getCamelCaseString(cd
                             .getActualColumnName(), false));
+                    }
                 }
                 
                 try {

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/util/messages/messages.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/util/messages/messages.properties?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/util/messages/messages.properties
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/util/messages/messages.properties
 Tue Nov 20 22:06:41 2007
@@ -12,6 +12,7 @@
 ValidationError.11=At least one AbatorConfiguration element is required
 ValidationError.12={0} Target Package is Required for context {1}
 ValidationError.13=If "useColumnIndexes" property is set, then either both or 
neither query id must be set for table {0}
+ValidationError.14="searchString is required in a ColumnRenamingRule"
 
 RuntimeError.0=configfile is a required parameter
 RuntimeError.1=configfile {0} does not exist

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/CreateDB.sql
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/CreateDB.sql?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/CreateDB.sql
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/CreateDB.sql
 Tue Nov 20 22:06:41 2007
@@ -82,3 +82,11 @@
   blob1 longvarbinary,
   blob2 longvarbinary
 );
+
+create table RegexRename (
+  CUST_ID integer,
+  CUST_NAME varchar(30),
+  CUST_ADDRESS varchar(30),
+  ZIP_CODE char(5),
+  primary key(CUST_ID)
+);

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/abatorConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/abatorConfig.xml?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/abatorConfig.xml
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/abatorConfig.xml
 Tue Nov 20 22:06:41 2007
@@ -383,5 +383,8 @@
       <columnOverride column="timeField" 
javaType="abatortest.execute.miscellaneous.MyTime"
          typeHandler="abatortest.execute.miscellaneous.MyTimeTypeHandler"/>
     </table>
+    <table tableName="RegexRename">
+      <columnRenamingRule searchString="^CUST" />
+    </table>
   </abatorContext>
 </abatorConfiguration>

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/MiscellaneousTests.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/MiscellaneousTests.java?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/MiscellaneousTests.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/MiscellaneousTests.java
 Tue Nov 20 22:06:41 2007
@@ -39,9 +39,12 @@
 import abatortest.BaseTest;
 import abatortest.generated.miscellaneous.dao.MyObjectDAO;
 import abatortest.generated.miscellaneous.dao.MyObjectDAOImpl;
+import abatortest.generated.miscellaneous.dao.RegexrenameDAO;
+import abatortest.generated.miscellaneous.dao.RegexrenameDAOImpl;
 import abatortest.generated.miscellaneous.model.MyObject;
 import abatortest.generated.miscellaneous.model.MyObjectExample;
 import abatortest.generated.miscellaneous.model.MyObjectKey;
+import abatortest.generated.miscellaneous.model.Regexrename;
 import abatortest.execute.miscellaneous.FirstName;
 
 /**
@@ -854,5 +857,29 @@
         } catch (SQLException e) {
             fail(e.getMessage());
         }
+    }
+    
+    public void testRegexRenameInsert() {
+        RegexrenameDAO dao = new RegexrenameDAOImpl(sqlMapClient);
+        
+        try {
+            Regexrename record = new Regexrename();
+            record.setAddress("123 Main Street");
+            record.setId(22);
+            record.setName("Fred");
+            record.setZipCode("99999");
+            
+            dao.insertRegexrename(record);
+            
+            Regexrename returnedRecord = dao.selectRegexrenameByPrimaryKey(22);
+            
+            assertEquals(record.getAddress(), returnedRecord.getAddress());
+            assertEquals(record.getId(), returnedRecord.getId());
+            assertEquals(record.getName(), returnedRecord.getName());
+            assertEquals(record.getZipCode(), returnedRecord.getZipCode());
+        } catch (SQLException e) {
+            fail(e.getMessage());
+        }
+        
     }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/SqlMapConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/SqlMapConfig.xml?rev=596946&r1=596945&r2=596946&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/SqlMapConfig.xml
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/testJava5/abatortest/execute/miscellaneous/SqlMapConfig.xml
 Tue Nov 20 22:06:41 2007
@@ -18,5 +18,6 @@
   </transactionManager>
 
   <sqlMap 
resource="abatortest/generated/miscellaneous/xml/PKFIELDS_SqlMap.xml" />
+  <sqlMap 
resource="abatortest/generated/miscellaneous/xml/REGEXRENAME_SqlMap.xml" />
 
 </sqlMapConfig>


Reply via email to