Author: hlship
Date: Thu Dec 20 18:16:03 2007
New Revision: 606088

URL: http://svn.apache.org/viewvc?rev=606088&view=rev
Log:
TAPESTRY-1650: Create an extensible filter pipeline for partial page renders 
(passing the markup write and the JSONObject reply).  Add the basic set of 
services (PageRenderSupport, Heartbeat, ZoneSetup, DefaultValidationDecorator) 
for use when rendering a partial.

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRenderer.java
      - copied, changed from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRenderer.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java
      - copied, changed from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MarkupRendererPipelineImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererPipelineImpl.java
      - copied, changed from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupport.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRenderer.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRendererFilter.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupportTest.java
Removed:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderInitializerImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRenderer.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PageRenderInitializer.java
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentActionRequestHandler.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageMarkupRendererImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueue.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueueImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderCommandComponentEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRenderer.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRendererFilter.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/Traditional.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/services/PipelineBuilderImpl.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/services/PipelineBuilder.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentActionRequestHandler.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentActionRequestHandler.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentActionRequestHandler.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentActionRequestHandler.java
 Thu Dec 20 18:16:03 2007
@@ -35,7 +35,7 @@
 
     private final MarkupWriterFactory _factory;
 
-    private final PartialMarkupRenderer _renderer;
+    private final AjaxPartialResponseRenderer _renderer;
 
     private final Response _response;
 
