/* * Copyright 2000-2001,2004 The Apache Software Foundation. * * Licensed 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 * * http://www.apache.org/licenses/LICENSE-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.apache.jetspeed.services.rundata; // Java classes import java.util.Stack; // Jetspeed classes import org.apache.jetspeed.om.security.JetspeedUser; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.jetspeed.portal.Portlet; import org.apache.jetspeed.om.profile.Profile; import org.apache.jetspeed.capability.CapabilityMap; import org.apache.jetspeed.capability.CapabilityMapFactory; import org.apache.jetspeed.services.statemanager.SessionState; import org.apache.jetspeed.services.statemanager.StateManagerService; import org.apache.turbine.services.rundata.DefaultTurbineRunData; import org.apache.turbine.services.TurbineServices; import org.apache.turbine.util.security.AccessControlList; /** * This interface extends the RunData interface with methods * specific to the needs of a Jetspeed like portal implementation. * * <note>Several of these properties may be put in the base RunData * interface in future releases of Turbine</note> * * @author <a href="mailto:raphael@apache.org">Rapha謖 Luta</a> * @author <a href="mailto:sgala@apache.org">Santiago Gala</a> * @author <a href="mailto:paulsp@apache.org">Paul Spencer</a> * @version $Id: DefaultJetspeedRunData.java,v 1.20 2004/02/23 03:36:10 jford Exp $ */ public class DefaultJetspeedRunData extends DefaultTurbineRunData implements JetspeedRunData { /** * Static initialization of the logger for this class */ private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(DefaultJetspeedRunData.class.getName()); private Profile profile = null; private CapabilityMap map = null; private String peid = null; private String pid = null; private int mode = NORMAL; private String template = null; /** * Returns the portlet id referenced in this request * * @return the portlet id referenced or null */ public String getPortlet() { return pid; } /** * Sets the portlet id referenced for this request * * @param id the portlet id referenced in this request */ public void setPortlet(String id) { this.pid = id; } /** * Returns the portlet id which should be customized for this request * * @return the portlet id being customized or null */ public Portlet getCustomized() { // customization state info is in the page's session state SessionState customizationState = getPageSessionState(); Stack stack = (Stack)customizationState.getAttribute("customize-stack"); Portlet p = null; if ((stack!=null)&&(!stack.empty())) { p = (Portlet)stack.peek(); } /** * Save the title of this currently selected portlet * -------------------------------------------------------------------------- * last modified: 11/06/01 * Andreas Kempf, Siemens ICM S CP PE, Munich */ if ((p != null) && (stack.size() > 1)) customizationState.setAttribute ("customize-paneName", (String)p.getTitle()); else customizationState.setAttribute ("customize-paneName", "*"); return (Portlet)p; } /** * Sets the portlet id to customize * * @param id the portlet id to customize or null; */ public void setCustomized(Portlet p) { // customization state info is in the page's session state SessionState customizationState = getPageSessionState(); Stack stack = (Stack)customizationState.getAttribute("customize-stack"); if (stack == null) { stack = new Stack(); customizationState.setAttribute("customize-stack", stack); } if (p==null) { if (!stack.empty()) stack.pop(); customizationState.setAttribute ("customize-paneName", "*"); } else { if (stack.size () > 0) { Portlet last = (Portlet)stack.peek(); if ((last!=null) && (p.getName().equals(last.getName())) && (p.getTitle().equals(last.getTitle()))) { //System.out.println ("Portlet already used!!!"); } else stack.push(p); } else stack.push(p); /** * Save the title of this currently selected portlet * -------------------------------------------------------------------------- * last modified: 11/06/01 * Andreas Kempf, Siemens ICM S CP PE, Munich */ customizationState.setAttribute ("customize-paneName", (String)p.getTitle()); } } /** * Get the psml profile being customized. * @return the Profile being customized. */ public Profile getCustomizedProfile() { // customization state info is in the page's session state SessionState customizationState = getPageSessionState(); return (Profile) customizationState.getAttribute("customize-profile"); } // getCustomizedProfile /** * Set the psml profile being customized. * @param profile The Profile being customized. */ public void setCustomizedProfile(Profile profile) { // customization state info is in the page's session state SessionState customizationState = getPageSessionState(); customizationState.setAttribute("customize-profile", profile); } // setCustomizedProfile /** * Clean up from customization */ public void cleanupFromCustomization() { // get the customization state for this page SessionState customizationState = getPageSessionState(); customizationState.removeAttribute("customize-stack"); customizationState.removeAttribute("customize-paneName"); customizationState.removeAttribute("customize-profile"); //customizationState.removeAttribute("customize-type"); customizationState.removeAttribute("customize-columns"); customizationState.removeAttribute("customize-mode"); customizationState.removeAttribute("customize-parameters"); setMode("default"); } // cleanupFromCustomization /** * Returns the portlet id which should be maximized for this request * * @return the portlet id being maximized or null */ public int getMode() { return this.mode; } /** * Sets the portlet id to maximize * * @param id the portlet id to maximize or null; */ public void setMode(int mode) { this.mode=mode; } /** * Sets the portlet id to maximize * * @param id the portlet id to maximize or null; */ public void setMode(String mode) { if ("customize".equals(mode)) { setMode(CUSTOMIZE); } else if ("maximize".equals(mode)) { setMode(MAXIMIZE); } else { setMode(NORMAL); setCustomized(null); } } /** * Returns the template path as requested from the parameters */ public String getRequestedTemplate() { return this.template; } /** * Sets the template path as requested from the parameters */ public void setRequestedTemplate(String id) { this.template=id; } /** * Returns the capability map for the user agent issuing this request * * @return a capability map objet */ public CapabilityMap getCapability() { if (map == null) { map = CapabilityMapFactory.getCapabilityMap(this); } return map; } /** * Sets the user portal profile for the current request * * @param profile a profile implementation for the current request */ public void setProfile(Profile profile) { this.profile = profile; } /** * Gets the user portal profile for the current request * * @return a profile implementation for the current request */ public Profile getProfile() { return this.profile; } /** Clears the state of this object for recycling... */ public void dispose() { mode=0; map = null; peid = null; pid = null; profile = null; template = null; super.dispose(); } /** * Returns the portlet id (PEID) referenced in this request * * @return the portlet id (PEID) referenced or null */ public String getJs_peid() { return peid; } /** * Sets the portlet id (PEID) referenced for this request * * @param id the portlet id (PEID) referenced in this request */ public void setJs_peid(String peid) { this.peid = peid; } /** * Get the user id for the current user. * This method is provided as an abstraction to the very implementation * specific method of retrieving user ids in Turbine. * * @return int The current user's id. */ public String getUserId() { JetspeedUser user = getJetspeedUser(); if (user == null) { return ""; } return user.getUserId(); } /** * Access an identifier for the current request's PageSession. * A PageSession is a specific portal page being viewed in a specific * user session (and perhaps, but not yet [@todo] in a specific browser window). * @return the identifier for the current request's PageSession. */ public String getPageSessionId() { // form based on the session and page's profile's id // session String sessionId = "?"; if (getSession() != null) { sessionId = getSession().getId(); } else { logger.warn("DefaultJetspeedRunData.getPageSessionId: no session"); } // profile String profileId = "?"; if (getProfile() != null) { profileId = getProfile().getId(); } else { logger.warn("DefaultJetspeedRunData.getPageSessionId: no profile"); } return sessionId + profileId; } // getPageSessionId /** * Access the current request's UserSession state object. * @return the current request's UserSession state object (may be null). */ public SessionState getUserSessionState() { // get the StateManagerService StateManagerService service = (StateManagerService)TurbineServices .getInstance().getService(StateManagerService.SERVICE_NAME); // handle no service if (service == null) return null; return service.getSessionState(getSession().getId()); } // getUserSessionState /** * Access the current request's PageSession state object. * @return the current request's PageSession state object (may be null). */ public SessionState getPageSessionState() { // get the StateManagerService StateManagerService service = (StateManagerService)TurbineServices .getInstance().getService(StateManagerService.SERVICE_NAME); // handle no service if (service == null) return null; return service.getSessionState(getPageSessionId()); } // getPageSessionState /** * Access the current request's PortletSession state object. * @param id The Portlet's unique id. * @return the current request's PortletSession state object. (may be null). */ public SessionState getPortletSessionState(String id) { // get the StateManagerService StateManagerService service = (StateManagerService)TurbineServices .getInstance().getService(StateManagerService.SERVICE_NAME); // handle no service if (service == null) return null; // PageSession key String pageInstanceId = getPageSessionId(); return service.getSessionState(pageInstanceId + id); } // getPortletSessionState /** * Returns the Jetspeed User (same as getUser without cast) * * @return the current user. */ public JetspeedUser getJetspeedUser() { return (JetspeedUser)getUser(); } /** * Function is deprecated by required to compile with Turbine * * @deprecated */ public AccessControlList getACL() { return null; } }