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