@@ -44,8 +44,8 @@
     private final ComponentEventResultProcessor _resultProcessor;
 
     public AjaxComponentActionRequestHandler(RequestPageCache cache, 
MarkupWriterFactory factory,
-                                             PartialMarkupRenderer renderer, 
Response response, PageRenderQueue queue,
-                                             @Ajax 
ComponentEventResultProcessor resultProcessor)
+                                             AjaxPartialResponseRenderer 
renderer, Response response,
+                                             PageRenderQueue queue, @Ajax 
ComponentEventResultProcessor resultProcessor)
     {
         _cache = cache;
         _factory = factory;

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessor.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessor.java
 Thu Dec 20 18:16:03 2007
@@ -23,14 +23,14 @@
 import java.io.IOException;
 
 /**
- * Performs a partial page render based on a
+ * Performs a partial page render based on a root component.
  */
 public class AjaxComponentInstanceEventResultProcessor implements 
ComponentEventResultProcessor<Component>
 {
     private final RequestPageCache _cache;
-    private final PartialMarkupRenderer _renderer;
+    private final AjaxPartialResponseRenderer _renderer;
 
-    public AjaxComponentInstanceEventResultProcessor(PartialMarkupRenderer 
renderer, RequestPageCache cache)
+    public 
AjaxComponentInstanceEventResultProcessor(AjaxPartialResponseRenderer renderer, 
RequestPageCache cache)
     {
         _renderer = renderer;
         _cache = cache;

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRenderer.java
 (from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRenderer.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRenderer.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRenderer.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRenderer.java&r1=598484&r2=606088&rev=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRenderer.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRenderer.java
 Thu Dec 20 18:16:03 2007
@@ -22,8 +22,11 @@
  * Used to render portions of a page as part of an
  * [EMAIL PROTECTED] AjaxComponentActionRequestHandler Ajax request}.    This 
encapsulates
  * rendering of the partial response and then the construction of a [EMAIL 
PROTECTED] org.apache.tapestry.json.JSONObject JSON reply}.
+ * Works with the pipeline defined by the [EMAIL PROTECTED] 
org.apache.tapestry.services.PartialMarkupRenderer} service.
+ *
+ * @see org.apache.tapestry.internal.services.PageRenderQueue
  */
-public interface PartialMarkupRenderer
+public interface AjaxPartialResponseRenderer
 {
     /**
      * Used to render a partial response as part of an Ajax action request.

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java
 (from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java&r1=598484&r2=606088&rev=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java
 Thu Dec 20 18:16:03 2007
@@ -15,40 +15,50 @@
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.util.ContentType;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.runtime.RenderCommand;
 import org.apache.tapestry.services.Environment;
 import org.apache.tapestry.services.MarkupWriterFactory;
+import org.apache.tapestry.services.PartialMarkupRenderer;
 import org.apache.tapestry.services.Response;
 
 import java.io.IOException;
 import java.io.PrintWriter;
 
-public class PartialMarkupRendererImpl implements PartialMarkupRenderer
+public class AjaxPartialResponseRendererImpl implements 
AjaxPartialResponseRenderer
 {
     private final Environment _environment;
 
-    private final PageRenderQueue _pageRenderQueue;
-
     private final MarkupWriterFactory _factory;
 
     private final Response _response;
 
-    public PartialMarkupRendererImpl(Environment environment, PageRenderQueue 
pageRenderQueue,
-                                     MarkupWriterFactory factory, Response 
response)
+    private final PartialMarkupRenderer _partialMarkupRenderer;
+
+    private final PageRenderQueue _pageRenderQueue;
+
+
+    public AjaxPartialResponseRendererImpl(Environment environment, 
MarkupWriterFactory factory, Response response,
+                                           PartialMarkupRenderer 
partialMarkupRenderer, PageRenderQueue pageRenderQueue)
     {
         _environment = environment;
-        _pageRenderQueue = pageRenderQueue;
         _factory = factory;
         _response = response;
+        _partialMarkupRenderer = partialMarkupRenderer;
+        _pageRenderQueue = pageRenderQueue;
     }
 
     public void renderPartialPageMarkup(RenderCommand rootRenderCommand) 
throws IOException
     {
         _environment.clear();
 
+        // This is a complex area as we are trying to keep public and private 
services properly
+        // seperated, and trying to keep stateless and stateful (i.e., 
perthread scope) services
+        // seperated. So we inform the stateful queue service what it needs to 
do here ...
+
+        _pageRenderQueue.initializeForPartialPageRender(rootRenderCommand);
+
         // This may be problematic as the charset of the response is not
         // going to be set properly I think.  We'll loop back to that.
 
@@ -56,25 +66,11 @@
 
         MarkupWriter writer = _factory.newMarkupWriter();
 
-        // The partial will quite often contain multiple elements (or just a 
block of plain text),
-        // so those must be enclosed in a root element.
-
-        Element root = writer.element("ajax-partial");
-
-        _pageRenderQueue.initializeForPartialPageRender(rootRenderCommand);
-
-        // TODO: This is where we will set up a pipeline to provide 
environmentals and,
-        // perhaps, to catch errors and inform the client.
-
-        _pageRenderQueue.render(writer);
-
-        writer.end();
-
-        String content = root.getChildMarkup().trim();
-
         JSONObject reply = new JSONObject();
 
-        reply.put("content", content);
+        // ... and here, the pipeline eventually reaches the PRQ to let it 
render the root render command.
+
+        _partialMarkupRenderer.renderMarkup(writer, reply);
 
         PrintWriter pw = _response.getPrintWriter(contentType.toString());
 

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MarkupRendererPipelineImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MarkupRendererPipelineImpl.java?rev=606088&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MarkupRendererPipelineImpl.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MarkupRendererPipelineImpl.java
 Thu Dec 20 18:16:03 2007
@@ -0,0 +1,50 @@
+// Copyright 2007 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.tapestry.internal.services;
+
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.ioc.annotations.Marker;
+import org.apache.tapestry.ioc.annotations.Primary;
+import org.apache.tapestry.ioc.services.PipelineBuilder;
+import org.apache.tapestry.services.MarkupRenderer;
+import org.apache.tapestry.services.MarkupRendererFilter;
+import org.slf4j.Logger;
+
+import java.util.List;
+
[EMAIL PROTECTED](Primary.class)
+public class MarkupRendererPipelineImpl implements MarkupRenderer
+{
+    private final MarkupRenderer _pipeline;
+
+    public MarkupRendererPipelineImpl(final PageRenderQueue pageRenderQueue, 
Logger logger, PipelineBuilder builder,
+                                      List<MarkupRendererFilter> configuration)
+    {
+        MarkupRenderer terminator = new MarkupRenderer()
+        {
+            public void renderMarkup(MarkupWriter writer)
+            {
+                pageRenderQueue.render(writer);
+            }
+        };
+
+        _pipeline = builder.build(logger, MarkupRenderer.class, 
MarkupRendererFilter.class, configuration, terminator);
+    }
+
+    public void renderMarkup(MarkupWriter writer)
+    {
+        _pipeline.renderMarkup(writer);
+    }
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageMarkupRendererImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageMarkupRendererImpl.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageMarkupRendererImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageMarkupRendererImpl.java
 Thu Dec 20 18:16:03 2007
@@ -18,7 +18,6 @@
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.services.Environment;
 import org.apache.tapestry.services.MarkupRenderer;
-import org.apache.tapestry.services.PageRenderInitializer;
 
 public class PageMarkupRendererImpl implements PageMarkupRenderer
 {
@@ -28,7 +27,7 @@
 
     private final MarkupRenderer _markupRendererPipeline;
 
-    public PageMarkupRendererImpl(PageRenderInitializer pageRenderInitializer, 
PageRenderQueue pageRenderQueue,
+    public PageMarkupRendererImpl(MarkupRenderer markupRendererPipeline, 
PageRenderQueue pageRenderQueue,
                                   Environment environment)
     {
         // We have to go through some awkward tricks here:
@@ -40,15 +39,7 @@
         _pageRenderQueue = pageRenderQueue;
         _environment = environment;
 
-        MarkupRenderer renderer = new MarkupRenderer()
-        {
-            public void renderMarkup(MarkupWriter writer)
-            {
-                _pageRenderQueue.render(writer);
-            }
-        };
-
-        _markupRendererPipeline = pageRenderInitializer.addFilters(renderer);
+        _markupRendererPipeline = markupRendererPipeline;
     }
 
     public void renderPageMarkup(Page page, MarkupWriter writer)

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueue.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueue.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueue.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueue.java
 Thu Dec 20 18:16:03 2007
@@ -16,6 +16,7 @@
 
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.runtime.RenderCommand;
 
 
@@ -43,4 +44,12 @@
      * @param writer to write markup to
      */
     void render(MarkupWriter writer);
+
+    /**
+     * Performs a partial markup render, as configured via [EMAIL PROTECTED] 
#initializeForPartialPageRender(org.apache.tapestry.runtime.RenderCommand)}.
+     *
+     * @param writer to which markup should be written
+     * @param reply  JSONObject which will contain the partial response
+     */
+    void renderPartial(MarkupWriter writer, JSONObject reply);
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueueImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueueImpl.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueueImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageRenderQueueImpl.java
 Thu Dec 20 18:16:03 2007
@@ -15,11 +15,18 @@
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.structure.Page;
 import static org.apache.tapestry.ioc.IOCConstants.PERTHREAD_SCOPE;
 import org.apache.tapestry.ioc.annotations.Scope;
+import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.runtime.RenderCommand;
 
+/**
+ * This services keeps track of the page being rendered and the root command 
for the partial render, it is therefore
+ * request/thread scoped.  There's a filter pipeline around the rendering, and 
that gets to be stateless because this service,
+ * at the end of the pipeline, is stateful.
+ */
 @Scope(PERTHREAD_SCOPE)
 public class PageRenderQueueImpl implements PageRenderQueue
 {
@@ -49,5 +56,23 @@
         // Run the queue until empty.
 
         queue.run(writer);
+    }
+
+    public void renderPartial(MarkupWriter writer, JSONObject reply)
+    {
+        // The partial will quite often contain multiple elements (or just a 
block of plain text),
+        // so those must be enclosed in a root element.
+
+        Element root = writer.element("ajax-partial");
+
+        // The initialize methods will already have been invoked.
+
+        render(writer);
+
+        writer.end();
+
+        String content = root.getChildMarkup().trim();
+
+        reply.put("content", content);
     }
 }

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererPipelineImpl.java
 (from r598484, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererPipelineImpl.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererPipelineImpl.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java&r1=598484&r2=606088&rev=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialMarkupRendererPipelineImpl.java
 Thu Dec 20 18:16:03 2007
@@ -15,71 +15,44 @@
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.dom.Element;
-import org.apache.tapestry.internal.util.ContentType;
+import org.apache.tapestry.ioc.annotations.Marker;
+import org.apache.tapestry.ioc.annotations.Primary;
+import org.apache.tapestry.ioc.services.PipelineBuilder;
 import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.runtime.RenderCommand;
-import org.apache.tapestry.services.Environment;
-import org.apache.tapestry.services.MarkupWriterFactory;
-import org.apache.tapestry.services.Response;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-public class PartialMarkupRendererImpl implements PartialMarkupRenderer
+import org.apache.tapestry.services.PartialMarkupRenderer;
+import org.apache.tapestry.services.PartialMarkupRendererFilter;
+import org.slf4j.Logger;
+
+import java.util.List;
+
+/**
+ * Represents a pipeline of [EMAIL PROTECTED] 
org.apache.tapestry.services.PartialMarkupRendererFilter}s that
+ * terminates with [EMAIL PROTECTED] 
org.apache.tapestry.internal.services.PageRenderQueue#renderPartial(org.apache.tapestry.MarkupWriter,
 org.apache.tapestry.json.JSONObject)}.
+ */
[EMAIL PROTECTED](Primary.class)
+public class PartialMarkupRendererPipelineImpl implements PartialMarkupRenderer
 {
-    private final Environment _environment;
-
-    private final PageRenderQueue _pageRenderQueue;
+    private final PartialMarkupRenderer _pipeline;
 
-    private final MarkupWriterFactory _factory;
-
-    private final Response _response;
-
-    public PartialMarkupRendererImpl(Environment environment, PageRenderQueue 
pageRenderQueue,
-                                     MarkupWriterFactory factory, Response 
response)
+    public PartialMarkupRendererPipelineImpl(Logger logger, 
List<PartialMarkupRendererFilter> configuration,
+                                             PipelineBuilder builder, final 
PageRenderQueue renderQueue)
     {
-        _environment = environment;
-        _pageRenderQueue = pageRenderQueue;
-        _factory = factory;
-        _response = response;
-    }
-
-    public void renderPartialPageMarkup(RenderCommand rootRenderCommand) 
throws IOException
-    {
-        _environment.clear();
-
-        // This may be problematic as the charset of the response is not
-        // going to be set properly I think.  We'll loop back to that.
-
-        ContentType contentType = new ContentType("text/javascript");
-
-        MarkupWriter writer = _factory.newMarkupWriter();
 
-        // The partial will quite often contain multiple elements (or just a 
block of plain text),
-        // so those must be enclosed in a root element.
+        PartialMarkupRenderer terminator = new PartialMarkupRenderer()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply)
+            {
+                renderQueue.renderPartial(writer, reply);
+            }
+        };
 
