001 // Copyright 2005 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry.portlet;
016
017 import org.apache.tapestry.IMarkupWriter;
018 import org.apache.tapestry.IPage;
019 import org.apache.tapestry.IRequestCycle;
020 import org.apache.tapestry.Tapestry;
021 import org.apache.tapestry.asset.AssetFactory;
022 import org.apache.tapestry.markup.MarkupWriterSource;
023 import org.apache.tapestry.services.ResponseBuilder;
024 import org.apache.tapestry.services.impl.DefaultResponseBuilder;
025 import org.apache.tapestry.util.ContentType;
026 import org.apache.tapestry.web.WebResponse;
027
028 import java.io.IOException;
029 import java.io.PrintWriter;
030 import java.util.Date;
031
032 /**
033 * The guts of rendering a page as a portlet response; used by
034 * {@link org.apache.tapestry.portlet.RenderService} and
035 * {@link org.apache.tapestry.portlet.PortletHomeService}.
036 *
037 * @author Howard M. Lewis Ship
038 * @since 4.0
039 */
040 public class PortletRendererImpl implements PortletRenderer
041 {
042
043 private WebResponse _response;
044
045 private MarkupWriterSource _markupWriterSource;
046
047 private AssetFactory _assetFactory;
048
049 private String _applicationId;
050
051 public void renderPage(IRequestCycle cycle, String pageName)
052 throws IOException
053 {
054 cycle.activate(pageName);
055
056 IPage page = cycle.getPage();
057
058 ContentType contentType = page.getResponseContentType();
059 PrintWriter printWriter = _response.getPrintWriter(contentType);
060 IMarkupWriter writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
061 String namespace = _response.getNamespace();
062
063 IMarkupWriter nested = writer.getNestedWriter();
064
065 ResponseBuilder builder = new DefaultResponseBuilder(cycle, nested, _assetFactory, namespace, false);
066
067 builder.renderResponse(cycle);
068
069 String id = "Tapestry Portlet " + _applicationId + " " + namespace;
070
071 writer.comment("BEGIN " + id);
072 writer.comment("Page: " + page.getPageName());
073 writer.comment("Generated: " + new Date());
074 writer.comment("Framework version: " + Tapestry.VERSION);
075
076 builder.writeBodyScript(writer, cycle);
077
078 nested.close();
079
080 builder.writeInitializationScript(writer);
081
082 writer.comment("END " + id);
083
084 writer.close();
085
086 // TODO: Trap errors and do some error reporting here?
087 }
088
089 public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
090 {
091 _markupWriterSource = markupWriterSource;
092 }
093
094 public void setResponse(WebResponse response)
095 {
096 _response = response;
097 }
098
099 public void setAssetFactory(AssetFactory assetFactory)
100 {
101 _assetFactory = assetFactory;
102 }
103
104 public void setApplicationId(String applicationId)
105 {
106 _applicationId = applicationId;
107 }
108 }