You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2007/02/28 08:11:32 UTC

svn commit: r512636 [1/2] - in /ibatis/trunk/java/mapper/mapper2: build/ src/com/ibatis/sqlmap/engine/builder/xml/ src/com/ibatis/sqlmap/engine/conifg/ src/com/ibatis/sqlmap/engine/mapping/sql/raw/

Author: cbegin
Date: Tue Feb 27 23:11:31 2007
New Revision: 512636

URL: http://svn.apache.org/viewvc?view=rev&rev=512636
Log:
1) Moved ParserState to new config package and renamed it to SqlMapConfiguration.
2) Refactored StatementProcessor into SqlSource for cleaner separation of concerns.

Still a work in progress.

Added:
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java
      - copied, changed from r512614, ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLStatementProcessor.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java
      - copied, changed from r512614, ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/ParserState.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java
      - copied, changed from r512614, ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/StatementProcessor.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/raw/
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/raw/RawSql.java
Removed:
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/ParserState.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/StatementProcessor.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLStatementProcessor.java
Modified:
    ibatis/trunk/java/mapper/mapper2/build/version.properties
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java

Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/build/version.properties?view=diff&rev=512636&r1=512635&r2=512636
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/build/version.properties (original)
+++ ibatis/trunk/java/mapper/mapper2/build/version.properties Tue Feb 27 23:11:31 2007
@@ -1,5 +1,5 @@
 #Build version info
-#Sat Feb 10 21:56:50 MST 2007
+#Wed Feb 28 00:05:43 MST 2007
 version=2.3.1
-buildDate=2007/02/10 21\:56
-buildNum=683
+buildDate=2007/02/28 00\:05
+buildNum=685

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java?view=diff&rev=512636&r1=512635&r2=512636
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java Tue Feb 27 23:11:31 2007
@@ -6,6 +6,7 @@
 import com.ibatis.common.xml.NodeletUtils;
 import com.ibatis.sqlmap.client.SqlMapClient;
 import com.ibatis.sqlmap.client.SqlMapException;
+import com.ibatis.sqlmap.engine.conifg.SqlMapConfiguration;
 import org.w3c.dom.Node;
 
 import java.io.InputStream;
@@ -15,7 +16,7 @@
 public class SqlMapConfigParser {
 
   protected final NodeletParser parser = new NodeletParser();
-  private ParserState state = new ParserState();
+  private SqlMapConfiguration config = new SqlMapConfiguration();
 
   private boolean usingStreams = false;
 
@@ -35,7 +36,7 @@
   }
 
   public SqlMapClient parse(Reader reader, Properties props) {
-    if (props != null) state.globalProps = props;
+    if (props != null) config.globalProps = props;
     return parse(reader);
   }
 
@@ -44,14 +45,14 @@
       usingStreams = false;
 
       parser.parse(reader);
-      return state.client;
+      return config.getClient();
     } catch (Exception e) {
       throw new RuntimeException("Error occurred.  Cause: " + e, e);
     }
   }
 
   public SqlMapClient parse(InputStream inputStream, Properties props) {
-    if (props != null) state.globalProps = props;
+    if (props != null) config.globalProps = props;
     return parse(inputStream);
   }
 
@@ -60,7 +61,7 @@
       usingStreams = true;
 
       parser.parse(inputStream);
-      return state.client;
+      return config.getClient();
     } catch (Exception e) {
       throw new RuntimeException("Error occurred.  Cause: " + e, e);
     }
@@ -69,7 +70,7 @@
   private void addSqlMapConfigNodelets() {
     parser.addNodelet("/sqlMapConfig/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.wireupCacheModels();
+        config.wireupCacheModels();
       }
     });
   }
@@ -77,10 +78,10 @@
   private void addGlobalPropNodelets() {
     parser.addNodelet("/sqlMapConfig/properties", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String resource = attributes.getProperty("resource");
         String url = attributes.getProperty("url");
-        state.setGlobalProperties(resource, url);
+        config.setGlobalProperties(resource, url);
       }
     });
   }