-        Element root = writer.element("ajax-partial");
-
-        _pageRenderQueue.initializeForPartialPageRender(rootRenderCommand);
-
-        // TODO: This is where we will set up a pipeline to provide 
environmentals and,
-        // perhaps, to catch errors and inform the client.
-
-        _pageRenderQueue.render(writer);
-
-        writer.end();
-
-        String content = root.getChildMarkup().trim();
-
-        JSONObject reply = new JSONObject();
-
-        reply.put("content", content);
-
-        PrintWriter pw = _response.getPrintWriter(contentType.toString());
+        _pipeline = builder.build(logger, PartialMarkupRenderer.class, 
PartialMarkupRendererFilter.class, configuration,
+                                  terminator);
+    }
 
-        pw.print(reply);
 
-        pw.flush();
+    public void renderMarkup(MarkupWriter writer, JSONObject reply)
+    {
+        _pipeline.renderMarkup(writer, reply);
     }
 }

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupport.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupport.java?rev=606088&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupport.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupport.java
 Thu Dec 20 18:16:03 2007
@@ -0,0 +1,80 @@
+// Copyright 2007 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.tapestry.internal.services;
+
+import org.apache.tapestry.Asset;
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.ioc.internal.util.IdAllocator;
+import org.apache.tapestry.json.JSONObject;
+
+import java.util.Formatter;
+
+/**
+ * Used during partial page renders to allocate ids and collect JavaScript 
initialization.
+ */
+public class PartialRenderPageRenderSupport implements PageRenderSupport
+{
+    private final StringBuilder _builder = new StringBuilder();
+    private final Formatter _formatter = new Formatter(_builder);
+    private boolean _dirty;
+
+    // TODO: A namespace for the id allocator to ensure uniquely allocated ids 
on the client.
+
+    private final IdAllocator _idAllocator = new IdAllocator();
+
+    public String allocateClientId(String id)
+    {
+        return _idAllocator.allocateId(id);
+    }
+
+    /**
+     * Does nothing.  Script links are only supported during full page 
renders, not partials (at this time).
+     */
+    public void addScriptLink(Asset... scriptAssets)
+    {
+    }
+
+    /**
+     * Does nothing.  Script links are only supported during full page 
renders, not partials (at this time).
+     */
+    public void addClasspathScriptLink(String... classpaths)
+    {
+    }
+
+    /**
+     * Does nothing.  Stylesheet links are only supported during full page 
renders, not partials (at this time).
+     */
+    public void addStylesheetLink(Asset stylesheet, String media)
+    {
+    }
+
+    public void addScript(String format, Object... arguments)
+    {
+        _formatter.format(format, arguments);
+
+        _dirty = true;
+    }
+
+    /**
+     * Updates the reply with a "script" key, if any scripting has been 
collected via [EMAIL PROTECTED] #addScript(String, Object[])} }.
+     *
+     * @param reply
+     */
+    public void update(JSONObject reply)
+    {
+        if (_dirty) reply.put("script", _builder.toString());
+    }
+
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderCommandComponentEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderCommandComponentEventResultProcessor.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderCommandComponentEventResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderCommandComponentEventResultProcessor.java
 Thu Dec 20 18:16:03 2007
@@ -23,13 +23,13 @@
 /**
  * Processor for objects that implement [EMAIL PROTECTED] RenderCommand} (such 
as [EMAIL PROTECTED] org.apache.tapestry.internal.structure.BlockImpl}).
  *
- * @see 
org.apache.tapestry.internal.services.PartialMarkupRenderer#renderPartialPageMarkup(org.apache.tapestry.runtime.RenderCommand)
+ * @see 
AjaxPartialResponseRenderer#renderPartialPageMarkup(org.apache.tapestry.runtime.RenderCommand)
  */
 public class RenderCommandComponentEventResultProcessor implements 
ComponentEventResultProcessor<RenderCommand>
 {
-    private final PartialMarkupRenderer _renderer;
+    private final AjaxPartialResponseRenderer _renderer;
 
-    public RenderCommandComponentEventResultProcessor(PartialMarkupRenderer 
renderer)
+    public 
RenderCommandComponentEventResultProcessor(AjaxPartialResponseRenderer renderer)
     {
         _renderer = renderer;
     }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRenderer.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRenderer.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRenderer.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRenderer.java
 Thu Dec 20 18:16:03 2007
@@ -19,6 +19,10 @@
 /**
  * An object which will perform rendering of a page (or portion of a page).  
This interface
  * exists to be filtered via [EMAIL PROTECTED] 
org.apache.tapestry.services.MarkupRendererFilter}.
+ * <p/>
+ * The MarkupRenderer service takes an ordered configuration of [EMAIL 
PROTECTED] org.apache.tapestry.services.MarkupRendererFilter}s, which
+ * are used for ordinary page rendering (as opposed to [EMAIL PROTECTED] 
org.apache.tapestry.services.PartialMarkupRenderer partial page rendering} for 
Ajax requests).
+ * The MarkupRenderer service may be selected using the [EMAIL PROTECTED] 
org.apache.tapestry.ioc.annotations.Primary} marker annotation.
  */
 public interface MarkupRenderer
 {

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRendererFilter.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRendererFilter.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRendererFilter.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/MarkupRendererFilter.java
 Thu Dec 20 18:16:03 2007
@@ -27,7 +27,7 @@
      * Implementations should perform work before or after passing the writer
      * to the renderer.
      *
-     * @param writer   to which markup sholuld be written
+     * @param writer   to which markup should be written
      * @param renderer delegate to which the writer should be passed.
      */
     void renderMarkup(MarkupWriter writer, MarkupRenderer renderer);

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRenderer.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRenderer.java?rev=606088&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRenderer.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRenderer.java
 Thu Dec 20 18:16:03 2007
@@ -0,0 +1,37 @@
+// Copyright 2007 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.tapestry.services;
+
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.json.JSONObject;
+
+/**
+ * Defines an Ajax-oriented partial page render, wherein a render of a portion 
of a page occurs, and the content is stored into a key ("content") of a [EMAIL 
PROTECTED] org.apache.tapestry.json.JSONObject}, which is
+ * sent to the client side as the final response.  Client-side JavaScript 
receives this reply and uses it to update a portion of the page.
+ * <p/>
+ * <p/>
+ * The PartialMarkupRenderer service takes an ordered configuration of [EMAIL 
PROTECTED] PartialMarkupRendererFilter}s.  It can be selected using the [EMAIL 
PROTECTED] org.apache.tapestry.ioc.annotations.Primary} marker annotation.
+ */
+public interface PartialMarkupRenderer
+{
+    /**
+     * Implementations should perform work before or after passing the writer
+     * to the renderer.
+     *
+     * @param writer to which markup should be written
+     * @param reply  JSONObject which will contain the partial response
+     */
+    void renderMarkup(MarkupWriter writer, JSONObject reply);
+}

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRendererFilter.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRendererFilter.java?rev=606088&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRendererFilter.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PartialMarkupRendererFilter.java
 Thu Dec 20 18:16:03 2007
@@ -0,0 +1,36 @@
+// Copyright 2007 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.tapestry.services;
+
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.json.JSONObject;
+
+/**
+ * A filter (the main interface being [EMAIL PROTECTED] 
PartialMarkupRenderer}) applied when performing a partial page render as part 
of an Ajax-oriented request.  This is similar
+ * to [EMAIL PROTECTED] org.apache.tapestry.services.MarkupRendererFilter} and 
filters are often in place so as
+ * to contribute [EMAIL PROTECTED] 
org.apache.tapestry.annotations.Environmental} services to the pages and 
components that render.
+ */
+public interface PartialMarkupRendererFilter
+{
+    /**
+     * Implementations should perform work before or after passing the writer
+     * to the renderer.
+     *
+     * @param writer   to which markup should be written
+     * @param reply    JSONObject which will contain the partial response
+     * @param renderer delegate to which the writer should be passed
+     */
+    void renderMarkup(MarkupWriter writer, JSONObject reply, 
PartialMarkupRenderer renderer);
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
 Thu Dec 20 18:16:03 2007
@@ -112,8 +112,9 @@
         binder.bind(ComponentEventResultProcessor.class, 
ComponentInstanceResultProcessor.class).withId(
                 "ComponentInstanceResultProcessor");
         binder.bind(PageRenderQueue.class, PageRenderQueueImpl.class);
-        binder.bind(PageRenderInitializer.class, 
PageRenderInitializerImpl.class);
-        binder.bind(PartialMarkupRenderer.class, 
PartialMarkupRendererImpl.class);
+        binder.bind(MarkupRenderer.class, MarkupRendererPipelineImpl.class);
+        binder.bind(AjaxPartialResponseRenderer.class, 
AjaxPartialResponseRendererImpl.class);
+        binder.bind(PartialMarkupRenderer.class, 
PartialMarkupRendererPipelineImpl.class);
     }
 
     public static Alias build(Logger logger,
@@ -1280,7 +1281,7 @@
     }
 
     /**
-     * Adds basic render initializers, each of which provides an [EMAIL 
PROTECTED] org.apache.tapestry.annotations.Environmental} service:
+     * Adds page render filters, each of which provides an [EMAIL PROTECTED] 
org.apache.tapestry.annotations.Environmental} service:
      * <dl>
      * <dt>PageRenderSupport</dt>  <dd>Provides [EMAIL PROTECTED] 
PageRenderSupport}</dd>
      * <dt>ZoneSetup</dt> <dd>Provides [EMAIL PROTECTED] ZoneSetup}</dd>
@@ -1289,19 +1290,19 @@
      * <dd>Provides [EMAIL PROTECTED] org.apache.tapestry.ValidationDecorator} 
(as an instance of [EMAIL PROTECTED] 
org.apache.tapestry.internal.DefaultValidationDecorator})</dd>
      * </dl>
      */
-    public void 
contributePageRenderInitializer(OrderedConfiguration<MarkupRendererFilter> 
configuration,
+    public void 
contributeMarkupRenderer(OrderedConfiguration<MarkupRendererFilter> 
configuration,
 
-                                                
@Path("${tapestry.default-stylesheet}")
-                                                final Asset stylesheetAsset,
+                                         
@Path("${tapestry.default-stylesheet}")
+                                         final Asset stylesheetAsset,
 
-                                                
@Path("org/apache/tapestry/field-error-marker.png")
-                                                final Asset fieldErrorIcon,
+                                         
@Path("org/apache/tapestry/field-error-marker.png")
+                                         final Asset fieldErrorIcon,
 
-                                                final ValidationMessagesSource 
validationMessagesSource,
+                                         final ValidationMessagesSource 
validationMessagesSource,
 
-                                                final SymbolSource 
symbolSource,
+                                         final SymbolSource symbolSource,
 
-                                                final AssetSource assetSource)
+                                         final AssetSource assetSource)
     {
         MarkupRendererFilter pageRenderSupport = new MarkupRendererFilter()
         {
@@ -1389,8 +1390,109 @@
 
         configuration.add("PageRenderSupport", pageRenderSupport);
         configuration.add("ZoneSetup", zoneSetup, "after:PageRenderSupport");
-        configuration.add("Heartbeat", heartbeat);
-        configuration.add("DefaultValidationDecorator", 
defaultValidationDecorator);
+        configuration.add("Heartbeat", heartbeat, "after:PageRenderSupport");
+        configuration.add("DefaultValidationDecorator", 
defaultValidationDecorator, "after:Heartbeat");
+    }
+
+
+    /**
+     * Contributes [EMAIL PROTECTED] PartialMarkupRendererFilter}s used when 
rendering a partial Ajax response.  This
+     * is an analog to [EMAIL PROTECTED] 
#contributeMarkupRenderer(org.apache.tapestry.ioc.OrderedConfiguration, 
org.apache.tapestry.Asset, org.apache.tapestry.Asset, ValidationMessagesSource, 
org.apache.tapestry.ioc.services.SymbolSource, AssetSource)} }
+     * and overlaps it to some degree.
+     * <dl>
+     * <dt>   PageRenderSupport     </dt>
+     * <dd>Provides [EMAIL PROTECTED] 
org.apache.tapestry.PageRenderSupport}</dd>
+     * <dt>ZoneSetup</dt> <dd>Provides [EMAIL PROTECTED] ZoneSetup}</dd>
+     * <dt>Heartbeat</dt> <dd>Provides [EMAIL PROTECTED] 
org.apache.tapestry.services.Heartbeat}</dd>
+     * <dt>DefaultValidationDecorator</dt>
+     * <dd>Provides [EMAIL PROTECTED] org.apache.tapestry.ValidationDecorator} 
(as an instance of [EMAIL PROTECTED] 
org.apache.tapestry.internal.DefaultValidationDecorator})</dd>
+     * </dl>
+     */
+    public void 
contributePartialMarkupRenderer(OrderedConfiguration<PartialMarkupRendererFilter>
 configuration,
+
+                                                
@Path("org/apache/tapestry/field-error-marker.png")
+                                                final Asset fieldErrorIcon,
+
+                                                final ValidationMessagesSource 
validationMessagesSource,
+
+                                                final SymbolSource 
symbolSource,
+
+                                                final AssetSource assetSource)
+    {
+        PartialMarkupRendererFilter pageRenderSupport = new 
PartialMarkupRendererFilter()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply, 
PartialMarkupRenderer renderer)
+            {
+                PartialRenderPageRenderSupport support = new 
PartialRenderPageRenderSupport();
+
+                _environment.push(PageRenderSupport.class, support);
+
+                renderer.renderMarkup(writer, reply);
+
+                support.update(reply);
+
+                _environment.pop(PageRenderSupport.class);
+            }
+        };
+
+        PartialMarkupRendererFilter zoneSupport = new 
PartialMarkupRendererFilter()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply, 
PartialMarkupRenderer renderer)
+            {
+                PageRenderSupport pageRenderSupport = 
_environment.peekRequired(PageRenderSupport.class);
+
+                ZoneSetupImpl setup = new ZoneSetupImpl(pageRenderSupport);
+
+                _environment.push(ZoneSetup.class, setup);
+
+                renderer.renderMarkup(writer, reply);
+
+                _environment.pop(ZoneSetup.class);
+
+                setup.writeInitializationScript();
+            }
+        };
+
+        PartialMarkupRendererFilter heartbeat = new 
PartialMarkupRendererFilter()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply, 
PartialMarkupRenderer renderer)
+            {
+                Heartbeat heartbeat = new HeartbeatImpl();
+
+                heartbeat.begin();
+
+                _environment.push(Heartbeat.class, heartbeat);
+
+                renderer.renderMarkup(writer, reply);
+
+                _environment.pop(Heartbeat.class);
+
+                heartbeat.end();
+            }
+        };
+
+        PartialMarkupRendererFilter defaultValidationDecorator = new 
PartialMarkupRendererFilter()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply, 
PartialMarkupRenderer renderer)
+            {
+                Messages messages = 
validationMessagesSource.getValidationMessages(_threadLocale.getLocale());
+
+                ValidationDecorator decorator = new 
DefaultValidationDecorator(_environment, messages, fieldErrorIcon,
+                                                                               
writer);
+
+                _environment.push(ValidationDecorator.class, decorator);
+
+                renderer.renderMarkup(writer, reply);
+
+                _environment.pop(ValidationDecorator.class);
+            }
+        };
+
+
+        configuration.add("PageRenderSupport", pageRenderSupport);
+        configuration.add("ZoneSupport", zoneSupport, 
"after:PageRenderSupport");
+        configuration.add("Heatbeat", heartbeat, "after:PageRenderSupport");
+        configuration.add("DefaultValidationDecorator", 
defaultValidationDecorator, "after:Heartbeat");
     }
 
     /**
@@ -1929,4 +2031,5 @@
 
         configuration.add("Ajax", new AjaxFilter(_request, ajaxHandler));
     }
+
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/Traditional.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/Traditional.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/Traditional.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/Traditional.java
 Thu Dec 20 18:16:03 2007
@@ -18,7 +18,8 @@
 
 
 /**
- * Marker annotation for a service that should be used for traditional 
(non-Ajax) requests.
+ * Marker annotation for a service that should be used for traditional page 
oriented requests, as opposed to Ajax requests
+ * (that send ad-hoc or [EMAIL PROTECTED] PartialMarkupRenderer partial page 
markup} responses.
  *
  * @see org.apache.tapestry.services.ComponentActionRequestHandler
  */

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessorTest.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
 Thu Dec 20 18:16:03 2007
