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


Reply via email to