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