You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by fr...@apache.org on 2006/12/22 06:48:43 UTC

svn commit: r489563 [1/2] - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/internal/structu...

Author: freemant
Date: Thu Dec 21 21:48:41 2006
New Revision: 489563

URL: http://svn.apache.org/viewvc?view=rev&rev=489563
Log:
1) Rename InAppInvocation* to ComponentInvocation*.
2) Move the logic to associate a component invocation to an element from 
LinkFactoryImpl to MarkupWriterImpl. In particular, a new method linkElement()
is added to MarkupWriter.

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocation.java
      - copied, changed from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocation.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocationMap.java
      - copied, changed from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocationMap.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpComponentInvocationMap.java
      - copied, changed from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpInAppInvocationMap.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ComponentInvoker.java
      - copied, changed from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvoker.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentInvocationTest.java
      - copied, changed from r489555, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InAppInvocationTest.java
Removed:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocation.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocationMap.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpInAppInvocationMap.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvoker.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InAppInvocationTest.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/MarkupWriter.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/ActionLink.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InvocationTarget.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactory.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MarkupWriterImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkTarget.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkInvoker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvocationMapForPageTester.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkInvoker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/MarkupWriterImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java Thu Dec 21 21:48:41 2006
@@ -17,7 +17,6 @@
 import java.util.Locale;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.structure.ComponentPageElement;
 import org.apache.tapestry.model.ComponentModel;
 import org.apache.tapestry.services.ComponentSource;
@@ -43,9 +42,6 @@
     /**
      * Creates a link that will trigger an action for this component.
      * 
-     * @param linkElement
-     *            The element where the link is used (usually an <a&gt or an <form&gt). Pass
-     *            null if the link is not to be used in an element.
      * @param action
      *            a name for the action associated with the link
      * @param forForm
@@ -55,7 +51,7 @@
      *            additional objects to be encoded into the path portion of the link; each is
      *            converted to a string an URI encoded
      */
-    Link createActionLink(Element linkElement, String action, boolean forForm, Object... context);
+    Link createActionLink(String action, boolean forForm, Object... context);
 
     /**
      * Returns a string consisting of the fully qualified class name of the containing page, and the

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/MarkupWriter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/MarkupWriter.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/MarkupWriter.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/MarkupWriter.java Thu Dec 21 21:48:41 2006
@@ -35,6 +35,10 @@
      * Begins a new element as a child of the current element. The new element becomes the current
      * element. The new Element is returned and can be directly manipulated (possibly at a later
      * date). Optionally, attributes for the new element can be specified directly.
+     * <p>
+     * If the element is intended to be clickable or submittable in the
+     * {@link org.apache.tapestry.test.pagelevel.PageTester}, you should call
+     * {@link #linkElement(String, Link, Object[])} instead.
      * 
      * @param name
      *            the name of the element to create
@@ -44,6 +48,26 @@
      * @see #attributes(Object[])
      */
     Element element(String name, Object... attributes);
