/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.portlet.container.services; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.Event; import javax.portlet.EventRequest; import javax.portlet.EventResponse; import javax.portlet.PortletContext; import javax.portlet.PortletPreferences; import javax.portlet.PortletSession; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.pluto.container.PortletActionResponseContext; import org.apache.pluto.container.PortletEnvironmentService; import org.apache.pluto.container.PortletEventResponseContext; import org.apache.pluto.container.PortletMimeResponseContext; import org.apache.pluto.container.PortletRenderResponseContext; import org.apache.pluto.container.PortletRequestContext; import org.apache.pluto.container.PortletResourceRequestContext; import org.apache.pluto.container.PortletResourceResponseContext; import org.apache.pluto.container.PortletWindow; import org.apache.pluto.container.impl.ActionRequestImpl; import org.apache.pluto.container.impl.ActionResponseImpl; import org.apache.pluto.container.impl.EventRequestImpl; import org.apache.pluto.container.impl.EventResponseImpl; import org.apache.pluto.container.impl.RenderRequestImpl; import org.apache.pluto.container.impl.RenderResponseImpl; import org.apache.pluto.container.impl.ResourceRequestImpl; import org.apache.pluto.container.impl.ResourceResponseImpl; import org.apereo.portal.portlet.om.IPortletEntity; import org.apereo.portal.portlet.om.IPortletEntityId; import org.apereo.portal.portlet.om.IPortletWindow; import org.apereo.portal.portlet.registry.IPortletWindowRegistry; import org.apereo.portal.portlet.session.ScopingPortletSessionImpl; import org.apereo.portal.url.IPortalRequestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * Provides custom portlet session instance to use a different scoping attribute value * */ @Service("portletEnvironmentService") public class PortletEnvironmentServiceImpl implements PortletEnvironmentService { private PortletPreferencesFactory portletPreferencesFactory; private IPortletWindowRegistry portletWindowRegistry; private IPortalRequestUtils portalRequestUtils; @Autowired public void setPortletPreferencesFactory(PortletPreferencesFactory portletPreferencesFactory) { this.portletPreferencesFactory = portletPreferencesFactory; } @Autowired public void setPortletWindowRegistry(IPortletWindowRegistry portletWindowRegistry) { this.portletWindowRegistry = portletWindowRegistry; } @Autowired public void setPortalRequestUtils(IPortalRequestUtils portalRequestUtils) { this.portalRequestUtils = portalRequestUtils; } @Override public PortletSession createPortletSession( PortletContext portletContext, PortletWindow portletWindow, HttpSession session) { // TODO pluto 1.1 PortletEnvironmentService#createPortletSession passed in the request; now use IPortalRequestUtils#getCurrentPortalRequest()? final HttpServletRequest request = portalRequestUtils.getCurrentPortalRequest(); final IPortletWindow internalPortletWindow = this.portletWindowRegistry.convertPortletWindow(request, portletWindow); final IPortletEntity portletEntity = internalPortletWindow.getPortletEntity(); final IPortletEntityId portletEntityId = portletEntity.getPortletEntityId(); return new ScopingPortletSessionImpl( portletEntityId, portletContext, portletWindow, session); } @Override public ActionRequest createActionRequest( PortletRequestContext requestContext, PortletActionResponseContext responseContext) { return new ExtendedActionRequestImpl( portletPreferencesFactory, requestContext, responseContext); } @Override public EventRequest createEventRequest( PortletRequestContext requestContext, PortletEventResponseContext responseContext, Event event) { return new ExtendedEventRequestImpl( portletPreferencesFactory, requestContext, responseContext, event); } @Override public RenderRequest createRenderRequest( PortletRequestContext requestContext, PortletRenderResponseContext responseContext) { return new ExtendedRenderRequestImpl( portletPreferencesFactory, requestContext, responseContext); } @Override public ResourceRequest createResourceRequest( PortletResourceRequestContext requestContext, PortletResourceResponseContext responseContext) { return new ExtendedResourceRequestImpl( portletPreferencesFactory, requestContext, responseContext); } @Override public ActionResponse createActionResponse(PortletActionResponseContext responseContext) { return new ActionResponseImpl(responseContext); } @Override public EventResponse createEventResponse(PortletEventResponseContext responseContext) { return new EventResponseImpl(responseContext); } @Override public RenderResponse createRenderResponse(PortletRenderResponseContext responseContext) { return new ExtendedRenderResponseImpl(responseContext); } @Override public ResourceResponse createResourceResponse( PortletResourceResponseContext responseContext, String requestCacheLevel) { return new ExtendedResourceResponseImpl(responseContext, requestCacheLevel); } private static final class ExtendedActionRequestImpl extends ActionRequestImpl { private final PortletPreferencesFactory portletPreferencesFactory; private PortletPreferences portletPreferences; private ExtendedActionRequestImpl( PortletPreferencesFactory portletPreferencesFactory, PortletRequestContext requestContext, PortletActionResponseContext responseContext) { super(requestContext, responseContext); this.portletPreferencesFactory = portletPreferencesFactory; } @Override public PortletPreferences getPreferences() { if (this.portletPreferences == null) { final PortletRequestContext requestContext = this.getRequestContext(); this.portletPreferences = portletPreferencesFactory.createPortletPreferences(requestContext, false); } return this.portletPreferences; } } private static final class ExtendedEventRequestImpl extends EventRequestImpl { private final PortletPreferencesFactory portletPreferencesFactory; private PortletPreferences portletPreferences; private ExtendedEventRequestImpl( PortletPreferencesFactory portletPreferencesFactory, PortletRequestContext requestContext, PortletEventResponseContext responseContext, Event event) { super(requestContext, responseContext, event); this.portletPreferencesFactory = portletPreferencesFactory; } @Override public PortletPreferences getPreferences() { if (this.portletPreferences == null) { final PortletRequestContext requestContext = this.getRequestContext(); this.portletPreferences = portletPreferencesFactory.createPortletPreferences(requestContext, false); } return this.portletPreferences; } } private static final class ExtendedRenderRequestImpl extends RenderRequestImpl { private final PortletPreferencesFactory portletPreferencesFactory; private PortletPreferences portletPreferences; private ExtendedRenderRequestImpl( PortletPreferencesFactory portletPreferencesFactory, PortletRequestContext requestContext, PortletRenderResponseContext responseContext) { super(requestContext, responseContext); this.portletPreferencesFactory = portletPreferencesFactory; } @Override public PortletPreferences getPreferences() { if (this.portletPreferences == null) { final PortletRequestContext requestContext = this.getRequestContext(); this.portletPreferences = portletPreferencesFactory.createPortletPreferences(requestContext, true); } return this.portletPreferences; } } private static final class ExtendedResourceRequestImpl extends ResourceRequestImpl { private final PortletPreferencesFactory portletPreferencesFactory; private PortletPreferences portletPreferences; private ExtendedResourceRequestImpl( PortletPreferencesFactory portletPreferencesFactory, PortletResourceRequestContext requestContext, PortletResourceResponseContext responseContext) { super(requestContext, responseContext); this.portletPreferencesFactory = portletPreferencesFactory; } @Override public PortletPreferences getPreferences() { if (this.portletPreferences == null) { final PortletRequestContext requestContext = this.getRequestContext(); this.portletPreferences = portletPreferencesFactory.createPortletPreferences(requestContext, false); } return this.portletPreferences; } } private static final class ExtendedRenderResponseImpl extends RenderResponseImpl { private ExtendedRenderResponseImpl(PortletRenderResponseContext responseContext) { super(responseContext); } @Override public String getContentType() { return ((PortletMimeResponseContext) this.getResponseContext()).getContentType(); } } private static final class ExtendedResourceResponseImpl extends ResourceResponseImpl { private ExtendedResourceResponseImpl( PortletResourceResponseContext responseContext, String requestCacheLevel) { super(responseContext, requestCacheLevel); } @Override public String getContentType() { return ((PortletMimeResponseContext) this.getResponseContext()).getContentType(); } } }