Author: cbrisson
Date: Thu Jun 13 14:59:49 2019
New Revision: 1861264

URL: http://svn.apache.org/viewvc?rev=1861264&view=rev
Log:
[view-tools] Allow subclasses to customize the writer used for merging the 
template ; add missing javadoc headers

Modified:
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java?rev=1861264&r1=1861263&r2=1861264&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java
 Thu Jun 13 14:59:49 2019
@@ -236,7 +236,7 @@ public class VelocityViewServlet extends
             Template template = handleRequest(request, response, context);
 
             // merge the template and context into the response
-            mergeTemplate(template, context, response);
+            mergeTemplate(template, context, request, response);
         } catch (IOException e) {
             error(request, response, e);
             throw e;
@@ -305,12 +305,23 @@ public class VelocityViewServlet extends
         return getTemplate(request, response);
     }
 
+    /**
+     * Get a configured Velocity context for the current request and response
+     * @param request client request
+     * @param response client response
+     * @return configured context
+     */
     protected Context createContext(HttpServletRequest request,
                                     HttpServletResponse response)
     {
         return getVelocityView().createContext(request, response);
     }
 
+    /**
+     * Standard extension point to populate the context with additional entries
+     * @param context target context
+     * @param request client request
+     */
     protected void fillContext(Context context, HttpServletRequest request)
     {
         // this implementation does nothing
@@ -338,40 +349,88 @@ public class VelocityViewServlet extends
         response.setContentType(getVelocityView().getDefaultContentType());
     }
 
+    /**
+     * Get a template by client request and response
+     * @param request client request
+     * @param response client response
+     * @return found template
+     */
     protected Template getTemplate(HttpServletRequest request,
                                    HttpServletResponse response)
     {
         return getVelocityView().getTemplate(request);
     }
 
+    /**
+     * Get a template by name
+     * @param name template name
+     * @return found template
+     */
     protected Template getTemplate(String name)
     {
         return getVelocityView().getTemplate(name);
     }
 
-    protected void mergeTemplate(Template template, Context context,
-                                 HttpServletResponse response)
+    /**
+     * Merge template
+     * @param template input template
+     * @param context Velocity context
+     * @param request client request
+     * @param response client response
+     * @throws IOException
+     */
+    protected void mergeTemplate(Template template, Context context, 
HttpServletRequest request, HttpServletResponse response)
         throws IOException
     {
+        Writer writer = getOutputWriter(request, response);
+        getVelocityView().merge(template, context, writer);
+        Boolean buffered = request == null ? Boolean.FALSE : 
(Boolean)request.getAttribute(BUFFER_OUTPUT_PARAM);
+        if (buffered != null && buffered)
+        {
+            response.getWriter().write(writer.toString());            
+        }
+    }
+
+    /**
+     * Get the output stream writer to use. If the writer is to be written 
afterwards to the response writer
+     * (as when <code>org.apache.velocity.tools.bufferOutput</code> is true), 
this method must set the
+     * <code>org.apache.velocity.tools.bufferOutput</code> request attribute 
to true.
+     * @param request
+     * @param response
+     * @return
+     * @throws IOException
+     */
+    protected Writer getOutputWriter(HttpServletRequest request, 
HttpServletResponse response)
+            throws IOException
+    {
         Writer writer;
         if (this.bufferOutput)
         {
             writer = new StringWriter();
+            request.setAttribute(BUFFER_OUTPUT_PARAM, true);
         }
         else
         {
             writer = response.getWriter();
         }
-
-        getVelocityView().merge(template, context, writer);
-
-        if (this.bufferOutput)
-        {
-            response.getWriter().write(writer.toString());
-        }
+        return writer;
     }
 
-
+    /**
+     * Merge template
+     * @param template target template
+     * @param context client request
+     * @param response client response
+     * @throws IOException
+     * @deprecated see {{@link #mergeTemplate(Template, Context, 
HttpServletRequest, HttpServletResponse)}}
+     */
+    @Deprecated
+    protected void mergeTemplate(Template template, Context context, 
HttpServletResponse response)
+        throws IOException
+    {
+        mergeTemplate(template, context, null, response);
+    }
+    
     /**
      * Invoked when there is an error thrown in any part of doRequest() 
processing.
      * <br><br>


Reply via email to