@@ -88,7 +89,7 @@
   private void addSettingsNodelets() {
     parser.addNodelet("/sqlMapConfig/settings", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
 
         String classInfoCacheEnabledAttr = attributes.getProperty("classInfoCacheEnabled");
         boolean classInfoCacheEnabled = (classInfoCacheEnabledAttr == null || "true".equals(classInfoCacheEnabledAttr));
@@ -122,7 +123,7 @@
         String defaultTimeoutAttr = attributes.getProperty("defaultStatementTimeout");
         Integer defaultTimeout = defaultTimeoutAttr == null ? null : Integer.valueOf(defaultTimeoutAttr);
 
-        state.setSettings(classInfoCacheEnabled, lazyLoadingEnabled, statementCachingEnabled, cacheModelsEnabled, enhancementEnabled, useStatementNamespaces, maxTransactions, maxRequests, maxSessions, defaultTimeout);
+        config.setSettings(classInfoCacheEnabled, lazyLoadingEnabled, statementCachingEnabled, cacheModelsEnabled, enhancementEnabled, useStatementNamespaces, maxTransactions, maxRequests, maxSessions, defaultTimeout);
       }
     });
   }
@@ -130,10 +131,10 @@
   private void addTypeAliasNodelets() {
     parser.addNodelet("/sqlMapConfig/typeAlias", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties prop = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties prop = NodeletUtils.parseAttributes(node, config.globalProps);
         String alias = prop.getProperty("alias");
         String type = prop.getProperty("type");
-        state.addTypeAlias(alias, type);
+        config.addTypeAlias(alias, type);
       }
     });
   }
@@ -141,11 +142,11 @@
   private void addTypeHandlerNodelets() {
     parser.addNodelet("/sqlMapConfig/typeHandler", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties prop = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties prop = NodeletUtils.parseAttributes(node, config.globalProps);
         String jdbcType = prop.getProperty("jdbcType");
         String javaType = prop.getProperty("javaType");
         String callback = prop.getProperty("callback");
-        state.addGlobalTypeHandler(javaType, jdbcType, callback);
+        config.addGlobalTypeHandler(javaType, jdbcType, callback);
       }
     });
   }
@@ -153,38 +154,38 @@
   private void addTransactionManagerNodelets() {
     parser.addNodelet("/sqlMapConfig/transactionManager/property", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String name = attributes.getProperty("name");
-        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), state.globalProps);
-        state.txProps.setProperty(name, value);
+        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), config.globalProps);
+        config.txProps.setProperty(name, value);
       }
     });
     parser.addNodelet("/sqlMapConfig/transactionManager/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String type = attributes.getProperty("type");
         boolean commitRequired = "true".equals(attributes.getProperty("commitRequired"));
-        state.setTransactionManager(type, commitRequired, state.txProps);
+        config.setTransactionManager(type, commitRequired, config.txProps);
       }
     });
     parser.addNodelet("/sqlMapConfig/transactionManager/dataSource/property", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String name = attributes.getProperty("name");
-        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), state.globalProps);
-        state.dsProps.setProperty(name, value);
+        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), config.globalProps);
+        config.dsProps.setProperty(name, value);
       }
     });
     parser.addNodelet("/sqlMapConfig/transactionManager/dataSource/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.errorContext.setActivity("configuring the data source");
+        config.getErrorContext().setActivity("configuring the data source");
 
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
 
         String type = attributes.getProperty("type");
-        Properties props = state.dsProps;
+        Properties props = config.dsProps;
 
-        state.setDataSource(type, props);
+        config.setDataSource(type, props);
       }
     });
   }