+
+    /**
+     * Just like {@link #element(String, Object[])} except that the element represents a link such
+     * as &lt;a&gt; or &lt;form&gt;. By calling this method to create the element, the Link object
+     * is associated with the element and this will allow the
+     * {@link org.apache.tapestry.test.pagelevel.PageTester} to simulate a click on it. If you call
+     * {@link #element(String, Object[])} instead of this method, the element will still work in a
+     * browser but won't work in the PageTester.
+     * 
+     * @param name
+     *            the name of the element to create
+     * @param link
+     *            the link associated with the element being created. Usually you will use the URL
+     *            of the link as the <code>href</code> attribute or <code>action</code>
+     *            attribute of the element.
+     * @param attributes
+     *            an even number of values, alternating names and values
+     * @return the new DOM Element node
+     */
+    Element linkElement(String name, Link link, Object... attributes);
 
     /**
      * Ends the current element. The new current element will be the parent element. Returns the new

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/ActionLink.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/ActionLink.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/ActionLink.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/ActionLink.java Thu Dec 21 21:48:41 2006
@@ -29,7 +29,6 @@
 import org.apache.tapestry.annotations.Mixin;
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.corelib.mixins.RenderInformals;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.services.PageRenderSupport;
 
 /**
@@ -63,11 +62,9 @@
 
         Object[] contextArray = _context == null ? new Object[0] : _context.toArray();
 
-        Element element = writer.element("a");
+        Link link = _resources.createActionLink(DEFAULT_EVENT, false, contextArray);
 
-        Link link = _resources.createActionLink(element, DEFAULT_EVENT, false, contextArray);
-
-        element.attributes("href", link.toURI(), "id", clientId);
+        writer.linkElement("a", link, "href", link.toURI(), "id", clientId);
 
         // TODO: Support for informal parameters, etc.
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java Thu Dec 21 21:48:41 2006
@@ -147,14 +147,10 @@
 
         String name = _pageRenderSupport.allocateClientId(_resources.getId());
 
-        Element element = writer.element("form");
-
-        Link link = _resources.createActionLink(
-                element,
-                TapestryConstants.DEFAULT_EVENT,
-                true,
-                contextArray);
-        element.attributes("name", name, "id", name, "method", "post", "action", link.toFormURI());
+        Link link = _resources
+                .createActionLink(TapestryConstants.DEFAULT_EVENT, true, contextArray);
+        writer.linkElement("form", link, "name", name, "id", name, "method", "post", "action", link
+                .toFormURI());
 
         // TODO: Informal parameters
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java Thu Dec 21 21:48:41 2006
@@ -18,5 +18,5 @@
 
 public interface ActionLinkHandler
 {
-    Link handle(InAppInvocation invocation);
+    Link handle(ComponentInvocation invocation);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java Thu Dec 21 21:48:41 2006
@@ -36,7 +36,7 @@
         _linkFactory = linkFactory;
     }
 
-    public Link handle(InAppInvocation invocation)
+    public Link handle(ComponentInvocation invocation)
     {
         InvocationTarget target = invocation.getTarget();
         ActionLinkTarget actionLinkTarget = Defense.cast(target, ActionLinkTarget.class, "target");
@@ -60,7 +60,7 @@
 
         page = _cache.getActive();
 
-        return _linkFactory.createPageLink(null, page);
+        return _linkFactory.createPageLink(page);
     }
 
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java Thu Dec 21 21:48:41 2006
@@ -61,7 +61,7 @@
         for (int i = 1; i < chunks.length; i++)
             context[i - 1] = chunks[i];
 
-        Link link = _actionLinkHandler.handle(new InAppInvocation(new ActionLinkTarget(eventType,
+        Link link = _actionLinkHandler.handle(new ComponentInvocation(new ActionLinkTarget(eventType,
                 logicalPageName, nestedComponentId), context));
 
         String URL = link.toRedirectURI();

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocation.java (from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocation.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocation.java?view=diff&rev=489563&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocation.java&r1=489555&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocation.java&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocation.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocation.java Thu Dec 21 21:48:41 2006
@@ -12,129 +12,129 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.codec.EncoderException;
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.tapestry.ioc.internal.util.InternalUtils;
-
-/**
- * It represents an invocation for a page or a component within the current app. Each invocation may
- * provide a context (Object[]) and parameters to the invocation target.
- */
-public class InAppInvocation
-{
-    private final Object[] _context;
-
-    private Map<String, String> _parameters;
-
-    private InvocationTarget _target;
-
-    public InAppInvocation(InvocationTarget target, Object[] context)
-    {
-        _target = target;
-        _context = context;
-    }
-
-    /**
-     * @return A path taking the format <em>target-path</em>/e1/e2?&q1=v1&q2=v2. where the
-     *         <em>target-path</em> is the path provided by the invocation target; e1 and e2 are
-     *         elements of the context; q1 and q2 are the parameters.
-     */
-    public String buildURI(boolean isForm)
-    {
-        String path = getPath();
-        if (isForm || _parameters == null)
-            return path;
-
-        StringBuilder builder = new StringBuilder();
-
-        builder.append(path);
-
-        try
-        {
-            URLCodec codec = new URLCodec();
-
-            String sep = "?";
-
-            for (String name : getParameterNames())
-            {
-                String value = _parameters.get(name);
-
-                builder.append(sep);
-
-                // TODO: encode the parameter name?
-
-                builder.append(name);
-                builder.append("=");
-                builder.append(codec.encode(value));
-
-                sep = "&";
-            }
-        }
-        catch (EncoderException ex)
-        {
-            throw new RuntimeException(ex);
-        }
-
-        return builder.toString();
-    }
-
-    /**
-     * @return Just like the return value of {@link #buildURI(boolean)} except that parameters are
-     *         not included.
-     */
-    private String getPath()
-    {
-        StringBuilder builder = new StringBuilder();
-        builder.append(_target.getPath());
-
-        for (Object id : _context)
-        {
-            builder.append("/");
-
-            // TODO: Need to encode this for URLs? What if the string contains slashes, etc.?
-
-            builder.append(id.toString());
-        }
-        return builder.toString();
-    }
-
-    public Object[] getContext()
-    {
-        return _context;
-    }
-
-    public void addParameter(String parameterName, String value)
-    {
-        if (_parameters == null)
-            _parameters = newMap();
-
-        if (_parameters.containsKey(parameterName))
-            throw new IllegalArgumentException(ServicesMessages.parameterNameMustBeUnique(
-                    parameterName,
-                    _parameters.get(parameterName)));
-
-        _parameters.put(parameterName, value);
-    }
-
-    public List<String> getParameterNames()
-    {
-        return InternalUtils.sortedKeys(_parameters);
-    }
-
-    public String getParameterValue(String name)
-    {
-        return InternalUtils.get(_parameters, name);
-    }
-
-    public InvocationTarget getTarget()
-    {
-        return _target;
-    }
-}
+package org.apache.tapestry.internal.services;
+
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.codec.EncoderException;
+import org.apache.commons.codec.net.URLCodec;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
+
+/**
+ * It represents an invocation for a page or a component in the current app. Each invocation may
+ * provide a context (Object[]) and parameters to the invocation target.
+ */
+public class ComponentInvocation
+{
+    private final Object[] _context;
+
+    private Map<String, String> _parameters;
+
+    private InvocationTarget _target;
+
+    public ComponentInvocation(InvocationTarget target, Object[] context)
+    {
+        _target = target;
+        _context = context;
+    }
+
+    /**
+     * @return A path taking the format <em>target-path</em>/e1/e2?&q1=v1&q2=v2. where the
+     *         <em>target-path</em> is the path provided by the invocation target; e1 and e2 are
+     *         elements of the context; q1 and q2 are the parameters.
+     */
+    public String buildURI(boolean isForm)
+    {
+        String path = getPath();
+        if (isForm || _parameters == null)
+            return path;
+
+        StringBuilder builder = new StringBuilder();
+
+        builder.append(path);
+
+        try
+        {
+            URLCodec codec = new URLCodec();
+
+            String sep = "?";
+
+            for (String name : getParameterNames())
+            {
+                String value = _parameters.get(name);
+
+                builder.append(sep);
+
+                // TODO: encode the parameter name?
+
+                builder.append(name);
+                builder.append("=");
+                builder.append(codec.encode(value));
+
+                sep = "&";
+            }
+        }
+        catch (EncoderException ex)
+        {
+            throw new RuntimeException(ex);
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     * @return Just like the return value of {@link #buildURI(boolean)} except that parameters are
+     *         not included.
+     */
+    private String getPath()
+    {
+        StringBuilder builder = new StringBuilder();
+        builder.append(_target.getPath());
+
+        for (Object id : _context)
+        {
+            builder.append("/");
+
+            // TODO: Need to encode this for URLs? What if the string contains slashes, etc.?
+
+            builder.append(id.toString());
+        }
+        return builder.toString();
+    }
+
+    public Object[] getContext()
+    {
+        return _context;
+    }
+
+    public void addParameter(String parameterName, String value)
+    {
+        if (_parameters == null)
+            _parameters = newMap();
+
+        if (_parameters.containsKey(parameterName))
+            throw new IllegalArgumentException(ServicesMessages.parameterNameMustBeUnique(
+                    parameterName,
+                    _parameters.get(parameterName)));
+
+        _parameters.put(parameterName, value);
+    }
+
+    public List<String> getParameterNames()
+    {
+        return InternalUtils.sortedKeys(_parameters);
+    }
+
+    public String getParameterValue(String name)
+    {
+        return InternalUtils.get(_parameters, name);
+    }
+
+    public InvocationTarget getTarget()
+    {
+        return _target;
+    }
+}

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocationMap.java (from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocationMap.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocationMap.java?view=diff&rev=489563&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocationMap.java&r1=489555&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocationMap.java&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InAppInvocationMap.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentInvocationMap.java Thu Dec 21 21:48:41 2006
@@ -12,14 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import org.apache.tapestry.dom.Element;
-
-/**
- * Associates an in-app invocation object with an element (usually an action link or a form).
- */
-public interface InAppInvocationMap
-{
-    void put(Element element, InAppInvocation invocation);
-}
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.dom.Element;
+
+/**
+ * Associates an {@link org.apache.tapestry.internal.services.ComponentInvocation} object with an
+ * element (usually an action link or a form). The purpose is to allow the
+ * {@link org.apache.tapestry.test.pagelevel.PageTester} to simulate a click on an element by
+ * finding out the ComponentInvocation from the element and then invoking it.
+ */
+public interface ComponentInvocationMap
+{
+    void put(Element element, ComponentInvocation invocation);
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java Thu Dec 21 21:48:41 2006
@@ -510,11 +510,9 @@
     /** Service used to create links for components and pages. */
     public LinkFactory buildLinkFactory(@InjectService("ContextPathSource")
     ContextPathSource contextPathSource, @InjectService("URLEncoder")
-    URLEncoder encoder, @InjectService("InAppInvocationMap")
-    InAppInvocationMap inAppInvocationMap)
+    URLEncoder encoder)
     {
-        return new LinkFactoryImpl(contextPathSource, encoder, _componentClassResolver,
-                inAppInvocationMap);
+        return new LinkFactoryImpl(contextPathSource, encoder, _componentClassResolver);
     }
 
     public ContextPathSource buildContextPathSource()
@@ -562,16 +560,16 @@
     }
 
     /**
-     * It is a map from a {@link org.apache.tapestry.dom.Element} to a {@link InAppInvocation}
+     * It is a map from a {@link org.apache.tapestry.dom.Element} to a {@link ComponentInvocation}
      * Components rendering a link element that is intended to be "clickable" by the
      * {@link org.apache.tapestry.test.pagelevel.PageTester} must map that element to an
-     * InAppInvocation so that the PageTester can find it.
+     * ComponentInvocation so that the PageTester can find it.
      * <p>
      * By default (production mode), the map does nothing.
      */
-    public static InAppInvocationMap buildInAppInvocationMap()
+    public static ComponentInvocationMap buildInAppInvocationMap()
     {
-        return new NoOpInAppInvocationMap();
+        return new NoOpComponentInvocationMap();
     }
 
     public FormParameterLookup buildFormParameterLookup()

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InvocationTarget.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InvocationTarget.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InvocationTarget.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InvocationTarget.java Thu Dec 21 21:48:41 2006
@@ -15,14 +15,14 @@
 package org.apache.tapestry.internal.services;
 
 /**
- * It represents target for an in-app invocation. For example, it may be a page or an action for a
- * component within a page.
+ * It represents target for a {@link org.apache.tapestry.internal.services.ComponentInvocation}.
+ * For example, it may be a page or an action for a component within a page.
  */
 public interface InvocationTarget
 {
 
     /**
-     * @see InAppInvocation#getPath()
+     * @see ComponentInvocation#getPath()
      */
     String getPath();
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactory.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactory.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactory.java Thu Dec 21 21:48:41 2006
@@ -15,7 +15,6 @@
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.Link;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.structure.ComponentPageElement;
 import org.apache.tapestry.internal.structure.Page;
 
@@ -30,9 +29,6 @@
      * Creates a stateful action link. Action links are built for components. Action links are
      * encoded by the current request (that is, bound to the current request's session, if any).
      * 
-     * @param linkElement
-     *            The element for the link (most usually a &lt;a&gt; or &lt;form&gt;). Pass null if
-     *            the link is not to be used as an element.
      * @param component
      *            the component for which an action link is to be generated
      * @param action
@@ -44,19 +40,16 @@
      *            URI
      * @return a link
      */
-    Link createActionLink(Element linkElement, ComponentPageElement component, String action,
-            boolean forForm, Object... context);
+    Link createActionLink(ComponentPageElement component, String action, boolean forForm,
+            Object... context);
 
     /**
      * Creates a link to a page. TODO: What about context? Additional query parameters?
      * 
-     * @param linkElement
-     *            The element for the link (most usually a &lt;a&gt;). Pass null if the link is not
-     *            to be used as an element.
      * @param page
      * @return
      */
-    Link createPageLink(Element linkElement, Page page);
+    Link createPageLink(Page page);
 
     void addListener(LinkFactoryListener listener);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java Thu Dec 21 21:48:41 2006
@@ -25,7 +25,6 @@
 import org.apache.tapestry.ComponentEventHandler;
 import org.apache.tapestry.Link;
 import org.apache.tapestry.TapestryConstants;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.structure.ComponentPageElement;
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.ioc.internal.util.Defense;
@@ -45,20 +44,17 @@
 
     private final StrategyRegistry<PassivateContextHandler> _registry;
 
-    private final InAppInvocationMap _invocationMap;
-
     private interface PassivateContextHandler<T>
     {
         void handle(T result, List context);
     }
 
     public LinkFactoryImpl(ContextPathSource contextPathSource, URLEncoder encoder,
-            ComponentClassResolver componentClassResolver, InAppInvocationMap invocationMap)
+            ComponentClassResolver componentClassResolver)
     {
         _contextPathSource = contextPathSource;
         _encoder = encoder;
         _componentClassResolver = componentClassResolver;
-        _invocationMap = invocationMap;
 
         Map<Class, PassivateContextHandler> registrations = newMap();
 
@@ -99,7 +95,7 @@
         _listeners.add(listener);
     }
 
-    public Link createActionLink(Element linkElement, ComponentPageElement component,
+    public Link createActionLink(ComponentPageElement component,
             String action, boolean forForm, Object... context)
     {
         Defense.notBlank(action, "action");
@@ -110,7 +106,7 @@
 
         ActionLinkTarget target = new ActionLinkTarget(action, logicalPageName, component
                 .getNestedId());
-        InAppInvocation invocation = new InAppInvocation(target, context);
+        ComponentInvocation invocation = new ComponentInvocation(target, context);
 
         Link link = new LinkImpl(_encoder, _contextPathSource.getContextPath(), invocation);
 
@@ -120,19 +116,10 @@
         // TODO: Much more: query parameter for case where active page != component page.
         // Letting listeners add extra parameters.
 
-        mapElementToInvocation(linkElement, invocation);
-
         return link;
     }
 
-    private void mapElementToInvocation(Element linkElement, InAppInvocation invocation)
-    {
-        // Allow the PageTester to extract the invocation object to invoke it later.
-        if (linkElement != null)
-            _invocationMap.put(linkElement, invocation);
-    }
-
-    public Link createPageLink(Element linkElement, final Page page)
+    public Link createPageLink(final Page page)
     {
         Defense.notNull(page, "page");
 
@@ -157,7 +144,7 @@
         rootElement.triggerEvent(TapestryConstants.PASSIVATE_EVENT, null, handler);
 
         PageLinkTarget target = new PageLinkTarget(logicalPageName);
-        InAppInvocation invocation = new InAppInvocation(target, context.toArray());
+        ComponentInvocation invocation = new ComponentInvocation(target, context.toArray());
 
         Link link = new LinkImpl(_encoder, _contextPathSource.getContextPath(), invocation);
 
@@ -166,8 +153,6 @@
 
         // TODO: Much more: query parameter for case where active page != component page.
         // Letting listeners add extra parameters.
-
-        mapElementToInvocation(linkElement, invocation);
 
         return link;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkImpl.java Thu Dec 21 21:48:41 2006
@@ -27,15 +27,15 @@
 
     private final String _contextPath;
 
-    private final InAppInvocation _invocation;
+    private final ComponentInvocation _invocation;
 
     public LinkImpl(URLEncoder encoder, String contextPath, String targetPath)
     {
-        this(encoder, contextPath, new InAppInvocation(new OpaqueConstantTarget(targetPath),
+        this(encoder, contextPath, new ComponentInvocation(new OpaqueConstantTarget(targetPath),
                 new Object[0]));
     }
 
-    public LinkImpl(URLEncoder encoder, String contextPath, InAppInvocation invocation)
+    public LinkImpl(URLEncoder encoder, String contextPath, ComponentInvocation invocation)
     {
         _contextPath = contextPath;
         _encoder = encoder;
@@ -81,7 +81,7 @@
         return _encoder.encodeRedirectURL(buildURI(false));
     }
 
-    public InAppInvocation getInvocation()
+    public ComponentInvocation getInvocation()
     {
         return _invocation;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MarkupWriterImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MarkupWriterImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MarkupWriterImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MarkupWriterImpl.java Thu Dec 21 21:48:41 2006
@@ -12,137 +12,153 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import java.io.PrintWriter;
-
-import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.dom.DefaultMarkupModel;
-import org.apache.tapestry.dom.Document;
-import org.apache.tapestry.dom.Element;
-import org.apache.tapestry.dom.MarkupModel;
-import org.apache.tapestry.dom.Text;
-
-/**
- * 
- */
-public class MarkupWriterImpl implements MarkupWriter
-{
-    private final Document _document;
-
-    private Element _current;
-
-    private Text _currentText;
-
-    public MarkupWriterImpl()
-    {
-        this(new DefaultMarkupModel());
-    }
-
-    public MarkupWriterImpl(MarkupModel model)
-    {
-        _document = new Document(model);
-    }
-
-    public void toMarkup(PrintWriter writer)
-    {
-        _document.toMarkup(writer);
-    }
-
-    @Override
-    public String toString()
-    {
-        return _document.toString();
+package org.apache.tapestry.internal.services;
+
+import java.io.PrintWriter;
+
+import org.apache.tapestry.Link;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.dom.DefaultMarkupModel;
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.dom.Element;
+import org.apache.tapestry.dom.MarkupModel;
+import org.apache.tapestry.dom.Text;
+import org.apache.tapestry.ioc.internal.util.Defense;
+
+/**
+ * 
+ */
+public class MarkupWriterImpl implements MarkupWriter
+{
+    private final Document _document;
+
+    private Element _current;
+
+    private Text _currentText;
+
+    private final ComponentInvocationMap _invocationMap;
+
+    public MarkupWriterImpl()
+    {
+        this(new DefaultMarkupModel(), null);
+    }
+
+    public MarkupWriterImpl(MarkupModel model, ComponentInvocationMap invocationMap)
+    {
+        _document = new Document(model);
+        _invocationMap = invocationMap;
+    }
+
+    public void toMarkup(PrintWriter writer)
+    {
+        _document.toMarkup(writer);
+    }
+
+    @Override
+    public String toString()
+    {
+        return _document.toString();
     }
-    
+
     public Document getDocument()
     {
         return _document;
-    }
-
-    public void write(String text)
-    {
-        ensureCurrentElement();
-
-        if (text == null)
-            return;
-
-        if (_currentText == null)
-        {
-            _currentText = _current.text(text);
-            return;
-        }
-
-        _currentText.write(text);
-    }
-
-    public void writef(String format, Object... args)
-    {
-        // A bit of a cheat:
-
-        write("");
-        _currentText.writef(format, args);
-    }
-
-    public void attributes(Object... namesAndValues)
-    {
-        ensureCurrentElement();
-
-        int i = 0;
-
-        while (i < namesAndValues.length)
-        {
-            // name should never be null.
-
-            String name = namesAndValues[i++].toString();
-            Object value = namesAndValues[i++];
-
-            if (value == null)
-                continue;
-
-            _current.attribute(name, value.toString());
-        }
-
-    }
-
-    private void ensureCurrentElement()
-    {
-        if (_current == null)
-            throw new IllegalStateException(ServicesMessages.markupWriterNoCurrentElement());
-    }
-
-    public Element element(String name, Object... namesAndValues)
-    {
-        if (_current == null)
-            _current = _document.newRootElement(name);
-        else
-            _current = _current.element(name);
-
-        attributes(namesAndValues);
-
-        _currentText = null;
-
-        return _current;
-    }
-
-    public Element end()
-    {
-        ensureCurrentElement();
-
-        _current = _current.getParent();
-
-        _currentText = null;
-
-        return _current;
-    }
-
-    public void comment(String text)
-    {
-        ensureCurrentElement();
-
-        _current.comment(text);
-
-        _currentText = null;
-    }
-
-}
+    }
+
+    public void write(String text)
+    {
+        ensureCurrentElement();
+
+        if (text == null)
+            return;
+
+        if (_currentText == null)
+        {
+            _currentText = _current.text(text);
+            return;
+        }
+
+        _currentText.write(text);
+    }
+
+    public void writef(String format, Object... args)
+    {
+        // A bit of a cheat:
+
+        write("");
+        _currentText.writef(format, args);
+    }
+
+    public void attributes(Object... namesAndValues)
+    {
+        ensureCurrentElement();
+
+        int i = 0;
+
+        while (i < namesAndValues.length)
+        {
+            // name should never be null.
+
+            String name = namesAndValues[i++].toString();
+            Object value = namesAndValues[i++];
+
+            if (value == null)
+                continue;
+
+            _current.attribute(name, value.toString());
+        }
+
+    }
+
+    private void ensureCurrentElement()
+    {
+        if (_current == null)
+            throw new IllegalStateException(ServicesMessages.markupWriterNoCurrentElement());
+    }
+
+    public Element element(String name, Object... namesAndValues)
+    {
+        if (_current == null)
+            _current = _document.newRootElement(name);
+        else
+            _current = _current.element(name);
+
+        attributes(namesAndValues);
+
+        _currentText = null;
+
+        return _current;
+    }
+
+    public Element linkElement(String name, Link link, Object... namesAndValues)
+    {
+        Defense.notNull(link, "link");
+        Element element = element(name, namesAndValues);
+        if (_invocationMap != null)
+        {
+            _invocationMap.put(element, ((LinkImpl) link).getInvocation());
+        }
+        return element;
+    }
+
+    public Element end()
+    {
+        ensureCurrentElement();
+
+        _current = _current.getParent();
+
+        _currentText = null;
+
+        return _current;
+    }
+
+    public void comment(String text)
+    {
+        ensureCurrentElement();
+
+        _current.comment(text);
+
+        _currentText = null;
+    }
+
+}

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpComponentInvocationMap.java (from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpInAppInvocationMap.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpComponentInvocationMap.java?view=diff&rev=489563&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpInAppInvocationMap.java&r1=489555&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpComponentInvocationMap.java&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpInAppInvocationMap.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/NoOpComponentInvocationMap.java Thu Dec 21 21:48:41 2006
@@ -12,20 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import org.apache.tapestry.dom.Element;
-
-/**
- * The production implementation for InAppInvocationMap. It does absolutely nothing because it is
- * not needed in production.
- */
-public class NoOpInAppInvocationMap implements InAppInvocationMap
-{
-
-    public void put(Element element, InAppInvocation invocation)
-    {
-
-    }
-
-}
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.dom.Element;
+
+/**
+ * The production implementation for
+ * {@link org.apache.tapestry.internal.services.ComponentInvocationMap}. It does absolutely nothing
+ * because it is not needed in production.
+ */
+public class NoOpComponentInvocationMap implements ComponentInvocationMap
+{
+
+    public void put(Element element, ComponentInvocation invocation)
+    {
+
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java Thu Dec 21 21:48:41 2006
@@ -16,5 +16,5 @@
 
 public interface PageLinkHandler
 {
-    void handle(InAppInvocation invocation, PageRenderer renderer);
+    void handle(ComponentInvocation invocation, PageRenderer renderer);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java Thu Dec 21 21:48:41 2006
@@ -31,7 +31,7 @@
         _cache = cache;
     }
 
-    public void handle(InAppInvocation invocation, PageRenderer renderer)
+    public void handle(ComponentInvocation invocation, PageRenderer renderer)
     {
         InvocationTarget target = invocation.getTarget();
         PageLinkTarget pageLinkTarget = Defense.cast(target, PageLinkTarget.class, "target");

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkTarget.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkTarget.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkTarget.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkTarget.java Thu Dec 21 21:48:41 2006
@@ -12,38 +12,37 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-
-/**
- * It represents an in-app invocation target for a page link. It is passed to an
- * {@link org.apache.tapestry.internal.services.ActionLinkHandler} by both the
- * {@link org.apache.tapestry.test.pagelevel.PageTester} and the real Tapestry code
- * {@link org.apache.tapestry.internal.services.PageRenderDispatcher} in order to invoke a page
- * link.
- */
-public class PageLinkTarget implements InvocationTarget
-{
-
-    private final String _pageName;
-
-    public PageLinkTarget(String pageName)
-    {
-        _pageName = pageName;
-
-    }
-
-    public String getPath()
-    {
-        StringBuilder builder = new StringBuilder();
-        builder.append(_pageName);
-        builder.append(".html");
-        return builder.toString();
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-}
+package org.apache.tapestry.internal.services;
+
+/**
+ * It represents a component invocation target for a page link. It is passed to an
+ * {@link org.apache.tapestry.internal.services.ActionLinkHandler} by both the
+ * {@link org.apache.tapestry.test.pagelevel.PageTester} and the real Tapestry code
+ * {@link org.apache.tapestry.internal.services.PageRenderDispatcher} in order to invoke a page
+ * link.
+ */
+public class PageLinkTarget implements InvocationTarget
+{
+
+    private final String _pageName;
+
+    public PageLinkTarget(String pageName)
+    {
+        _pageName = pageName;
+
+    }
+
+    public String getPath()
+    {
+        StringBuilder builder = new StringBuilder();
+        builder.append(_pageName);
+        builder.append(".html");
+        return builder.toString();
+    }
+
+    public String getPageName()
+    {
+        return _pageName;
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java Thu Dec 21 21:48:41 2006
@@ -65,7 +65,7 @@
             context[i - 1] = terms[i];
         }
         _handler.handle(
-                new InAppInvocation(new PageLinkTarget(logicalPageName), context),
+                new ComponentInvocation(new PageLinkTarget(logicalPageName), context),
                 new PageRenderer()
                 {
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java Thu Dec 21 21:48:41 2006
@@ -669,10 +669,9 @@
      * {@link Page#createActionLink(Element, ComponentPageElement, String, boolean, Object[]) the containing page}.
      * Why the extra layer? Because
      */
-    public Link createActionLink(Element linkElement, String action, boolean forForm,
-            Object... context)
+    public Link createActionLink(String action, boolean forForm, Object... context)
     {
-        return _page.createActionLink(linkElement, this, action, forForm, context);
+        return _page.createActionLink(this, action, forForm, context);
     }
 
     public void enqueueBeforeRenderBody(RenderQueue queue)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java Thu Dec 21 21:48:41 2006
@@ -23,7 +23,6 @@
 import org.apache.tapestry.ComponentEventHandler;
 import org.apache.tapestry.Link;
 import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.InternalComponentResources;
 import org.apache.tapestry.internal.services.Instantiator;
 import org.apache.tapestry.ioc.Messages;
@@ -98,10 +97,9 @@
         return _element.hasFieldChange(fieldName);
     }
 
-    public Link createActionLink(Element linkElement, String action, boolean forForm,
-            Object... context)
+    public Link createActionLink(String action, boolean forForm, Object... context)
     {
-        return _element.createActionLink(linkElement, action, forForm, context);
+        return _element.createActionLink(action, forForm, context);
     }
 
     public String getCompleteId()

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java Thu Dec 21 21:48:41 2006
@@ -18,7 +18,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.tapestry.Link;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.runtime.PageLifecycleListener;
 
@@ -115,16 +114,13 @@
     /**
      * Creates a link that will trigger behavior in a component within the page.
      * 
-     * @param linkElement
-     *            The element where the link is used (usually an &lt;a&gt). Pass null if the link is
-     *            not to be used in an element.
      * @param element
      * @param action
      * @param forForm
      * @param context
      * @return
      */
-    Link createActionLink(Element linkElement, ComponentPageElement element, String action,
+    Link createActionLink(ComponentPageElement element, String action,
             boolean forForm, Object... context);
 
     /**

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java Thu Dec 21 21:48:41 2006
@@ -21,7 +21,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.tapestry.Link;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.services.LinkFactory;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.runtime.PageLifecycleListener;
@@ -147,10 +146,10 @@
         return _rootElement.getLog();
     }
 
-    public Link createActionLink(Element linkElement, ComponentPageElement element, String action,
-            boolean forForm, Object... context)
+    public Link createActionLink(ComponentPageElement element, String action, boolean forForm,
+            Object... context)
     {
-        return _linkFactory.createActionLink(linkElement, element, action, forForm, context);
+        return _linkFactory.createActionLink(element, action, forForm, context);
     }
 
     public void persistFieldChange(ComponentPageElement element, String fieldName, Object newValue)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java Thu Dec 21 21:48:41 2006
@@ -38,6 +38,7 @@
 import org.apache.tapestry.annotations.CleanupRender;
 import org.apache.tapestry.annotations.InjectPage;
 import org.apache.tapestry.annotations.SetupRender;
+import org.apache.tapestry.dom.DefaultMarkupModel;
 import org.apache.tapestry.internal.InternalConstants;
 import org.apache.tapestry.internal.bindings.ComponentBindingFactory;
 import org.apache.tapestry.internal.bindings.LiteralBindingFactory;
@@ -68,6 +69,7 @@
 import org.apache.tapestry.internal.services.EnvironmentalWorker;
 import org.apache.tapestry.internal.services.FieldValidatorSourceImpl;
 import org.apache.tapestry.internal.services.HeartbeatImpl;
+import org.apache.tapestry.internal.services.ComponentInvocationMap;
 import org.apache.tapestry.internal.services.InfrastructureImpl;
 import org.apache.tapestry.internal.services.InfrastructureManagerImpl;
 import org.apache.tapestry.internal.services.InjectAnonymousWorker;
@@ -303,14 +305,16 @@
         return new InfrastructureImpl(manager);
     }
 
-    public static MarkupWriterFactory buildMarkupWriterFactory()
+    public static MarkupWriterFactory buildMarkupWriterFactory(
+            @InjectService("tapestry.internal.InAppInvocationMap")
+            final ComponentInvocationMap inAppInvocationMap)
     {
         // Temporary ...
         return new MarkupWriterFactory()
         {
             public MarkupWriter newMarkupWriter()
             {
-                return new MarkupWriterImpl();
+                return new MarkupWriterImpl(new DefaultMarkupModel(), inAppInvocationMap);
             }
         };
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkInvoker.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkInvoker.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkInvoker.java Thu Dec 21 21:48:41 2006
@@ -17,22 +17,22 @@
 import org.apache.tapestry.Link;
 import org.apache.tapestry.dom.Document;
 import org.apache.tapestry.internal.services.ActionLinkHandler;
-import org.apache.tapestry.internal.services.InAppInvocation;
+import org.apache.tapestry.internal.services.ComponentInvocation;
 import org.apache.tapestry.internal.services.LinkImpl;
 import org.apache.tapestry.ioc.Registry;
 
 /**
  * Simulates a click on an action link.
  */
-public class ActionLinkInvoker implements InAppInvoker
+public class ActionLinkInvoker implements ComponentInvoker
 {
     private final Registry _registry;
 
-    private final InAppInvoker _followupInvoker;
+    private final ComponentInvoker _followupInvoker;
 
     private final ActionLinkHandler _actionLinkHandler;
 
-    public ActionLinkInvoker(Registry registry, InAppInvoker followupInvoker)
+    public ActionLinkInvoker(Registry registry, ComponentInvoker followupInvoker)
     {
         _registry = registry;
         _followupInvoker = followupInvoker;
@@ -41,19 +41,19 @@
 
     /**
      * Click on the action link and get another link in return. Then follow up the link with another
-     * {@link InAppInvoker}.
+     * {@link ComponentInvoker}.
      * 
      * @param invocation
-     *            The in-app invocation object corresponding to the action link.
+     *            The ComponentInvocation object corresponding to the action link.
      * @return The DOM created. Typically you will assert against it.
      */
-    public Document invoke(InAppInvocation invocation)
+    public Document invoke(ComponentInvocation invocation)
     {
         Link followupLink = click(invocation);
         return _followupInvoker.invoke(((LinkImpl) followupLink).getInvocation());
     }
 
-    private Link click(InAppInvocation invocation)
+    private Link click(ComponentInvocation invocation)
     {
         try
         {

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ComponentInvoker.java (from r489555, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvoker.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ComponentInvoker.java?view=diff&rev=489563&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvoker.java&r1=489555&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ComponentInvoker.java&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvoker.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ComponentInvoker.java Thu Dec 21 21:48:41 2006
@@ -12,21 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.test.pagelevel;
-
-import org.apache.tapestry.dom.Document;
-import org.apache.tapestry.internal.services.InAppInvocation;
-
-/**
- * Invokes an in-app invocation.
- */
-public interface InAppInvoker
-{
-    /**
-     * @param invocation
-     *            The in-app invocation object to be invoked.
-     * @return The DOM created. Typically you will assert against it.
-     */
-    Document invoke(InAppInvocation invocation);
-
-}
+package org.apache.tapestry.test.pagelevel;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.internal.services.ComponentInvocation;
+
+/**
+ * Invokes a {@link org.apache.tapestry.internal.services.ComponentInvocation}.
+ */
+public interface ComponentInvoker
+{
+    /**
+     * @param invocation
+     *            The ComponentInvocation object to be invoked.
+     * @return The DOM created. Typically you will assert against it.
+     */
+    Document invoke(ComponentInvocation invocation);
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvocationMapForPageTester.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvocationMapForPageTester.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvocationMapForPageTester.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/InAppInvocationMapForPageTester.java Thu Dec 21 21:48:41 2006
@@ -19,24 +19,24 @@
 import java.util.Map;
 
 import org.apache.tapestry.dom.Element;
-import org.apache.tapestry.internal.services.InAppInvocation;
-import org.apache.tapestry.internal.services.InAppInvocationMap;
+import org.apache.tapestry.internal.services.ComponentInvocation;
+import org.apache.tapestry.internal.services.ComponentInvocationMap;
 
-public class InAppInvocationMapForPageTester implements InAppInvocationMap
+public class InAppInvocationMapForPageTester implements ComponentInvocationMap
 {
-    private Map<Element, InAppInvocation> map = newMap();
+    private Map<Element, ComponentInvocation> map = newMap();
 
     public void clear()
     {
         map.clear();
     }
 
-    public void put(Element element, InAppInvocation invocation)
+    public void put(Element element, ComponentInvocation invocation)
     {
         map.put(element, invocation);
     }
 
-    public InAppInvocation get(Element element)
+    public ComponentInvocation get(Element element)
     {
         return map.get(element);
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkInvoker.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkInvoker.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkInvoker.java Thu Dec 21 21:48:41 2006
@@ -12,62 +12,66 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.test.pagelevel;
-
-import org.apache.tapestry.dom.Document;
-import org.apache.tapestry.internal.services.InAppInvocation;
-import org.apache.tapestry.internal.services.MarkupWriterImpl;
-import org.apache.tapestry.internal.services.PageLinkHandler;
-import org.apache.tapestry.internal.services.PageMarkupRenderer;
-import org.apache.tapestry.internal.services.PageRenderer;
-import org.apache.tapestry.internal.structure.Page;
-import org.apache.tapestry.ioc.Registry;
-
-/**
- * Simulates a click on a page link.
- */
-public class PageLinkInvoker implements InAppInvoker
-{
-    private final Registry _registry;
-
-    private final PageLinkHandler _pageLinkHandler;
-
-    private final PageMarkupRenderer _renderer;
-
-    public PageLinkInvoker(Registry registry)
-    {
-        _registry = registry;
-        _pageLinkHandler = _registry.getService(PageLinkHandler.class);
-        _renderer = _registry.getService(PageMarkupRenderer.class);
-    }
-
-    /**
-     * Click on the page link.
-     * 
-     * @param invocation
-     *            The in-app invocation object corresponding to the page link.
-     * @return The DOM created. Typically you will assert against it.
-     */
-    public Document invoke(InAppInvocation invocation)
-    {
-        try
-        {
-            final MarkupWriterImpl writer = new MarkupWriterImpl();
-            _pageLinkHandler.handle(invocation, new PageRenderer()
-            {
-
-                public void renderPage(Page page)
-                {
-                    _renderer.renderPageMarkup(page, writer);
-                }
-
-            });
-            return writer.getDocument();
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
-    }
-
-}
+package org.apache.tapestry.test.pagelevel;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.internal.services.ComponentInvocation;
+import org.apache.tapestry.internal.services.MarkupWriterImpl;
+import org.apache.tapestry.internal.services.PageLinkHandler;
+import org.apache.tapestry.internal.services.PageMarkupRenderer;
+import org.apache.tapestry.internal.services.PageRenderer;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.ioc.Registry;
+import org.apache.tapestry.services.MarkupWriterFactory;
+
+/**
+ * Simulates a click on a page link.
+ */
+public class PageLinkInvoker implements ComponentInvoker
+{
+    private final Registry _registry;
+
+    private final PageLinkHandler _pageLinkHandler;
+
+    private final PageMarkupRenderer _renderer;
+
+    private final MarkupWriterFactory _writerFactory;
+
+    public PageLinkInvoker(Registry registry)
+    {
+        _registry = registry;
+        _pageLinkHandler = _registry.getService(PageLinkHandler.class);
+        _renderer = _registry.getService(PageMarkupRenderer.class);
+        _writerFactory = _registry.getService(MarkupWriterFactory.class);
+    }
+
+    /**
+     * Click on the page link.
+     * 
+     * @param invocation
+     *            The ComponentInvocation object corresponding to the page link.
+     * @return The DOM created. Typically you will assert against it.
+     */
+    public Document invoke(ComponentInvocation invocation)
+    {
+        try
+        {
+            final MarkupWriterImpl writer = (MarkupWriterImpl) _writerFactory.newMarkupWriter();
+            _pageLinkHandler.handle(invocation, new PageRenderer()
+            {
+
+                public void renderPage(Page page)
+                {
+                    _renderer.renderPageMarkup(page, writer);
+                }
+
+            });
+            return writer.getDocument();
+        }
+        finally
+        {
+            _registry.cleanupThread();
+        }
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java Thu Dec 21 21:48:41 2006
@@ -25,7 +25,7 @@
 import org.apache.tapestry.dom.Node;
 import org.apache.tapestry.internal.TapestryAppInitializer;
 import org.apache.tapestry.internal.services.ActionLinkTarget;
-import org.apache.tapestry.internal.services.InAppInvocation;
+import org.apache.tapestry.internal.services.ComponentInvocation;
 import org.apache.tapestry.internal.services.LocalizationSetter;
 import org.apache.tapestry.internal.services.PageLinkTarget;
 import org.apache.tapestry.ioc.Registry;
@@ -38,7 +38,7 @@
  * element in the DOM object to get the next page. Because no servlet container is required, it is
  * very fast and you can directly debug into your code in your IDE.
  */
-public class PageTester implements InAppInvoker
+public class PageTester implements ComponentInvoker
 {
     private Registry _registry;
 
@@ -49,7 +49,7 @@
     // For the moment, a page tester instance works in a single session.
     private SessionHolderForPageTester _sessionHolder;
 
-    private StrategyRegistry<InAppInvoker> _invokerRegistry;
+    private StrategyRegistry<ComponentInvoker> _invokerRegistry;
 
     private Locale _preferedLanguage;
 
@@ -89,10 +89,10 @@
 
     private void buildInvokersRegistry()
     {
-        Map<Class, InAppInvoker> map = newMap();
+        Map<Class, ComponentInvoker> map = newMap();
         map.put(PageLinkTarget.class, new PageLinkInvoker(_registry));
         map.put(ActionLinkTarget.class, new ActionLinkInvoker(_registry, this));
-        _invokerRegistry = new StrategyRegistry<InAppInvoker>(InAppInvoker.class, map);
+        _invokerRegistry = new StrategyRegistry<ComponentInvoker>(ComponentInvoker.class, map);
     }
 
     private Map<String, Object> addDefaultOverrides(Map<String, Object> serviceOverrides)
@@ -146,7 +146,7 @@
      */
     public Document renderPage(String pageName)
     {
-        return invoke(new InAppInvocation(new PageLinkTarget(pageName), new Object[0]));
+        return invoke(new ComponentInvocation(new PageLinkTarget(pageName), new Object[0]));
     }
 
     /**
@@ -159,28 +159,28 @@
     public Document clickLink(Element link)
     {
         Defense.notNull(link, "link");
-        InAppInvocation invocation = getInvocation(link);
+        ComponentInvocation invocation = getInvocation(link);
         return invoke(invocation);
     }
 
-    private InAppInvocation getInvocation(Element element)
+    private ComponentInvocation getInvocation(Element element)
     {
-        InAppInvocation invocation = _invocationMap.get(element);
+        ComponentInvocation invocation = _invocationMap.get(element);
         if (invocation == null)
         {
             throw new IllegalArgumentException(
-                    "No in-app invocation object is associated with the Element");
+                    "No component invocation object is associated with the Element");
         }
         return invocation;
     }
 
-    public Document invoke(InAppInvocation invocation)
+    public Document invoke(ComponentInvocation invocation)
     {
         // It is critical to clear the map before invoking an invocation (render a page or click a
         // link).
         _invocationMap.clear();
         setThreadLocale();
-        InAppInvoker invoker = _invokerRegistry.getByInstance(invocation.getTarget());
+        ComponentInvoker invoker = _invokerRegistry.getByInstance(invocation.getTarget());
         return invoker.invoke(invocation);
     }
 
@@ -208,7 +208,7 @@
         _formParameterLookup.clear();
         _formParameterLookup.addFieldValues(fieldValues);
         addHiddenFormFields(form);
-        InAppInvocation invocation = getInvocation(form);
+        ComponentInvocation invocation = getInvocation(form);
         return invoke(invocation);
     }
 

Copied: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentInvocationTest.java (from r489555, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InAppInvocationTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentInvocationTest.java?view=diff&rev=489563&p1=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InAppInvocationTest.java&r1=489555&p2=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentInvocationTest.java&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InAppInvocationTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentInvocationTest.java Thu Dec 21 21:48:41 2006
@@ -17,12 +17,12 @@
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class InAppInvocationTest extends Assert
+public class ComponentInvocationTest extends Assert
 {
     @Test
     public void no_context()
     {
-        InAppInvocation invocation = new InAppInvocation(new OpaqueConstantTarget("abc"),
+        ComponentInvocation invocation = new ComponentInvocation(new OpaqueConstantTarget("abc"),
                 new Object[0]);
         assertEquals(invocation.buildURI(false), "abc");
         assertEquals(invocation.buildURI(true), "abc");
@@ -31,7 +31,7 @@
     @Test
     public void context()
     {
-        InAppInvocation invocation = new InAppInvocation(new OpaqueConstantTarget("abc"),
+        ComponentInvocation invocation = new ComponentInvocation(new OpaqueConstantTarget("abc"),
                 new Object[]
                 { "x", 123 });
         assertEquals(invocation.buildURI(false), "abc/x/123");
@@ -41,7 +41,7 @@
     @Test
     public void parameters()
     {
-        InAppInvocation invocation = new InAppInvocation(new OpaqueConstantTarget("abc"),
+        ComponentInvocation invocation = new ComponentInvocation(new OpaqueConstantTarget("abc"),
                 new Object[]
                 { "x", 123 });
         invocation.addParameter("p1", "foo");

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java Thu Dec 21 21:48:41 2006
@@ -130,10 +130,10 @@
 
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, resolver, null);
+        LinkFactory factory = new LinkFactoryImpl(request, response, resolver);
         factory.addListener(listener);
 
-        Link link = factory.createPageLink(null, page);
+        Link link = factory.createPageLink(page);
 
         assertEquals(link.toRedirectURI(), "*encoded*");
 
@@ -187,10 +187,10 @@
 
         replay();
 
-        LinkFactory factory = new LinkFactoryImpl(request, response, resolver, null);
+        LinkFactory factory = new LinkFactoryImpl(request, response, resolver);
         factory.addListener(listener);
 
-        Link link = factory.createActionLink(null, element, "someaction", false, context);
+        Link link = factory.createActionLink(element, "someaction", false, context);
 
         assertEquals(link.toURI(), "*encoded*");
         assertSame(link, holder.get());

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/MarkupWriterImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/MarkupWriterImplTest.java?view=diff&rev=489563&r1=489562&r2=489563
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/MarkupWriterImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/MarkupWriterImplTest.java Thu Dec 21 21:48:41 2006
@@ -12,155 +12,207 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.dom.Element;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-
-public class MarkupWriterImplTest extends Assert
-{
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void write_with_no_current_element()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.write("fail!");
-    }
-
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void comment_with_no_current_element()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.comment("fail!");
-    }
-
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void end_with_no_current_element()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.end();
-    }
-
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void attributes_with_no_current_element()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.attributes("fail", "now");
-    }
-
-    @Test
-    public void current_element_at_end_of_root_element_is_null()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-
-        assertNull(w.end());
-    }
-
-    @Test
-    public void element_nesting()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        Element root = w.element("root");
-
-        w.attributes("foo", "bar");
-
-        w.write("before child");
-
-        assertNotSame(w.element("nested"), root);
-
-        w.write("inner text");
-
-        assertSame(w.end(), root);
-
-        w.write("after child");
-
-        root.attribute("gnip", "gnop");
-
-        assertEquals(
-                w.toString(),
-                "<root foo=\"bar\" gnip=\"gnop\">before child<nested>inner text</nested>after child</root>");
-    }
-
-    @Test
-    public void element_with_attributes()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("img", "src", "foo.png", "width", 20, "height", 20);
-        w.end();
-
-        // img is a tag with an end tag style of omit, so no close tag is written.
-        
-        assertEquals(w.toString(), "<img height=\"20\" src=\"foo.png\" width=\"20\">");
-    }
-
-    @Test
-    public void attributes()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-
-        w.attributes("foo", "bar", "gnip", "gnop");
-
-        assertEquals(w.toString(), "<root foo=\"bar\" gnip=\"gnop\"></root>");
-    }
-
-    @Test
-    public void comment()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-        w.comment("A comment");
-        w.end();
-
-        assertEquals(w.toString(), "<root><!-- A comment --></root>");
-    }
-
-    @Test
-    public void new_text_node_after_comment_node()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-        w.write("before");
-        w.comment("A comment");
-        w.write("after");
-        w.end();
-
-        assertEquals(w.toString(), "<root>before<!-- A comment -->after</root>");
-    }
-    
-    @Test
-    public void null_write_is_ok()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-        w.write(null);
-        w.end();
-        
-        assertEquals(w.toString(), "<root></root>");
-    }
-
-    @Test
-    public void writef()
-    {
-        MarkupWriter w = new MarkupWriterImpl();
-
-        w.element("root");
-        w.writef("Test name: %s", "writef");
-
-        assertEquals(w.toString(), "<root>Test name: writef</root>");
-    }
-}
+package org.apache.tapestry.internal.services;
+
+import java.util.Map;
+
+import org.apache.tapestry.Link;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.dom.DefaultMarkupModel;
+import org.apache.tapestry.dom.Element;
+import org.apache.tapestry.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry.test.pagelevel.NoOpURLEncoder;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class MarkupWriterImplTest extends Assert
+{
+    @Test(expectedExceptions = IllegalStateException.class)
+    public void write_with_no_current_element()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.write("fail!");
+    }
+
+    @Test(expectedExceptions = IllegalStateException.class)
+    public void comment_with_no_current_element()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.comment("fail!");
+    }
+
+    @Test(expectedExceptions = IllegalStateException.class)
+    public void end_with_no_current_element()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.end();
+    }
+
+    @Test(expectedExceptions = IllegalStateException.class)
+    public void attributes_with_no_current_element()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.attributes("fail", "now");
+    }
+
+    @Test
+    public void current_element_at_end_of_root_element_is_null()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+
+        assertNull(w.end());
+    }
+
+    @Test
+    public void element_nesting()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        Element root = w.element("root");
+
+        w.attributes("foo", "bar");
+
+        w.write("before child");
+
+        assertNotSame(w.element("nested"), root);
+
+        w.write("inner text");
+
+        assertSame(w.end(), root);
+
+        w.write("after child");
+
+        root.attribute("gnip", "gnop");
+
+        assertEquals(
+                w.toString(),
+                "<root foo=\"bar\" gnip=\"gnop\">before child<nested>inner text</nested>after child</root>");
+    }
+
+    @Test
+    public void element_with_attributes()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("img", "src", "foo.png", "width", 20, "height", 20);
+        w.end();
+
+        // img is a tag with an end tag style of omit, so no close tag is written.
+
+        assertEquals(w.toString(), "<img height=\"20\" src=\"foo.png\" width=\"20\">");
+    }
+
+    @Test
+    public void attributes()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+
+        w.attributes("foo", "bar", "gnip", "gnop");
+
+        assertEquals(w.toString(), "<root foo=\"bar\" gnip=\"gnop\"></root>");
+    }
+
+    @Test
+    public void comment()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+        w.comment("A comment");
+        w.end();
+
+        assertEquals(w.toString(), "<root><!-- A comment --></root>");
+    }
+
+    @Test
+    public void new_text_node_after_comment_node()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+        w.write("before");
+        w.comment("A comment");
+        w.write("after");
+        w.end();
+
+        assertEquals(w.toString(), "<root>before<!-- A comment -->after</root>");
+    }
+
+    @Test
+    public void null_write_is_ok()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+        w.write(null);
+        w.end();
+
+        assertEquals(w.toString(), "<root></root>");
+    }
+
+    @Test
+    public void writef()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("root");
+        w.writef("Test name: %s", "writef");
+
+        assertEquals(w.toString(), "<root>Test name: writef</root>");
+    }
+
+    @Test
+    public void link_element()
+    {
+        final Map<Element, ComponentInvocation> map = CollectionFactory.newMap();
+        MarkupWriter w = new MarkupWriterImpl(new DefaultMarkupModel(),
+                new ComponentInvocationMap()
+                {
+
+                    public void put(Element element, ComponentInvocation invocation)
+                    {
+                        map.put(element, invocation);
+
+                    }
+
+                });
+        ComponentInvocation invocation = new ComponentInvocation(new OpaqueConstantTarget("foo"),
+                new Object[0]);
+        Link link = new LinkImpl(new NoOpURLEncoder(), "", invocation);
+        Element element = w.linkElement("a", link, "href", "foo.png");
+        w.end();
+        assertEquals(w.toString(), "<a href=\"foo.png\"></a>");
+        assertEquals(map.size(), 1);
+        assertSame(map.get(element), invocation);
+    }
+
+    @Test
+    public void link_element_no_map()
+    {
+        final Map<Element, ComponentInvocation> map = CollectionFactory.newMap();
+        MarkupWriter w = new MarkupWriterImpl();
+        ComponentInvocation invocation = new ComponentInvocation(new OpaqueConstantTarget("foo"),
+                new Object[0]);
+        Link link = new LinkImpl(new NoOpURLEncoder(), "", invocation);
+        w.linkElement("a", link, "href", "foo.png");
+        w.end();
+        assertEquals(w.toString(), "<a href=\"foo.png\"></a>");
+        assertEquals(map.size(), 0);
+    }
+
+    @Test(expectedExceptions =
+    { IllegalArgumentException.class })
+    public void link_null()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+        w.linkElement("a", null, "href", "foo.png");
+    }
+}