Author: jgbutler
Date: Thu Nov 12 23:00:33 2009
New Revision: 835626

URL: http://svn.apache.org/viewvc?rev=835626&view=rev
Log:
[ibator] a new test for enum, and a plugin for ibatis3 mapperconfig files

Added:
    
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/plugins/MapperConfigPlugin.java
    
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/java/ibatortest/execute/miscellaneous/TestEnum.java
Modified:
    
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/generator/XmlConstants.java
    
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/CreateDB.sql
    
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/ibatorConfig.xml
    
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/java/ibatortest/execute/miscellaneous/MiscellaneousTest.java
    
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/resources/ibatortest/MapperConfig.xml

Modified: 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/generator/XmlConstants.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/generator/XmlConstants.java?rev=835626&r1=835625&r2=835626&view=diff
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/generator/XmlConstants.java
 (original)
+++ 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/generator/XmlConstants.java
 Thu Nov 12 23:00:33 2009
@@ -40,6 +40,10 @@
 
     public static final String IBATIS3_MAPPER_PUBLIC_ID = 
"-//ibatis.apache.org//DTD Mapper 3.0//EN"; //$NON-NLS-1$
     
+    public static final String IBATIS3_MAPPER_CONFIG_SYSTEM_ID = 
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd";; //$NON-NLS-1$
+
+    public static final String IBATIS3_MAPPER_CONFIG_PUBLIC_ID = 
"-//ibatis.apache.org//DTD Config 3.0//EN"; //$NON-NLS-1$
+    
     public static final String IBATOR_CONFIG_SYSTEM_ID = 
"http://ibatis.apache.org/dtd/ibator-config_1_0.dtd";; //$NON-NLS-1$
     
     public static final String IBATOR_CONFIG_PUBLIC_ID = "-//Apache Software 
Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN"; //$NON-NLS-1$

Added: 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/plugins/MapperConfigPlugin.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/plugins/MapperConfigPlugin.java?rev=835626&view=auto
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/plugins/MapperConfigPlugin.java
 (added)
+++ 
ibatis/java/ibator/trunk/core/ibator-core/src/main/java/org/apache/ibatis/ibator/plugins/MapperConfigPlugin.java
 Thu Nov 12 23:00:33 2009