@@ -193,9 +194,9 @@
   protected void addSqlMapNodelets() {
     parser.addNodelet("/sqlMapConfig/sqlMap", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.errorContext.setActivity("loading the SQL Map resource");
+        config.getErrorContext().setActivity("loading the SQL Map resource");
 
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
 
         String resource = attributes.getProperty("resource");
         String url = attributes.getProperty("url");
@@ -203,29 +204,29 @@
         if (usingStreams) {
           InputStream inputStream = null;
           if (resource != null) {
-            state.errorContext.setResource(resource);
+            config.getErrorContext().setResource(resource);
             inputStream = Resources.getResourceAsStream(resource);
           } else if (url != null) {
-            state.errorContext.setResource(url);
+            config.getErrorContext().setResource(url);
             inputStream = Resources.getUrlAsStream(url);
           } else {
             throw new SqlMapException("The <sqlMap> element requires either a resource or a url attribute.");
           }
 
-          new SqlMapParser(state).parse(inputStream);
+          new SqlMapParser(config).parse(inputStream);
         } else {
           Reader reader = null;
           if (resource != null) {
-            state.errorContext.setResource(resource);
+            config.getErrorContext().setResource(resource);
             reader = Resources.getResourceAsReader(resource);
           } else if (url != null) {
-            state.errorContext.setResource(url);
+            config.getErrorContext().setResource(url);
             reader = Resources.getUrlAsReader(url);
           } else {
             throw new SqlMapException("The <sqlMap> element requires either a resource or a url attribute.");
           }
 
-          new SqlMapParser(state).parse(reader);
+          new SqlMapParser(config).parse(reader);
         }
       }
     });
@@ -234,18 +235,18 @@
   private void addResultObjectFactoryNodelets() {
     parser.addNodelet("/sqlMapConfig/resultObjectFactory", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String type = attributes.getProperty("type");
 
-        state.setResultObjectFactory(type);
+        config.setResultObjectFactory(type);
       }
     });
     parser.addNodelet("/sqlMapConfig/resultObjectFactory/property", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String name = attributes.getProperty("name");
-        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), state.globalProps);
-        state.delegate.getResultObjectFactory().setProperty(name, value);
+        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), config.globalProps);
+        config.getDelegate().getResultObjectFactory().setProperty(name, value);
       }
     });
   }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java?view=diff&rev=512636&r1=512635&r2=512636
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java Tue Feb 27 23:11:31 2007
@@ -7,6 +7,7 @@
 import com.ibatis.sqlmap.client.SqlMapException;
 import com.ibatis.sqlmap.engine.cache.CacheModel;
 import com.ibatis.sqlmap.engine.mapping.statement.*;
+import com.ibatis.sqlmap.engine.conifg.SqlMapConfiguration;
 import org.w3c.dom.Node;
 
 import java.io.InputStream;
@@ -16,10 +17,10 @@
 public class SqlMapParser {
 
   private final NodeletParser parser = new NodeletParser();
-  private ParserState state;
+  private SqlMapConfiguration config;
 
-  public SqlMapParser(ParserState state) {
-    this.state = state;
+  public SqlMapParser(SqlMapConfiguration config) {
+    this.config = config;
     parser.setValidation(true);
     parser.setEntityResolver(new SqlMapClasspathEntityResolver());
 
@@ -44,13 +45,13 @@
   private void addSqlMapNodelets() {
     parser.addNodelet("/sqlMap", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
-        state.namespace = attributes.getProperty("namespace");
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
+        config.namespace = attributes.getProperty("namespace");
       }
     });
     parser.addNodelet("/sqlMap/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.bindDelegateSubMaps();
+        config.bindDelegateSubMaps();
       }
     });
   }
@@ -59,15 +60,15 @@
   private void addSqlNodelets() {
     parser.addNodelet("/sqlMap/sql", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String id = attributes.getProperty("id");
-        if (state.useStatementNamespaces) {
-          id = state.applyNamespace(id);
+        if (config.useStatementNamespaces) {
+          id = config.applyNamespace(id);
         }
-        if (state.sqlIncludes.containsKey(id)) {
+        if (config.sqlIncludes.containsKey(id)) {
           throw new SqlMapException("Duplicate <sql>-include '" + id + "' found.");
         } else {
-          state.sqlIncludes.put(id, node);
+          config.sqlIncludes.put(id, node);
         }
       }
     });
@@ -76,10 +77,10 @@
   private void addTypeAliasNodelets() {
     parser.addNodelet("/sqlMap/typeAlias", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties prop = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties prop = NodeletUtils.parseAttributes(node, config.globalProps);
         String alias = prop.getProperty("alias");
         String type = prop.getProperty("type");
-        state.addTypeAlias(alias, type);
+        config.addTypeAlias(alias, type);
       }
     });
   }
