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")); + } }