Author: cbegin Date: Fri Jun 15 20:23:18 2007 New Revision: 547853 URL: http://svn.apache.org/viewvc?view=rev&rev=547853 Log: Improved type safety of MappedStatementConfig
Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java 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=547853&r1=547852&r2=547853 ============================================================================== --- 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 Fri Jun 15 20:23:18 2007 @@ -1,8 +1,10 @@ package com.ibatis.sqlmap.engine.builder.xml; import com.ibatis.common.xml.*; +import com.ibatis.common.resources.*; import com.ibatis.sqlmap.engine.conifg.*; import com.ibatis.sqlmap.engine.mapping.statement.*; +import com.ibatis.sqlmap.client.*; import org.w3c.dom.CharacterData; import org.w3c.dom.*; @@ -45,14 +47,47 @@ } } - String[] additionalResultClasses = null; + String[] additionalResultClassNames = null; if (resultClassName != null) { - additionalResultClasses = state.getAllButFirstToken(resultClassName); + additionalResultClassNames = state.getAllButFirstToken(resultClassName); resultClassName = state.getFirstToken(resultClassName); } - MappedStatementConfig statementConf = state.getConfig().newMappedStatementConfig(id, statement, new XMLSqlSource(state, node), parameterMapName, parameterClassName, resultMapName, additionalResultMapNames, resultClassName, additionalResultClasses, resultSetType, fetchSize, allowRemapping, timeout, cacheModelName, xmlResultName); + Class[] additionalResultClasses = null; + if (additionalResultClassNames != null) { + additionalResultClasses = new Class[additionalResultClassNames.length]; + for (int i = 0; i < additionalResultClassNames.length; i++) { + additionalResultClasses[i] = resolveClass(additionalResultClassNames[i]); + } + } + + state.getConfig().getErrorContext().setMoreInfo("Check the parameter class."); + Class parameterClass = resolveClass(parameterClassName); + + state.getConfig().getErrorContext().setMoreInfo("Check the result class."); + Class resultClass = resolveClass(resultClassName); + + Integer timeoutInt = timeout == null ? null : new Integer(timeout); + Integer fetchSizeInt = fetchSize == null ? null : new Integer(fetchSize); + boolean allowRemappingBool = "true".equals(allowRemapping); + + MappedStatementConfig statementConf = state.getConfig().newMappedStatementConfig(id, statement, + new XMLSqlSource(state, node), parameterMapName, parameterClass, resultMapName, additionalResultMapNames, + resultClass, additionalResultClasses, resultSetType, fetchSizeInt, allowRemappingBool, timeoutInt, cacheModelName, + xmlResultName); findAndParseSelectKey(node, statementConf); + } + + private Class resolveClass(String resultClassName) { + try { + if (resultClassName != null) { + return Resources.classForName(state.getConfig().getTypeHandlerFactory().resolveAlias(resultClassName)); + } else { + return null; + } + } catch (ClassNotFoundException e) { + throw new SqlMapException("Error. Could not initialize class. Cause: " + e, e); + } } private void findAndParseSelectKey(Node node, MappedStatementConfig config) { Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java?view=diff&rev=547853&r1=547852&r2=547853 ============================================================================== --- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java (original) +++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java Fri Jun 15 20:23:18 2007 @@ -23,30 +23,33 @@ private static final InlineParameterMapParser PARAM_PARSER = new InlineParameterMapParser(); private ErrorContext errorContext; private ExtendedSqlMapClient client; - private SqlMapExecutorDelegate delegate; private TypeHandlerFactory typeHandlerFactory; private MappedStatement mappedStatement; private MappedStatement rootStatement; - MappedStatementConfig(SqlMapConfiguration config, String id, GeneralStatement statement, SqlSource processor, String parameterMapName, String parameterClassName, String resultMapName, String[] additionalResultMapNames, String resultClassName, String[] additionalResultClasses, String cacheModelName, String resultSetType, String fetchSize, String allowRemapping, String timeout, Integer defaultStatementTimeout, String xmlResultName) { + MappedStatementConfig(SqlMapConfiguration config, String id, GeneralStatement statement, SqlSource processor, + String parameterMapName, Class parameterClass, String resultMapName, + String[] additionalResultMapNames, Class resultClass, Class[] additionalResultClasses, + String cacheModelName, String resultSetType, Integer fetchSize, boolean allowRemapping, + Integer timeout, Integer defaultStatementTimeout, String xmlResultName) { this.errorContext = config.getErrorContext(); this.client = config.getClient(); - this.delegate = client.getDelegate(); + SqlMapExecutorDelegate delegate = client.getDelegate(); this.typeHandlerFactory = config.getTypeHandlerFactory(); errorContext.setActivity("parsing a mapped statement"); errorContext.setObjectId(id + " statement"); errorContext.setMoreInfo("Check the result map name."); if (resultMapName != null) { - statement.setResultMap((BasicResultMap) client.getDelegate().getResultMap(resultMapName)); + statement.setResultMap(client.getDelegate().getResultMap(resultMapName)); if (additionalResultMapNames != null) { for (int i = 0; i < additionalResultMapNames.length; i++) { - statement.addResultMap((BasicResultMap) client.getDelegate().getResultMap(additionalResultMapNames[i])); + statement.addResultMap(client.getDelegate().getResultMap(additionalResultMapNames[i])); } } } errorContext.setMoreInfo("Check the parameter map name."); if (parameterMapName != null) { - statement.setParameterMap((BasicParameterMap) client.getDelegate().getParameterMap(parameterMapName)); + statement.setParameterMap(client.getDelegate().getParameterMap(parameterMapName)); } statement.setId(id); statement.setResource(errorContext.getResource()); @@ -60,22 +63,24 @@ } } if (fetchSize != null) { - statement.setFetchSize(new Integer(fetchSize)); + // TODO statement.setFetchSize(new Integer(fetchSize)); + statement.setFetchSize(fetchSize); } // set parameter class either from attribute or from map (make sure to match) ParameterMap parameterMap = statement.getParameterMap(); if (parameterMap == null) { - try { - if (parameterClassName != null) { - errorContext.setMoreInfo("Check the parameter class."); - parameterClassName = typeHandlerFactory.resolveAlias(parameterClassName); - Class parameterClass = Resources.classForName(parameterClassName); - statement.setParameterClass(parameterClass); - } - } catch (ClassNotFoundException e) { - throw new SqlMapException("Error. Could not set parameter class. Cause: " + e, e); - } +// TODO +// try { +// if (parameterClassName != null) { +// errorContext.setMoreInfo("Check the parameter class."); +// parameterClassName = typeHandlerFactory.resolveAlias(parameterClassName); +// Class parameterClass = Resources.classForName(parameterClassName); +// } +// } catch (ClassNotFoundException e) { +// throw new SqlMapException("Error. Could not set parameter class. Cause: " + e, e); +// } + statement.setParameterClass(parameterClass); } else { statement.setParameterClass(parameterMap.getParameterClass()); } @@ -87,10 +92,10 @@ // set up either null result map or automatic result mapping BasicResultMap resultMap = (BasicResultMap) statement.getResultMap(); - if (resultMap == null && resultClassName == null) { + if (resultMap == null && resultClass == null) { statement.setResultMap(null); } else if (resultMap == null) { - resultMap = buildAutoResultMap(allowRemapping, statement, resultClassName, xmlResultName); + resultMap = buildAutoResultMap(allowRemapping, statement, resultClass, xmlResultName); statement.setResultMap(resultMap); if (additionalResultClasses != null) { for (int i = 0; i < additionalResultClasses.length; i++) { @@ -102,7 +107,7 @@ statement.setTimeout(defaultStatementTimeout); if (timeout != null) { try { - statement.setTimeout(Integer.valueOf(timeout)); + statement.setTimeout(timeout); } catch (NumberFormatException e) { throw new SqlMapException("Specified timeout value for statement " + statement.getId() + " is not a valid integer"); } @@ -207,28 +212,16 @@ } - private BasicResultMap buildAutoResultMap(String allowRemapping, GeneralStatement statement, String firstResultClass, String xmlResultName) { + private BasicResultMap buildAutoResultMap(boolean allowRemapping, GeneralStatement statement, Class firstResultClass, String xmlResultName) { BasicResultMap resultMap; - resultMap = new AutoResultMap(client.getDelegate(), "true".equals(allowRemapping)); + resultMap = new AutoResultMap(client.getDelegate(), allowRemapping); resultMap.setId(statement.getId() + "-AutoResultMap"); - resultMap.setResultClass(resolveClass(firstResultClass)); + resultMap.setResultClass(firstResultClass); resultMap.setXmlName(xmlResultName); resultMap.setResource(statement.getResource()); return resultMap; } - private Class resolveClass(String resultClassName) { - try { - if (resultClassName != null) { - errorContext.setMoreInfo("Check the result class."); - return Resources.classForName(typeHandlerFactory.resolveAlias(resultClassName)); - } else { - return null; - } - } catch (ClassNotFoundException e) { - throw new SqlMapException("Error. Could not set result class. Cause: " + e, e); - } - } public MappedStatement getMappedStatement() { return mappedStatement; Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java?view=diff&rev=547853&r1=547852&r2=547853 ============================================================================== --- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java (original) +++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java Fri Jun 15 20:23:18 2007 @@ -141,8 +141,16 @@ return new ResultMapConfig(this, id, resultClass, groupBy, extended, xmlName); } - public MappedStatementConfig newMappedStatementConfig(String id, GeneralStatement statement, SqlSource processor, String parameterMapName, String parameterClassName, String resultMapName, String[] additionalResultMapNames, String resultClassName, String[] additionalResultClasses, String resultSetType, String fetchSize, String allowRemapping, String timeout, String cacheModelName, String xmlResultName) { - return new MappedStatementConfig(this, id, statement, processor, parameterMapName, parameterClassName, resultMapName, additionalResultMapNames, resultClassName, additionalResultClasses, cacheModelName, resultSetType, fetchSize, allowRemapping, timeout, defaultStatementTimeout, xmlResultName); + public MappedStatementConfig newMappedStatementConfig(String id, GeneralStatement statement, SqlSource processor, + String parameterMapName, Class parameterClass, + String resultMapName, String[] additionalResultMapNames, + Class resultClass, Class[] additionalResultClasses, + String resultSetType, Integer fetchSize, + boolean allowRemapping, Integer timeout, String cacheModelName, + String xmlResultName) { + return new MappedStatementConfig(this, id, statement, processor, parameterMapName, parameterClass, resultMapName, + additionalResultMapNames, resultClass, additionalResultClasses, cacheModelName, resultSetType, fetchSize, + allowRemapping, timeout, defaultStatementTimeout, xmlResultName); } public void finalizeSqlMapConfig() {