Author: hlship
Date: Tue Oct 19 19:58:13 2010
New Revision: 1024388

URL: http://svn.apache.org/viewvc?rev=1024388&view=rev
Log:
TAP5-1306: Add method for adding an encoded value to a Link as a parameter

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/Link.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/Link.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/Link.java?rev=1024388&r1=1024387&r2=1024388&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/Link.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/Link.java
 Tue Oct 19 19:58:13 2010
@@ -17,6 +17,7 @@ package org.apache.tapestry5;
 import java.util.List;
 
 import org.apache.commons.codec.net.URLCodec;
+import org.apache.tapestry5.services.ContextPathEncoder;
 
 /**
  * A link is the Tapestry representation of a URL or URI that triggers dynamic 
behavior. This link is in three parts: a
@@ -41,7 +42,7 @@ public interface Link
      * Returns the value of a specifically named query parameter, or 
<tt>null</tt> if no such query parameter is stored
      * in the link.
      * 
-     * @return the value of the named parameter
+     * @return the string value of the named parameter
      */
     String getParameterValue(String name);
 
@@ -59,6 +60,15 @@ public interface Link
     void addParameter(String parameterName, String value);
 
     /**
+     * Adds a parameter value as a value object; the value object is converted 
to a string via
+     * {...@link ContextPathEncoder#encodeValue(Object)} and the result is 
added via {...@link #addParameter(String, String)}.
+     * The Link object is returned for further configuration.
+     * 
+     * @since 5.2.2
+     */
+    Link addParameterValue(String parameterName, Object value);
+
+    /**
      * Removes a parameter value, which is occasionally useful when 
transforming a parameter into a portion of
      * the path.
      * 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java?rev=1024388&r1=1024387&r2=1024388&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
 Tue Oct 19 19:58:13 2010
@@ -126,7 +126,7 @@ public class ComponentEventLinkEncoderIm
 
         appendContext(encodedPageName.length() > 0, 
parameters.getActivationContext(), builder);
 
-        Link link = new LinkImpl(builder.toString(), false, response);
+        Link link = new LinkImpl(builder.toString(), false, response, 
contextPathEncoder);
 
         if (parameters.isLoopback())
             link.addParameter(TapestryConstants.PAGE_LOOPBACK_PARAMETER_NAME, 
"t");
@@ -200,7 +200,7 @@ public class ComponentEventLinkEncoderIm
 
         appendContext(true, parameters.getEventContext(), builder);
 
-        Link result = new LinkImpl(builder.toString(), forForm, response);
+        Link result = new LinkImpl(builder.toString(), forForm, response, 
contextPathEncoder);
 
         EventContext pageActivationContext = 
parameters.getPageActivationContext();
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java?rev=1024388&r1=1024387&r2=1024388&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
 Tue Oct 19 19:58:13 2010
@@ -20,6 +20,7 @@ import java.util.Map;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.services.ContextPathEncoder;
 import org.apache.tapestry5.services.Response;
 
 public class LinkImpl implements Link
@@ -32,20 +33,23 @@ public class LinkImpl implements Link
 
     private final Response response;
 
+    private final ContextPathEncoder contextPathEncoder;
+
     private String anchor;
 
-    public LinkImpl(String basePath, boolean forForm, Response response)
+    public LinkImpl(String basePath, boolean forForm, Response response, 
ContextPathEncoder contextPathEncoder)
     {
         this.basePath = basePath;
         this.forForm = forForm;
         this.response = response;
+        this.contextPathEncoder = contextPathEncoder;
     }
 
     public Link copyWithBasePath(String basePath)
     {
         assert basePath != null;
 
-        LinkImpl copy = new LinkImpl(basePath, forForm, response);
+        LinkImpl copy = new LinkImpl(basePath, forForm, response, 
contextPathEncoder);
 
         copy.anchor = anchor;
 
@@ -162,4 +166,12 @@ public class LinkImpl implements Link
 
         return builder.toString();
     }
+
+    public Link addParameterValue(String parameterName, Object value)
+    {
+        addParameter(parameterName, contextPathEncoder.encodeValue(value));
+
+        return this;
+    }
+
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java?rev=1024388&r1=1024387&r2=1024388&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
 Tue Oct 19 19:58:13 2010
@@ -16,6 +16,7 @@ package org.apache.tapestry5.internal.se
 
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.services.ContextPathEncoder;
 import org.apache.tapestry5.services.Response;
 import org.testng.annotations.Test;
 
@@ -38,7 +39,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl(URI, false, response);
+        Link link = new LinkImpl(URI, false, response, null);
 
         assertEquals(link.toRedirectURI(), ENCODED);
 
@@ -56,7 +57,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl(url, false, response);
+        Link link = new LinkImpl(url, false, response, null);
 
         assertEquals(link.toString(), ENCODED);
 
@@ -70,7 +71,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl("/foo/bar", false, response);
+        Link link = new LinkImpl("/foo/bar", false, response, null);
 
         link.addParameter("fred", "flintstone");
 
@@ -90,7 +91,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl(url, false, response);
+        Link link = new LinkImpl(url, false, response, null);
         link.setAnchor("wilma");
 
         assertSame(link.getAnchor(), "wilma");
@@ -109,7 +110,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl("/ctx/foo", false, response);
+        Link link = new LinkImpl("/ctx/foo", false, response, null);
 
         assertEquals(link.toAbsoluteURI(), ENCODED);
 
@@ -126,7 +127,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl("/ctx/foo?foo=bar", false, response);
+        Link link = new LinkImpl("/ctx/foo?foo=bar", false, response, null);
         link.addParameter("baz", "barney");
 
         assertEquals(link.toURI(), expectedURI);
@@ -135,6 +136,28 @@ public class LinkImplTest extends Intern
     }
 
     @Test
+    public void add_parameter_value()
+    {
+        Response response = mockResponse();
+        ContextPathEncoder encoder = newMock(ContextPathEncoder.class);
+
+        expect(encoder.encodeValue("plain")).andReturn("encoded");
+
+        String expectedURI = "/ctx/foo?bar=encoded";
+        train_encodeURL(response, expectedURI, expectedURI);
+
+        replay();
+
+        Link link = new LinkImpl("/ctx/foo", false, response, encoder);
+
+        assertSame(link.addParameterValue("bar", "plain"), link);
+
+        assertEquals(link.toURI(), expectedURI);
+
+        verify();
+    }
+
+    @Test
     public void new_base_uri()
     {
         Response response = mockResponse();
@@ -144,7 +167,7 @@ public class LinkImplTest extends Intern
 
         replay();
 
-        Link link = new LinkImpl("/ctx/foo", false, response);
+        Link link = new LinkImpl("/ctx/foo", false, response, null);
         link.addParameter("baz", "barney");
         link.setAnchor("jacob");
 
@@ -158,7 +181,7 @@ public class LinkImplTest extends Intern
     @Test
     public void remove_parameter()
     {
-        Link link = new LinkImpl("/baseURI", false, null);
+        Link link = new LinkImpl("/baseURI", false, null, null);
 
         link.addParameter("fred", "flintstone");
         link.addParameter("barney", "rubble");


Reply via email to