You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by jg...@apache.org on 2009/07/15 04:12:41 UTC

svn commit: r794130 - in /ibatis/trunk/java/tools/ibator/core: src/org/apache/ibatis/ibator/api/dom/java/ src/org/apache/ibatis/ibator/generator/ src/org/apache/ibatis/ibator/generator/ibatis2/model/ test/org/apache/ibatis/ibator/api/dom/java/

Author: jgbutler
Date: Wed Jul 15 02:12:41 2009
New Revision: 794130

URL: http://svn.apache.org/viewvc?rev=794130&view=rev
Log:
[Ibator] Additional refactorings for iBATIS3

Removed:
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseModelClassGenerator.java
Modified:
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/AbstractJavaGenerator.java
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseRecordGenerator.java
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/ExampleGenerator.java
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/PrimaryKeyGenerator.java
    ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/RecordWithBLOBsGenerator.java
    ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java Wed Jul 15 02:12:41 2009
@@ -121,7 +121,18 @@
     public List<String> getImportList() {
         List<String> answer = new ArrayList<String>();
         if (isExplicitlyImported()) {
-            answer.add(baseQualifiedName);
+            int index = baseShortName.indexOf('.');
+            if (index == -1) {
+                answer.add(baseQualifiedName);
+            } else {
+                // an inner class is specified, only import the top
+                // level class
+                StringBuilder sb = new StringBuilder();
+                sb.append(packageName);
+                sb.append('.');
+                sb.append(baseShortName.substring(0, index));
+                answer.add(sb.toString());
+            }
         }
         
         for (FullyQualifiedJavaType fqjt : typeArguments) {
@@ -338,9 +349,16 @@
     
     private void simpleParse(String typeSpecification) {
         baseQualifiedName = typeSpecification.trim();
-        int lastIndex = baseQualifiedName.lastIndexOf('.');
-        if (lastIndex == -1) {
-            baseShortName = typeSpecification;
+        if (baseQualifiedName.contains(".")) {
+            packageName = getPackage(baseQualifiedName);
+            baseShortName = baseQualifiedName.substring(packageName.length() + 1);
+            if ("java.lang".equals(packageName)) { //$NON-NLS-1$
+                explicitlyImported = false;
+            } else {
+                explicitlyImported = true;
+            }
+        } else {
+            baseShortName = baseQualifiedName;
             explicitlyImported = false;
             packageName = ""; //$NON-NLS-1$
             
@@ -372,14 +390,6 @@
                 primitive = false;
                 primitiveTypeWrapper = null;
             }
-        } else {
-            baseShortName = baseQualifiedName.substring(lastIndex + 1);
-            packageName = baseQualifiedName.substring(0, lastIndex);
-            if ("java.lang".equals(packageName)) { //$NON-NLS-1$
-                explicitlyImported = false;
-            } else {
-                explicitlyImported = true;
-            }
         }
     }
     
@@ -422,4 +432,32 @@
             typeArguments.add(new FullyQualifiedJavaType(finalType));
         }
     }
+    
+    /**
+     * Returns the pack name of a fully qualified type.
+     * 
+     * This method relies on convention - we assume that package names
+     * are all lower case.  Not totally fool proof, but correct in
+     * most instances.
+     * 
+     * @param baseQualifiedName
+     * @return
+     */
+    private static String getPackage(String baseQualifiedName) {
+        StringBuilder sb = new StringBuilder();
+        StringTokenizer st = new StringTokenizer(baseQualifiedName, ".");
+        while (st.hasMoreTokens()) {
+            String s = st.nextToken();
+            if (Character.isUpperCase(s.charAt(0))) {
+                break;
+            } else {
+                if (sb.length() > 0) {
+                    sb.append('.');
+                }
+                sb.append(s);
+            }
+        }
+        
+        return sb.toString();
+    }
 }

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/AbstractJavaGenerator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/AbstractJavaGenerator.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/AbstractJavaGenerator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/AbstractJavaGenerator.java Wed Jul 15 02:12:41 2009
@@ -16,8 +16,18 @@
 package org.apache.ibatis.ibator.generator;
 
 import java.util.List;
+import java.util.Properties;
 
