You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/02/20 03:20:11 UTC

svn commit: r509412 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/corelib/base/ main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/services/ test/java/org/apache/tapestry/corelib/components/

Author: hlship
Date: Mon Feb 19 18:20:10 2007
New Revision: 509412

URL: http://svn.apache.org/viewvc?view=rev&rev=509412
Log:
Isolate the (internal) interface FormParameterLookup inside FormSupportImpl so that subclasses of AbstractField do not have to see it.
Add a getParameterValue() method to FormSupport.

Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/FormSupportImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Submit.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FormSupport.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/FormSupportImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SubmitTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java Mon Feb 19 18:20:10 2007
@@ -35,7 +35,6 @@
 import org.apache.tapestry.corelib.mixins.RenderDisabled;
 import org.apache.tapestry.corelib.mixins.RenderInformals;
 import org.apache.tapestry.internal.TapestryUtils;
-import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.services.DefaultComponentParameterBindingSource;
 import org.apache.tapestry.services.FormSupport;
@@ -139,9 +138,6 @@
     @Inject
     private ComponentResources _resources;
 
-    @Inject("service:tapestry.internal.FormParameterLookup")
-    private FormParameterLookup _paramLookup;
-
     @Inject("infrastructure:DefaultComponentParameterBindingSource")
     private DefaultComponentParameterBindingSource _defaultBindingSource;
 
@@ -208,7 +204,7 @@
     private void processSubmission()
     {
         if (!_disabled)
-            processSubmission(_paramLookup, _elementName);
+            processSubmission(_formSupport, _elementName);
     }
 
     /**
@@ -228,15 +224,14 @@
      * form. The element's elementName property will already have been set. This method is only
      * invoked if the field is <strong>not {@link #isDisabled() disabled}</strong>.
      * 
-     * @param paramLookup
-     *            an object providing lookup access to form parameters, presumably so that the
-     *            component may extract a query parameter value that matches the component's element
-     *            name. Usually this object is the current request but could be a mock object if the
-     *            app is driven by a {@link org.apache.tapestry.test.pagelevel.PageTester}.
+     * @param formSupport
+     *            support for the form submission, used to
+     *            {@link FormSupport#getParameterValue(String) obtain submitted parameter values}.
+     *            Passing this value in saves subclasses from having to (re)inject it.
      * @param elementName
      *            the name of the element (used to find the correct parameter in the request)
      */
-    protected abstract void processSubmission(FormParameterLookup paramLookup, String elementName);
+    protected abstract void processSubmission(FormSupport formSupport, String elementName);
 
     @BeginRender
     final void beforeDecorator(MarkupWriter writer)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractTextField.java Mon Feb 19 18:20:10 2007
@@ -28,9 +28,9 @@
 import org.apache.tapestry.annotations.Environmental;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.services.FieldValidatorDefaultSource;
+import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.services.TranslatorDefaultSource;
 import org.apache.tapestry.services.ValidationMessagesSource;
 
@@ -161,9 +161,9 @@
     protected abstract void writeFieldTag(MarkupWriter writer, String value);
 
     @Override
-    protected final void processSubmission(FormParameterLookup paramLookup, String elementName)
+    protected final void processSubmission(FormSupport formSupport, String elementName)
     {
-        String rawValue = paramLookup.getParameter(elementName);
+        String rawValue = formSupport.getParameterValue(elementName);
 
         _tracker.recordInput(this, rawValue);
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Checkbox.java Mon Feb 19 18:20:10 2007
@@ -20,7 +20,7 @@
 import org.apache.tapestry.annotations.BeginRender;
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.corelib.base.AbstractField;
-import org.apache.tapestry.internal.services.FormParameterLookup;
+import org.apache.tapestry.services.FormSupport;
 
 /** A Checkbox component is simply a &lt;input type="checkbox"&gt;. */
 public class Checkbox extends AbstractField
@@ -62,9 +62,9 @@
     }
 
     @Override
