Save This Page
Home » tapestry-src-5.0.19 » org.apache.tapestry5.internal.services » [javadoc | source]
    1   // Copyright 2006, 2007, 2008 The Apache Software Foundation
    2   //
    3   // Licensed under the Apache License, Version 2.0 (the "License");
    4   // you may not use this file except in compliance with the License.
    5   // You may obtain a copy of the License at
    6   //
    7   //     http://www.apache.org/licenses/LICENSE-2.0
    8   //
    9   // Unless required by applicable law or agreed to in writing, software
   10   // distributed under the License is distributed on an "AS IS" BASIS,
   11   // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   12   // See the License for the specific language governing permissions and
   13   // limitations under the License.
   14   
   15   package org.apache.tapestry5.internal.services;
   16   
   17   import org.apache.tapestry5.ContentType;
   18   import org.apache.tapestry5.MarkupWriter;
   19   import org.apache.tapestry5.internal.structure.Page;
   20   import org.apache.tapestry5.ioc.internal.util.Defense;
   21   import org.apache.tapestry5.services.MarkupWriterFactory;
   22   import org.apache.tapestry5.services.Response;
   23   import org.slf4j.Logger;
   24   
   25   import java.io.IOException;
   26   import java.io.PrintWriter;
   27   
   28   public class PageResponseRendererImpl implements PageResponseRenderer
   29   {
   30       private final PageMarkupRenderer markupRenderer;
   31   
   32       private final MarkupWriterFactory markupWriterFactory;
   33   
   34       private final PageContentTypeAnalyzer pageContentTypeAnalyzer;
   35   
   36       private final Response response;
   37   
   38       private final Logger logger;
   39   
   40       public PageResponseRendererImpl(MarkupWriterFactory markupWriterFactory, PageMarkupRenderer markupRenderer,
   41                                       PageContentTypeAnalyzer pageContentTypeAnalyzer, Response response, Logger logger)
   42       {
   43           this.markupWriterFactory = markupWriterFactory;
   44           this.markupRenderer = markupRenderer;
   45           this.pageContentTypeAnalyzer = pageContentTypeAnalyzer;
   46           this.response = response;
   47           this.logger = logger;
   48       }
   49   
   50       public void renderPageResponse(Page page) throws IOException
   51       {
   52           Defense.notNull(page, "page");
   53   
   54           ContentType contentType = pageContentTypeAnalyzer.findContentType(page);
   55   
   56           // For the moment, the content type is all that's used determine the model for the markup writer.
   57           // It's something of a can of worms.
   58   
   59           MarkupWriter writer = markupWriterFactory.newMarkupWriter(contentType);
   60   
   61           markupRenderer.renderPageMarkup(page, writer);
   62   
   63           PrintWriter pw = response.getPrintWriter(contentType.toString());
   64   
   65           long startNanos = System.nanoTime();
   66   
   67           writer.toMarkup(pw);
   68   
   69           long endNanos = System.nanoTime();
   70   
   71           if (logger.isDebugEnabled())
   72           {
   73               long elapsedNanos = endNanos - startNanos;
   74               double elapsedSeconds = ((float) elapsedNanos) / 1000000000F;
   75   
   76               logger.debug(String.format("Response DOM streamed to markup in %.3f seconds",
   77                                          elapsedSeconds));
   78           }
   79   
   80           pw.flush();
   81       }
   82   }

Save This Page
Home » tapestry-src-5.0.19 » org.apache.tapestry5.internal.services » [javadoc | source]