+import org.apache.ibatis.ibator.api.IntrospectedColumn;
 import org.apache.ibatis.ibator.api.dom.java.CompilationUnit;
+import org.apache.ibatis.ibator.api.dom.java.Field;
+import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType;
+import org.apache.ibatis.ibator.api.dom.java.JavaVisibility;
+import org.apache.ibatis.ibator.api.dom.java.Method;
+import org.apache.ibatis.ibator.api.dom.java.Parameter;
+import org.apache.ibatis.ibator.config.PropertyRegistry;
+import org.apache.ibatis.ibator.internal.util.JavaBeansUtil;
+import org.apache.ibatis.ibator.internal.util.StringUtility;
 
 /**
  * 
@@ -26,4 +36,108 @@
  */
 public abstract class AbstractJavaGenerator extends AbstractGenerator {
     public abstract List<CompilationUnit> getCompilationUnits();
+    
+    public static Method getGetter(Field field) {
+        Method method = new Method();
+        method.setName(JavaBeansUtil.getGetterMethodName(field.getName(),field.getType()));
+        method.setReturnType(field.getType());
+        method.setVisibility(JavaVisibility.PUBLIC);
+        StringBuilder sb = new StringBuilder();
+        sb.append("return ");
+        sb.append(field.getName());
+        sb.append(';');
+        method.addBodyLine(sb.toString());
+        return method;
+    }
+
+    public Method getJavaBeansGetter(IntrospectedColumn introspectedColumn) {
+        FullyQualifiedJavaType fqjt = introspectedColumn
+                .getFullyQualifiedJavaType();
+        String property = introspectedColumn.getJavaProperty();
+
+        Method method = new Method();
+        method.setVisibility(JavaVisibility.PUBLIC);
+        method.setReturnType(fqjt);
+        method.setName(JavaBeansUtil.getGetterMethodName(property, fqjt));
+        ibatorContext.getCommentGenerator().addGetterComment(method,
+                introspectedTable,
+                introspectedColumn);
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("return "); //$NON-NLS-1$
+        sb.append(property);
+        sb.append(';');
+        method.addBodyLine(sb.toString());
+
+        return method;
+    }
+
+    public Field getJavaBeansField(IntrospectedColumn introspectedColumn) {
+        FullyQualifiedJavaType fqjt = introspectedColumn
+                .getFullyQualifiedJavaType();
+        String property = introspectedColumn.getJavaProperty();
+
+        Field field = new Field();
+        field.setVisibility(JavaVisibility.PRIVATE);
+        field.setType(fqjt);
+        field.setName(property);
+        ibatorContext.getCommentGenerator().addFieldComment(field,
+                introspectedTable,
+                introspectedColumn);
+
+        return field;
+    }
+
+    public Method getJavaBeansSetter(IntrospectedColumn introspectedColumn) {
+        FullyQualifiedJavaType fqjt = introspectedColumn
+                .getFullyQualifiedJavaType();
+        String property = introspectedColumn.getJavaProperty();
+
+        Method method = new Method();
+        method.setVisibility(JavaVisibility.PUBLIC);
+        method.setName(JavaBeansUtil.getSetterMethodName(property));
+        method.addParameter(new Parameter(fqjt, property));
+        ibatorContext.getCommentGenerator().addSetterComment(method,
+                introspectedTable,
+                introspectedColumn);
+
+        StringBuilder sb = new StringBuilder();
+        if (isTrimStringsEnabled() && introspectedColumn.isStringColumn()) {
+            sb.append("this."); //$NON-NLS-1$
+            sb.append(property);
+            sb.append(" = "); //$NON-NLS-1$
+            sb.append(property);
+            sb.append(" == null ? null : "); //$NON-NLS-1$
+            sb.append(property);
+            sb.append(".trim();"); //$NON-NLS-1$
+            method.addBodyLine(sb.toString());
+        } else {
+            sb.append("this."); //$NON-NLS-1$
+            sb.append(property);
+            sb.append(" = "); //$NON-NLS-1$
+            sb.append(property);
+            sb.append(';');
+            method.addBodyLine(sb.toString());
+        }
+
+        return method;
+    }
+
+    public boolean isTrimStringsEnabled () {
+        Properties properties = ibatorContext.getJavaModelGeneratorConfiguration().getProperties();
+        boolean rc = StringUtility.isTrue(properties
+                .getProperty(PropertyRegistry.MODEL_GENERATOR_TRIM_STRINGS));
+        return rc;
+    }
+
+
+    public String getRootClass () {
+        String rootClass = introspectedTable.getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_CLASS);
+        if (rootClass == null) {
+            Properties properties = ibatorContext.getJavaModelGeneratorConfiguration().getProperties();
+            rootClass = properties.getProperty(PropertyRegistry.ANY_ROOT_CLASS);
+        }
+        
+        return rootClass;
+    }
 }

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseRecordGenerator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseRecordGenerator.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseRecordGenerator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/BaseRecordGenerator.java Wed Jul 15 02:12:41 2009
@@ -28,6 +28,7 @@
 import org.apache.ibatis.ibator.api.dom.java.JavaVisibility;
 import org.apache.ibatis.ibator.api.dom.java.Method;
 import org.apache.ibatis.ibator.api.dom.java.TopLevelClass;
