001/* 002 * Copyright 2002-2012 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * https://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.web.portlet.mvc; 018 019import javax.portlet.ActionRequest; 020import javax.portlet.ActionResponse; 021import javax.portlet.EventRequest; 022import javax.portlet.EventResponse; 023import javax.portlet.PortletContext; 024import javax.portlet.RenderRequest; 025import javax.portlet.RenderResponse; 026import javax.portlet.ResourceRequest; 027import javax.portlet.ResourceResponse; 028 029import org.springframework.web.portlet.HandlerAdapter; 030import org.springframework.web.portlet.ModelAndView; 031import org.springframework.web.portlet.context.PortletContextAware; 032import org.springframework.web.portlet.util.PortletUtils; 033 034/** 035 * Adapter to use the Controller workflow interface with the generic DispatcherPortlet. 036 * 037 * <p>This is an SPI class, not used directly by application code. 038 * 039 * @author Juergen Hoeller 040 * @author John A. Lewis 041 * @since 2.0 042 * @see org.springframework.web.portlet.DispatcherPortlet 043 * @see Controller 044 * @see ResourceAwareController 045 * @see EventAwareController 046 */ 047public class SimpleControllerHandlerAdapter implements HandlerAdapter, PortletContextAware { 048 049 private PortletContext portletContext; 050 051 052 @Override 053 public void setPortletContext(PortletContext portletContext) { 054 this.portletContext = portletContext; 055 } 056 057 058 @Override 059 public boolean supports(Object handler) { 060 return (handler instanceof Controller); 061 } 062 063 @Override 064 public void handleAction(ActionRequest request, ActionResponse response, Object handler) 065 throws Exception { 066 067 ((Controller) handler).handleActionRequest(request, response); 068 } 069 070 @Override 071 public ModelAndView handleRender(RenderRequest request, RenderResponse response, Object handler) 072 throws Exception { 073 074 return ((Controller) handler).handleRenderRequest(request, response); 075 } 076 077 @Override 078 public ModelAndView handleResource(ResourceRequest request, ResourceResponse response, Object handler) 079 throws Exception { 080 081 if (handler instanceof ResourceAwareController) { 082 return ((ResourceAwareController) handler).handleResourceRequest(request, response); 083 } 084 else { 085 // equivalent to Portlet 2.0 GenericPortlet 086 PortletUtils.serveResource(request, response, this.portletContext); 087 return null; 088 } 089 } 090 091 @Override 092 public void handleEvent(EventRequest request, EventResponse response, Object handler) throws Exception { 093 if (handler instanceof EventAwareController) { 094 ((EventAwareController) handler).handleEventRequest(request, response); 095 } 096 else { 097 // if no event processing method was found just keep render params 098 response.setRenderParameters(request); 099 } 100 } 101 102}