-    protected void processSubmission(FormParameterLookup paramLookup, String elementName)
+    protected void processSubmission(FormSupport formSupport, String elementName)
     {
-        String postedValue = paramLookup.getParameter(elementName);
+        String postedValue = formSupport.getParameterValue(elementName);
 
         _value = postedValue != null;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java Mon Feb 19 18:20:10 2007
@@ -264,7 +264,7 @@
     {
         _tracker.clear();
 
-        _formSupport = new FormSupportImpl();
+        _formSupport = new FormSupportImpl(_paramLookup);
 
         _environment.push(ValidationTracker.class, _tracker);
         _environment.push(FormSupport.class, _formSupport);

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/FormSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/FormSupportImpl.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/FormSupportImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/FormSupportImpl.java Mon Feb 19 18:20:10 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-/**
- * 
- */
 package org.apache.tapestry.corelib.components;
 
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
@@ -26,7 +23,7 @@
 import java.util.List;
 
 import org.apache.tapestry.ComponentAction;
-import org.apache.tapestry.ioc.internal.util.Defense;
+import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.ioc.internal.util.IdAllocator;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.services.FormSupport;
@@ -44,16 +41,32 @@
 
     private final ObjectOutputStream _actions;
 
+    private final FormParameterLookup _parameterLookup;
+
     private List<Runnable> _commands;
 
-    public FormSupportImpl()
+    /** Constructor used when processing a form submission. */
+    public FormSupportImpl(FormParameterLookup parameterLookup)
+    {
+        this(null, parameterLookup);
+    }
+
+    /** Constructor used when rendering. */
+    public FormSupportImpl(ObjectOutputStream actions)
     {
-        this(null);
+        this(actions, null);
     }
 
-    public FormSupportImpl(final ObjectOutputStream actions)
+    /** For testing only. */
+    FormSupportImpl()
+    {
+        this(null, null);
+    }
+
+    FormSupportImpl(ObjectOutputStream actions, FormParameterLookup parameterLookup)
     {
         _actions = actions;
+        _parameterLookup = parameterLookup;
     }
 
     public String allocateElementName(String id)
@@ -95,7 +108,7 @@
         if (_commands == null)
             _commands = newList();
 
-        _commands.add(Defense.notNull(command, "command"));
+        _commands.add(notNull(command, "command"));
     }
 
     void executeDeferred()
@@ -107,6 +120,11 @@
             r.run();
 
         _commands.clear();
+    }
+
+    public String getParameterValue(String name)
+    {
+        return _parameterLookup.getParameter(name);
     }
 
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Select.java Mon Feb 19 18:20:10 2007
@@ -33,8 +33,8 @@
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.corelib.base.AbstractField;
-import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.services.FieldValidatorDefaultSource;
+import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.util.EnumSelectModel;
 import org.apache.tapestry.util.EnumValueEncoder;
 
@@ -233,9 +233,9 @@
     }
 
     @Override
-    protected void processSubmission(FormParameterLookup paramLookup, String elementName)
+    protected void processSubmission(FormSupport formSupport, String elementName)
     {
-        String primaryKey = paramLookup.getParameter(elementName);
+        String primaryKey = formSupport.getParameterValue(elementName);
 
         Object selectedValue = _encoder.toValue(primaryKey);
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Submit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Submit.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Submit.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Submit.java Mon Feb 19 18:20:10 2007
@@ -19,7 +19,6 @@
 import org.apache.tapestry.annotations.Environmental;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.corelib.base.AbstractField;
-import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.services.Heartbeat;
 
@@ -59,9 +58,9 @@
     }
 
     @Override
-    protected void processSubmission(FormParameterLookup paramLookup, String elementName)
+    protected void processSubmission(FormSupport formSupport, String elementName)
     {
-        String value = paramLookup.getParameter(elementName);
+        String value = formSupport.getParameterValue(elementName);
 
         if (value == null)
             return;
@@ -86,12 +85,14 @@
 
     }
 
+    // For testing:
+
     void setDefer(boolean defer)
     {
         _defer = defer;
     }
 