+import org.apache.ibatis.ibator.generator.AbstractJavaGenerator;
 import org.apache.ibatis.ibator.generator.RootClassInfo;
 import org.apache.ibatis.ibator.internal.util.messages.Messages;
 
@@ -36,7 +37,7 @@
  * @author Jeff Butler
  *
  */
-public class BaseRecordGenerator extends BaseModelClassGenerator {
+public class BaseRecordGenerator extends AbstractJavaGenerator {
 
     public BaseRecordGenerator() {
         super();

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/ExampleGenerator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/ExampleGenerator.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/ExampleGenerator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/ExampleGenerator.java Wed Jul 15 02:12:41 2009
@@ -22,7 +22,6 @@
 import org.apache.ibatis.ibator.api.CommentGenerator;
 import org.apache.ibatis.ibator.api.FullyQualifiedTable;
 import org.apache.ibatis.ibator.api.IntrospectedColumn;
-import org.apache.ibatis.ibator.api.IntrospectedTable;
 import org.apache.ibatis.ibator.api.dom.OutputUtilities;
 import org.apache.ibatis.ibator.api.dom.java.CompilationUnit;
 import org.apache.ibatis.ibator.api.dom.java.Field;
@@ -32,6 +31,7 @@
 import org.apache.ibatis.ibator.api.dom.java.Method;
 import org.apache.ibatis.ibator.api.dom.java.Parameter;
 import org.apache.ibatis.ibator.api.dom.java.TopLevelClass;
+import org.apache.ibatis.ibator.generator.AbstractJavaGenerator;
 import org.apache.ibatis.ibator.generator.ibatis2.Ibatis2FormattingUtilities;
 import org.apache.ibatis.ibator.internal.rules.IbatorRules;
 import org.apache.ibatis.ibator.internal.util.JavaBeansUtil;
@@ -43,7 +43,7 @@
  * @author Jeff Butler
  *
  */
-public class ExampleGenerator extends BaseModelClassGenerator {
+public class ExampleGenerator extends AbstractJavaGenerator {
 
     private boolean generateForJava5;
 
@@ -199,8 +199,7 @@
         topLevelClass.addMethod(method);
 
         // now generate the inner class that holds the AND conditions
-        topLevelClass.addInnerClass(getCriteriaInnerClass(topLevelClass,
-                introspectedTable));
+        topLevelClass.addInnerClass(getCriteriaInnerClass(topLevelClass));
 
         List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
         if (ibatorContext.getPlugins().modelExampleClassGenerated(topLevelClass, introspectedTable)) {
@@ -209,8 +208,7 @@
         return answer;
     }
 
-    private InnerClass getCriteriaInnerClass(TopLevelClass topLevelClass,
-            IntrospectedTable introspectedTable) {
+    private InnerClass getCriteriaInnerClass(TopLevelClass topLevelClass) {
         Field field;
         Method method;
 

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/PrimaryKeyGenerator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/PrimaryKeyGenerator.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/PrimaryKeyGenerator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/PrimaryKeyGenerator.java Wed Jul 15 02:12:41 2009
@@ -28,6 +28,7 @@
 import org.apache.ibatis.ibator.api.dom.java.JavaVisibility;
 import org.apache.ibatis.ibator.api.dom.java.Method;
 import org.apache.ibatis.ibator.api.dom.java.TopLevelClass;
+import org.apache.ibatis.ibator.generator.AbstractJavaGenerator;
 import org.apache.ibatis.ibator.generator.RootClassInfo;
 import org.apache.ibatis.ibator.internal.util.messages.Messages;
 
@@ -36,7 +37,7 @@
  * @author Jeff Butler
  *
  */
-public class PrimaryKeyGenerator extends BaseModelClassGenerator {
+public class PrimaryKeyGenerator extends AbstractJavaGenerator {
 
     public PrimaryKeyGenerator() {
         super();

Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/RecordWithBLOBsGenerator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/RecordWithBLOBsGenerator.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/RecordWithBLOBsGenerator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/generator/ibatis2/model/RecordWithBLOBsGenerator.java Wed Jul 15 02:12:41 2009
@@ -27,6 +27,7 @@
 import org.apache.ibatis.ibator.api.dom.java.JavaVisibility;
 import org.apache.ibatis.ibator.api.dom.java.Method;
 import org.apache.ibatis.ibator.api.dom.java.TopLevelClass;
+import org.apache.ibatis.ibator.generator.AbstractJavaGenerator;
 import org.apache.ibatis.ibator.generator.RootClassInfo;
 import org.apache.ibatis.ibator.internal.util.messages.Messages;
 
@@ -35,7 +36,7 @@
  * @author Jeff Butler
  *
  */
-public class RecordWithBLOBsGenerator extends BaseModelClassGenerator {
+public class RecordWithBLOBsGenerator extends AbstractJavaGenerator {
 
     public RecordWithBLOBsGenerator() {
         super();

Modified: ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java?rev=794130&r1=794129&r2=794130&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java (original)
+++ ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java Wed Jul 15 02:12:41 2009
@@ -48,6 +48,7 @@
         assertEquals("com.foo.Bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
         assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(1, fqjt.getImportList().size());
+        assertEquals("com.foo.Bar", fqjt.getImportList().get(0));
     }
 
     @Test
@@ -59,6 +60,7 @@
         assertEquals("java.util.List<java.lang.String>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(1, fqjt.getImportList().size());
+        assertEquals("java.util.List", fqjt.getImportList().get(0));
     }
 
 
@@ -122,6 +124,7 @@
         assertEquals("java.util.Map<java.lang.String, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(1, fqjt.getImportList().size());
+        assertEquals("java.util.Map", fqjt.getImportList().get(0));
     }
 
     @Test
@@ -144,6 +147,7 @@
         assertEquals("java.util.Map<?, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(1, fqjt.getImportList().size());
+        assertEquals("java.util.Map", fqjt.getImportList().get(0));
     }
 
     @Test
@@ -156,4 +160,38 @@
         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(2, fqjt.getImportList().size());
     }
+    
+    @Test
+    public void testNestedClass1() {
+        FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("Bar.Inner", fqjt.getShortName()); //$NON-NLS-1$
+        assertEquals("org.foo.Bar.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+        assertEquals("org.foo", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(1, fqjt.getImportList().size());
+        assertEquals("org.foo.Bar", fqjt.getImportList().get(0));
+    }
+
+    @Test
+    public void testNestedClass2() {
+        FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner.Inner");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("Bar.Inner.Inner", fqjt.getShortName()); //$NON-NLS-1$
+        assertEquals("org.foo.Bar.Inner.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+        assertEquals("org.foo", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(1, fqjt.getImportList().size());
+        assertEquals("org.foo.Bar", fqjt.getImportList().get(0));
+    }
+
+    @Test
+    public void testNestedClass3() {
+        FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<org.foo.Bar.Inner>");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("List<Bar.Inner>", fqjt.getShortName()); //$NON-NLS-1$
+        assertEquals("java.util.List<org.foo.Bar.Inner>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+        assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(2, fqjt.getImportList().size());
+        assertTrue(fqjt.getImportList().contains("java.util.List"));
+        assertTrue(fqjt.getImportList().contains("org.foo.Bar"));
+    }
 }