@@ -87,49 +88,49 @@
   private void addCacheModelNodelets() {
     parser.addNodelet("/sqlMap/cacheModel", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.cacheModel = new CacheModel();
-        state.cacheProps = new Properties();
+        config.cacheModel = new CacheModel();
+        config.cacheProps = new Properties();
       }
     });
     parser.addNodelet("/sqlMap/cacheModel/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
-        String id = state.applyNamespace(attributes.getProperty("id"));
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
+        String id = config.applyNamespace(attributes.getProperty("id"));
         String type = attributes.getProperty("type");
         String readOnlyAttr = attributes.getProperty("readOnly");
         Boolean readOnly = readOnlyAttr == null || readOnlyAttr.length() <= 0 ? null : new Boolean("true".equals(readOnlyAttr));
         String serializeAttr = attributes.getProperty("serialize");
         Boolean serialize = serializeAttr == null || serializeAttr.length() <= 0 ? null : new Boolean("true".equals(serializeAttr));
-        state.addCacheModel(id, type, readOnly, serialize, state.cacheProps);
+        config.addCacheModel(id, type, readOnly, serialize, config.cacheProps);
       }
     });
     parser.addNodelet("/sqlMap/cacheModel/property", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.errorContext.setMoreInfo("Check the cache model properties.");
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        config.getErrorContext().setMoreInfo("Check the cache model properties.");
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String name = attributes.getProperty("name");
-        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), state.globalProps);
-        state.cacheProps.put(name, value);
+        String value = NodeletUtils.parsePropertyTokens(attributes.getProperty("value"), config.globalProps);
+        config.cacheProps.put(name, value);
       }
     });
     parser.addNodelet("/sqlMap/cacheModel/flushOnExecute", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String statement = childAttributes.getProperty("statement");
-        state.addFlushTriggerStatement(statement);
+        config.addFlushTriggerStatement(statement);
       }
     });
     parser.addNodelet("/sqlMap/cacheModel/flushInterval", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         try {
           int milliseconds = childAttributes.getProperty("milliseconds") == null ? 0 : Integer.parseInt(childAttributes.getProperty("milliseconds"));
           int seconds = childAttributes.getProperty("seconds") == null ? 0 : Integer.parseInt(childAttributes.getProperty("seconds"));
           int minutes = childAttributes.getProperty("minutes") == null ? 0 : Integer.parseInt(childAttributes.getProperty("minutes"));
           int hours = childAttributes.getProperty("hours") == null ? 0 : Integer.parseInt(childAttributes.getProperty("hours"));
-          state.setFlushInterval(hours, minutes, seconds, milliseconds);
+          config.setFlushInterval(hours, minutes, seconds, milliseconds);
         } catch (NumberFormatException e) {
-          throw new RuntimeException("Error building cache '" + state.cacheModel.getId() + "' in '" + "resourceNAME" + "'.  Flush interval milliseconds must be a valid long integer value.  Cause: " + e, e);
+          throw new RuntimeException("Error building cache '" + config.cacheModel.getId() + "' in '" + "resourceNAME" + "'.  Flush interval milliseconds must be a valid long integer value.  Cause: " + e, e);
         }
       }
     });
