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


Reply via email to