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 }