@@ -0,0 +1,146 @@
+/*
+ *  Copyright 2009 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.ibator.plugins;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.ibatis.ibator.api.GeneratedXmlFile;
+import org.apache.ibatis.ibator.api.IbatorPluginAdapter;
+import org.apache.ibatis.ibator.api.IntrospectedTable;
+import org.apache.ibatis.ibator.api.dom.xml.Attribute;
+import org.apache.ibatis.ibator.api.dom.xml.Document;
+import org.apache.ibatis.ibator.api.dom.xml.TextElement;
+import org.apache.ibatis.ibator.api.dom.xml.XmlElement;
+import org.apache.ibatis.ibator.generator.XmlConstants;
+import org.apache.ibatis.ibator.internal.util.StringUtility;
+import org.apache.ibatis.ibator.internal.util.messages.Messages;
+
+/**
+ * This plugin generates a MapperConfig file containing mapper entries for
+ * SQL maps generated by Ibator for iBATIS3.  This demonstrates hooking into
+ * the Ibator code generation lifecycle and generating additional XML files.
+ * <p>
+ * This plugin accepts three properties:
+ * <ul>
+ *   <li><tt>fileName</tt> (optional) the name of the generated file.
+ *       this defaults to "SqlMapConfig.xml" if not specified.</li>
+ *   <li><tt>targetPackage</tt> (required) the name of the package where the 
+ *      file should be placed.  Specified like "com.mycompany.sql".</li>
+ *   <li><tt>targetProject</tt> (required) the name of the project where the 
+ *      file should be placed.</li>
+ * </ul>
+ * 
+ * Note: targetPackage and targetProject follow the same rules as the
+ * targetPackage and targetProject values on the sqlMapGenerator
+ * configuration element.
+ * 
+ * @author Jeff Butler
+ *
+ */
+public class MapperConfigPlugin extends IbatorPluginAdapter {
+    
+    private List<String> mapperFiles;
+
+    public MapperConfigPlugin() {
+        mapperFiles = new ArrayList<String>();
+    }
+
+    public boolean validate(List<String> warnings) {
+        boolean valid = true;
+        
+        if 
(!StringUtility.stringHasValue(properties.getProperty("targetProject"))) { 
//$NON-NLS-1$
+            warnings.add(Messages.getString("ValidationError.18", //$NON-NLS-1$
+                    "MapperConfigPlugin", //$NON-NLS-1$
+                    "targetProject")); //$NON-NLS-1$
+            valid = false;
+        }
+        
+        if 
(!StringUtility.stringHasValue(properties.getProperty("targetPackage"))) { 
//$NON-NLS-1$
+            warnings.add(Messages.getString("ValidationError.18", //$NON-NLS-1$
+                    "MapperConfigPlugin", //$NON-NLS-1$
+                    "targetPackage")); //$NON-NLS-1$
+            valid = false;
+        }
+        
+        return valid;
+    }
+    
+    @Override
+    public List<GeneratedXmlFile> contextGenerateAdditionalXmlFiles() {
+        Document document = new 
Document(XmlConstants.IBATIS3_MAPPER_CONFIG_PUBLIC_ID,
+                XmlConstants.IBATIS3_MAPPER_CONFIG_SYSTEM_ID);
+        
+        XmlElement root = new XmlElement("configuration"); //$NON-NLS-1$
+        document.setRootElement(root);
+        
+        root.addElement(new TextElement("<!--")); //$NON-NLS-1$
+        root.addElement(new TextElement(
+            "  This file is generated by Apache iBATIS ibator.")); 
//$NON-NLS-1$
+        root.addElement(new TextElement(
+            "  This file is the shell of a Mapper Config file - in many cases 
you will need to add")); //$NON-NLS-1$
+        root.addElement(new TextElement(
+            "    to this file before it is usable by iBATIS.")); //$NON-NLS-1$
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("  This file was generated on "); //$NON-NLS-1$
+        sb.append(new Date());
+        sb.append('.');
+        root.addElement(new TextElement(sb.toString()));
+
+        root.addElement(new TextElement("-->")); //$NON-NLS-1$
+        
+        XmlElement mappers = new XmlElement("mappers"); //$NON-NLS-1$
+        root.addElement(mappers);
+        
+        XmlElement mapper;
+        for (String mapperFile : mapperFiles) {
+            mapper = new XmlElement("mapper"); //$NON-NLS-1$
+            mapper.addAttribute(new Attribute("resource", mapperFile)); 
//$NON-NLS-1$
+            mappers.addElement(mapper);
+        }
+        
+        GeneratedXmlFile gxf = new GeneratedXmlFile(document,
+                properties.getProperty("fileName", "MapperConfig.xml"), 
//$NON-NLS-1$ //$NON-NLS-2$
+                properties.getProperty("targetPackage"), //$NON-NLS-1$
+                properties.getProperty("targetProject"), //$NON-NLS-1$
+                false);
+        
+        List<GeneratedXmlFile> answer = new ArrayList<GeneratedXmlFile>(1);
+        answer.add(gxf);
+        
+        return answer;
+    }
+
+    /*
+     * This method collects the name of every SqlMap file generated
+     * by Ibator in this context.
+     */
+    @Override
+    public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable 
introspectedTable) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(sqlMap.getTargetPackage());
+        sb.append('.');
+        String temp = sb.toString();
+        sb.setLength(0);
+        sb.append(temp.replace('.', '/'));
+        sb.append(sqlMap.getFileName());
+        mapperFiles.add(sb.toString());
+
+        return true;
+    }
+}

Added: 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/java/ibatortest/execute/miscellaneous/TestEnum.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/java/ibatortest/execute/miscellaneous/TestEnum.java?rev=835626&view=auto
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/java/ibatortest/execute/miscellaneous/TestEnum.java
 (added)
+++ 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/java/ibatortest/execute/miscellaneous/TestEnum.java
 Thu Nov 12 23:00:33 2009
@@ -0,0 +1,28 @@
+/*
+ *  Copyright 2009 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 ibatortest.execute.miscellaneous;
+
+/**
+ * @author Jeff Butler
+ *
+ */
+public enum TestEnum {
+    FRED,
+    WILMA,
+    BARNEY,
+    BETTY
+}

Modified: 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/CreateDB.sql
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/CreateDB.sql?rev=835626&r1=835625&r2=835626&view=diff
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/CreateDB.sql
 (original)
