/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/portal/trunk/portal-render-impl/impl/src/java/org/sakaiproject/portal/render/portlet/services/SakaiPortalCallbackService.java $ * $Id: SakaiPortalCallbackService.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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 * * http://www.opensource.org/licenses/ECL-2.0 * * 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.sakaiproject.portal.render.portlet.services; import java.util.Map; import javax.portlet.PortletMode; import javax.portlet.WindowState; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.pluto.PortletWindow; import org.apache.pluto.spi.PortalCallbackService; import org.apache.pluto.spi.PortletURLProvider; import org.apache.pluto.spi.ResourceURLProvider; import org.sakaiproject.portal.render.portlet.services.state.EnhancedPortletStateEncoder; import org.sakaiproject.portal.render.portlet.services.state.PortletState; import org.sakaiproject.portal.render.portlet.services.state.PortletStateAccess; import org.sakaiproject.portal.render.portlet.services.state.PortletStateEncoder; import org.sakaiproject.component.cover.ServerConfigurationService; /** * @author csev * @since Sakai 2.4 * @version $Rev: 105079 $ */ public class SakaiPortalCallbackService implements PortalCallbackService { private static final Log LOG = LogFactory.getLog(SakaiPortalCallbackService.class); public static final String PORTLET_STATE_QUERY_PARAM = "org.sakaiproject.portal.pluto.PORTLET_STATE"; private PortletStateEncoder portletStateEncoder = new EnhancedPortletStateEncoder(); public PortletStateEncoder getPortletStateEncoder() { return portletStateEncoder; } public void setPortletStateEncoder(PortletStateEncoder portletStateEncoder) { this.portletStateEncoder = portletStateEncoder; } public void setTitle(HttpServletRequest request, PortletWindow window, String title) { LOG.debug("Setting portlet title for window '" + window.getId() + "' to '" + title + "'."); PortletStateAccess.getPortletState(request, window.getId().getStringId()) .setTitle(title); } public PortletURLProvider getPortletURLProvider(HttpServletRequest request, PortletWindow window) { PortletState currentState = PortletStateAccess.getPortletState(request, window .getId().getStringId()); PortletState state = null; if (currentState != null) { state = new PortletState(currentState); } else { state = new PortletState(window.getId().getStringId()); } String baseUrl = request.getRequestURI(); return new SakaiPortletURLProvider(baseUrl, state); } public ResourceURLProvider getResourceURLProvider(HttpServletRequest request, PortletWindow window) { return new SakaiResourceURLProvider(""); } public Map getRequestProperties(HttpServletRequest request, PortletWindow window) { PortletState currentState = PortletStateAccess.getPortletState(request, window .getId().getStringId()); return currentState.getRequestProperties(); } public void setResponseProperty(HttpServletRequest request, PortletWindow window, String key, String value) { PortletState currentState = PortletStateAccess.getPortletState(request, window .getId().getStringId()); currentState.getResponseProperties().put(key, value); } public void addResponseProperty(HttpServletRequest request, PortletWindow window, String key, String value) { PortletState currentState = PortletStateAccess.getPortletState(request, window .getId().getStringId()); currentState.getResponseProperties().put(key, value); } /** * PorltetURLProvider implementation. <p/> Implementation encodes the the * url's state utilizing the encapsulating services portletStateEncoder. * * @see SakaiPortalCallbackService#getPortletStateEncoder() * @see SakaiPortalCallbackService#setPortletStateEncoder(PortletStateEncoder) * @see PortletState */ class SakaiPortletURLProvider implements PortletURLProvider { private String baseUrl; private PortletState portletState; public SakaiPortletURLProvider(String baseUrl, PortletState portletState) { this.baseUrl = baseUrl; this.portletState = portletState; } public void setPortletMode(PortletMode portletMode) { portletState.setPortletMode(portletMode); } public void setWindowState(WindowState windowState) { portletState.setWindowState(windowState); } public void setAction(boolean b) { portletState.setAction(b); } public void setSecure() { portletState.setSecure(true); } public void clearParameters() { portletState.clearParameters(); } public void setParameters(Map map) { portletState.setParameters(map); } @Override public String toString() { return new StringBuilder(baseUrl).append("?").append( PORTLET_STATE_QUERY_PARAM).append("=").append( portletStateEncoder.encode(portletState)).toString(); } public boolean isSecureSupported() { String portalUrl = ServerConfigurationService.getPortalUrl(); if ( portalUrl == null ) return false; if ( portalUrl.startsWith("https:") ) return true; return false; } } /** * Resources URL Provider implementation used by this callback service. */ public class SakaiResourceURLProvider implements ResourceURLProvider { private String base; private String path; private String absolute; public SakaiResourceURLProvider(String serverUri) { this.base = serverUri; } public void setAbsoluteURL(String string) { this.absolute = string; } public void setFullPath(String string) { this.path = string; } @Override public String toString() { if (absolute != null) { return this.absolute; } return base + path; } } }