Author: cbegin Date: Mon Aug 14 00:45:08 2006 New Revision: 431306 URL: http://svn.apache.org/viewvc?rev=431306&view=rev Log: Added support for private properties.
Added: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/PrivateMethodAccessTest.java ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/PrivateBook.xml ibatis/trunk/java/mapper/mapper2/test/testdomain/PrivateBook.java Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties ibatis/trunk/java/mapper/mapper2/doc/release.txt ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/ClassInfo.java ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/NestedIterateTest.java ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/ResultObjectFactoryTest.java ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/SqlMapConfig.xml Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/build/version.properties?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/build/version.properties (original) +++ ibatis/trunk/java/mapper/mapper2/build/version.properties Mon Aug 14 00:45:08 2006 @@ -1,5 +1,5 @@ #Build version info -#Mon Aug 14 00:07:17 MDT 2006 +#Mon Aug 14 01:41:36 MDT 2006 version=2.1.7 -buildDate=2006/08/14 00\:07 -buildNum=627 +buildDate=2006/08/14 01\:41 +buildNum=628 Modified: ibatis/trunk/java/mapper/mapper2/doc/release.txt URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/doc/release.txt?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/doc/release.txt (original) +++ ibatis/trunk/java/mapper/mapper2/doc/release.txt Mon Aug 14 00:45:08 2006 @@ -10,6 +10,7 @@ o Removed custom nested transactions (JDBC 1.4 now required) o Added support for ResultSet OUT params from stored procs (e.g. Oracle Ref Cursor) o Added support for Multiple ResultSets mapped to corresponding ResultMaps or ResultClasses. + o Added support for private properties. o Fixed IBATIS-320 - openSession() returns same object o Fixed IBATIS-325 - DateTypeHandler uses static SimpleDateFormat instance. Not thread-safe. Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/ClassInfo.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/ClassInfo.java?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/ClassInfo.java (original) +++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/ClassInfo.java Mon Aug 14 00:45:08 2006 @@ -15,16 +15,17 @@ */ package com.ibatis.common.beans; +import com.ibatis.common.logging.Log; +import com.ibatis.common.logging.LogFactory; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.UndeclaredThrowableException; +import java.lang.reflect.ReflectPermission; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; -import com.ibatis.common.logging.Log; -import com.ibatis.common.logging.LogFactory; - /** * This class represents a cached set of class definition information that * allows for easy mapping between property names and getter/setter methods. @@ -84,7 +85,7 @@ } private void addMethods(Class cls) { - Method[] methods = cls.getMethods(); + Method[] methods = getAllMethodsForClass(cls); for (int i = 0; i < methods.length; i++) { String name = methods[i].getName(); if (name.startsWith("set") && name.length() > 3) { @@ -112,6 +113,51 @@ } } name = null; + } + } + + private Method[] getAllMethodsForClass(Class cls) { + Set uniqueMethodNames = new HashSet(); + List allMethods = new ArrayList(); + Class currentClass = cls; + while (currentClass != null) { + addMethods(currentClass, uniqueMethodNames, allMethods); + Class[] interfaces = currentClass.getInterfaces(); + for (int i=0; i<interfaces.length; i++) { + addMethods(interfaces[i], uniqueMethodNames, allMethods); + } + currentClass = currentClass.getSuperclass(); + } + return (Method[]) allMethods.toArray(new Method[allMethods.size()]); + } + + private void addMethods(Class currentClass, Set uniqueMethodNames, List allMethods) { + Method[] methods = currentClass.getDeclaredMethods(); + for (int i=0; i < methods.length; i++) { + Method currentMethod = methods[i]; + String methodName = currentMethod.getName() + currentMethod.getParameterTypes().length; + if (!uniqueMethodNames.contains(methodName)) { + uniqueMethodNames.add(methodName); + if (canAccessPrivateMethods()) { + try { + currentMethod.setAccessible(true); + } catch (Exception e) { + // Ignored. This is only a final precaution, nothing we can do. + } + } + allMethods.add(currentMethod); + } + } + } + + private boolean canAccessPrivateMethods() { + try { + System.getSecurityManager().checkPermission(new ReflectPermission("suppressAccessChecks")); + return true; + } catch (SecurityException e) { + return false; + } catch (NullPointerException e) { + return true; } } Modified: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/NestedIterateTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/NestedIterateTest.java?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/NestedIterateTest.java (original) +++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/NestedIterateTest.java Mon Aug 14 00:45:08 2006 @@ -1,10 +1,10 @@ package com.ibatis.sqlmap; -import java.util.List; - import testdomain.NestedIterateParameterObject; import testdomain.Person; +import java.util.List; + public class NestedIterateTest extends BaseSqlMapTest { protected void setUp() throws Exception { @@ -17,7 +17,7 @@ * * This method works as expected */ - public void test01() { + public void testShouldReturn9Rows() { NestedIterateParameterObject po = new NestedIterateParameterObject(); po.addId(new Integer(1)); po.addId(new Integer(2)); Added: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/PrivateMethodAccessTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/PrivateMethodAccessTest.java?rev=431306&view=auto ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/PrivateMethodAccessTest.java (added) +++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/PrivateMethodAccessTest.java Mon Aug 14 00:45:08 2006 @@ -0,0 +1,18 @@ +package com.ibatis.sqlmap; + +import java.util.List; + +public class PrivateMethodAccessTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/docs-init.sql"); + } + + public void testShouldSetPrivateProperties () throws Exception { + List list = sqlMap.queryForList("getPrivateBooks"); + assertNotNull(list); + assertEquals(2, list.size()); + } + +} Modified: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/ResultObjectFactoryTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/ResultObjectFactoryTest.java?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/ResultObjectFactoryTest.java (original) +++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/ResultObjectFactoryTest.java Mon Aug 14 00:45:08 2006 @@ -1,9 +1,9 @@ package com.ibatis.sqlmap; -import java.util.List; - import testdomain.IItem; +import java.util.List; + public class ResultObjectFactoryTest extends BaseSqlMapTest { protected void setUp() throws Exception { @@ -17,7 +17,7 @@ * everything in the sql map is declared as an interface. * */ - public void test01() { + public void testShouldDemonstrateThatTheObjectFactoryIsWorking() { try { List results = sqlMap.queryForList("getAllItemsROF"); Added: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/PrivateBook.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/PrivateBook.xml?rev=431306&view=auto ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/PrivateBook.xml (added) +++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/PrivateBook.xml Mon Aug 14 00:45:08 2006 @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<!DOCTYPE sqlMap + PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" + "http://ibatis.apache.org/dtd/sql-map-2.dtd"> + +<sqlMap namespace="Book"> + + <select id="getPrivateBooks" resultClass="testdomain.PrivateBook"> + select + DOCUMENT_ID as id, + DOCUMENT_TITLE as title, + DOCUMENT_TYPE as type, + DOCUMENT_PAGENUMBER as pages + from DOCUMENTS + where DOCUMENT_TYPE = 'Book' + </select> + +</sqlMap> \ No newline at end of file Modified: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/SqlMapConfig.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/SqlMapConfig.xml?rev=431306&r1=431305&r2=431306&view=diff ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/SqlMapConfig.xml (original) +++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/SqlMapConfig.xml Mon Aug 14 00:45:08 2006 @@ -60,5 +60,6 @@ <sqlMap resource="${SqlMapPath}/Documents.xml"/> <sqlMap resource="${SqlMapPath}/Jira.xml"/> <sqlMap resource="${SqlMapPath}/NestedIterateStatements.xml"/> + <sqlMap resource="${SqlMapPath}/PrivateBook.xml"/> </sqlMapConfig> Added: ibatis/trunk/java/mapper/mapper2/test/testdomain/PrivateBook.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/testdomain/PrivateBook.java?rev=431306&view=auto ============================================================================== --- ibatis/trunk/java/mapper/mapper2/test/testdomain/PrivateBook.java (added) +++ ibatis/trunk/java/mapper/mapper2/test/testdomain/PrivateBook.java Mon Aug 14 00:45:08 2006 @@ -0,0 +1,22 @@ +package testdomain; + +/** + * Created by IntelliJ IDEA. + * User: cbegin + * Date: May 14, 2005 + * Time: 1:39:55 AM + * To change this template use File | Settings | File Templates. + */ +public class PrivateBook extends Document { + + private Integer pages; + + private Integer getPages() { + return pages; + } + + private void setPages(Integer pages) { + this.pages = pages; + } + +}