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.io.PrintWriter; 019 020import javax.portlet.PortletURL; 021 022import org.apache.tapestry.IRequestCycle; 023import org.apache.tapestry.engine.IEngineService; 024import org.apache.tapestry.engine.ILink; 025import org.apache.tapestry.util.ContentType; 026import org.apache.tapestry.web.WebRequest; 027import org.apache.tapestry.web.WebResponse; 028import org.apache.tapestry.web.WebSession; 029 030/** 031 * @author Howard M. Lewis Ship 032 * @since 4.0 033 * @see org.apache.tapestry.portlet.PortletConstants#PORTLET_EXCEPTION_MARKUP_ATTRIBUTE 034 */ 035public class ExceptionService implements IEngineService 036{ 037 private WebRequest _request; 038 039 private WebResponse _response; 040 041 private PortletRequestGlobals _globals; 042 043 public ILink getLink(boolean post, Object parameter) 044 { 045 throw new UnsupportedOperationException(PortletMessages.unsupportedMethod("getLink")); 046 } 047 048 public void service(IRequestCycle cycle) throws IOException 049 { 050 WebSession session = _request.getSession(true); 051 String markup = (String) session 052 .getAttribute(PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE); 053 054 PrintWriter writer = _response.getPrintWriter(new ContentType("text/html")); 055 056 PortletURL url = _globals.getRenderResponse().createActionURL(); 057 058 writer.println("<span class=\"portlet-msg-error\">An exception has occured.</span>"); 059 writer.println("<br/>"); 060 writer.println("<a href=\"" + url.toString() + "\">Click here to continue</a>"); 061 writer.print("<br/><hr/>"); 062 writer.println(); 063 064 writer.print(markup); 065 } 066 067 public String getName() 068 { 069 return PortletConstants.EXCEPTION_SERVICE; 070 } 071 072 public void setRequest(WebRequest request) 073 { 074 _request = request; 075 } 076 077 public void setResponse(WebResponse response) 078 { 079 _response = response; 080 } 081 082 public void setGlobals(PortletRequestGlobals globals) 083 { 084 _globals = globals; 085 } 086}