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;
+ }
+
+}