@@ -140,21 +141,21 @@
     parser.addNodelet("/sqlMap/parameterMap/end()", new Nodelet() {
       public void process(Node node) throws Exception {
 
-        state.finalizeParameterMap();
+        config.finalizeParameterMap();
       }
     });
     parser.addNodelet("/sqlMap/parameterMap", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
-        String id = state.applyNamespace(attributes.getProperty("id"));
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
+        String id = config.applyNamespace(attributes.getProperty("id"));
         String parameterClassName = attributes.getProperty("class");
 
-        state.addParameterMap(id, parameterClassName);
+        config.addParameterMap(id, parameterClassName);
       }
     });
     parser.addNodelet("/sqlMap/parameterMap/parameter", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String propertyName = childAttributes.getProperty("property");
         String jdbcType = childAttributes.getProperty("jdbcType");
         String type = childAttributes.getProperty("typeName");
@@ -165,7 +166,7 @@
         String callback = childAttributes.getProperty("typeHandler");
         String numericScale = childAttributes.getProperty("numericScale");
 
-        state.addParameterMapping(callback, javaType, resultMap, propertyName, jdbcType, type, nullValue, mode, numericScale);
+        config.addParameterMapping(callback, javaType, resultMap, propertyName, jdbcType, type, nullValue, mode, numericScale);
 
       }
     });
@@ -175,23 +176,23 @@
   private void addResultMapNodelets() {
     parser.addNodelet("/sqlMap/resultMap/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.finalizeResultMap();
+        config.finalizeResultMap();
       }
     });
     parser.addNodelet("/sqlMap/resultMap", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
-        String id = state.applyNamespace(attributes.getProperty("id"));
+        Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
+        String id = config.applyNamespace(attributes.getProperty("id"));
         String resultClassName = attributes.getProperty("class");
-        String extended = state.applyNamespace(attributes.getProperty("extends"));
+        String extended = config.applyNamespace(attributes.getProperty("extends"));
         String xmlName = attributes.getProperty("xmlName");
         String groupBy = attributes.getProperty("groupBy");
-        state.addResultMap(id, resultClassName, xmlName, groupBy, extended);
+        config.addResultMap(id, resultClassName, xmlName, groupBy, extended);
       }
     });
     parser.addNodelet("/sqlMap/resultMap/result", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String propertyName = childAttributes.getProperty("property");
         String nullValue = childAttributes.getProperty("nullValue");
         String jdbcType = childAttributes.getProperty("jdbcType");
@@ -202,22 +203,22 @@
         String resultMapName = childAttributes.getProperty("resultMap");
         String callback = childAttributes.getProperty("typeHandler");
 
-        state.addResultMapping(callback, javaType, propertyName, jdbcType, columnName, nullValue, statementName, resultMapName, columnIndex);
+        config.addResultMapping(callback, javaType, propertyName, jdbcType, columnName, nullValue, statementName, resultMapName, columnIndex);
       }
     });
 
     parser.addNodelet("/sqlMap/resultMap/discriminator/subMap", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String value = childAttributes.getProperty("value");
         String resultMap = childAttributes.getProperty("resultMap");
-        state.addSubMap(value, resultMap);
+        config.addSubMap(value, resultMap);
       }
     });
 
     parser.addNodelet("/sqlMap/resultMap/discriminator", new Nodelet() {
       public void process(Node node) throws Exception {
-        Properties childAttributes = NodeletUtils.parseAttributes(node, state.globalProps);
+        Properties childAttributes = NodeletUtils.parseAttributes(node, config.globalProps);
         String nullValue = childAttributes.getProperty("nullValue");
         String jdbcType = childAttributes.getProperty("jdbcType");
         String javaType = childAttributes.getProperty("javaType");
@@ -225,7 +226,7 @@
         String columnIndex = childAttributes.getProperty("columnIndex");
         String callback = childAttributes.getProperty("typeHandler");
 
-        state.addDiscriminator(callback, javaType, jdbcType, columnName, nullValue, columnIndex);
+        config.addDiscriminator(callback, javaType, jdbcType, columnName, nullValue, columnIndex);
       }
     });
   }
