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 015package org.apache.tapestry.portlet; 016 017import java.io.IOException; 018import java.util.HashMap; 019import java.util.Map; 020 021import org.apache.tapestry.IRequestCycle; 022import org.apache.tapestry.Tapestry; 023import org.apache.tapestry.engine.EngineMessages; 024import org.apache.tapestry.engine.IEngineService; 025import org.apache.tapestry.engine.ILink; 026import org.apache.tapestry.services.LinkFactory; 027import org.apache.tapestry.services.ResponseRenderer; 028 029/** 030 * Replacement for the standard home service, used by Portlets. This exists to handle the special 031 * case where a Portlet render request arrives when there is not a Portlet action request prior ... 032 * this can happen when a Portlet is first added to a Portal page. 033 * 034 * @author Howard M. Lewis Ship 035 * @since 4.0 036 */ 037public class PortletHomeService implements IEngineService 038{ 039 private PortletRenderer _portletRenderer; 040 041 private PortletRequestGlobals _requestGlobals; 042 043 private ResponseRenderer _responseRenderer; 044 045 private LinkFactory _linkFactory; 046 047 private PortletPageResolver _pageResolver; 048 049 public String getName() 050 { 051 return Tapestry.HOME_SERVICE; 052 } 053 054 public ILink getLink(boolean post, Object parameter) 055 { 056 if (parameter != null) 057 throw new IllegalArgumentException(EngineMessages.serviceNoParameter(this)); 058 059 Map parameters = new HashMap(); 060 061 return _linkFactory.constructLink(this, post, parameters, true); 062 } 063 064 public void setLinkFactory(LinkFactory linkFactory) 065 { 066 _linkFactory = linkFactory; 067 } 068 069 public void setResponseRenderer(ResponseRenderer responseRenderer) 070 { 071 _responseRenderer = responseRenderer; 072 } 073 074 public void service(IRequestCycle cycle) throws IOException 075 { 076 String pageName = _pageResolver.getPageNameForRequest(cycle); 077 078 if (_requestGlobals.isRenderRequest()) 079 { 080 _portletRenderer.renderPage(cycle, pageName); 081 return; 082 } 083 084 cycle.activate(pageName); 085 086 _responseRenderer.renderResponse(cycle); 087 } 088 089 public void setPortletRenderer(PortletRenderer portletRenderer) 090 { 091 _portletRenderer = portletRenderer; 092 } 093 094 public void setRequestGlobals(PortletRequestGlobals requestGlobals) 095 { 096 _requestGlobals = requestGlobals; 097 } 098 099 public void setPageResolver(PortletPageResolver pageResolver) 100 { 101 _pageResolver = pageResolver; 102 } 103}