Updated Branches:
  refs/heads/master ef175ac2b -> 349ef6220

FIXED - TAP5-2101: BeanEditor should always provide a new
BeanValidationContext (JSR-303) 
- apply Alejandro Scandroli's patch for a patch, edit and validation
context getting out of sync on submit, BeanEditContext.getBeanClass() !=
BeanValidationContext.getBeanType()


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/349ef622
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/349ef622
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/349ef622

Branch: refs/heads/master
Commit: 349ef622030ed5f1bfb098829321f753b4e19843
Parents: ef175ac
Author: kaosko <[email protected]>
Authored: Tue Apr 23 10:29:19 2013 -0700
Committer: kaosko <[email protected]>
Committed: Tue Apr 23 10:29:19 2013 -0700

----------------------------------------------------------------------
 .../tapestry5/corelib/components/BeanEditor.java   |   30 ++-------------
 .../tapestry5/internal/BeanEditContextImpl.java    |   26 +++++++++++++
 .../corelib/components/BeanEditorTest.java         |    1 +
 3 files changed, 31 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
index 94c37b9..03344fe 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
@@ -23,6 +23,7 @@ import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.internal.BeanEditContextImpl;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.internal.BeanValidationContextImpl;
 import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
@@ -166,10 +167,7 @@ public class BeanEditor
      */
     private Object cachedObject;
 
-    private BeanValidationContext originalBeanValidationContext;
-    
     // Needed for testing as well
-
     public Object getObject()
     {
         return cachedObject;
@@ -217,39 +215,19 @@ public class BeanEditor
             }
         }
 
-        BeanEditContext context = new BeanEditContext()
-        {
-            public Class<?> getBeanClass()
-            {
-                return model.getBeanType();
-            }
-
-            public <T extends Annotation> T getAnnotation(Class<T> type)
-            {
-                return getBeanClass().getAnnotation(type);
-            }
-        };
+        BeanEditContext context = new BeanEditContextImpl(model.getBeanType());
 
         cachedObject = object;
 
         environment.push(BeanEditContext.class, context);
-        // Always provide a new BeanValidationContext
-        originalBeanValidationContext = 
environment.push(BeanValidationContext.class,
-                new BeanValidationContextImpl(object));
-        
+        // TAP5-2101: Always provide a new BeanValidationContext
+        environment.push(BeanValidationContext.class, new 
BeanValidationContextImpl(object));
     }
 
     void cleanupEnvironment()
     {
         environment.pop(BeanEditContext.class);
         environment.pop(BeanValidationContext.class);
-        // Restore the original BeanValidationContext as it might still be 
useful to the enclosing
-        // form
-        if (originalBeanValidationContext != null)
-        {
-            environment.push(BeanValidationContext.class, 
originalBeanValidationContext);
-            originalBeanValidationContext = null;
-        }
     }
 
     // For testing

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java
new file mode 100644
index 0000000..cea6295
--- /dev/null
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/BeanEditContextImpl.java
@@ -0,0 +1,26 @@
+package org.apache.tapestry5.internal;
+
+import org.apache.tapestry5.services.BeanEditContext;
+
+import java.lang.annotation.Annotation;
+
+public class BeanEditContextImpl implements BeanEditContext
+{
+    private Class<?> beanClass;
+
+    public BeanEditContextImpl(Class<?> beanClass)
+    {
+        this.beanClass = beanClass;
+    }
+
+    public Class<?> getBeanClass()
+    {
+        return beanClass;
+    }
+
+    public <T extends Annotation> T getAnnotation(Class<T> type)
+    {
+        return beanClass.getAnnotation(type);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/349ef622/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
index 745d6c3..af3ba5f 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
@@ -59,6 +59,7 @@ public class BeanEditorTest extends TapestryTestCase
         train_getOverrideMessages(overrides, messages);
 
         expect(model.newInstance()).andReturn(data);
+        expect(model.getBeanType()).andReturn(RegistrationData.class);
 
         replay();
         EasyMock.replay(env);

Reply via email to