@@ -233,38 +234,38 @@
   protected void addStatementNodelets() {
     parser.addNodelet("/sqlMap/statement", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new GeneralStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new GeneralStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
     parser.addNodelet("/sqlMap/insert", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new InsertStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new InsertStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
     parser.addNodelet("/sqlMap/update", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new UpdateStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new UpdateStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
     parser.addNodelet("/sqlMap/delete", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new DeleteStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new DeleteStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
     parser.addNodelet("/sqlMap/select", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new SelectStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new SelectStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
     parser.addNodelet("/sqlMap/procedure", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.currentStatement = new SqlStatementParser(state).parseGeneralStatement(node, new ProcedureStatement());
-        state.delegate.addMappedStatement(state.currentStatement);
+        config.currentStatement = new SqlStatementParser(config).parseGeneralStatement(node, new ProcedureStatement());
+        config.getDelegate().addMappedStatement(config.currentStatement);
       }
     });
   }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java?view=diff&rev=512636&r1=512635&r2=512636
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java Tue Feb 27 23:11:31 2007
@@ -2,36 +2,74 @@
 
 import com.ibatis.common.xml.NodeletUtils;
 import com.ibatis.sqlmap.engine.mapping.statement.*;
-import org.w3c.dom.Node;
+import com.ibatis.sqlmap.engine.conifg.SqlMapConfiguration;
+import org.w3c.dom.*;
 
 import java.util.Properties;
 
 public class SqlStatementParser {
 
-  private ParserState state;
+  private SqlMapConfiguration config;
 
-  public SqlStatementParser(ParserState state) {
-    this.state = state;
+  public SqlStatementParser(SqlMapConfiguration config) {
+    this.config = config;
   }
 
   public MappedStatement parseGeneralStatement(Node node, GeneralStatement statement) {
 
     // get attributes
-    Properties attributes = NodeletUtils.parseAttributes(node, state.globalProps);
+    Properties attributes = NodeletUtils.parseAttributes(node, config.globalProps);
     String id = attributes.getProperty("id");
-    String parameterMapName = state.applyNamespace(attributes.getProperty("parameterMap"));
+    String parameterMapName = config.applyNamespace(attributes.getProperty("parameterMap"));
     String parameterClassName = attributes.getProperty("parameterClass");
     String resultMapName = attributes.getProperty("resultMap");
     String resultClassName = attributes.getProperty("resultClass");
-    String cacheModelName = state.applyNamespace(attributes.getProperty("cacheModel"));
+    String cacheModelName = config.applyNamespace(attributes.getProperty("cacheModel"));
     String xmlResultName = attributes.getProperty("xmlResultName");
     String resultSetType = attributes.getProperty("resultSetType");
     String fetchSize = attributes.getProperty("fetchSize");
     String allowRemapping = attributes.getProperty("remapResults");
     String timeout = attributes.getProperty("timeout");
 
-    return state.prepareGeneralStatement(new XMLStatementProcessor(state, node), statement, id, resultMapName, parameterMapName, resultSetType, fetchSize, parameterClassName, resultClassName, allowRemapping, xmlResultName, timeout, cacheModelName);
+    MappedStatement mappedStatement = config.prepareGeneralStatement(new XMLSqlSource(config, node), statement, id, resultMapName, parameterMapName, resultSetType, fetchSize, parameterClassName, resultClassName, allowRemapping, xmlResultName, timeout, cacheModelName);
+    findAndParseSelectKey(node, statement);
+    return mappedStatement;
 
   }
+
+  private void findAndParseSelectKey(Node node, GeneralStatement statement) {
+    if (statement instanceof InsertStatement) {
+      config.getErrorContext().setActivity("parsing select key tags");
+
+      InsertStatement insertStatement = ((InsertStatement) statement);
+
+      SelectKeyStatement selectKeyStatement = null;
+
+      boolean foundSQLFirst = false;
+
+      NodeList children = node.getChildNodes();
+      for (int i = 0; i < children.getLength(); i++) {
+        Node child = children.item(i);
+        if (child.getNodeType() == Node.CDATA_SECTION_NODE
+            || child.getNodeType() == Node.TEXT_NODE) {
+          String data = ((CharacterData) child).getData();
+          if (data.trim().length() > 0) {
+            foundSQLFirst = true;
+          }
+        } else if (child.getNodeType() == Node.ELEMENT_NODE
+            && "selectKey".equals(child.getNodeName())) {
+          Properties attributes = NodeletUtils.parseAttributes(child, config.globalProps);
+          String keyPropName = attributes.getProperty("keyProperty");
+          String resultClassName = attributes.getProperty("resultClass");
+          String type = attributes.getProperty("type");
+          selectKeyStatement = config.prepareSelectKeyStatement(new XMLSqlSource(config, child), resultClassName, statement.getId(), keyPropName, foundSQLFirst, type, statement.getParameterClass());
+          break;
+        }
+      }
+      config.getErrorContext().setMoreInfo(null);
+      insertStatement.setSelectKeyStatement(selectKeyStatement);
+    }
+  }
+
 
 }

Copied: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java (from r512614, ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLStatementProcessor.java)
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java?view=diff&rev=512636&p1=ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLStatementProcessor.java&r1=512614&p2=ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java&r2=512636
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLStatementProcessor.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java Tue Feb 27 23:11:31 2007
@@ -1,54 +1,46 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import org.w3c.dom.*;
-import com.ibatis.sqlmap.engine.mapping.statement.*;
+import com.ibatis.common.xml.NodeletUtils;
+import com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser;
+import com.ibatis.sqlmap.engine.mapping.sql.*;
 import com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql;
 import com.ibatis.sqlmap.engine.mapping.sql.dynamic.elements.*;
-import com.ibatis.sqlmap.engine.mapping.sql.SqlText;
-import com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser;
-import com.ibatis.common.xml.NodeletUtils;
+import com.ibatis.sqlmap.engine.mapping.sql.raw.RawSql;
+import com.ibatis.sqlmap.engine.conifg.*;
+import org.w3c.dom.CharacterData;
+import org.w3c.dom.*;
 
 import java.util.Properties;
 
-public class XMLStatementProcessor implements StatementProcessor {
+public class XMLSqlSource implements SqlSource {
 
   private static final InlineParameterMapParser PARAM_PARSER = new InlineParameterMapParser();
 
-  private ParserState state;
+  private SqlMapConfiguration config;
   private Node parentNode;
 
-
-  public XMLStatementProcessor(ParserState state, Node parentNode) {
-    this.state = state;
+  public XMLSqlSource(SqlMapConfiguration config, Node parentNode) {
+    this.config = config;
     this.parentNode = parentNode;
   }
 
-  public void processStatement(GeneralStatement statement) {
-    state.errorContext.setActivity("processing an SQL statement");
+  public Sql getSql() {
+    config.getErrorContext().setActivity("processing an SQL statement");
 
     boolean isDynamic = false;
-    DynamicSql dynamic = new DynamicSql(state.client.getDelegate());
     StringBuffer sqlBuffer = new StringBuffer();
-
+    DynamicSql dynamic = new DynamicSql(config.getClient().getDelegate());
     isDynamic = parseDynamicTags(parentNode, dynamic, sqlBuffer, isDynamic, false);
-
-    if (statement instanceof InsertStatement) {
-      InsertStatement insertStatement = ((InsertStatement) statement);
-      SelectKeyStatement selectKeyStatement = findAndParseSelectKeyStatement(parentNode, statement.getId(), statement.getParameterClass());
-      insertStatement.setSelectKeyStatement(selectKeyStatement);
-    }
-
     String sqlStatement = sqlBuffer.toString();
     if (isDynamic) {
-      statement.setSql(dynamic);
+      return dynamic;
     } else {
-      state.applyInlineParameterMap(statement, sqlStatement);
+      return new RawSql(sqlStatement);
     }
-
   }
 
   private boolean parseDynamicTags(Node node, DynamicParent dynamic, StringBuffer sqlBuffer, boolean isDynamic, boolean postParseRequired) {
-    state.errorContext.setActivity("parsing dynamic SQL tags");
+    config.getErrorContext().setActivity("parsing dynamic SQL tags");
 
     NodeList children = node.getChildNodes();
     for (int i = 0; i < children.getLength(); i++) {
@@ -58,7 +50,7 @@
           || child.getNodeType() == Node.TEXT_NODE) {
 
         String data = ((CharacterData) child).getData();
-        data = NodeletUtils.parsePropertyTokens(data, state.globalProps);
+        data = NodeletUtils.parsePropertyTokens(data, config.globalProps);
 
         SqlText sqlText;
 
@@ -67,7 +59,7 @@
           sqlText.setPostParseRequired(postParseRequired);
           sqlText.setText(data);
         } else {
-          sqlText = PARAM_PARSER.parseInlineParameterMap(state.client.getDelegate().getTypeHandlerFactory(), data, null);
+          sqlText = PARAM_PARSER.parseInlineParameterMap(config.getClient().getDelegate().getTypeHandlerFactory(), data, null);
           sqlText.setPostParseRequired(postParseRequired);
         }
 
@@ -75,19 +67,19 @@
 
         sqlBuffer.append(data);
       } else if ("include".equals(nodeName)) {
-        Properties attributes = NodeletUtils.parseAttributes(child, state.globalProps);
+        Properties attributes = NodeletUtils.parseAttributes(child, config.globalProps);
         String refid = (String) attributes.get("refid");
-        Node includeNode = (Node) state.sqlIncludes.get(refid);
+        Node includeNode = (Node) config.sqlIncludes.get(refid);
         if (includeNode == null) {
-          String nsrefid = state.applyNamespace(refid);
-          includeNode = (Node) state.sqlIncludes.get(nsrefid);
+          String nsrefid = config.applyNamespace(refid);
+          includeNode = (Node) config.sqlIncludes.get(nsrefid);
           if (includeNode == null) {
             throw new RuntimeException("Could not find SQL statement to include with refid '" + refid + "'");
           }
         }
         isDynamic = parseDynamicTags(includeNode, dynamic, sqlBuffer, isDynamic, false);
       } else {
-        state.errorContext.setMoreInfo("Check the dynamic tags.");
+        config.getErrorContext().setMoreInfo("Check the dynamic tags.");
 
         SqlTagHandler handler = SqlTagHandlerFactory.getSqlTagHandler(nodeName);
         if (handler != null) {
@@ -97,7 +89,7 @@
           tag.setName(nodeName);
           tag.setHandler(handler);
 
-          Properties attributes = NodeletUtils.parseAttributes(child, state.globalProps);
+          Properties attributes = NodeletUtils.parseAttributes(child, config.globalProps);
 
           tag.setPrependAttr(attributes.getProperty("prepend"));
           tag.setPropertyAttr(attributes.getProperty("property"));
@@ -132,40 +124,8 @@
         }
       }
     }
-    state.errorContext.setMoreInfo(null);
+    config.getErrorContext().setMoreInfo(null);
     return isDynamic;
   }
 
-  private SelectKeyStatement findAndParseSelectKeyStatement(Node n, String statementId, Class parameterClass) {
-    state.errorContext.setActivity("parsing select key tags");
-
-    SelectKeyStatement selectKeyStatement = null;
-
-    boolean foundSQLFirst = false;
-
-    NodeList children = n.getChildNodes();
-    for (int i = 0; i < children.getLength(); i++) {
-      Node child = children.item(i);
-      if (child.getNodeType() == Node.CDATA_SECTION_NODE
-          || child.getNodeType() == Node.TEXT_NODE) {
-        String data = ((CharacterData) child).getData();
-        if (data.trim().length() > 0) {
-          foundSQLFirst = true;
-        }
-      } else if (child.getNodeType() == Node.ELEMENT_NODE
-          && "selectKey".equals(child.getNodeName())) {
-
-        // get attributes
-        Properties attributes = NodeletUtils.parseAttributes(child, state.globalProps);
-        String keyPropName = attributes.getProperty("keyProperty");
-        String resultClassName = attributes.getProperty("resultClass");
-        String type = attributes.getProperty("type");
-
-        selectKeyStatement = state.prepareSelectKeyStatement(new XMLStatementProcessor(state, child), resultClassName, statementId, keyPropName, foundSQLFirst, type, parameterClass);
-        break;
-      }
-    }
-    state.errorContext.setMoreInfo(null);
-    return selectKeyStatement;
-  }
 }