Author: cbegin
Date: Sun Nov  6 10:30:30 2005
New Revision: 331131

URL: http://svn.apache.org/viewcvs?rev=331131&view=rev
Log:
Improved scriptrunner design, removed deprication.
Added case ignorance to entity resolver

Modified:
    ibatis/trunk/java/mapper/mapper2/build/version.properties
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/jdbc/ScriptRunner.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
    ibatis/trunk/java/mapper/mapper2/test/com/ibatis/dao/BaseDaoTest.java
    ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/BaseSqlMapTest.java
    
ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/builder/xml/SqlMapClasspathEntityResolverTest.java
    
ibatis/trunk/java/mapper/mapper2/test/compatibility/scriptrunner/ScriptRunnerCompat.java

Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/build/version.properties?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/build/version.properties (original)
+++ ibatis/trunk/java/mapper/mapper2/build/version.properties Sun Nov  6 
10:30:30 2005
@@ -1,5 +1,5 @@
 #Build version info
-#Sun Nov 06 09:57:40 MST 2005
+#Sun Nov 06 11:16:16 MST 2005
 version=2.1.6
-buildDate=2005/11/06 09\:57
-buildNum=590
+buildDate=2005/11/06 11\:16
+buildNum=591

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/jdbc/ScriptRunner.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/jdbc/ScriptRunner.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/jdbc/ScriptRunner.java 
(original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/jdbc/ScriptRunner.java 
Sun Nov  6 10:30:30 2005
@@ -16,98 +16,50 @@
 package com.ibatis.common.jdbc;
 
 import com.ibatis.common.resources.Resources;
+import com.ibatis.common.exception.NestedRuntimeException;
 
 import java.io.IOException;
 import java.io.LineNumberReader;
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.sql.*;
-import java.util.Map;
 
 /**
  * Tool to run database scripts
- * @deprecated There are better tools available for running scripts.  This
- * class has become out of scope for iBATIS.
  */
 public class ScriptRunner {
 
   //private static final Log log = LogFactory.getLog(ScriptRunner.class);
 
 
+  private Connection connection;
   private String driver;
   private String url;
   private String username;
   private String password;
+
   private boolean stopOnError;
   private boolean autoCommit;
+
   private PrintWriter logWriter = new PrintWriter(System.out);
   private PrintWriter errorLogWriter = new PrintWriter(System.err);
 
   /**
    * Default constructor
    */
-  public ScriptRunner() {
-    stopOnError = false;
-    autoCommit = false;
-  }
-
-  /**
-   * Constructor to allow passing in a Map with configuration data
-   *
-   * @param props - the configuration properties
-   */
-  public ScriptRunner(Map props) {
-    setDriver((String) props.get("driver"));
-    setUrl((String) props.get("url"));
-    setUsername((String) props.get("username"));
-    setPassword((String) props.get("password"));
-    setStopOnError("true".equals(props.get("stopOnError")));
-    setAutoCommit("true".equals(props.get("autoCommit")));
-  }
-
-  /**
-   * Getter for stopOnError property
-   *
-   * @return The value of the stopOnError property
-   */
-  public boolean isStopOnError() {
-    return stopOnError;
-  }
-
-  /**
-   * Setter for stopOnError property
-   *
-   * @param stopOnError - the new value of the stopOnError property
-   */
-  public void setStopOnError(boolean stopOnError) {
+  public ScriptRunner(Connection connection, boolean autoCommit, boolean 
stopOnError) {
+    this.connection = connection;
+    this.autoCommit = autoCommit;
     this.stopOnError = stopOnError;
   }
 
-  /**
-   * Getter for autoCommit property
-   *
-   * @return The value of the autoCommit property
-   */
-  public boolean isAutoCommit() {
-    return autoCommit;
-  }
-
-  /**
-   * Setter for autoCommit property
-   *
-   * @param autoCommit - the new value of the autoCommit property
-   */
-  public void setAutoCommit(boolean autoCommit) {
+  public ScriptRunner(String driver, String url, String username, String 
password, boolean autoCommit, boolean stopOnError) {
+    this.driver = driver;
+    this.url = url;
+    this.username = username;
+    this.password = password;
     this.autoCommit = autoCommit;
-  }
-
-  /**
-   * Getter for logWriter property
-   *
-   * @return The value of the logWriter property
-   */
-  public PrintWriter getLogWriter() {
-    return logWriter;
+    this.stopOnError = stopOnError;
   }
 
   /**
@@ -120,15 +72,6 @@
   }
 
   /**
-   * Getter for errorLogWriter property
-   *
-   * @return The value of the errorLogWriter property
-   */
-  public PrintWriter getErrorLogWriter() {
-    return errorLogWriter;
-  }
-
-  /**
    * Setter for errorLogWriter property
    *
    * @param errorLogWriter - the new value of the errorLogWriter property
@@ -138,97 +81,41 @@
   }
 
   /**
-   * Getter for driver property
-   *
-   * @return The value of the driver property
-   */
-  public String getDriver() {
-    return driver;
-  }
-
-  /**
-   * Setter for driver property
-   *
-   * @param driver - the new value of the driver property
-   */
-  public void setDriver(String driver) {
-    this.driver = driver;
-  }
-
-  /**
-   * Getter for url property
-   *
-   * @return The value of the url property
-   */
-  public String getUrl() {
-    return url;
-  }
-
-  /**
-   * Setter for url property
-   *
-   * @param url - the new value of the url property
-   */
-  public void setUrl(String url) {
-    this.url = url;
-  }
-
-  /**
-   * Getter for username property
-   *
-   * @return The value of the username property
-   */
-  public String getUsername() {
-    return username;
-  }
-
-  /**
-   * Setter for username property
-   *
-   * @param username - the new value of the username property
-   */
-  public void setUsername(String username) {
-    this.username = username;
-  }
-
-  /**
-   * Getter for password property
-   *
-   * @return The value of the password property
-   */
-  public String getPassword() {
-    return password;
-  }
-
-  /**
-   * Setter for password property
-   *
-   * @param password - the new value of the password property
-   */
-  public void setPassword(String password) {
-    this.password = password;
-  }
-
-  /**
    * Runs an SQL script (read in using the Reader parameter)
    *
    * @param reader - the source of the script
-   * @throws ClassNotFoundException if the driver class cannot be found
-   * @throws SQLException           if any SQL errors occur
-   * @throws IOException            if there is an error reading from the 
Reader
-   * @throws IllegalAccessException if there are problems creating the driver 
class
-   * @throws InstantiationException if there are problems creating the driver 
class
    */
-  public void runScript(Reader reader)
-      throws ClassNotFoundException, SQLException, IOException,
-      IllegalAccessException, InstantiationException {
-    DriverManager.registerDriver((Driver) 
Resources.classForName(driver).newInstance());
-    Connection conn = DriverManager.getConnection(url, username, password);
-    if (conn.getAutoCommit() != autoCommit) {
-      conn.setAutoCommit(autoCommit);
+  public void runScript(Reader reader) throws IOException, SQLException{
+    try {
+      if (connection == null) {
+        DriverManager.registerDriver((Driver) 
Resources.classForName(driver).newInstance());
+        Connection conn = DriverManager.getConnection(url, username, password);
+        try {
+          if (conn.getAutoCommit() != autoCommit) {
+            conn.setAutoCommit(autoCommit);
+          }
+          runScript(conn, reader);
+        } finally {
+          conn.close();
+        }
+      } else {
+        boolean originalAutoCommit = connection.getAutoCommit();
+        try {
+          if (originalAutoCommit != this.autoCommit) {
+            connection.setAutoCommit(this.autoCommit);
+          }
+          runScript(connection, reader);
+        } finally {
+          connection.setAutoCommit(originalAutoCommit);
+        }
+      }
+    } catch (IOException e) {
+      throw e;
+    } catch (SQLException e) {
+      throw e;
+    } catch (Exception e) {
+      throw new NestedRuntimeException("Error running script.  Cause: " + e, 
e);
     }
-    runScript(conn, reader);
-    conn.close();
   }
 
   /**
@@ -239,7 +126,7 @@
    * @throws SQLException if any SQL errors occur
    * @throws IOException  if there is an error reading from the Reader
    */
-  public void runScript(Connection conn, Reader reader)
+  private void runScript(Connection conn, Reader reader)
       throws IOException, SQLException {
     StringBuffer command = null;
     try {
@@ -252,20 +139,16 @@
         String trimmedLine = line.trim();
         if (trimmedLine.startsWith("--")) {
           println(trimmedLine);
-//          if (log.isDebugEnabled()) {
-//            log.debug(trimmedLine);
-//          }
         } else if (trimmedLine.length() < 1 || trimmedLine.startsWith("//")) {
           //Do nothing
+        } else if (trimmedLine.length() < 1 || trimmedLine.startsWith("--")) {
+          //Do nothing
         } else if (trimmedLine.endsWith(";")) {
           command.append(line.substring(0, line.lastIndexOf(";")));
           command.append(" ");
           Statement statement = conn.createStatement();
 
           println(command);
-//          if (log.isDebugEnabled()) {
-//            log.debug(command);
-//          }
 
           boolean hasResults = false;
           if (stopOnError) {
@@ -321,13 +204,11 @@
       e.fillInStackTrace();
       printlnError("Error executing: " + command);
       printlnError(e);
-//      log.error("Error executing: " + command, e);
       throw e;
     } catch (IOException e) {
       e.fillInStackTrace();
       printlnError("Error executing: " + command);
       printlnError(e);
-//      log.error("Error executing: " + command, e);
       throw e;
     } finally {
       conn.rollback();

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
 Sun Nov  6 10:30:30 2005
@@ -36,15 +36,15 @@
   private static final Map doctypeMap = new HashMap();
 
   static {
-    doctypeMap.put("http://www.ibatis.com/dtd/sql-map-config-2.dtd";, 
SQL_MAP_CONFIG_DTD);
-    doctypeMap.put("http://ibatis.apache.org/dtd/sql-map-config-2.dtd";, 
SQL_MAP_CONFIG_DTD);
-    doctypeMap.put("-//iBATIS.com//DTD SQL Map Config 2.0//EN", 
SQL_MAP_CONFIG_DTD);
-    doctypeMap.put("-//ibatis.apache.org//DTD SQL Map Config 2.0//EN", 
SQL_MAP_CONFIG_DTD);
+    
doctypeMap.put("http://www.ibatis.com/dtd/sql-map-config-2.dtd".toUpperCase(), 
SQL_MAP_CONFIG_DTD);
+    
doctypeMap.put("http://ibatis.apache.org/dtd/sql-map-config-2.dtd".toUpperCase(),
 SQL_MAP_CONFIG_DTD);
+    doctypeMap.put("-//iBATIS.com//DTD SQL Map Config 2.0//EN".toUpperCase(), 
SQL_MAP_CONFIG_DTD);
+    doctypeMap.put("-//ibatis.apache.org//DTD SQL Map Config 
2.0//EN".toUpperCase(), SQL_MAP_CONFIG_DTD);
 
-    doctypeMap.put("http://www.ibatis.com/dtd/sql-map-2.dtd";, SQL_MAP_DTD);
-    doctypeMap.put("http://ibatis.apache.org/dtd/sql-map-2.dtd";, SQL_MAP_DTD);
-    doctypeMap.put("-//iBATIS.com//DTD SQL Map 2.0//EN", SQL_MAP_DTD);
-    doctypeMap.put("-//ibatis.apache.org//DTD SQL Map 2.0//EN", SQL_MAP_DTD);
+    doctypeMap.put("http://www.ibatis.com/dtd/sql-map-2.dtd".toUpperCase(), 
SQL_MAP_DTD);
+    doctypeMap.put("http://ibatis.apache.org/dtd/sql-map-2.dtd".toUpperCase(), 
SQL_MAP_DTD);
+    doctypeMap.put("-//iBATIS.com//DTD SQL Map 2.0//EN".toUpperCase(), 
SQL_MAP_DTD);
+    doctypeMap.put("-//ibatis.apache.org//DTD SQL Map 2.0//EN".toUpperCase(), 
SQL_MAP_DTD);
   }
 
 
@@ -58,6 +58,10 @@
    */
   public InputSource resolveEntity(String publicId, String systemId)
       throws SAXException {
+
+    if (publicId != null) publicId = publicId.toUpperCase();
+    if (systemId != null) systemId = systemId.toUpperCase();
+
     InputSource source = null;
     try {
       String path = (String) doctypeMap.get(publicId);

Modified: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/dao/BaseDaoTest.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/dao/BaseDaoTest.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/dao/BaseDaoTest.java 
(original)
+++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/dao/BaseDaoTest.java Sun 
Nov  6 10:30:30 2005
@@ -1,8 +1,8 @@
 package com.ibatis.dao;
 
+import com.ibatis.common.exception.NestedRuntimeException;
 import com.ibatis.common.jdbc.ScriptRunner;
 import com.ibatis.common.resources.Resources;
-import com.ibatis.common.exception.NestedRuntimeException;
 import com.ibatis.dao.client.DaoManager;
 import com.ibatis.dao.client.DaoTransaction;
 import com.ibatis.dao.engine.transaction.jdbc.JdbcDaoTransaction;
@@ -15,8 +15,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
 
 public abstract class BaseDaoTest extends TestCase {
 
@@ -141,12 +139,11 @@
 
     Reader reader = Resources.getResourceAsReader(script);
 
-    ScriptRunner runner = new ScriptRunner();
-    runner.setStopOnError(false);
+    ScriptRunner runner = new ScriptRunner(conn, false, false);
     runner.setLogWriter(null);
     runner.setErrorLogWriter(null);
 
-    runner.runScript(conn, reader);
+    runner.runScript(reader);
 
     daoManager.commitTransaction();
   }

Modified: 
ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/BaseSqlMapTest.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/BaseSqlMapTest.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/BaseSqlMapTest.java 
(original)
+++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/BaseSqlMapTest.java 
Sun Nov  6 10:30:30 2005
@@ -10,10 +10,7 @@
 
 import javax.sql.DataSource;
 import java.io.Reader;
-import java.io.PrintWriter;
 import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
 import java.util.*;
 
 public class BaseSqlMapTest extends TestCase {
@@ -33,12 +30,11 @@
 
       Reader reader = Resources.getResourceAsReader(script);
 
-      ScriptRunner runner = new ScriptRunner();
-      runner.setStopOnError(false);
+      ScriptRunner runner = new ScriptRunner(conn, false, false);
       runner.setLogWriter(null);
       runner.setErrorLogWriter(null);
 
-      runner.runScript(conn, reader);
+      runner.runScript(reader);
       conn.commit();
       conn.close();
       reader.close();

Modified: 
ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/builder/xml/SqlMapClasspathEntityResolverTest.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/builder/xml/SqlMapClasspathEntityResolverTest.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/builder/xml/SqlMapClasspathEntityResolverTest.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/builder/xml/SqlMapClasspathEntityResolverTest.java
 Sun Nov  6 10:30:30 2005
@@ -51,6 +51,11 @@
     assertPublicIdCanBeResolved(id);
   }
 
+  public void testOddCase() {
+    String id = "-//iBATIS.apache.org//DTD SQL Map 2.0//EN";
+    assertPublicIdCanBeResolved(id);
+  }
+
   private void assertSystemIdCanBeResolved(String id) {
     SqlMapClasspathEntityResolver resolver = new 
SqlMapClasspathEntityResolver();
     try {

Modified: 
ibatis/trunk/java/mapper/mapper2/test/compatibility/scriptrunner/ScriptRunnerCompat.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/test/compatibility/scriptrunner/ScriptRunnerCompat.java?rev=331131&r1=331130&r2=331131&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/test/compatibility/scriptrunner/ScriptRunnerCompat.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/test/compatibility/scriptrunner/ScriptRunnerCompat.java
 Sun Nov  6 10:30:30 2005
@@ -11,13 +11,10 @@
 public class ScriptRunnerCompat {
 
   public static void runInitializationScript(Connection conn, String script)
-      throws SQLException, IOException {
+      throws IOException, SQLException {
 
     // -- Create a new ScriptRunner instance using default constructor.
-    ScriptRunner runner = new ScriptRunner();
-
-    // -- Another constructor can accept database configuration information as 
a property map.
-    // ScriptRunner runner = new ScriptRunner (properties);
+    ScriptRunner runner = new ScriptRunner(conn, false, false);
 
     // -- You can configure logwriters for progress and error reporting.
     // -- Default is System.out and System.err, we'll keep them quiet for the 
demo.
@@ -28,10 +25,8 @@
     Reader reader = Resources.getResourceAsReader(script);
 
     // -- Run the script from the Reader
-    runner.runScript(conn, reader);
+    runner.runScript(reader);
 
-    // -- If the ScriptRunner was configured with a properties file, you don't 
need to pass in a connection
-    // runner.runInitializationScript(reader);
 
   }
 


Reply via email to