+++ 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/CreateDB.sql
 Thu Nov 12 23:00:33 2009
@@ -8,6 +8,7 @@
 drop table BlobsOnly if exists;
 drop table RegexRename if exists;
 drop table AnotherAwfulTable if exists;
+drop table EnumTest if exists;
 
 create table FieldsOnly (
   IntegerField int,
@@ -101,3 +102,9 @@
   "delete" varchar(30),
   primary key(id)
 );
+
+create table EnumTest (
+  id int not null,
+  name varchar(20) not null,
+  primary key(id)
+);

Modified: 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/ibatorConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/ibatorConfig.xml?rev=835626&r1=835625&r2=835626&view=diff
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/ibatorConfig.xml
 (original)
+++ 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/main/resources/ibatorConfig.xml
 Thu Nov 12 23:00:33 2009
@@ -165,6 +165,9 @@
     <table tableName="RegexRename">
       <columnRenamingRule searchString="^CUST" />
     </table>
+    <table tableName="EnumTest">
+      <columnOverride column="name" 
javaType="ibatortest.execute.miscellaneous.TestEnum"/>
+    </table>
   </ibatorContext>
   
   <ibatorContext id="miscellaneousTests_NoDAO" targetRuntime="Ibatis3">

Modified: 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/java/ibatortest/execute/miscellaneous/MiscellaneousTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/java/ibatortest/execute/miscellaneous/MiscellaneousTest.java?rev=835626&r1=835625&r2=835626&view=diff
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/java/ibatortest/execute/miscellaneous/MiscellaneousTest.java
 (original)
+++ 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/java/ibatortest/execute/miscellaneous/MiscellaneousTest.java
 Thu Nov 12 23:00:33 2009
@@ -17,9 +17,11 @@
 
 import static org.junit.Assert.*;
 import ibatortest.AbstractTest;
+import ibatortest.generated.miscellaneous.dao.EnumtestMapper;
 import ibatortest.generated.miscellaneous.dao.MyObjectMapper;
 import ibatortest.generated.miscellaneous.dao.RegexrenameMapper;
 import ibatortest.generated.miscellaneous.model.Anotherawfultable;
+import ibatortest.generated.miscellaneous.model.Enumtest;
 import ibatortest.generated.miscellaneous.model.MyObject;
 import ibatortest.generated.miscellaneous.model.MyObjectCriteria;
 import ibatortest.generated.miscellaneous.model.MyObjectKey;
@@ -1017,4 +1019,28 @@
             sqlSession.close();
         }
     }
+    
+    @Test
+    public void testEnum() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+
+        try {
+            EnumtestMapper mapper = sqlSession.getMapper(EnumtestMapper.class);
+            
+            Enumtest enumTest = new Enumtest();
+            enumTest.setId(1);
+            enumTest.setName(TestEnum.FRED);
+            int rows = mapper.insert(enumTest);
+            assertEquals(1, rows);
+            
+            List<Enumtest> returnedRecords = mapper.selectByExample(null);
+            assertEquals(1, returnedRecords.size());
+            
+            Enumtest returnedRecord = returnedRecords.get(0);
+            assertEquals(1, returnedRecord.getId().intValue());
+            assertEquals(TestEnum.FRED, returnedRecord.getName());
+        } finally {
+            sqlSession.close();
+        }
+    }
 }

Modified: 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/resources/ibatortest/MapperConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/resources/ibatortest/MapperConfig.xml?rev=835626&r1=835625&r2=835626&view=diff
==============================================================================
--- 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/resources/ibatortest/MapperConfig.xml
 (original)
+++ 
ibatis/java/ibator/trunk/core/ibator-systests-ibatis3/src/test/resources/ibatortest/MapperConfig.xml
 Thu Nov 12 23:00:33 2009
@@ -53,6 +53,7 @@
     <mapper 
resource="ibatortest/generated/miscellaneous/xml/AnotherawfultableMapper.xml" />
     <mapper 
resource="ibatortest/generated/miscellaneous/xml/MyObjectMapper.xml" />
     <mapper 
resource="ibatortest/generated/miscellaneous/xml/RegexrenameMapper.xml" />
+    <mapper 
resource="ibatortest/generated/miscellaneous/xml/EnumtestMapper.xml" />
   </mappers>
 
 </configuration>


Reply via email to