You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/01/06 18:39:58 UTC
svn commit: r896569 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/internal/structure/
test/java/org/apache/tapestry5/internal/services/
test/java/org/apache/tapestry5/...
Author: hlship
Date: Wed Jan 6 17:39:56 2010
New Revision: 896569
URL: http://svn.apache.org/viewvc?rev=896569&view=rev
Log:
Only include the loopback query parameter for pages that have page reset listeners
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java Wed Jan 6 17:39:56 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -39,10 +39,12 @@
private final RequestGlobals requestGlobals;
+ private final RequestPageCache pageCache;
+
public LinkSourceImpl(PageRenderQueue pageRenderQueue,
PageActivationContextCollector contextCollector, TypeCoercer typeCoercer,
ComponentClassResolver resolver, ComponentEventLinkEncoder linkEncoder,
- RequestGlobals requestGlobals)
+ RequestGlobals requestGlobals, RequestPageCache pageCache)
{
this.pageRenderQueue = pageRenderQueue;
this.contextCollector = contextCollector;
@@ -50,6 +52,7 @@
this.resolver = resolver;
this.linkEncoder = linkEncoder;
this.requestGlobals = requestGlobals;
+ this.pageCache = pageCache;
}
public Link createComponentEventLink(Page page, String nestedId, String eventType,
@@ -99,7 +102,8 @@
Object[] context = (override || pageActivationContext.length != 0) ? pageActivationContext
: contextCollector.collectPageActivationContext(canonical);
- boolean loopback = canonical.equals(requestGlobals.getActivePageName());
+ boolean loopback = canonical.equals(requestGlobals.getActivePageName())
+ && pageCache.get(pageName).hasResetListeners();
PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical,
new ArrayEventContext(typeCoercer, context), loopback);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java Wed Jan 6 17:39:56 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -179,6 +179,13 @@
void addResetListener(PageResetListener listener);
/**
+ * Returns true if there are any {@link PageResetListener} listeners.
+ *
+ * @since 5.2.0
+ */
+ boolean hasResetListeners();
+
+ /**
* Invoked to notify {@link PageResetListener} listeners.
*/
void pageReset();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java Wed Jan 6 17:39:56 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -209,4 +209,9 @@
}
}
+ public boolean hasResetListeners()
+ {
+ return !resetListeners.isEmpty();
+ }
+
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java Wed Jan 6 17:39:56 2010
@@ -45,7 +45,6 @@
Response response = mockResponse();
RequestPathOptimizer optimizer = mockRequestPathOptimizer();
ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
- RequestGlobals globals = mockRequestGlobals(null);
expect(manager.getBaseURL("MyPage")).andReturn(null);
train_getContextPath(request, "/myapp");
@@ -67,15 +66,6 @@
verify();
}
- private RequestGlobals mockRequestGlobals(String activePageName)
- {
- RequestGlobals rg = mockRequestGlobals();
-
- expect(rg.getActivePageName()).andReturn(activePageName).atLeastOnce();
-
- return rg;
- }
-
@Test
public void index_stripped_off()
{
@@ -84,7 +74,6 @@
Response response = mockResponse();
RequestPathOptimizer optimizer = mockRequestPathOptimizer();
ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
- RequestGlobals globals = mockRequestGlobals(null);
expect(manager.getBaseURL("admin/Index")).andReturn(null);
train_getContextPath(request, "");
@@ -114,7 +103,6 @@
Response response = mockResponse();
RequestPathOptimizer optimizer = mockRequestPathOptimizer();
ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
- RequestGlobals globals = mockRequestGlobals(null);
expect(manager.getBaseURL("Index")).andReturn(null);
train_getContextPath(request, "");
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java Wed Jan 6 17:39:56 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -64,7 +64,6 @@
testPageLinkCreation("Index", false, 202);
}
-
@Test
public void create_page_render_link_with_override_event_context()
{
@@ -86,23 +85,24 @@
ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder();
Link link = mockLink();
ComponentClassResolver resolver = mockComponentClassResolver();
+ RequestGlobals globals = mockRequestGlobals();
+
+ expect(globals.getActivePageName()).andReturn("someOtherPage");
train_canonicalizePageName(resolver, pageName, pageName);
train_collectPageActivationContext(collector, pageName, 3);
EventContext pageActivationContext = new ArrayEventContext(typeCoercer, 3);
- PageRenderRequestParameters parameters = new PageRenderRequestParameters(pageName, pageActivationContext);
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters(pageName,
+ pageActivationContext);
expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link);
replay();
-
- LinkSource source = new LinkSourceImpl(null,
- collector, typeCoercer, resolver,
- linkEncoder, null);
-
+ LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder,
+ globals, null);
Link actual = source.createPageRenderLink(pageName, false);
@@ -113,8 +113,7 @@
verify();
}
- private void testPageLinkCreation(String pageName, boolean overrideContext,
- Object... context)
+ private void testPageLinkCreation(String pageName, boolean overrideContext, Object... context)
{
PageActivationContextCollector collector = mockPageActivationContextCollector();
LinkCreationListener listener = mockLinkCreationListener();
@@ -122,15 +121,20 @@
Link link = mockLink();
ComponentClassResolver resolver = mockComponentClassResolver();
String canonical = "CanonicalPageName";
+ RequestGlobals globals = mockRequestGlobals();
+
+ // Ensure that the loopback logic is off; loopback logic is fully tested via an
+ // integration test.
+
+ expect(globals.getActivePageName()).andReturn("someOtherPage");
train_canonicalizePageName(resolver, pageName, canonical);
if (!overrideContext)
train_collectPageActivationContext(collector, canonical, context);
- PageRenderRequestParameters parameters =
- new PageRenderRequestParameters(canonical,
- new ArrayEventContext(typeCoercer, context));
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical,
+ new ArrayEventContext(typeCoercer, context), false);
expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link);
@@ -138,9 +142,8 @@
replay();
- LinkSource source = new LinkSourceImpl(null,
- collector, typeCoercer, resolver,
- linkEncoder, null);
+ LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder,
+ globals, null);
source.getLinkCreationHub().addListener(listener);
@@ -162,24 +165,21 @@
public void simple_component_event_link()
{
- testEventLinkCreation("order/Edit", "foo.bar", EventConstants.ACTION,
- false);
+ testEventLinkCreation("order/Edit", "foo.bar", EventConstants.ACTION, false);
}
@Test
public void component_event_link_with_context()
{
- testEventLinkCreation("order/Edit", "foo.bar",
- EventConstants.ACTION,
- false, "fred", "barney");
+ testEventLinkCreation("order/Edit", "foo.bar", EventConstants.ACTION, false, "fred",
+ "barney");
}
@Test
public void component_event_link_for_form()
{
- testEventLinkCreation("order/Edit", "foo.bar",
- EventConstants.ACTION,
- true, "fred", "barney");
+ testEventLinkCreation("order/Edit", "foo.bar", EventConstants.ACTION, true, "fred",
+ "barney");
}
@Test
@@ -204,29 +204,25 @@
EventContext pageActivationContext = new ArrayEventContext(typeCoercer, "x", "y");
EventContext eventContext = new ArrayEventContext(typeCoercer, 3, 5, 9);
- ComponentEventRequestParameters parameters = new ComponentEventRequestParameters("order/View", primaryPageName,
- "gnip.gnop", "myevent",
- pageActivationContext,
- eventContext);
+ ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(
+ "order/View", primaryPageName, "gnip.gnop", "myevent", pageActivationContext,
+ eventContext);
expect(linkEncoder.createComponentEventLink(parameters, true)).andReturn(link);
replay();
- LinkSource source = new LinkSourceImpl(queue,
- collector, typeCoercer, null,
- linkEncoder, null);
+ LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder,
+ null, null);
- assertSame(source.createComponentEventLink(primaryPage, "gnip.gnop", "myevent", true, 3, 5, 9), link);
+ assertSame(source.createComponentEventLink(primaryPage, "gnip.gnop", "myevent", true, 3, 5,
+ 9), link);
verify();
}
- private void testEventLinkCreation(String pageName,
- String nestedId,
- String eventType,
- boolean forForm,
- Object... context)
+ private void testEventLinkCreation(String pageName, String nestedId, String eventType,
+ boolean forForm, Object... context)
{
Page primaryPage = mockPage();
PageRenderQueue queue = mockPageRenderQueue();
@@ -235,11 +231,9 @@
ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder();
Link link = mockLink();
-
ArrayEventContext eventContext = new ArrayEventContext(typeCoercer, context);
- ArrayEventContext pageEventContext = new ArrayEventContext(
- typeCoercer, "a", "b");
+ ArrayEventContext pageEventContext = new ArrayEventContext(typeCoercer, "a", "b");
train_getRenderingPage(queue, null);
@@ -247,11 +241,8 @@
train_collectPageActivationContext(collector, pageName, "a", "b");
-
- ComponentEventRequestParameters parameters =
- new ComponentEventRequestParameters(pageName, pageName,
- nestedId, eventType,
- pageEventContext, eventContext);
+ ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(pageName,
+ pageName, nestedId, eventType, pageEventContext, eventContext);
expect(linkEncoder.createComponentEventLink(parameters, forForm)).andReturn(link);
@@ -259,13 +250,13 @@
replay();
- LinkSource source = new LinkSourceImpl(queue,
- collector, typeCoercer, null,
- linkEncoder, null);
+ LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder,
+ null, null);
source.getLinkCreationHub().addListener(listener);
- Link returnedLink = source.createComponentEventLink(primaryPage, nestedId, eventType, forForm, context);
+ Link returnedLink = source.createComponentEventLink(primaryPage, nestedId, eventType,
+ forForm, context);
// Make sure the same link is returned.
@@ -274,8 +265,8 @@
verify();
}
- protected final void train_collectPageActivationContext(PageActivationContextCollector collector, String pageName,
- Object... context)
+ protected final void train_collectPageActivationContext(
+ PageActivationContextCollector collector, String pageName, Object... context)
{
expect(collector.collectPageActivationContext(pageName)).andReturn(context);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java?rev=896569&r1=896568&r2=896569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java Wed Jan 6 17:39:56 2010
@@ -42,7 +42,7 @@
{
open(BASE_URL);
- assertAttribute("//a[@class='self']/@href", "?t:lb=t");
+ assertAttribute("//a[@class='self']/@href", "/");
assertAttribute("//a[@class='dummy']/@href", "/notdummy");
// final String url = String.format("http://%s:%d/", SUBDOMAIN, JETTY_PORT);