@@ -33,7 +33,7 @@
         String pageName = "Biff";
 
         RequestPageCache cache = mockRequestPageCache();
-        PartialMarkupRenderer renderer = newMock(PartialMarkupRenderer.class);
+        AjaxPartialResponseRenderer renderer = 
newMock(AjaxPartialResponseRenderer.class);
         Page page = mockPage();
         ComponentResources resources = mockComponentResources();
         Component component = mockComponent();
@@ -64,7 +64,7 @@
         String pageName = "Biff";
 
         RequestPageCache cache = mockRequestPageCache();
-        PartialMarkupRenderer renderer = newMock(PartialMarkupRenderer.class);
+        AjaxPartialResponseRenderer renderer = 
newMock(AjaxPartialResponseRenderer.class);
         Page page = mockPage();
         ComponentResources resources = mockComponentResources();
         Component component = mockComponent();

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupportTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupportTest.java?rev=606088&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupportTest.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PartialRenderPageRenderSupportTest.java
 Thu Dec 20 18:16:03 2007
@@ -0,0 +1,70 @@
+// Copyright 2007 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.tapestry.internal.services;
+
+import org.apache.tapestry.Asset;
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.test.TapestryTestCase;
+import org.testng.annotations.Test;
+
+public class PartialRenderPageRenderSupportTest extends TapestryTestCase
+{
+    @Test
+    public void allocate_ids()
+    {
+        PageRenderSupport prs = new PartialRenderPageRenderSupport();
+
+        assertEquals(prs.allocateClientId("foo"), "foo");
+        assertEquals(prs.allocateClientId("foo"), "foo_0");
+    }
+
+    @Test
+    public void add_links_do_nothing()
+    {
+        PageRenderSupport prs = new PartialRenderPageRenderSupport();
+
+        Asset asset = mockAsset();
+
+        replay();
+
+        prs.addScriptLink(asset);
+        prs.addClasspathScriptLink("foo/bar.js");
+        prs.addStylesheetLink(asset, null);
+
+        verify();
+    }
+
+    @Test
+    public void add_script_and_update()
+    {
+        PartialRenderPageRenderSupport prs = new 
PartialRenderPageRenderSupport();
+
+        JSONObject reply = new JSONObject();
+
+
+        prs.update(reply);
+
+
+        assertEquals(reply.toString(), "{}");
+
+
+        prs.addScript("x = %d;", 10);
+
+        prs.update(reply);
+
+        assertEquals(reply.getString("script"), "x = 10;");
+    }
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/services/PipelineBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/services/PipelineBuilderImpl.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/services/PipelineBuilderImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/services/PipelineBuilderImpl.java
 Thu Dec 20 18:16:03 2007
@@ -28,8 +28,7 @@
 
     private final DefaultImplementationBuilder _defaultImplementationBuilder;
 
-    public PipelineBuilderImpl(@Builtin
-    ClassFactory classFactory,
+    public PipelineBuilderImpl(@Builtin ClassFactory classFactory,
 
                                DefaultImplementationBuilder 
defaultImplementationBuilder)
     {
@@ -37,21 +36,19 @@
         _defaultImplementationBuilder = defaultImplementationBuilder;
     }
 
-    public <S, F> S build(Logger log, Class<S> serviceInterface, Class<F> 
filterInterface,
-                          List<F> filters)
+    public <S, F> S build(Logger logger, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters)
     {
         S terminator = 
_defaultImplementationBuilder.createDefaultImplementation(serviceInterface);
 
-        return build(log, serviceInterface, filterInterface, filters, 
terminator);
+        return build(logger, serviceInterface, filterInterface, filters, 
terminator);
     }
 
-    public <S, F> S build(Logger log, Class<S> serviceInterface, Class<F> 
filterInterface,
-                          List<F> filters, S terminator)
+    public <S, F> S build(Logger logger, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters,
+                          S terminator)
     {
         if (filters.isEmpty()) return terminator;
 
-        BridgeBuilder<S, F> bb = new BridgeBuilder<S, F>(log, 
serviceInterface, filterInterface,
-                                                         _classFactory);
+        BridgeBuilder<S, F> bb = new BridgeBuilder<S, F>(logger, 
serviceInterface, filterInterface, _classFactory);
 
         // The first bridge will point to the terminator.
         // Like service decorators, we work deepest (last)

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/services/PipelineBuilder.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/services/PipelineBuilder.java?rev=606088&r1=606087&r2=606088&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/services/PipelineBuilder.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/services/PipelineBuilder.java
 Thu Dec 20 18:16:03 2007
@@ -1,17 +1,17 @@
-// Copyright 2006, 2007 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.
-
+// Copyright 2006, 2007 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.tapestry.ioc.services;
 
 import org.slf4j.Logger;
@@ -44,14 +44,14 @@
      *
      * @param <S>              service type
      * @param <F>              filter type
-     * @param log              logs any warnings generated when constructing 
the pipeline
+     * @param logger           logs any warnings generated when constructing 
the pipeline
      * @param serviceInterface
      * @param filterInterface
      * @param filters          sorted list of filters
      * @param terminator       end of the pipeline
      * @return an object that encapsulates the filters and the terminator
      */
-    <S, F> S build(Logger log, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters, S terminator);
+    <S, F> S build(Logger logger, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters, S terminator);
 
     /**
      * Creates a pipeline from just the filters. A
@@ -59,12 +59,12 @@
      *
      * @param <S>
      * @param <F>
-     * @param log
+     * @param logger
      * @param serviceInterface
      * @param filterInterface
      * @param filters
      * @return
      */
-    <S, F> S build(Logger log, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters);
+    <S, F> S build(Logger logger, Class<S> serviceInterface, Class<F> 
filterInterface, List<F> filters);
 
 }


Reply via email to