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");