You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by es...@apache.org on 2007/12/29 18:32:18 UTC
svn commit: r607450 [8/36] - in /portals/pluto/trunk: ./
assembly/src/main/assembly/ assembly/src/main/resources/ maven-pluto-plugin/
maven-pluto-plugin/src/main/java/org/apache/pluto/maven/ pluto-ant-tasks/
pluto-ant-tasks/src/assemble/ pluto-ant-task...
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java?rev=607450&r1=607449&r2=607450&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java Sat Dec 29 09:31:56 2007
@@ -1,696 +1,696 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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
- *
- * 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.pluto.internal.impl;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.portlet.PortalContext;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletSession;
-import javax.portlet.WindowState;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.PortletContainerException;
-import org.apache.pluto.descriptors.common.SecurityRoleRefDD;
-import org.apache.pluto.descriptors.portlet.PortletAppDD;
-import org.apache.pluto.descriptors.portlet.PortletDD;
-import org.apache.pluto.descriptors.portlet.SupportsDD;
-import org.apache.pluto.descriptors.portlet.UserAttributeDD;
-import org.apache.pluto.internal.InternalPortletRequest;
-import org.apache.pluto.internal.InternalPortletWindow;
-import org.apache.pluto.internal.PortletEntity;
-import org.apache.pluto.util.ArgumentUtility;
-import org.apache.pluto.util.Enumerator;
-import org.apache.pluto.util.NamespaceMapper;
-import org.apache.pluto.util.StringManager;
-import org.apache.pluto.util.StringUtils;
-import org.apache.pluto.util.impl.NamespaceMapperImpl;
-
-/**
- * Abstract <code>javax.portlet.PortletRequest</code> implementation.
- * This class also implements InternalPortletRequest.
- *
- */
-public abstract class PortletRequestImpl extends HttpServletRequestWrapper
- implements PortletRequest, InternalPortletRequest {
-
- /**
- * Logger.
- */
- private static final Log LOG = LogFactory.getLog(PortletRequestImpl.class);
-
- private static final StringManager EXCEPTIONS =
- StringManager.getManager(PortletRequestImpl.class.getPackage().getName());
-
- // Private Member Variables ------------------------------------------------
-
- /**
- * The parent container within which this request was created.
- */
- private PortletContainer container;
-
- /**
- * The portlet window which is the target of this portlet request.
- */
- private InternalPortletWindow internalPortletWindow;
-
- /**
- * The PortletContext associated with this Request. This PortletContext must
- * be initialized from within the <code>PortletServlet</code>.
- */
- private PortletContext portletContext;
-
- /**
- * The PortalContext within which this request is occuring.
- */
- private PortalContext portalContext;
-
- /**
- * The portlet session.
- */
- private PortletSession portletSession;
-
- /**
- * Response content types.
- */
- private Vector contentTypes;
-
- /**
- * TODO: javadoc
- */
- private final NamespaceMapper mapper = new NamespaceMapperImpl();
-
- /**
- * FIXME: do we really need this?
- * Flag indicating if the HTTP-Body has been accessed.
- */
- private boolean bodyAccessed = false;
-
- // Constructors ------------------------------------------------------------
-
- public PortletRequestImpl(InternalPortletRequest internalPortletRequest) {
- this(internalPortletRequest.getPortletContainer(),
- internalPortletRequest.getInternalPortletWindow(),
- internalPortletRequest.getHttpServletRequest());
- }
-
- /**
- * Creates a PortletRequestImpl instance.
- *
- * @param container the portlet container.
- * @param internalPortletWindow the internal portlet window.
- * @param servletRequest the underlying servlet request.
- */
- public PortletRequestImpl(PortletContainer container,
- InternalPortletWindow internalPortletWindow,
- HttpServletRequest servletRequest) {
- super(servletRequest);
- this.container = container;
- this.internalPortletWindow = internalPortletWindow;
- this.portalContext = container.getRequiredContainerServices().getPortalContext();
- }
-
- // PortletRequest Impl -----------------------------------------------------
-
- /**
- * Determine whether or not the specified WindowState is allowed for this
- * portlet.
- *
- * @param state the state in question
- * @return true if the state is allowed.
- */
- public boolean isWindowStateAllowed(WindowState state) {
- for (Enumeration en = portalContext.getSupportedWindowStates();
- en.hasMoreElements();) {
- if (en.nextElement().toString().equals(state.toString())) {
- return true;
- }
- }
- return false;
- }
-
- public boolean isPortletModeAllowed(PortletMode mode) {
- return (isPortletModeAllowedByPortlet(mode)
- && isPortletModeAllowedByPortal(mode));
- }
-
- public PortletMode getPortletMode() {
- return internalPortletWindow.getPortletMode();
- }
-
- public WindowState getWindowState() {
- return internalPortletWindow.getWindowState();
- }
-
- public PortletSession getPortletSession() {
- return getPortletSession(true);
- }
-
- /**
- * Returns the portlet session.
- * <p/>
- * Note that since portlet request instance is created everytime the portlet
- * container receives an incoming request, the portlet session instance held
- * by the request instance is also re-created for each incoming request.
- * </p>
- */
- public PortletSession getPortletSession(boolean create) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Retreiving portlet session (create=" + create + ")");
- }
- //
- // It is critical that we don't retrieve the portlet session until the
- // cross context dispatch has been completed. If we do then we risk
- // having a cached version which is invalid for the context within
- // which it exists.
- //
- if (portletContext == null) {
- throw new IllegalStateException(
- EXCEPTIONS.getString("error.session.illegalState"));
- }
- //
- // We must make sure that if the session has been invalidated (perhaps
- // through setMaxIntervalTimeout()) and the underlying request
- // returns null that we no longer use the cached version.
- // We have to check (ourselves) if the session has exceeded its max
- // inactive interval. If so, we should invalidate the underlying
- // HttpSession and recreate a new one (if the create flag is set to
- // true) -- We just cannot depend on the implementation of
- // javax.servlet.http.HttpSession!
- //
- HttpSession httpSession = getHttpServletRequest().getSession(create);
- if (httpSession != null) {
- // HttpSession is not null does NOT mean that it is valid.
- int maxInactiveInterval = httpSession.getMaxInactiveInterval();
- long lastAccesstime = httpSession.getLastAccessedTime();//lastAccesstime checks added for PLUTO-436
- if (maxInactiveInterval >= 0 && lastAccesstime > 0) { // < 0 => Never expires.
- long maxInactiveTime = httpSession.getMaxInactiveInterval() * 1000L;
- long currentInactiveTime = System.currentTimeMillis() - lastAccesstime;
- if (currentInactiveTime > maxInactiveTime) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("The underlying HttpSession is expired and "
- + "should be invalidated.");
- }
- httpSession.invalidate();
- httpSession = getHttpServletRequest().getSession(create);
- //Added for PLUTO-436
- // a cached portletSession is no longer useable.
- // a new one will be created below.
- portletSession = null;
- }
- }
- }
-
- if (httpSession == null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("The underlying HttpSession is not available: "
- + "no session will be returned.");
- }
- return null;
- }
-
- //
- // If we reach here, we are sure that the underlying HttpSession is
- // available. If we haven't created and cached a portlet session
- // instance, we will create and cache one now.
- //
- if (portletSession == null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Creating new portlet session...");
- }
- portletSession = new PortletSessionImpl(
- portletContext,
- internalPortletWindow,
- httpSession);
- }
- return portletSession;
- }
-
- public String getProperty(String name) throws IllegalArgumentException {
- ArgumentUtility.validateNotNull("propertyName", name);
- String property = this.getHttpServletRequest().getHeader(name);
- if (property == null) {
- Map propertyMap = container.getRequiredContainerServices()
- .getPortalCallbackService()
- .getRequestProperties(
- getHttpServletRequest(),
- internalPortletWindow);
-
- if (propertyMap != null) {
- String[] properties = (String[]) propertyMap.get(name);
- if (properties != null && properties.length > 0) {
- property = properties[0];
- }
- }
- }
- return property;
- }
-
- public Enumeration getProperties(String name) {
- ArgumentUtility.validateNotNull("propertyName", name);
- Set v = new HashSet();
- Enumeration props = this.getHttpServletRequest().getHeaders(name);
- if (props != null) {
- while (props.hasMoreElements()) {
- v.add(props.nextElement());
- }
- }
-
- // get properties from PropertyManager
- Map map = container.getRequiredContainerServices()
- .getPortalCallbackService()
- .getRequestProperties(
- getHttpServletRequest(),
- internalPortletWindow);
-
- if (map != null) {
- String[] properties = (String[]) map.get(name);
-
- if (properties != null) {
- // add properties to vector
- for (int i = 0; i < properties.length; i++) {
- v.add(properties[i]);
- }
- }
- }
-
- return new Enumerator(v.iterator());
- }
-
- public Enumeration getPropertyNames() {
- Set v = new HashSet();
-
- // get properties from PropertyManager
- Map map = container.getRequiredContainerServices()
- .getPortalCallbackService()
- .getRequestProperties(getHttpServletRequest(), internalPortletWindow);
-
- if (map != null) {
- v.addAll(map.keySet());
- }
-
- // get properties from request header
- Enumeration props = this.getHttpServletRequest().getHeaderNames();
- if (props != null) {
- while (props.hasMoreElements()) {
- v.add(props.nextElement());
- }
- }
-
- return new Enumerator(v.iterator());
- }
-
- public PortalContext getPortalContext() {
- return container.getRequiredContainerServices().getPortalContext();
- }
-
- public String getAuthType() {
- return this.getHttpServletRequest().getAuthType();
- }
-
- public String getContextPath() {
- String contextPath = internalPortletWindow.getContextPath();
- if ("/".equals(contextPath)) {
- contextPath = "";
- }
- return contextPath;
- }
-
- public String getRemoteUser() {
- return this.getHttpServletRequest().getRemoteUser();
- }
-
- public Principal getUserPrincipal() {
- return this.getHttpServletRequest().getUserPrincipal();
- }
-
- /**
- * Determines whether a user is mapped to the specified role. As specified
- * in PLT-20-3, we must reference the <security-role-ref> mappings
- * within the deployment descriptor. If no mapping is available, then, and
- * only then, do we check use the actual role name specified against the web
- * application deployment descriptor.
- *
- * @param roleName the name of the role
- * @return true if it is determined the user has the given role.
- */
- public boolean isUserInRole(String roleName) {
- PortletEntity entity = internalPortletWindow.getPortletEntity();
- PortletDD def = entity.getPortletDefinition();
-
- SecurityRoleRefDD ref = null;
- Iterator refs = def.getSecurityRoleRefs().iterator();
- while (refs.hasNext()) {
- SecurityRoleRefDD r = (SecurityRoleRefDD) refs.next();
- if (r.getRoleName().equals(roleName)) {
- ref = r;
- break;
- }
- }
-
- String link;
- if (ref != null && ref.getRoleLink() != null) {
- link = ref.getRoleLink();
- } else {
- link = roleName;
- }
-
- return this.getHttpServletRequest().isUserInRole(link);
- }
-
- public Object getAttribute(String name) {
- ArgumentUtility.validateNotNull("attributeName", name);
-
- if (PortletRequest.USER_INFO.equals(name)) {
- return createUserInfoMap();
- }
-
- String encodedName = isNameReserved(name) ?
- name :
- mapper.encode(internalPortletWindow.getId(), name);
-
- Object attribute = getHttpServletRequest()
- .getAttribute(encodedName);
-
- if (attribute == null) {
- attribute = getHttpServletRequest().getAttribute(name);
- }
- return attribute;
- }
-
- public Enumeration getAttributeNames() {
- Enumeration attributes = this.getHttpServletRequest()
- .getAttributeNames();
-
- Vector portletAttributes = new Vector();
-
- while (attributes.hasMoreElements()) {
- String attribute = (String) attributes.nextElement();
-
- //Fix for PLUTO-369
- String portletAttribute = isNameReserved(attribute) ?
- attribute :
- mapper.decode(
- internalPortletWindow.getId(), attribute);
-
- if (portletAttribute != null) { // it is in the portlet's namespace
- portletAttributes.add(portletAttribute);
- }
- }
-
- return portletAttributes.elements();
- }
-
- public Map createUserInfoMap() {
-
- Map userInfoMap = new HashMap();
- try {
-
- PortletAppDD dd = container.getOptionalContainerServices()
- .getPortletRegistryService()
- .getPortletApplicationDescriptor(internalPortletWindow.getContextPath());
-
- Map allMap = container.getOptionalContainerServices()
- //PLUTO-388 fix:
- //The PortletWindow is currently ignored in the implementing class
- // See: org.apache.pluto.core.DefaultUserInfoService
- .getUserInfoService().getUserInfo( this, this.internalPortletWindow );
-
- Iterator i = dd.getUserAttributes().iterator();
- while(i.hasNext()) {
- UserAttributeDD udd = (UserAttributeDD)i.next();
- userInfoMap.put(udd.getName(), allMap.get(udd.getName()));
- }
- } catch (PortletContainerException e) {
- LOG.warn("Unable to retrieve user attribute map for user " + getRemoteUser() + ". Returning null.");
- return null;
- }
-
- return Collections.unmodifiableMap(userInfoMap);
- }
-
- public String getParameter(String name) {
- ArgumentUtility.validateNotNull("parameterName", name);
- String[] values = (String[]) baseGetParameterMap().get(name);
- if (values != null && values.length > 0) {
- return values[0];
- } else {
- return null;
- }
- }
-
- public Enumeration getParameterNames() {
- return Collections.enumeration(baseGetParameterMap().keySet());
- }
-
- public String[] getParameterValues(String name) {
- ArgumentUtility.validateNotNull("parameterName", name);
- String[] values = (String[]) baseGetParameterMap().get(name);
- if (values != null) {
- values = StringUtils.copy(values);
- }
- return values;
- }
-
- public Map getParameterMap() {
- return Collections.unmodifiableMap(StringUtils.copyParameters(baseGetParameterMap()));
- }
-
- public boolean isSecure() {
- return this.getHttpServletRequest().isSecure();
- }
-
- public void setAttribute(String name, Object value) {
- ArgumentUtility.validateNotNull("attributeName", name);
- String encodedName = isNameReserved(name) ?
- name : mapper.encode(internalPortletWindow.getId(), name);
- if (value == null) {
- removeAttribute(name);
- } else {
- getHttpServletRequest().setAttribute(encodedName, value);
- }
- }
-
- public void removeAttribute(String name) {
- ArgumentUtility.validateNotNull("attributeName", name);
- String encodedName = isNameReserved(name) ?
- name : mapper.encode(internalPortletWindow.getId(), name);
- getHttpServletRequest().removeAttribute(encodedName);
- }
-
- public String getRequestedSessionId() {
- return this.getHttpServletRequest().getRequestedSessionId();
- }
-
- public boolean isRequestedSessionIdValid() {
- if (LOG.isDebugEnabled()) {
- LOG.debug(" ***** IsRequestedSessionIdValid? " + getHttpServletRequest().isRequestedSessionIdValid());
- }
- return getHttpServletRequest().isRequestedSessionIdValid();
- }
-
- public String getResponseContentType() {
- Enumeration enumeration = getResponseContentTypes();
- while (enumeration.hasMoreElements()) {
- return (String) enumeration.nextElement();
- }
- return "text/html";
- }
-
- public Enumeration getResponseContentTypes() {
- if (contentTypes == null) {
- contentTypes = new Vector();
- PortletDD dd = internalPortletWindow.getPortletEntity().getPortletDefinition();
- Iterator supports = dd.getSupports().iterator();
- while (supports.hasNext()) {
- SupportsDD sup = (SupportsDD) supports.next();
- contentTypes.add(sup.getMimeType());
- }
- if (contentTypes.size() < 1) {
- contentTypes.add("text/html");
- }
- }
- return contentTypes.elements();
- }
-
- public Locale getLocale() {
- return this.getHttpServletRequest().getLocale();
- }
-
- public Enumeration getLocales() {
- return this.getHttpServletRequest().getLocales();
- }
-
- public String getScheme() {
- return this.getHttpServletRequest().getScheme();
- }
-
- public String getServerName() {
- return this.getHttpServletRequest().getServerName();
- }
-
- public int getServerPort() {
- return this.getHttpServletRequest().getServerPort();
- }
-
- // Protected Methods -------------------------------------------------------
-
- /**
- * The base method that returns the parameter map in this portlet request.
- * All parameter-related methods call this base method. Subclasses may just
- * overwrite this protected method to change behavior of all parameter-
- * related methods.
- *
- * @return the base parameter map from which parameters are retrieved.
- */
- protected Map baseGetParameterMap() {
- bodyAccessed = true;
- return this.getHttpServletRequest().getParameterMap();
- }
-
- protected void setBodyAccessed() {
- bodyAccessed = true;
- }
-
- // InternalPortletRequest Impl ---------------------------------------------
-
- public InternalPortletWindow getInternalPortletWindow() {
- return internalPortletWindow;
- }
-
- public PortletContainer getPortletContainer() {
- return container;
- }
-
- public HttpServletRequest getHttpServletRequest() {
- return (HttpServletRequest) super.getRequest();
- }
-
- public void init(PortletContext portletContext, HttpServletRequest req) {
- this.portletContext = portletContext;
- setRequest(req);
- }
-
- /**
- * TODO: Implement this properly. Not required now
- */
- public void release() {
- // TODO:
- }
-
- // TODO: Additional Methods of HttpServletRequestWrapper -------------------
-
- public BufferedReader getReader()
- throws UnsupportedEncodingException, IOException {
- // the super class will ensure that a IllegalStateException is thrown
- // if getInputStream() was called earlier
- BufferedReader reader = getHttpServletRequest().getReader();
- bodyAccessed = true;
- return reader;
- }
-
- public ServletInputStream getInputStream() throws IOException {
- ServletInputStream stream = getHttpServletRequest().getInputStream();
- bodyAccessed = true;
- return stream;
- }
-
- public RequestDispatcher getRequestDispatcher(String path) {
- return getHttpServletRequest().getRequestDispatcher(path);
- }
-
- /**
- * TODO: why check bodyAccessed?
- */
- public void setCharacterEncoding(String encoding)
- throws UnsupportedEncodingException {
- if (bodyAccessed) {
- throw new IllegalStateException("Cannot set character encoding "
- + "after HTTP body is accessed.");
- }
- super.setCharacterEncoding(encoding);
- }
-
- // Private Methods ---------------------------------------------------------
-
- /**
- * Is this attribute name a reserved name (by the J2EE spec)?. Reserved
- * names begin with "java." or "javax.".
- *
- * @return true if the name is reserved.
- */
- private boolean isNameReserved(String name) {
- return name.startsWith("java.") || name.startsWith("javax.");
- }
-
- private boolean isPortletModeAllowedByPortlet(PortletMode mode) {
- if (isPortletModeMandatory(mode)) {
- return true;
- }
-
- PortletDD dd = internalPortletWindow.getPortletEntity()
- .getPortletDefinition();
-
- Iterator mimes = dd.getSupports().iterator();
- while (mimes.hasNext()) {
- Iterator modes = ((SupportsDD) mimes.next()).getPortletModes().iterator();
- while (modes.hasNext()) {
- String m = (String) modes.next();
- if (m.equals(mode.toString())) {
- return true;
- }
- }
- }
- return false;
- }
-
- private boolean isPortletModeAllowedByPortal(PortletMode mode) {
- Enumeration supportedModes = portalContext.getSupportedPortletModes();
- while (supportedModes.hasMoreElements()) {
- if (supportedModes.nextElement().toString().equals(
- (mode.toString()))) {
- return true;
- }
- }
- return false;
- }
-
- private boolean isPortletModeMandatory(PortletMode mode) {
- return PortletMode.VIEW.equals(mode) || PortletMode.EDIT.equals(mode) || PortletMode.HELP.equals(mode);
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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
+ *
+ * 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.pluto.internal.impl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.portlet.PortalContext;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletSession;
+import javax.portlet.WindowState;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.PortletContainer;
+import org.apache.pluto.PortletContainerException;
+import org.apache.pluto.descriptors.common.SecurityRoleRefDD;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
+import org.apache.pluto.descriptors.portlet.PortletDD;
+import org.apache.pluto.descriptors.portlet.SupportsDD;
+import org.apache.pluto.descriptors.portlet.UserAttributeDD;
+import org.apache.pluto.internal.InternalPortletRequest;
+import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.internal.PortletEntity;
+import org.apache.pluto.util.ArgumentUtility;
+import org.apache.pluto.util.Enumerator;
+import org.apache.pluto.util.NamespaceMapper;
+import org.apache.pluto.util.StringManager;
+import org.apache.pluto.util.StringUtils;
+import org.apache.pluto.util.impl.NamespaceMapperImpl;
+
+/**
+ * Abstract <code>javax.portlet.PortletRequest</code> implementation.
+ * This class also implements InternalPortletRequest.
+ *
+ */
+public abstract class PortletRequestImpl extends HttpServletRequestWrapper
+ implements PortletRequest, InternalPortletRequest {
+
+ /**
+ * Logger.
+ */
+ private static final Log LOG = LogFactory.getLog(PortletRequestImpl.class);
+
+ private static final StringManager EXCEPTIONS =
+ StringManager.getManager(PortletRequestImpl.class.getPackage().getName());
+
+ // Private Member Variables ------------------------------------------------
+
+ /**
+ * The parent container within which this request was created.
+ */
+ private PortletContainer container;
+
+ /**
+ * The portlet window which is the target of this portlet request.
+ */
+ private InternalPortletWindow internalPortletWindow;
+
+ /**
+ * The PortletContext associated with this Request. This PortletContext must
+ * be initialized from within the <code>PortletServlet</code>.
+ */
+ private PortletContext portletContext;
+
+ /**
+ * The PortalContext within which this request is occuring.
+ */
+ private PortalContext portalContext;
+
+ /**
+ * The portlet session.
+ */
+ private PortletSession portletSession;
+
+ /**
+ * Response content types.
+ */
+ private Vector contentTypes;
+
+ /**
+ * TODO: javadoc
+ */
+ private final NamespaceMapper mapper = new NamespaceMapperImpl();
+
+ /**
+ * FIXME: do we really need this?
+ * Flag indicating if the HTTP-Body has been accessed.
+ */
+ private boolean bodyAccessed = false;
+
+ // Constructors ------------------------------------------------------------
+
+ public PortletRequestImpl(InternalPortletRequest internalPortletRequest) {
+ this(internalPortletRequest.getPortletContainer(),
+ internalPortletRequest.getInternalPortletWindow(),
+ internalPortletRequest.getHttpServletRequest());
+ }
+
+ /**
+ * Creates a PortletRequestImpl instance.
+ *
+ * @param container the portlet container.
+ * @param internalPortletWindow the internal portlet window.
+ * @param servletRequest the underlying servlet request.
+ */
+ public PortletRequestImpl(PortletContainer container,
+ InternalPortletWindow internalPortletWindow,
+ HttpServletRequest servletRequest) {
+ super(servletRequest);
+ this.container = container;
+ this.internalPortletWindow = internalPortletWindow;
+ this.portalContext = container.getRequiredContainerServices().getPortalContext();
+ }
+
+ // PortletRequest Impl -----------------------------------------------------
+
+ /**
+ * Determine whether or not the specified WindowState is allowed for this
+ * portlet.
+ *
+ * @param state the state in question
+ * @return true if the state is allowed.
+ */
+ public boolean isWindowStateAllowed(WindowState state) {
+ for (Enumeration en = portalContext.getSupportedWindowStates();
+ en.hasMoreElements();) {
+ if (en.nextElement().toString().equals(state.toString())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isPortletModeAllowed(PortletMode mode) {
+ return (isPortletModeAllowedByPortlet(mode)
+ && isPortletModeAllowedByPortal(mode));
+ }
+
+ public PortletMode getPortletMode() {
+ return internalPortletWindow.getPortletMode();
+ }
+
+ public WindowState getWindowState() {
+ return internalPortletWindow.getWindowState();
+ }
+
+ public PortletSession getPortletSession() {
+ return getPortletSession(true);
+ }
+
+ /**
+ * Returns the portlet session.
+ * <p/>
+ * Note that since portlet request instance is created everytime the portlet
+ * container receives an incoming request, the portlet session instance held
+ * by the request instance is also re-created for each incoming request.
+ * </p>
+ */
+ public PortletSession getPortletSession(boolean create) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Retreiving portlet session (create=" + create + ")");
+ }
+ //
+ // It is critical that we don't retrieve the portlet session until the
+ // cross context dispatch has been completed. If we do then we risk
+ // having a cached version which is invalid for the context within
+ // which it exists.
+ //
+ if (portletContext == null) {
+ throw new IllegalStateException(
+ EXCEPTIONS.getString("error.session.illegalState"));
+ }
+ //
+ // We must make sure that if the session has been invalidated (perhaps
+ // through setMaxIntervalTimeout()) and the underlying request
+ // returns null that we no longer use the cached version.
+ // We have to check (ourselves) if the session has exceeded its max
+ // inactive interval. If so, we should invalidate the underlying
+ // HttpSession and recreate a new one (if the create flag is set to
+ // true) -- We just cannot depend on the implementation of
+ // javax.servlet.http.HttpSession!
+ //
+ HttpSession httpSession = getHttpServletRequest().getSession(create);
+ if (httpSession != null) {
+ // HttpSession is not null does NOT mean that it is valid.
+ int maxInactiveInterval = httpSession.getMaxInactiveInterval();
+ long lastAccesstime = httpSession.getLastAccessedTime();//lastAccesstime checks added for PLUTO-436
+ if (maxInactiveInterval >= 0 && lastAccesstime > 0) { // < 0 => Never expires.
+ long maxInactiveTime = httpSession.getMaxInactiveInterval() * 1000L;
+ long currentInactiveTime = System.currentTimeMillis() - lastAccesstime;
+ if (currentInactiveTime > maxInactiveTime) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("The underlying HttpSession is expired and "
+ + "should be invalidated.");
+ }
+ httpSession.invalidate();
+ httpSession = getHttpServletRequest().getSession(create);
+ //Added for PLUTO-436
+ // a cached portletSession is no longer useable.
+ // a new one will be created below.
+ portletSession = null;
+ }
+ }
+ }
+
+ if (httpSession == null) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("The underlying HttpSession is not available: "
+ + "no session will be returned.");
+ }
+ return null;
+ }
+
+ //
+ // If we reach here, we are sure that the underlying HttpSession is
+ // available. If we haven't created and cached a portlet session
+ // instance, we will create and cache one now.
+ //
+ if (portletSession == null) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating new portlet session...");
+ }
+ portletSession = new PortletSessionImpl(
+ portletContext,
+ internalPortletWindow,
+ httpSession);
+ }
+ return portletSession;
+ }
+
+ public String getProperty(String name) throws IllegalArgumentException {
+ ArgumentUtility.validateNotNull("propertyName", name);
+ String property = this.getHttpServletRequest().getHeader(name);
+ if (property == null) {
+ Map propertyMap = container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getRequestProperties(
+ getHttpServletRequest(),
+ internalPortletWindow);
+
+ if (propertyMap != null) {
+ String[] properties = (String[]) propertyMap.get(name);
+ if (properties != null && properties.length > 0) {
+ property = properties[0];
+ }
+ }
+ }
+ return property;
+ }
+
+ public Enumeration getProperties(String name) {
+ ArgumentUtility.validateNotNull("propertyName", name);
+ Set v = new HashSet();
+ Enumeration props = this.getHttpServletRequest().getHeaders(name);
+ if (props != null) {
+ while (props.hasMoreElements()) {
+ v.add(props.nextElement());
+ }
+ }
+
+ // get properties from PropertyManager
+ Map map = container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getRequestProperties(
+ getHttpServletRequest(),
+ internalPortletWindow);
+
+ if (map != null) {
+ String[] properties = (String[]) map.get(name);
+
+ if (properties != null) {
+ // add properties to vector
+ for (int i = 0; i < properties.length; i++) {
+ v.add(properties[i]);
+ }
+ }
+ }
+
+ return new Enumerator(v.iterator());
+ }
+
+ public Enumeration getPropertyNames() {
+ Set v = new HashSet();
+
+ // get properties from PropertyManager
+ Map map = container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getRequestProperties(getHttpServletRequest(), internalPortletWindow);
+
+ if (map != null) {
+ v.addAll(map.keySet());
+ }
+
+ // get properties from request header
+ Enumeration props = this.getHttpServletRequest().getHeaderNames();
+ if (props != null) {
+ while (props.hasMoreElements()) {
+ v.add(props.nextElement());
+ }
+ }
+
+ return new Enumerator(v.iterator());
+ }
+
+ public PortalContext getPortalContext() {
+ return container.getRequiredContainerServices().getPortalContext();
+ }
+
+ public String getAuthType() {
+ return this.getHttpServletRequest().getAuthType();
+ }
+
+ public String getContextPath() {
+ String contextPath = internalPortletWindow.getContextPath();
+ if ("/".equals(contextPath)) {
+ contextPath = "";
+ }
+ return contextPath;
+ }
+
+ public String getRemoteUser() {
+ return this.getHttpServletRequest().getRemoteUser();
+ }
+
+ public Principal getUserPrincipal() {
+ return this.getHttpServletRequest().getUserPrincipal();
+ }
+
+ /**
+ * Determines whether a user is mapped to the specified role. As specified
+ * in PLT-20-3, we must reference the <security-role-ref> mappings
+ * within the deployment descriptor. If no mapping is available, then, and
+ * only then, do we check use the actual role name specified against the web
+ * application deployment descriptor.
+ *
+ * @param roleName the name of the role
+ * @return true if it is determined the user has the given role.
+ */
+ public boolean isUserInRole(String roleName) {
+ PortletEntity entity = internalPortletWindow.getPortletEntity();
+ PortletDD def = entity.getPortletDefinition();
+
+ SecurityRoleRefDD ref = null;
+ Iterator refs = def.getSecurityRoleRefs().iterator();
+ while (refs.hasNext()) {
+ SecurityRoleRefDD r = (SecurityRoleRefDD) refs.next();
+ if (r.getRoleName().equals(roleName)) {
+ ref = r;
+ break;
+ }
+ }
+
+ String link;
+ if (ref != null && ref.getRoleLink() != null) {
+ link = ref.getRoleLink();
+ } else {
+ link = roleName;
+ }
+
+ return this.getHttpServletRequest().isUserInRole(link);
+ }
+
+ public Object getAttribute(String name) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+
+ if (PortletRequest.USER_INFO.equals(name)) {
+ return createUserInfoMap();
+ }
+
+ String encodedName = isNameReserved(name) ?
+ name :
+ mapper.encode(internalPortletWindow.getId(), name);
+
+ Object attribute = getHttpServletRequest()
+ .getAttribute(encodedName);
+
+ if (attribute == null) {
+ attribute = getHttpServletRequest().getAttribute(name);
+ }
+ return attribute;
+ }
+
+ public Enumeration getAttributeNames() {
+ Enumeration attributes = this.getHttpServletRequest()
+ .getAttributeNames();
+
+ Vector portletAttributes = new Vector();
+
+ while (attributes.hasMoreElements()) {
+ String attribute = (String) attributes.nextElement();
+
+ //Fix for PLUTO-369
+ String portletAttribute = isNameReserved(attribute) ?
+ attribute :
+ mapper.decode(
+ internalPortletWindow.getId(), attribute);
+
+ if (portletAttribute != null) { // it is in the portlet's namespace
+ portletAttributes.add(portletAttribute);
+ }
+ }
+
+ return portletAttributes.elements();
+ }
+
+ public Map createUserInfoMap() {
+
+ Map userInfoMap = new HashMap();
+ try {
+
+ PortletAppDD dd = container.getOptionalContainerServices()
+ .getPortletRegistryService()
+ .getPortletApplicationDescriptor(internalPortletWindow.getContextPath());
+
+ Map allMap = container.getOptionalContainerServices()
+ //PLUTO-388 fix:
+ //The PortletWindow is currently ignored in the implementing class
+ // See: org.apache.pluto.core.DefaultUserInfoService
+ .getUserInfoService().getUserInfo( this, this.internalPortletWindow );
+
+ Iterator i = dd.getUserAttributes().iterator();
+ while(i.hasNext()) {
+ UserAttributeDD udd = (UserAttributeDD)i.next();
+ userInfoMap.put(udd.getName(), allMap.get(udd.getName()));
+ }
+ } catch (PortletContainerException e) {
+ LOG.warn("Unable to retrieve user attribute map for user " + getRemoteUser() + ". Returning null.");
+ return null;
+ }
+
+ return Collections.unmodifiableMap(userInfoMap);
+ }
+
+ public String getParameter(String name) {
+ ArgumentUtility.validateNotNull("parameterName", name);
+ String[] values = (String[]) baseGetParameterMap().get(name);
+ if (values != null && values.length > 0) {
+ return values[0];
+ } else {
+ return null;
+ }
+ }
+
+ public Enumeration getParameterNames() {
+ return Collections.enumeration(baseGetParameterMap().keySet());
+ }
+
+ public String[] getParameterValues(String name) {
+ ArgumentUtility.validateNotNull("parameterName", name);
+ String[] values = (String[]) baseGetParameterMap().get(name);
+ if (values != null) {
+ values = StringUtils.copy(values);
+ }
+ return values;
+ }
+
+ public Map getParameterMap() {
+ return Collections.unmodifiableMap(StringUtils.copyParameters(baseGetParameterMap()));
+ }
+
+ public boolean isSecure() {
+ return this.getHttpServletRequest().isSecure();
+ }
+
+ public void setAttribute(String name, Object value) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+ String encodedName = isNameReserved(name) ?
+ name : mapper.encode(internalPortletWindow.getId(), name);
+ if (value == null) {
+ removeAttribute(name);
+ } else {
+ getHttpServletRequest().setAttribute(encodedName, value);
+ }
+ }
+
+ public void removeAttribute(String name) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+ String encodedName = isNameReserved(name) ?
+ name : mapper.encode(internalPortletWindow.getId(), name);
+ getHttpServletRequest().removeAttribute(encodedName);
+ }
+
+ public String getRequestedSessionId() {
+ return this.getHttpServletRequest().getRequestedSessionId();
+ }
+
+ public boolean isRequestedSessionIdValid() {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(" ***** IsRequestedSessionIdValid? " + getHttpServletRequest().isRequestedSessionIdValid());
+ }
+ return getHttpServletRequest().isRequestedSessionIdValid();
+ }
+
+ public String getResponseContentType() {
+ Enumeration enumeration = getResponseContentTypes();
+ while (enumeration.hasMoreElements()) {
+ return (String) enumeration.nextElement();
+ }
+ return "text/html";
+ }
+
+ public Enumeration getResponseContentTypes() {
+ if (contentTypes == null) {
+ contentTypes = new Vector();
+ PortletDD dd = internalPortletWindow.getPortletEntity().getPortletDefinition();
+ Iterator supports = dd.getSupports().iterator();
+ while (supports.hasNext()) {
+ SupportsDD sup = (SupportsDD) supports.next();
+ contentTypes.add(sup.getMimeType());
+ }
+ if (contentTypes.size() < 1) {
+ contentTypes.add("text/html");
+ }
+ }
+ return contentTypes.elements();
+ }
+
+ public Locale getLocale() {
+ return this.getHttpServletRequest().getLocale();
+ }
+
+ public Enumeration getLocales() {
+ return this.getHttpServletRequest().getLocales();
+ }
+
+ public String getScheme() {
+ return this.getHttpServletRequest().getScheme();
+ }
+
+ public String getServerName() {
+ return this.getHttpServletRequest().getServerName();
+ }
+
+ public int getServerPort() {
+ return this.getHttpServletRequest().getServerPort();
+ }
+
+ // Protected Methods -------------------------------------------------------
+
+ /**
+ * The base method that returns the parameter map in this portlet request.
+ * All parameter-related methods call this base method. Subclasses may just
+ * overwrite this protected method to change behavior of all parameter-
+ * related methods.
+ *
+ * @return the base parameter map from which parameters are retrieved.
+ */
+ protected Map baseGetParameterMap() {
+ bodyAccessed = true;
+ return this.getHttpServletRequest().getParameterMap();
+ }
+
+ protected void setBodyAccessed() {
+ bodyAccessed = true;
+ }
+
+ // InternalPortletRequest Impl ---------------------------------------------
+
+ public InternalPortletWindow getInternalPortletWindow() {
+ return internalPortletWindow;
+ }
+
+ public PortletContainer getPortletContainer() {
+ return container;
+ }
+
+ public HttpServletRequest getHttpServletRequest() {
+ return (HttpServletRequest) super.getRequest();
+ }
+
+ public void init(PortletContext portletContext, HttpServletRequest req) {
+ this.portletContext = portletContext;
+ setRequest(req);
+ }
+
+ /**
+ * TODO: Implement this properly. Not required now
+ */
+ public void release() {
+ // TODO:
+ }
+
+ // TODO: Additional Methods of HttpServletRequestWrapper -------------------
+
+ public BufferedReader getReader()
+ throws UnsupportedEncodingException, IOException {
+ // the super class will ensure that a IllegalStateException is thrown
+ // if getInputStream() was called earlier
+ BufferedReader reader = getHttpServletRequest().getReader();
+ bodyAccessed = true;
+ return reader;
+ }
+
+ public ServletInputStream getInputStream() throws IOException {
+ ServletInputStream stream = getHttpServletRequest().getInputStream();
+ bodyAccessed = true;
+ return stream;
+ }
+
+ public RequestDispatcher getRequestDispatcher(String path) {
+ return getHttpServletRequest().getRequestDispatcher(path);
+ }
+
+ /**
+ * TODO: why check bodyAccessed?
+ */
+ public void setCharacterEncoding(String encoding)
+ throws UnsupportedEncodingException {
+ if (bodyAccessed) {
+ throw new IllegalStateException("Cannot set character encoding "
+ + "after HTTP body is accessed.");
+ }
+ super.setCharacterEncoding(encoding);
+ }
+
+ // Private Methods ---------------------------------------------------------
+
+ /**
+ * Is this attribute name a reserved name (by the J2EE spec)?. Reserved
+ * names begin with "java." or "javax.".
+ *
+ * @return true if the name is reserved.
+ */
+ private boolean isNameReserved(String name) {
+ return name.startsWith("java.") || name.startsWith("javax.");
+ }
+
+ private boolean isPortletModeAllowedByPortlet(PortletMode mode) {
+ if (isPortletModeMandatory(mode)) {
+ return true;
+ }
+
+ PortletDD dd = internalPortletWindow.getPortletEntity()
+ .getPortletDefinition();
+
+ Iterator mimes = dd.getSupports().iterator();
+ while (mimes.hasNext()) {
+ Iterator modes = ((SupportsDD) mimes.next()).getPortletModes().iterator();
+ while (modes.hasNext()) {
+ String m = (String) modes.next();
+ if (m.equals(mode.toString())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isPortletModeAllowedByPortal(PortletMode mode) {
+ Enumeration supportedModes = portalContext.getSupportedPortletModes();
+ while (supportedModes.hasMoreElements()) {
+ if (supportedModes.nextElement().toString().equals(
+ (mode.toString()))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isPortletModeMandatory(PortletMode mode) {
+ return PortletMode.VIEW.equals(mode) || PortletMode.EDIT.equals(mode) || PortletMode.HELP.equals(mode);
+ }
+}
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java?rev=607450&r1=607449&r2=607450&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java Sat Dec 29 09:31:56 2007
@@ -1,186 +1,186 @@
-/*
+/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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
- *
- * 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.pluto.internal.impl;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.portlet.PortletResponse;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.internal.InternalPortletResponse;
-import org.apache.pluto.internal.InternalPortletWindow;
-import org.apache.pluto.spi.ResourceURLProvider;
-import org.apache.pluto.util.ArgumentUtility;
-import org.apache.pluto.util.PrintWriterServletOutputStream;
-
-/**
- * Abstract <code>javax.portlet.PortletResponse</code> implementation.
- * This class also implements InternalPortletResponse.
- *
- */
-public abstract class PortletResponseImpl extends HttpServletResponseWrapper
-implements PortletResponse, InternalPortletResponse {
-
- // Private Member Variables ------------------------------------------------
-
- /** The portlet container. */
- private PortletContainer container;
-
- /** The internal portlet window. */
- private InternalPortletWindow internalPortletWindow;
-
- /** The servlet request of the target/portlet's web module. */
- private HttpServletRequest httpServletRequest;
-
- private boolean usingWriter;
- private boolean usingStream;
-
- private ServletOutputStream wrappedWriter;
-
-
- // Constructor -------------------------------------------------------------
-
- public PortletResponseImpl(PortletContainer container,
- InternalPortletWindow internalPortletWindow,
- HttpServletRequest servletRequest,
- HttpServletResponse servletResponse) {
- super(servletResponse);
- this.container = container;
- this.httpServletRequest = servletRequest;
- this.internalPortletWindow = internalPortletWindow;
- }
-
-
- // PortletResponse Impl ----------------------------------------------------
-
- public void addProperty(String name, String value) {
- ArgumentUtility.validateNotNull("propertyName", name);
- container.getRequiredContainerServices()
- .getPortalCallbackService()
- .addResponseProperty(
- getHttpServletRequest(),
- internalPortletWindow,
- name, value);
- }
-
- public void setProperty(String name, String value) {
- ArgumentUtility.validateNotNull("propertyName", name);
- container.getRequiredContainerServices()
- .getPortalCallbackService()
- .setResponseProperty(
- getHttpServletRequest(),
- internalPortletWindow,
- name, value);
- }
-
- public String encodeURL(String path) {
- if (path.indexOf("://") == -1 && !path.startsWith("/")) {
- throw new IllegalArgumentException(
- "only absolute URLs or full path URIs are allowed");
- }
-
- ResourceURLProvider provider = getContainer()
- .getRequiredContainerServices()
- .getPortalCallbackService()
- .getResourceURLProvider(
- httpServletRequest,
- internalPortletWindow);
- if (path.indexOf("://") != -1) {
- provider.setAbsoluteURL(path);
- } else {
- provider.setFullPath(path);
- }
- return getHttpServletResponse().encodeURL(provider.toString());
- }
-
-
- // InternalPortletResponse impl --------------------------------------------
-
- public InternalPortletWindow getInternalPortletWindow() {
- return internalPortletWindow;
- }
-
-
- // Internal Methods --------------------------------------------------------
-
- /**
- * Returns the portlet container.
- * @return the portlet container.
- */
- protected PortletContainer getContainer() {
- return container;
- }
-
- /**
- * Returns the nested HttpServletRequest instance.
- * @return the nested HttpServletRequest instance.
- */
- protected HttpServletRequest getHttpServletRequest() {
- return httpServletRequest;
- }
-
- /**
- * Returns the nested HttpServletResponse instance.
- * @return the nested HttpServletResponse instance.
- */
- public HttpServletResponse getHttpServletResponse() {
- return (HttpServletResponse) super.getResponse();
- }
-
-
- // HttpServletResponse Methods ---------------------------------------------
-
- public String encodeUrl(String url) {
- return this.encodeURL(url);
- }
-
- /**
- * TODO: javadoc about why we are using a wrapped writer here.
- * @see org.apache.pluto.util.PrintWriterServletOutputStream
- */
- public ServletOutputStream getOutputStream()
- throws IllegalStateException, IOException {
- if (usingWriter) {
- throw new IllegalStateException(
- "getPortletOutputStream can't be used "
- + "after getWriter was invoked.");
- }
- if (wrappedWriter == null) {
- wrappedWriter = new PrintWriterServletOutputStream(
- getHttpServletResponse().getWriter());
- }
- usingStream = true;
- return wrappedWriter;
- }
-
- public PrintWriter getWriter()
- throws IllegalStateException, IOException {
- if (usingStream) {
- throw new IllegalStateException(
- "getWriter can't be used "
- + "after getOutputStream was invoked.");
- }
- usingWriter = true;
- return getHttpServletResponse().getWriter();
- }
-
-}
+ * 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.pluto.internal.impl;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.portlet.PortletResponse;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.apache.pluto.PortletContainer;
+import org.apache.pluto.internal.InternalPortletResponse;
+import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.spi.ResourceURLProvider;
+import org.apache.pluto.util.ArgumentUtility;
+import org.apache.pluto.util.PrintWriterServletOutputStream;
+
+/**
+ * Abstract <code>javax.portlet.PortletResponse</code> implementation.
+ * This class also implements InternalPortletResponse.
+ *
+ */
+public abstract class PortletResponseImpl extends HttpServletResponseWrapper
+implements PortletResponse, InternalPortletResponse {
+
+ // Private Member Variables ------------------------------------------------
+
+ /** The portlet container. */
+ private PortletContainer container;
+
+ /** The internal portlet window. */
+ private InternalPortletWindow internalPortletWindow;
+
+ /** The servlet request of the target/portlet's web module. */
+ private HttpServletRequest httpServletRequest;
+
+ private boolean usingWriter;
+ private boolean usingStream;
+
+ private ServletOutputStream wrappedWriter;
+
+
+ // Constructor -------------------------------------------------------------
+
+ public PortletResponseImpl(PortletContainer container,
+ InternalPortletWindow internalPortletWindow,
+ HttpServletRequest servletRequest,
+ HttpServletResponse servletResponse) {
+ super(servletResponse);
+ this.container = container;
+ this.httpServletRequest = servletRequest;
+ this.internalPortletWindow = internalPortletWindow;
+ }
+
+
+ // PortletResponse Impl ----------------------------------------------------
+
+ public void addProperty(String name, String value) {
+ ArgumentUtility.validateNotNull("propertyName", name);
+ container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .addResponseProperty(
+ getHttpServletRequest(),
+ internalPortletWindow,
+ name, value);
+ }
+
+ public void setProperty(String name, String value) {
+ ArgumentUtility.validateNotNull("propertyName", name);
+ container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .setResponseProperty(
+ getHttpServletRequest(),
+ internalPortletWindow,
+ name, value);
+ }
+
+ public String encodeURL(String path) {
+ if (path.indexOf("://") == -1 && !path.startsWith("/")) {
+ throw new IllegalArgumentException(
+ "only absolute URLs or full path URIs are allowed");
+ }
+
+ ResourceURLProvider provider = getContainer()
+ .getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getResourceURLProvider(
+ httpServletRequest,
+ internalPortletWindow);
+ if (path.indexOf("://") != -1) {
+ provider.setAbsoluteURL(path);
+ } else {
+ provider.setFullPath(path);
+ }
+ return getHttpServletResponse().encodeURL(provider.toString());
+ }
+
+
+ // InternalPortletResponse impl --------------------------------------------
+
+ public InternalPortletWindow getInternalPortletWindow() {
+ return internalPortletWindow;
+ }
+
+
+ // Internal Methods --------------------------------------------------------
+
+ /**
+ * Returns the portlet container.
+ * @return the portlet container.
+ */
+ protected PortletContainer getContainer() {
+ return container;
+ }
+
+ /**
+ * Returns the nested HttpServletRequest instance.
+ * @return the nested HttpServletRequest instance.
+ */
+ protected HttpServletRequest getHttpServletRequest() {
+ return httpServletRequest;
+ }
+
+ /**
+ * Returns the nested HttpServletResponse instance.
+ * @return the nested HttpServletResponse instance.
+ */
+ public HttpServletResponse getHttpServletResponse() {
+ return (HttpServletResponse) super.getResponse();
+ }
+
+
+ // HttpServletResponse Methods ---------------------------------------------
+
+ public String encodeUrl(String url) {
+ return this.encodeURL(url);
+ }
+
+ /**
+ * TODO: javadoc about why we are using a wrapped writer here.
+ * @see org.apache.pluto.util.PrintWriterServletOutputStream
+ */
+ public ServletOutputStream getOutputStream()
+ throws IllegalStateException, IOException {
+ if (usingWriter) {
+ throw new IllegalStateException(
+ "getPortletOutputStream can't be used "
+ + "after getWriter was invoked.");
+ }
+ if (wrappedWriter == null) {
+ wrappedWriter = new PrintWriterServletOutputStream(
+ getHttpServletResponse().getWriter());
+ }
+ usingStream = true;
+ return wrappedWriter;
+ }
+
+ public PrintWriter getWriter()
+ throws IllegalStateException, IOException {
+ if (usingStream) {
+ throw new IllegalStateException(
+ "getWriter can't be used "
+ + "after getOutputStream was invoked.");
+ }
+ usingWriter = true;
+ return getHttpServletResponse().getWriter();
+ }
+
+}
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java?rev=607450&r1=607449&r2=607450&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java Sat Dec 29 09:31:56 2007
@@ -1,280 +1,280 @@
-/*
+/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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
- *
- * 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.pluto.internal.impl;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.portlet.PortletContext;
-import javax.portlet.PortletSession;
-import javax.portlet.PortletSessionUtil;
-import javax.servlet.http.HttpSessionContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.ServletContext;
-
-import org.apache.pluto.internal.InternalPortletWindow;
-import org.apache.pluto.util.ArgumentUtility;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Implementation of the <code>javax.portlet.PortletSession</code> interface.
- *
- */
-public class PortletSessionImpl implements PortletSession, HttpSession {
-
- /** Logger. */
- private static final Log LOG = LogFactory.getLog(PortletSessionImpl.class);
-
- /** The default scope (<code>PORTLET_SCOPE</code>) for storing objects. */
- private static final int DEFAULT_SCOPE = PortletSession.PORTLET_SCOPE;
-
- /** The portlet scope namespace as defined in PLT. 15.3. */
- private static final String PORTLET_SCOPE_NAMESPACE = "javax.portlet.p.";
-
- /** The portlet window ID / attribute name separator as defined in PLT. 15.3. */
- private static final char ID_NAME_SEPARATOR = '?';
-
-
- // Private Member Variables ------------------------------------------------
-
- /** The wrapped HttpSession object. */
- private HttpSession httpSession;
-
- /** The portlet context. */
- private PortletContext portletContext;
-
- /** The internal portlet window. */
- private InternalPortletWindow internalPortletWindow;
-
-
- // Constructor -------------------------------------------------------------
-
- /**
- * Constructs an instance.
- */
- public PortletSessionImpl(PortletContext portletContext,
- InternalPortletWindow internalPortletWindow,
- HttpSession httpSession) {
- this.portletContext = portletContext;
- this.internalPortletWindow = internalPortletWindow;
- this.httpSession = httpSession;
- }
-
-
- // PortletSession Impl: Attributes -----------------------------------------
-
- public Object getAttribute(String name) {
- return getAttribute(name, DEFAULT_SCOPE);
- }
-
- /**
- * Returns the attribute of the specified name under the given scope.
- *
- * @param name the attribute name.
- * @param scope the scope under which the attribute object is stored.
- * @return the attribute object.
- */
- public Object getAttribute(String name, int scope) {
- ArgumentUtility.validateNotNull("attributeName", name);
- String key = (scope == PortletSession.APPLICATION_SCOPE)
- ? name : createPortletScopedId(name);
- return httpSession.getAttribute(key);
- }
-
- public Enumeration getAttributeNames() {
- return getAttributeNames(DEFAULT_SCOPE);
- }
-
- public Enumeration getAttributeNames(int scope) {
- // Return all attribute names in the nested HttpSession object.
- if (scope == PortletSession.APPLICATION_SCOPE) {
- return httpSession.getAttributeNames();
- }
- // Return attribute names with the portlet-scoped prefix.
- else {
- Vector portletScopedNames = new Vector();
- for (Enumeration en = httpSession.getAttributeNames();
- en.hasMoreElements(); ) {
- String name = (String) en.nextElement();
- if (isInCurrentPortletScope(name)) {
- portletScopedNames.add(
- PortletSessionUtil.decodeAttributeName(name));
- }
- }
- return portletScopedNames.elements();
- }
- }
-
- public void removeAttribute(String name) {
- removeAttribute(name, DEFAULT_SCOPE);
- }
-
- public void removeAttribute(String name, int scope) {
- ArgumentUtility.validateNotNull("attributeName", name);
- if (scope == PortletSession.APPLICATION_SCOPE) {
- httpSession.removeAttribute(name);
- } else {
- httpSession.removeAttribute(createPortletScopedId(name));
- }
- }
-
- public void setAttribute(String name, Object value) {
- setAttribute(name, value, DEFAULT_SCOPE);
- }
-
- public void setAttribute(String name, Object value, int scope) {
- ArgumentUtility.validateNotNull("attributeName", name);
- if (scope == PortletSession.APPLICATION_SCOPE) {
- httpSession.setAttribute(name, value);
- } else {
- httpSession.setAttribute(createPortletScopedId(name), value);
- }
- }
-
-
- // PortletSession Impl: Other Methods --------------------------------------
-
- public PortletContext getPortletContext() {
- return portletContext;
- }
-
- public long getCreationTime() {
- return httpSession.getCreationTime();
- }
-
- public String getId() {
- return httpSession.getId();
- }
-
- public long getLastAccessedTime() {
- return httpSession.getLastAccessedTime();
- }
-
- public int getMaxInactiveInterval() {
- return httpSession.getMaxInactiveInterval();
- }
-
- public void invalidate() throws IllegalStateException {
- httpSession.invalidate();
- }
-
- public boolean isNew() throws IllegalStateException {
- return httpSession.isNew();
- }
-
- /**
- * Specifies the time, in seconds, between client requests, before the
- * portlet container invalidates this session. A negative time indicates
- * the session should never timeout.
- * <p>
- * [Portlet Spec. PLT. 15.4.] If the PortletSession object is invalidated
- * by a portlet, the portlet container must invalidate the associated
- * HttpSession object.
- * </p>
- * @param interval an integer specifying the number of seconds.
- */
- public void setMaxInactiveInterval(int interval) {
- httpSession.setMaxInactiveInterval(interval);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Session timeout set to: " + interval);
- }
- }
-
-
- // Private Methods ---------------------------------------------------------
-
- /**
- * Creates portlet-scoped ID for the specified attribute name.
- * Portlet-scoped ID for a given attribute name has the following form:
- * <code>javax.portlet.p.<ID>?<name></code>
- * where <code>ID</code> is a unique identification for the portlet window
- * (assigned by the portal/portlet-container) that must not contain a '?'
- * character. <code>name</code> is the attribute name.
- * <p>
- * Refer to Portlet Specification PLT. 15.3 for more details.
- * </p>
- * @param name the attribute name.
- * @return portlet-scoped ID for the attribute name.
- */
- private String createPortletScopedId(String name) {
- StringBuffer buffer = new StringBuffer();
- buffer.append(PORTLET_SCOPE_NAMESPACE);
- buffer.append(internalPortletWindow.getId().getStringId());
- buffer.append(ID_NAME_SEPARATOR);
- buffer.append(name);
- return buffer.toString();
- }
-
- /**
- * Checks if the attribute name in APPLICATION_SCOPE is in the current
- * portlet scope.
- * @param name the attribute name to check.
- * @return true if the attribute name is in the current portlet scope.
- * @see #createPortletScopedId(String)
- */
- private boolean isInCurrentPortletScope(String name) {
- // Portlet-scoped attribute names MUST start with "javax.portlet.p.",
- // and contain the ID-name separator '?'.
- if (name.startsWith(PORTLET_SCOPE_NAMESPACE)
- && name.indexOf(ID_NAME_SEPARATOR) > -1) {
- String id = name.substring(PORTLET_SCOPE_NAMESPACE.length(),
- name.indexOf(ID_NAME_SEPARATOR));
- return (id.equals(internalPortletWindow.getId().getStringId()));
- }
- // Application-scoped attribute names are not in portlet scope.
- else {
- return false;
- }
- }
-
-
- // HttpSession Impl --------------------------------------------------------
-
- public ServletContext getServletContext() {
- return httpSession.getServletContext();
- }
-
- /**
- * DEPRECATED: implemented for backwards compatability with HttpSession.
- * @deprecated
- */
- public HttpSessionContext getSessionContext() {
- return httpSession.getSessionContext();
- }
-
- public Object getValue(String name) {
- return this.getAttribute(name, DEFAULT_SCOPE);
- }
-
- /**
- * DEPRECATED: Implemented for backwards compatibility with HttpSession.
- * @deprecated
- */
- public String[] getValueNames() {
- return httpSession.getValueNames();
- }
-
- public void putValue(String name, Object value) {
- this.setAttribute(name, value, DEFAULT_SCOPE);
- }
-
- public void removeValue(String name) {
- this.removeAttribute(name, DEFAULT_SCOPE);
- }
-
-}
+ * 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.pluto.internal.impl;
+
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.portlet.PortletContext;
+import javax.portlet.PortletSession;
+import javax.portlet.PortletSessionUtil;
+import javax.servlet.http.HttpSessionContext;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+
+import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.util.ArgumentUtility;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Implementation of the <code>javax.portlet.PortletSession</code> interface.
+ *
+ */
+public class PortletSessionImpl implements PortletSession, HttpSession {
+
+ /** Logger. */
+ private static final Log LOG = LogFactory.getLog(PortletSessionImpl.class);
+
+ /** The default scope (<code>PORTLET_SCOPE</code>) for storing objects. */
+ private static final int DEFAULT_SCOPE = PortletSession.PORTLET_SCOPE;
+
+ /** The portlet scope namespace as defined in PLT. 15.3. */
+ private static final String PORTLET_SCOPE_NAMESPACE = "javax.portlet.p.";
+
+ /** The portlet window ID / attribute name separator as defined in PLT. 15.3. */
+ private static final char ID_NAME_SEPARATOR = '?';
+
+
+ // Private Member Variables ------------------------------------------------
+
+ /** The wrapped HttpSession object. */
+ private HttpSession httpSession;
+
+ /** The portlet context. */
+ private PortletContext portletContext;
+
+ /** The internal portlet window. */
+ private InternalPortletWindow internalPortletWindow;
+
+
+ // Constructor -------------------------------------------------------------
+
+ /**
+ * Constructs an instance.
+ */
+ public PortletSessionImpl(PortletContext portletContext,
+ InternalPortletWindow internalPortletWindow,
+ HttpSession httpSession) {
+ this.portletContext = portletContext;
+ this.internalPortletWindow = internalPortletWindow;
+ this.httpSession = httpSession;
+ }
+
+
+ // PortletSession Impl: Attributes -----------------------------------------
+
+ public Object getAttribute(String name) {
+ return getAttribute(name, DEFAULT_SCOPE);
+ }
+
+ /**
+ * Returns the attribute of the specified name under the given scope.
+ *
+ * @param name the attribute name.
+ * @param scope the scope under which the attribute object is stored.
+ * @return the attribute object.
+ */
+ public Object getAttribute(String name, int scope) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+ String key = (scope == PortletSession.APPLICATION_SCOPE)
+ ? name : createPortletScopedId(name);
+ return httpSession.getAttribute(key);
+ }
+
+ public Enumeration getAttributeNames() {
+ return getAttributeNames(DEFAULT_SCOPE);
+ }
+
+ public Enumeration getAttributeNames(int scope) {
+ // Return all attribute names in the nested HttpSession object.
+ if (scope == PortletSession.APPLICATION_SCOPE) {
+ return httpSession.getAttributeNames();
+ }
+ // Return attribute names with the portlet-scoped prefix.
+ else {
+ Vector portletScopedNames = new Vector();
+ for (Enumeration en = httpSession.getAttributeNames();
+ en.hasMoreElements(); ) {
+ String name = (String) en.nextElement();
+ if (isInCurrentPortletScope(name)) {
+ portletScopedNames.add(
+ PortletSessionUtil.decodeAttributeName(name));
+ }
+ }
+ return portletScopedNames.elements();
+ }
+ }
+
+ public void removeAttribute(String name) {
+ removeAttribute(name, DEFAULT_SCOPE);
+ }
+
+ public void removeAttribute(String name, int scope) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+ if (scope == PortletSession.APPLICATION_SCOPE) {
+ httpSession.removeAttribute(name);
+ } else {
+ httpSession.removeAttribute(createPortletScopedId(name));
+ }
+ }
+
+ public void setAttribute(String name, Object value) {
+ setAttribute(name, value, DEFAULT_SCOPE);
+ }
+
+ public void setAttribute(String name, Object value, int scope) {
+ ArgumentUtility.validateNotNull("attributeName", name);
+ if (scope == PortletSession.APPLICATION_SCOPE) {
+ httpSession.setAttribute(name, value);
+ } else {
+ httpSession.setAttribute(createPortletScopedId(name), value);
+ }
+ }
+
+
+ // PortletSession Impl: Other Methods --------------------------------------
+
+ public PortletContext getPortletContext() {
+ return portletContext;
+ }
+
+ public long getCreationTime() {
+ return httpSession.getCreationTime();
+ }
+
+ public String getId() {
+ return httpSession.getId();
+ }
+
+ public long getLastAccessedTime() {
+ return httpSession.getLastAccessedTime();
+ }
+
+ public int getMaxInactiveInterval() {
+ return httpSession.getMaxInactiveInterval();
+ }
+
+ public void invalidate() throws IllegalStateException {
+ httpSession.invalidate();
+ }
+
+ public boolean isNew() throws IllegalStateException {
+ return httpSession.isNew();
+ }
+
+ /**
+ * Specifies the time, in seconds, between client requests, before the
+ * portlet container invalidates this session. A negative time indicates
+ * the session should never timeout.
+ * <p>
+ * [Portlet Spec. PLT. 15.4.] If the PortletSession object is invalidated
+ * by a portlet, the portlet container must invalidate the associated
+ * HttpSession object.
+ * </p>
+ * @param interval an integer specifying the number of seconds.
+ */
+ public void setMaxInactiveInterval(int interval) {
+ httpSession.setMaxInactiveInterval(interval);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Session timeout set to: " + interval);
+ }
+ }
+
+
+ // Private Methods ---------------------------------------------------------
+
+ /**
+ * Creates portlet-scoped ID for the specified attribute name.
+ * Portlet-scoped ID for a given attribute name has the following form:
+ * <code>javax.portlet.p.<ID>?<name></code>
+ * where <code>ID</code> is a unique identification for the portlet window
+ * (assigned by the portal/portlet-container) that must not contain a '?'
+ * character. <code>name</code> is the attribute name.
+ * <p>
+ * Refer to Portlet Specification PLT. 15.3 for more details.
+ * </p>
+ * @param name the attribute name.
+ * @return portlet-scoped ID for the attribute name.
+ */
+ private String createPortletScopedId(String name) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(PORTLET_SCOPE_NAMESPACE);
+ buffer.append(internalPortletWindow.getId().getStringId());
+ buffer.append(ID_NAME_SEPARATOR);
+ buffer.append(name);
+ return buffer.toString();
+ }
+
+ /**
+ * Checks if the attribute name in APPLICATION_SCOPE is in the current
+ * portlet scope.
+ * @param name the attribute name to check.
+ * @return true if the attribute name is in the current portlet scope.
+ * @see #createPortletScopedId(String)
+ */
+ private boolean isInCurrentPortletScope(String name) {
+ // Portlet-scoped attribute names MUST start with "javax.portlet.p.",
+ // and contain the ID-name separator '?'.
+ if (name.startsWith(PORTLET_SCOPE_NAMESPACE)
+ && name.indexOf(ID_NAME_SEPARATOR) > -1) {
+ String id = name.substring(PORTLET_SCOPE_NAMESPACE.length(),
+ name.indexOf(ID_NAME_SEPARATOR));
+ return (id.equals(internalPortletWindow.getId().getStringId()));
+ }
+ // Application-scoped attribute names are not in portlet scope.
+ else {
+ return false;
+ }
+ }
+
+
+ // HttpSession Impl --------------------------------------------------------
+
+ public ServletContext getServletContext() {
+ return httpSession.getServletContext();
+ }
+
+ /**
+ * DEPRECATED: implemented for backwards compatability with HttpSession.
+ * @deprecated
+ */
+ public HttpSessionContext getSessionContext() {
+ return httpSession.getSessionContext();
+ }
+
+ public Object getValue(String name) {
+ return this.getAttribute(name, DEFAULT_SCOPE);
+ }
+
+ /**
+ * DEPRECATED: Implemented for backwards compatibility with HttpSession.
+ * @deprecated
+ */
+ public String[] getValueNames() {
+ return httpSession.getValueNames();
+ }
+
+ public void putValue(String name, Object value) {
+ this.setAttribute(name, value, DEFAULT_SCOPE);
+ }
+
+ public void removeValue(String name) {
+ this.removeAttribute(name, DEFAULT_SCOPE);
+ }
+
+}
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java
------------------------------------------------------------------------------
svn:eol-style = native