-    void testInject(ComponentResources resources, FormSupport support, Heartbeat heartbeat)
+    void setup(ComponentResources resources, FormSupport support, Heartbeat heartbeat)
     {
         _resources = resources;
         _formSupport = support;

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FormSupport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FormSupport.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FormSupport.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/FormSupport.java Mon Feb 19 18:20:10 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
 package org.apache.tapestry.services;
 
 import org.apache.tapestry.ComponentAction;
+import org.apache.tapestry.test.pagelevel.PageTester;
 
 /**
  * Services provided by an enclosing Form control component to the various form element components
@@ -48,4 +49,15 @@
      * @param command
      */
     void defer(Runnable command);
+
+    /**
+     * Returns the name for the given parameter, or null if not found. For a multi-valued parameter,
+     * returns the first value. Components should make use of this interface, rather than
+     * {@link Request#getParameters(String)}, to stay compatible with {@link PageTester}.
+     * 
+     * @param name
+     *            of parameter to retrieve
+     * @return the parameter value, or null
+     */
+    String getParameterValue(String name);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/FormSupportImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/FormSupportImplTest.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/FormSupportImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/FormSupportImplTest.java Mon Feb 19 18:20:10 2007
@@ -14,7 +14,9 @@
 
 package org.apache.tapestry.corelib.components;
 
+import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.services.FormSupport;
 import org.testng.annotations.Test;
 
 public class FormSupportImplTest extends InternalBaseTestCase
@@ -83,4 +85,24 @@
 
         verify();
     }
+
+    @Test
+    public void get_parameter_value()
+    {
+        String name = "param";
+        String value = "zaphod";
+
+        FormParameterLookup lookup = newFormParameterLookup();
+
+        train_getParameter(lookup, name, value);
+
+        replay();
+
+        FormSupport support = new FormSupportImpl(lookup);
+
+        assertSame(support.getParameterValue(name), value);
+
+        verify();
+    }
+
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SubmitTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SubmitTest.java?view=diff&rev=509412&r1=509411&r2=509412
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SubmitTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SubmitTest.java Mon Feb 19 18:20:10 2007
@@ -18,6 +18,7 @@
 import org.apache.tapestry.internal.services.FormParameterLookup;
 import org.apache.tapestry.internal.services.HeartbeatImpl;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.services.Heartbeat;
 import org.testng.annotations.Test;
 
@@ -26,17 +27,17 @@
     @Test
     public void not_trigger_of_submission()
     {
-        FormParameterLookup lookup = newFormParameterLookup();
+        FormSupport support = newFormSupport();
 
         String elementName = "myname";
 
-        train_getParameter(lookup, elementName, null);
+        train_getParameterValue(support, elementName, null);
 
         replay();
 
         Submit submit = new Submit();
 
-        submit.processSubmission(lookup, elementName);
+        submit.processSubmission(support, elementName);
 
         verify();
     }
@@ -46,7 +47,7 @@
     {
         FormParameterLookup lookup = newFormParameterLookup();
         ComponentResources resources = newComponentResources();
-        FormSupportImpl support = new FormSupportImpl();
+        FormSupportImpl support = new FormSupportImpl(lookup);
 
         String elementName = "myname";
 
@@ -56,9 +57,9 @@
 
         Submit submit = new Submit();
 
-        submit.testInject(resources, support, null);
+        submit.setup(resources, support, null);
 
-        submit.processSubmission(lookup, elementName);
+        submit.processSubmission(support, elementName);
 
         verify();
 
@@ -74,13 +75,13 @@
     @Test
     public void trigger_immediate()
     {
-        FormParameterLookup lookup = newFormParameterLookup();
+        FormSupport support = newFormSupport();
         ComponentResources resources = newComponentResources();
         Heartbeat heartbeat = new HeartbeatImpl();
 
         String elementName = "myname";
 
-        train_getParameter(lookup, elementName, "login");
+        train_getParameterValue(support, elementName, "login");
 
         replay();
 
@@ -88,10 +89,10 @@
 
         Submit submit = new Submit();
 
-        submit.testInject(resources, null, heartbeat);
+        submit.setup(resources, support, heartbeat);
         submit.setDefer(false);
 
-        submit.processSubmission(lookup, elementName);
+        submit.processSubmission(support, elementName);
 
         verify();
 
@@ -103,6 +104,16 @@
 
         verify();
 
+    }
+
+    protected final void train_getParameterValue(FormSupport support, String name, String value)
+    {
+        expect(support.getParameterValue(name)).andReturn(value).atLeastOnce();
+    }
+
+    protected final FormSupport newFormSupport()
+    {
+        return newMock(FormSupport.class);
     }
 
 }