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 2010/01/09 21:02:43 UTC

svn commit: r897529 - /ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java

Author: cbegin
Date: Sat Jan  9 20:02:43 2010
New Revision: 897529

URL: http://svn.apache.org/viewvc?rev=897529&view=rev
Log:
applied ibatis-3beta7-mapfix3.patch provided by Martin Ellis and Joe Gooch as per email thread: Using Map as a parameter object 12-Dec-2009

Modified:
    ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java

Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java?rev=897529&r1=897528&r2=897529&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java Sat Jan  9 20:02:43 2010
@@ -10,6 +10,8 @@
 
 public class DynamicContext {
 
+  public static final String PARAMETER_OBJECT_KEY = "_parameter";
+
   static {
     OgnlRuntime.setPropertyAccessor(ContextMap.class, new ContextAccessor());
   }
@@ -19,16 +21,14 @@
   private int uniqueNumber = 0;
 
   public DynamicContext(Object parameterObject) {
-    if (parameterObject instanceof Map) {
-      bindings.putAll((Map<String, Object>) parameterObject);
-    } else if (parameterObject != null) {
+    if (parameterObject != null && !(parameterObject instanceof Map)) {
       MetaObject metaObject = MetaObject.forObject(parameterObject);
       String[] names = metaObject.getGetterNames();
       for (String name : names) {
         bindings.put(name, metaObject.getValue(name));
       }
     }
-    bindings.put("_parameter", parameterObject);
+    bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
   }
 
   public Map<String, Object> getBindings() {
@@ -56,10 +56,22 @@
   }
 
   static class ContextAccessor implements PropertyAccessor {
+
     public Object getProperty(Map context, Object target, Object name)
         throws OgnlException {
       Map map = (Map) target;
-      return map.get(name);
+
+      Object result = map.get(name);
+      if (result != null) {
+        return result;
+      }      
+
+      Object parameterObject = map.get(PARAMETER_OBJECT_KEY);
+      if (parameterObject instanceof Map) {
+    	  return ((Map)parameterObject).get(name);
+      }
+
+      return null;
     }
 
     public void setProperty(Map context, Object target, Object name, Object value)