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/06/03 01:37:00 UTC

svn commit: r950823 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5: internal/services/linktransform/ services/ services/linktransform/

Author: hlship
Date: Wed Jun  2 23:36:59 2010
New Revision: 950823

URL: http://svn.apache.org/viewvc?rev=950823&view=rev
Log:
TAP5-1042: Put basic LinkTransformer logic in place for component event and page render requests

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java   (with props)
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java   (with props)
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java   (with props)
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java   (with props)
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java   (with props)
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java   (with props)
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,65 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services.linktransform;
+
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.ioc.annotations.Primary;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.linktransform.AssetLinkTransformer;
+import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
+import org.apache.tapestry5.services.linktransform.LinkTransformer;
+import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
+
+public class LinkTransformerImpl implements LinkTransformer
+{
+    private final AssetLinkTransformer assetLinkTransformer;
+
+    private final ComponentEventLinkTransformer componentEventLinkTransformer;
+
+    private final PageRenderLinkTransformer pageRenderLinkTransformer;
+
+    public LinkTransformerImpl(@Primary
+    AssetLinkTransformer assetLinkTransformer, @Primary
+    ComponentEventLinkTransformer componentEventLinkTransformer, @Primary
+    PageRenderLinkTransformer pageRenderLinkTransformer)
+    {
+        this.assetLinkTransformer = assetLinkTransformer;
+        this.componentEventLinkTransformer = componentEventLinkTransformer;
+        this.pageRenderLinkTransformer = pageRenderLinkTransformer;
+    }
+
+    public Link transformAssetLink(Link defaultLink, Asset asset, String assetPath)
+    {
+        return or(assetLinkTransformer.transformAssetLink(defaultLink, asset, assetPath), defaultLink);
+    }
+
+    public Link transformComponentEventLink(Link defaultLink, ComponentEventRequestParameters parameters)
+    {
+        return or(componentEventLinkTransformer.transformComponentEventLink(defaultLink, parameters), defaultLink);
+    }
+
+    public Link tranformPageRenderLink(Link defaultLink, PageRenderRequestParameters parameters)
+    {
+        return or(pageRenderLinkTransformer.tranformPageRenderLink(defaultLink, parameters), defaultLink);
+    }
+
+    private Link or(Link left, Link right)
+    {
+        return left != null ? left : right;
+    }
+
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,63 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services.linktransform;
+
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.linktransform.LinkTransformer;
+
+/**
+ * Intercepts some methods of {@link ComponentEventLinkEncoder}, passing the returned {@link Link}s
+ * through methods of{@link LinkTransformer}.
+ * 
+ * @since 5.2.0
+ */
+public class LinkTransformerInterceptor implements ComponentEventLinkEncoder
+{
+    private final LinkTransformer linkTransformer;
+
+    private final ComponentEventLinkEncoder delegate;
+
+    public LinkTransformerInterceptor(LinkTransformer linkTransformer, ComponentEventLinkEncoder delegate)
+    {
+        this.linkTransformer = linkTransformer;
+        this.delegate = delegate;
+    }
+
+    public Link createComponentEventLink(ComponentEventRequestParameters parameters, boolean forForm)
+    {
+        return linkTransformer.transformComponentEventLink(delegate.createComponentEventLink(parameters, forForm),
+                parameters);
+    }
+
+    public Link createPageRenderLink(PageRenderRequestParameters parameters)
+    {
+        return linkTransformer.tranformPageRenderLink(delegate.createPageRenderLink(parameters), parameters);
+    }
+
+    public ComponentEventRequestParameters decodeComponentEventRequest(Request request)
+    {
+        return delegate.decodeComponentEventRequest(request);
+    }
+
+    public PageRenderRequestParameters decodePageRenderRequest(Request request)
+    {
+        return delegate.decodePageRenderRequest(request);
+    }
+
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java?rev=950823&r1=950822&r2=950823&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java Wed Jun  2 23:36:59 2010
@@ -1,10 +1,10 @@
-// Copyright 2009 The Apache Software Foundation
+// Copyright 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // 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,
@@ -15,12 +15,14 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.Link;
+import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
+import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
 
 /**
  * Responsible for creating {@link org.apache.tapestry5.Link}s for page render requests and for component event
  * requests, and for parsing incoming paths to identify requests that are component event or page render requests. This
  * centralizes some logic that was scattered about in Tapestry 5.0.
- *
+ * 
  * @since 5.1.0.1
  */
 public interface ComponentEventLinkEncoder
@@ -28,8 +30,11 @@ public interface ComponentEventLinkEncod
     /**
      * Creates a Link that encapsulates a page render request, including activation context <em>and {@link
      * org.apache.tapestry5.services.PersistentLocale} (if set)</em>.
-     *
-     * @param parameters defining page to render and context
+     * Passes the resulting Link through the {@link PageRenderLinkTransformer} chain of command, returning
+     * the result.
+     * 
+     * @param parameters
+     *            defining page to render and context
      * @return link for the page render
      */
     Link createPageRenderLink(PageRenderRequestParameters parameters);
@@ -37,26 +42,33 @@ public interface ComponentEventLinkEncod
     /**
      * Creates a link that encapsulates a component event request, including <em>{@link
      * org.apache.tapestry5.services.PersistentLocale} (if set)</em>.
-     * <p/>
-     * <p> Forms: <ul> <li>/context/pagename:eventname -- event on the page, no action context</li>
+     * <p>
+     * Forms:
+     * <ul>
+     * <li>/context/pagename:eventname -- event on the page, no action context</li>
      * <li>/context/pagename:eventname/foo/bar -- event on the page with action context "foo", "bar"</li>
-     * <li>/context/pagename.foo.bar -- event on component foo.bar within the page, default event, no action
-     * context</li> <li>/context/pagename.foo.bar/baz.gnu -- event on component foo.bar within the page, default event,
-     * with action context "baz", "gnu"</li> <li>/context/pagename.bar.baz:eventname/foo/gnu -- event on component
-     * bar.baz within the page with action context "foo" , "gnu"</li> </ul>
+     * <li>/context/pagename.foo.bar -- event on component foo.bar within the page, default event, no action context</li>
+     * <li>/context/pagename.foo.bar/baz.gnu -- event on component foo.bar within the page, default event, with action
+     * context "baz", "gnu"</li>
+     * <li>/context/pagename.bar.baz:eventname/foo/gnu -- event on component bar.baz within the page with action context
+     * "foo" , "gnu"</li>
+     * </ul>
      * <p/>
      * The persistent locale may be placed in between the context name and the page name, i.e., "/context/fr/SomePage".
      * <p/>
      * In many cases the context name is blank, so the path begins with a "/" and then the locale name or page name.
      * <p/>
-     * The page name portion may itself consist of a series of folder names, i.e., "admin/user/create".  The context
+     * The page name portion may itself consist of a series of folder names, i.e., "admin/user/create". The context
      * portion isn't the concern of this code, since {@link org.apache.tapestry5.services.Request#getPath()} will
-     * already have stripped that off.  We can act as if the context is always "/" (the path always starts with a
-     * slash).
+     * already have stripped that off. We can act as if the context is always "/" (the path always starts with a slash).
      * <p/>
-     *
-     * @param parameters defining page, component, activation context and other details
-     * @param forForm    true if the event link will trigger a form submission
+     * Passes the resulting Link through the {@link ComponentEventLinkTransformer} chain of command, returning the
+     * result.
+     * 
+     * @param parameters
+     *            defining page, component, activation context and other details
+     * @param forForm
+     *            true if the event link will trigger a form submission
      * @return link for the component event
      */
     Link createComponentEventLink(ComponentEventRequestParameters parameters, boolean forForm);
@@ -65,9 +77,10 @@ public interface ComponentEventLinkEncod
      * Checks the request, primarily the {@linkplain org.apache.tapestry5.services.Request#getPath() path}, to determine
      * the if the request is a component event request. As a side-effect (necessary for historical reasons), responsible
      * for setting the locale for the thread, including the {@link org.apache.tapestry5.services.PersistentLocale} ...
-     * but only if the reuqest is a component event.
-     *
-     * @param request incoming request
+     * but only if the locale is a component event.
+     * 
+     * @param request
+     *            incoming request
      * @return component event request details, if a component event request
      */
     ComponentEventRequestParameters decodeComponentEventRequest(Request request);
@@ -76,9 +89,10 @@ public interface ComponentEventLinkEncod
      * Checks the request, primarily the {@linkplain org.apache.tapestry5.services.Request#getPath() path}, to determine
      * the if the request is a page render request. As a side-effect (necessary for historical reasons), responsible for
      * setting the locale for the thread, including the {@link org.apache.tapestry5.services.PersistentLocale} ... but
-     * only if the reuqest is a component event.
-     *
-     * @param request incoming request
+     * only if the request is a page render.
+     * 
+     * @param request
+     *            incoming request
      * @return page render request details, if a page render request
      */
     PageRenderRequestParameters decodePageRenderRequest(Request request);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=950823&r1=950822&r2=950823&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Wed Jun  2 23:36:59 2010
@@ -80,6 +80,8 @@ import org.apache.tapestry5.internal.ser
 import org.apache.tapestry5.internal.services.javascript.DateFieldStack;
 import org.apache.tapestry5.internal.services.javascript.JavascriptStackPathConstructor;
 import org.apache.tapestry5.internal.services.javascript.JavascriptStackSourceImpl;
+import org.apache.tapestry5.internal.services.linktransform.LinkTransformerImpl;
+import org.apache.tapestry5.internal.services.linktransform.LinkTransformerInterceptor;
 import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
 import org.apache.tapestry5.internal.services.meta.ContentTypeExtractor;
 import org.apache.tapestry5.internal.services.meta.MetaAnnotationExtractor;
@@ -115,6 +117,10 @@ import org.apache.tapestry5.services.jav
 import org.apache.tapestry5.services.javascript.JavascriptStackSource;
 import org.apache.tapestry5.services.javascript.JavascriptSupport;
 import org.apache.tapestry5.services.javascript.StylesheetLink;
+import org.apache.tapestry5.services.linktransform.AssetLinkTransformer;
+import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
+import org.apache.tapestry5.services.linktransform.LinkTransformer;
+import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
 import org.apache.tapestry5.services.messages.PropertiesFileParser;
 import org.apache.tapestry5.services.meta.FixedExtractor;
@@ -381,6 +387,7 @@ public final class TapestryModule
         binder.bind(JavascriptStackSource.class, JavascriptStackSourceImpl.class);
         binder.bind(TranslatorAlternatesSource.class, TranslatorAlternatesSourceImpl.class);
         binder.bind(MetaWorker.class, MetaWorkerImpl.class);
+        binder.bind(LinkTransformer.class, LinkTransformerImpl.class);
     }
 
     // ========================================================================
@@ -2941,4 +2948,51 @@ public final class TapestryModule
                 .add("Page", new PageTemplateLocator(contextAssetFactory.getRootResource(), componentClassResolver),
                         "after:Default");
     }
+
+    /**
+     * Builds {@link AssetLinkTransformer} service as a chain of command.
+     * 
+     * @since 5.2.0
+     */
+    @Marker(Primary.class)
+    public AssetLinkTransformer buildAssetLinkTransformer(List<AssetLinkTransformer> configuration)
+    {
+        return chainBuilder.build(AssetLinkTransformer.class, configuration);
+    }
+
+    /**
+     * Builds {@link ComponentEventLinkTransformer} service as a chain of command.
+     * 
+     * @since 5.2.0
+     */
+    @Marker(Primary.class)
+    public ComponentEventLinkTransformer buildComponentEventLinkTransformer(
+            List<ComponentEventLinkTransformer> configuration)
+    {
+        return chainBuilder.build(ComponentEventLinkTransformer.class, configuration);
+    }
+
+    /**
+     * Builds {@link PageRenderLinkTransformer} service as a chain of command.
+     * 
+     * @since 5.2.0
+     */
+    @Marker(Primary.class)
+    public PageRenderLinkTransformer buildPageRenderLinkTransformer(List<PageRenderLinkTransformer> configuration)
+    {
+        return chainBuilder.build(PageRenderLinkTransformer.class, configuration);
+    }
+
+    /**
+     * Provides the "LinkTransformer" interceptor for the {@link ComponentEventLinkEncoder} service. Other decorations
+     * should come after LinkTransformer.
+     * 
+     * @since 5.2.0
+     */
+    @Match("ComponentEventLinkEncoder")
+    public ComponentEventLinkEncoder decorateLinkTransformer(LinkTransformer linkTransformer,
+            ComponentEventLinkEncoder delegate)
+    {
+        return new LinkTransformerInterceptor(linkTransformer, delegate);
+    }
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,41 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.linktransform;
+
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+
+/**
+ * Interface that allows the {@link Link} for downloading an Asset to be transformed (or replaced).
+ * AssetLinkTransformer is a service but also a contribution to the service, as a chain of command.
+ */
+@UsesOrderedConfiguration(AssetLinkTransformer.class)
+public interface AssetLinkTransformer
+{
+    /**
+     * Transform the Asset link.
+     * 
+     * @param defaultLink
+     *            the normally constructed Link for this asset
+     * @param asset
+     *            the asset for which the link was constructed (this may be null for virtual assets)
+     * @param assetPath
+     *            the normal path for the asset (the portion below "/assets" in the
+     *            default asset URL)
+     * @return a replacement Link to access the Asset, or null
+     */
+    Link transformAssetLink(Link defaultLink, Asset asset, String assetPath);
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/AssetLinkTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,40 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.linktransform;
+
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+
+/**
+ * Allows for selective replacement of the default {@link Link} used to represent a component event request.
+ * This is a service, but also the contribution to the service, as a chain of command.
+ * 
+ * @since 5.2.0
+ */
+@UsesOrderedConfiguration(ComponentEventLinkTransformer.class)
+public interface ComponentEventLinkTransformer
+{
+    /**
+     * Allows the default Link created for the component event request to be replaced.
+     * 
+     * @param defaultLink
+     *            the default Link generated for a component event request
+     * @param parameters
+     *            used to create the default Link
+     * @return a replacement Link, or null
+     */
+    Link transformComponentEventLink(Link defaultLink, ComponentEventRequestParameters parameters);
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,26 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.linktransform;
+
+/**
+ * A facade around {@link AssetLinkTransformer}, {@link ComponentEventLinkTransformer} and
+ * {@link PageRenderLinkTransformer}.
+ * 
+ * @since 5.2.0
+ */
+public interface LinkTransformer extends AssetLinkTransformer, ComponentEventLinkTransformer, PageRenderLinkTransformer
+{
+
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/LinkTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java?rev=950823&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java Wed Jun  2 23:36:59 2010
@@ -0,0 +1,40 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// 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
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.linktransform;
+
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+
+/**
+ * Allows the default {@link Link} for a page render request to be replaced.
+ * This is a service, but also the contribution to the service, as a chain of command.
+ * 
+ * @since 5.2.0
+ */
+@UsesOrderedConfiguration(PageRenderLinkTransformer.class)
+public interface PageRenderLinkTransformer
+{
+    /**
+     * Transforms a page render link.
+     * 
+     * @param defaultLink
+     *            default Link for this request
+     * @param parameters
+     *            that define the request
+     * @return replacement Link, or null
+     */
+    Link tranformPageRenderLink(Link defaultLink, PageRenderRequestParameters parameters);
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native