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 ed...@apache.org on 2008/07/23 19:47:08 UTC

svn commit: r679140 - in /portals/pluto/trunk: pluto-container/src/main/java/org/apache/pluto/ pluto-container/src/main/java/org/apache/pluto/core/ pluto-container/src/main/java/org/apache/pluto/internal/impl/ pluto-container/src/main/java/org/apache/p...

Author: edalquist
Date: Wed Jul 23 10:47:08 2008
New Revision: 679140

URL: http://svn.apache.org/viewvc?rev=679140&view=rev
Log:
PLUTO-489 refactor request attribute handling into a optional spi

Added:
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java   (with props)
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java   (with props)
    portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java   (with props)
Modified:
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/OptionalContainerServices.java
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultOptionalContainerServices.java
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
    portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java
    portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java
    portals/pluto/trunk/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/ContainerServicesImpl.java

Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/OptionalContainerServices.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/OptionalContainerServices.java?rev=679140&r1=679139&r2=679140&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/OptionalContainerServices.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/OptionalContainerServices.java Wed Jul 23 10:47:08 2008
@@ -22,6 +22,7 @@
 import org.apache.pluto.spi.optional.PortletRegistryService;
 import org.apache.pluto.spi.optional.PortletInfoService;
 import org.apache.pluto.spi.optional.PortalAdministrationService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
 import org.apache.pluto.spi.optional.UserInfoService;
 
 /**
@@ -94,5 +95,13 @@
      * @return user info service
      */
     UserInfoService getUserInfoService();
+    
+    /**
+     * Returns the request attribute service implementation used by the
+     * container.
+     * 
+     * @return request attribute service
+     */
+    RequestAttributeService getRequestAttributeService();    
 
 }

Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultOptionalContainerServices.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultOptionalContainerServices.java?rev=679140&r1=679139&r2=679140&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultOptionalContainerServices.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultOptionalContainerServices.java Wed Jul 23 10:47:08 2008
@@ -17,12 +17,13 @@
 package org.apache.pluto.core;
 
 import org.apache.pluto.OptionalContainerServices;
-import org.apache.pluto.spi.optional.PortletPreferencesService;
+import org.apache.pluto.spi.optional.PortalAdministrationService;
 import org.apache.pluto.spi.optional.PortletEnvironmentService;
+import org.apache.pluto.spi.optional.PortletInfoService;
 import org.apache.pluto.spi.optional.PortletInvokerService;
+import org.apache.pluto.spi.optional.PortletPreferencesService;
 import org.apache.pluto.spi.optional.PortletRegistryService;
-import org.apache.pluto.spi.optional.PortletInfoService;
-import org.apache.pluto.spi.optional.PortalAdministrationService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
 import org.apache.pluto.spi.optional.UserInfoService;
 
 /**
@@ -40,6 +41,7 @@
     private PortletInfoService portletInfoService;
     private PortalAdministrationService portalAdministrationService;
     private UserInfoService userInfoService;
+    private RequestAttributeService requestAttributeService;
 
 
     /**
@@ -54,6 +56,7 @@
         portletInfoService = new DefaultPortletInfoService();
         portalAdministrationService = new DefaultPortalAdministrationService();
         userInfoService = new DefaultUserInfoService();
+        requestAttributeService = new DefaultRequestAttributeService(this);
     }
 
     /**
@@ -92,9 +95,13 @@
             portalAdministrationService = root.getPortalAdministrationService();
         }
 
-		 if(root.getUserInfoService() != null) {
-			 userInfoService = root.getUserInfoService();
-		 }
+		if(root.getUserInfoService() != null) {
+		    userInfoService = root.getUserInfoService();
+		}
+
+        if(root.getRequestAttributeService() != null) {
+            requestAttributeService = root.getRequestAttributeService();
+        }
 
     }
 
@@ -130,5 +137,8 @@
         return userInfoService;
     }
 
+    public RequestAttributeService getRequestAttributeService() {
+        return requestAttributeService;
+    }
 }
 

Added: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java?rev=679140&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java (added)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java Wed Jul 23 10:47:08 2008
@@ -0,0 +1,205 @@
+/*
+ * 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.core;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.portlet.PortletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.OptionalContainerServices;
+import org.apache.pluto.PortletContainerException;
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.PortletWindowID;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
+import org.apache.pluto.descriptors.portlet.UserAttributeDD;
+import org.apache.pluto.spi.optional.PortletRegistryService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
+import org.apache.pluto.spi.optional.UserInfoService;
+import org.apache.pluto.util.NamespaceMapper;
+import org.apache.pluto.util.impl.NamespaceMapperImpl;
+
+/**
+ * Delegates request attribute storage and retrieval to the passed HttpServletRequest. Also includes logic for retrieving
+ * and filtering the {@link PortletRequest#USER_INFO} Map in {@link #createUserInfoMap(PortletRequest, PortletWindow)}
+ * 
+ * @author Eric Dalquist
+ * @version $Revision$
+ */
+public class DefaultRequestAttributeService implements RequestAttributeService {
+    private static final Log LOG = LogFactory.getLog(DefaultRequestAttributeService.class);
+
+    
+    private final NamespaceMapper mapper = new NamespaceMapperImpl();
+
+    private OptionalContainerServices optionalContainerServices;
+    
+    public DefaultRequestAttributeService() {
+    }
+    
+    public DefaultRequestAttributeService(OptionalContainerServices optionalContainerServices) {
+        this.optionalContainerServices = optionalContainerServices;
+    }
+    
+    public OptionalContainerServices getOptionalContainerServices() {
+        return optionalContainerServices;
+    }
+    public void setOptionalContainerServices(OptionalContainerServices optionalContainerServices) {
+        this.optionalContainerServices = optionalContainerServices;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.spi.optional.RequestAttributeService#getAttribute(javax.portlet.PortletRequest, javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String)
+     */
+    public Object getAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name) {
+        if (PortletRequest.USER_INFO.equals(name)) {
+            return this.createUserInfoMap(portletRequest, portletWindow);
+        }
+        
+        final String encodedName = this.encodeAttributeName(portletWindow, name);
+
+        final Object attribute = httpServletRequest.getAttribute(encodedName);
+        if (attribute != null) {
+            return attribute;
+        }
+        
+        return httpServletRequest.getAttribute(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.spi.optional.RequestAttributeService#getAttributeNames(javax.portlet.PortletRequest, javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow)
+     */
+    public Enumeration<String> getAttributeNames(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow) {
+        final Enumeration<String> attributes = httpServletRequest.getAttributeNames();
+
+        final List<String> portletAttributes = new LinkedList<String>();
+        while (attributes.hasMoreElements()) {
+            final String attribute = attributes.nextElement();
+
+            final String portletAttribute;
+            if (this.isNameReserved(attribute)) {
+                portletAttribute = attribute;
+            }
+            else {
+                final PortletWindowID portletWindowId = portletWindow.getId();
+                portletAttribute = this.mapper.decode(portletWindowId, attribute);
+            }
+
+            if (portletAttribute != null) { // it is in the portlet's namespace
+                portletAttributes.add(portletAttribute);
+            }
+        }
+        
+        //TODO should PortletRequest.USER_INFO be added?
+
+        return Collections.enumeration(portletAttributes);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.spi.optional.RequestAttributeService#removeAttribute(javax.portlet.PortletRequest, javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String)
+     */
+    public void removeAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name) {
+        final String encodedName = this.encodeAttributeName(portletWindow, name);
+        
+        httpServletRequest.removeAttribute(encodedName);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.spi.optional.RequestAttributeService#setAttribute(javax.portlet.PortletRequest, javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String, java.lang.Object)
+     */
+    public void setAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name, Object value) {
+        final String encodedName = this.encodeAttributeName(portletWindow, name);
+        
+        if (value == null) {
+            httpServletRequest.removeAttribute(name);
+        }
+        else {
+            httpServletRequest.setAttribute(encodedName, value);
+        }
+    }
+
+    /**
+     * 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.
+     */
+    protected boolean isNameReserved(String name) {
+        return name.startsWith("java.") || name.startsWith("javax.");
+    }
+
+    /**
+     * Encodes the attribute name using the portlet window id if it is not reserved 
+     */
+    protected String encodeAttributeName(PortletWindow portletWindow, String name) {
+        final String encodedName;
+        if (this.isNameReserved(name)) {
+            encodedName = name;
+        }
+        else {
+            final PortletWindowID portletWindowId = portletWindow.getId();
+            encodedName = this.mapper.encode(portletWindowId, name);
+        }
+        return encodedName;
+    }
+
+    /**
+     * Retrieves the UserInfoService from the OptionalContainerServices, gets the user-info Map
+     * and fitlers it for the attributes in the portlet descriptor.
+     */
+    protected Map<String, String> createUserInfoMap(PortletRequest portletRequest, PortletWindow portletWindow) {
+        final Map<String, String> userInfoMap = new HashMap<String, String>();
+        try {
+            final UserInfoService userInfoService = this.optionalContainerServices.getUserInfoService();
+
+            //PLUTO-388 fix:
+            //The PortletWindow is currently ignored in the implementing class
+            // See: org.apache.pluto.core.DefaultUserInfoService
+            final Map<String, String> allMap = userInfoService.getUserInfo(portletRequest, portletWindow);
+
+            //PLUTO-477 null attribute maps are ok
+            if (null == allMap) {
+                return null;
+            }
+
+            final PortletRegistryService portletRegistryService = optionalContainerServices.getPortletRegistryService();
+            final PortletAppDD dd = portletRegistryService.getPortletApplicationDescriptor(portletWindow.getContextPath());
+
+            final List<UserAttributeDD> mappedUserAttributes = dd.getUserAttribute();
+            for (final UserAttributeDD userAttrDD : mappedUserAttributes) {
+                final String mappedName = userAttrDD.getName();
+                final String value = allMap.get(mappedName);
+                if (value != null) {
+                    userInfoMap.put(mappedName, value);
+                }
+            }
+        }
+        catch (PortletContainerException e) {
+            LOG.warn("Unable to retrieve user attribute map for user " + portletRequest.getRemoteUser() + ".  Returning null.");
+            return null;
+        }
+
+        return Collections.unmodifiableMap(userInfoMap);
+    }
+}

Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/DefaultRequestAttributeService.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=679140&r1=679139&r2=679140&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 Wed Jul 23 10:47:08 2008
@@ -56,24 +56,18 @@
 import org.apache.pluto.Constants;
 import org.apache.pluto.OptionalContainerServices;
 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.spi.PortletURLProvider;
-import org.apache.pluto.spi.optional.PortletRegistryService;
-import org.apache.pluto.spi.optional.UserInfoService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
 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;
 
 
 /**
@@ -115,9 +109,6 @@
     /** Response content types. */
     private Vector contentTypes;
     
-    /** TODO: javadoc */
-    private NamespaceMapper mapper = new NamespaceMapperImpl();
-
     /** FIXME: do we really need this?
      * Flag indicating if the HTTP-Body has been accessed. */
     private boolean bodyAccessed = false;
@@ -434,80 +425,17 @@
     			return null;
     		}
     	}
-        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;
+    	
+        final OptionalContainerServices optionalContainerServices = container.getOptionalContainerServices();
+        final RequestAttributeService requestAttributeService = optionalContainerServices.getRequestAttributeService();
+        return requestAttributeService.getAttribute(this, this.getHttpServletRequest(), this.internalPortletWindow, name);
     }
 
     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();
+        final OptionalContainerServices optionalContainerServices = container.getOptionalContainerServices();
+        final RequestAttributeService requestAttributeService = optionalContainerServices.getRequestAttributeService();
+        return requestAttributeService.getAttributeNames(this, this.getHttpServletRequest(), this.internalPortletWindow);
     }
-
-    public Map createUserInfoMap() {
-
-        Map userInfoMap = new HashMap();
-        try {
-
-            final OptionalContainerServices optionalContainerServices = container.getOptionalContainerServices();
-            final UserInfoService userInfoService = optionalContainerServices.getUserInfoService();
-            
-            //PLUTO-388 fix:
-            //The PortletWindow is currently ignored in the implementing class
-            // See: org.apache.pluto.core.DefaultUserInfoService
-            final Map allMap = userInfoService.getUserInfo( this, this.internalPortletWindow );
-            
-            //PLUTO-477 null attribute maps are ok
-            if (null == allMap) {
-                return null;
-            }
-            
-            final PortletRegistryService portletRegistryService = optionalContainerServices.getPortletRegistryService();
-            final PortletAppDD dd = portletRegistryService.getPortletApplicationDescriptor(internalPortletWindow.getContextPath());
-
-            Iterator i = dd.getUserAttribute().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);
@@ -582,21 +510,17 @@
     }
 
     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);
-        }
+        final OptionalContainerServices optionalContainerServices = container.getOptionalContainerServices();
+        final RequestAttributeService requestAttributeService = optionalContainerServices.getRequestAttributeService();
+        requestAttributeService.setAttribute(this, this.getHttpServletRequest(), this.internalPortletWindow, name, value);
     }
 
     public void removeAttribute(String name) {
     	ArgumentUtility.validateNotNull("attributeName", name);
-        String encodedName = isNameReserved(name) ?
-                name : mapper.encode(internalPortletWindow.getId(), name);
-        getHttpServletRequest().removeAttribute(encodedName);
+
+        final OptionalContainerServices optionalContainerServices = container.getOptionalContainerServices();
+        final RequestAttributeService requestAttributeService = optionalContainerServices.getRequestAttributeService();
+        requestAttributeService.removeAttribute(this, this.getHttpServletRequest(), this.internalPortletWindow, name);
     }
 
     public String getRequestedSessionId() {
@@ -745,16 +669,6 @@
     
     // 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;

Added: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java?rev=679140&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java (added)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java Wed Jul 23 10:47:08 2008
@@ -0,0 +1,52 @@
+/*
+ * 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.spi.optional;
+
+import java.util.Enumeration;
+
+import javax.portlet.PortletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.pluto.PortletWindow;
+
+/**
+ * Interface for attribute manipulation on a request
+ * 
+ * @author Eric Dalquist
+ * @version $Revision$
+ */
+public interface RequestAttributeService {
+    /**
+     * Retrieve the named attribute for the HttpServletRequest and PortletWindow
+     */
+    public Object getAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name);
+    
+    /**
+     * Get an Enumeration of all available attribute names for the HttpServletRequest and PortletWindow
+     */
+    public Enumeration<String> getAttributeNames(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow);
+    
+    /**
+     * Set an attribute for the HttpServletRequest and PortletWindow
+     */
+    public void setAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name, Object value);
+    
+    /**
+     * Remove a named attribute for the HttpServletRequest and PortletWindow
+     */
+    public void removeAttribute(PortletRequest portletRequest, HttpServletRequest httpServletRequest, PortletWindow portletWindow, String name);
+}

Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/RequestAttributeService.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java?rev=679140&r1=679139&r2=679140&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java Wed Jul 23 10:47:08 2008
@@ -38,7 +38,8 @@
      *
      * @deprecated use {@link #getUserInfo(PortletRequest, PortletWindow)}
      */
-    Map getUserInfo(PortletRequest request) throws PortletContainerException;
+    @Deprecated
+    Map<String, String> getUserInfo(PortletRequest request) throws PortletContainerException;
 
     /**
      * Retrieve the user attribues associated with the given
@@ -53,5 +54,5 @@
      * @return A map of names and values of user information attributes
      *         for a particular authenticated user. null if the user is not authenticated.
      */
-    Map getUserInfo(PortletRequest request, PortletWindow window) throws PortletContainerException;
+    Map<String, String> getUserInfo(PortletRequest request, PortletWindow window) throws PortletContainerException;
 }
\ No newline at end of file

Added: portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java?rev=679140&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java (added)
+++ portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java Wed Jul 23 10:47:08 2008
@@ -0,0 +1,18 @@
+/*
+ * 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.core;
+

Propchange: portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/core/DefaultRequestAttributeServiceTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java?rev=679140&r1=679139&r2=679140&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java (original)
+++ portals/pluto/trunk/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java Wed Jul 23 10:47:08 2008
@@ -16,8 +16,6 @@
  */
 package org.apache.pluto.internal.impl;
 
-import java.util.Map;
-
 import javax.portlet.PortalContext;
 import javax.portlet.PortletContext;
 import javax.portlet.PortletPreferences;
@@ -28,11 +26,12 @@
 import org.apache.pluto.OptionalContainerServices;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.RequiredContainerServices;
+import org.apache.pluto.core.DefaultRequestAttributeService;
 import org.apache.pluto.core.PortletContainerImpl;
 import org.apache.pluto.internal.InternalPortletRequest;
 import org.apache.pluto.internal.InternalPortletWindow;
 import org.apache.pluto.spi.CCPPProfileService;
-import org.apache.pluto.spi.optional.UserInfoService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
 import org.jmock.Mock;
 import org.jmock.cglib.MockObjectTestCase;
 
@@ -50,7 +49,7 @@
     private Mock mockServices = null;
     private Mock mockCCPPProfileService = null;
     private Mock mockOptionalServices = null;
-    private Mock mockUserInfoService = null;
+    private Mock mockRequestAttributeService = null;
     private Mock mockPortalContext = null;
     private Mock mockPortletContext = null;
     private Mock mockHttpServletRequest = null;
@@ -68,8 +67,8 @@
         mockServices = mock( RequiredContainerServices.class );
         mockCCPPProfileService = mock( CCPPProfileService.class );
         mockOptionalServices = mock( OptionalContainerServices.class );
-        mockUserInfoService = mock( UserInfoService.class );
         mockPortalContext = mock( PortalContext.class );
+        mockRequestAttributeService = mock( RequestAttributeService.class );
         mockPortletContext = mock( PortletContext.class );
         mockContainer = mock( PortletContainerImpl.class,
                 new Class[] { String.class, RequiredContainerServices.class, OptionalContainerServices.class },
@@ -79,6 +78,7 @@
 
         // Constructor expectations for RenderRequestImpl
         mockContainer.expects( once() ).method( "getRequiredContainerServices" ).will( returnValue( mockServices.proxy() ) );
+        mockContainer.expects( once() ).method( "getOptionalContainerServices" ).will( returnValue( mockOptionalServices.proxy() ) );
         mockServices.expects( once() ).method( "getPortalContext" ).will( returnValue( mockPortalContext.proxy() ) );
     }
 
@@ -102,6 +102,10 @@
         
         mockContainer.expects(once()).method("getRequiredContainerServices").will(returnValue( mockServices.proxy() ));
         
+        mockContainer.expects( once() ).method( "getOptionalContainerServices" ).will( returnValue( mockOptionalServices.proxy() ) );
+        
+        mockOptionalServices.expects( exactly(2) ).method( "getRequestAttributeService" ).will( returnValue( new DefaultRequestAttributeService( (OptionalContainerServices)mockOptionalServices.proxy() ) ) ); //mockRequestAttributeService.proxy() ) );
+        
         mockHttpServletRequest.expects(once()).method("removeAttribute");
         mockHttpServletRequest.expects(once()).method("setAttribute");
 
@@ -131,23 +135,6 @@
         PortletSession s = request.getPortletSession( true );
     }
     
-    /**
-     * Test for PLUTO-477
-     */
-    public void testUnAuthenticatedCreateUserInfoMap() throws Exception {
-        this.mockUserInfoService.expects(once()).method("getUserInfo").will(returnValue(null));
-        
-        this.mockOptionalServices.expects(once()).method("getUserInfoService").will(returnValue(this.mockUserInfoService.proxy()));
-        
-        this.mockContainer.expects(once()).method("getOptionalContainerServices").will(returnValue(this.mockOptionalServices.proxy()));
-        
-        final TestPortletRequestImpl portletRequest = new TestPortletRequestImpl((PortletContainer)this.mockContainer.proxy(), 
-                                                                                 this.window, 
-                                                                                 (HttpServletRequest)this.mockHttpServletRequest.proxy());
-        final Map userInfoMap = portletRequest.createUserInfoMap();
-        assertNull(userInfoMap);
-    }
-    
     private static class TestPortletRequestImpl extends PortletRequestImpl {
         public TestPortletRequestImpl(InternalPortletRequest internalPortletRequest) {
             super(internalPortletRequest);

Modified: portals/pluto/trunk/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/ContainerServicesImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/ContainerServicesImpl.java?rev=679140&r1=679139&r2=679140&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/ContainerServicesImpl.java (original)
+++ portals/pluto/trunk/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/ContainerServicesImpl.java Wed Jul 23 10:47:08 2008
@@ -24,11 +24,12 @@
 import org.apache.pluto.spi.CCPPProfileService;
 import org.apache.pluto.spi.PortalCallbackService;
 import org.apache.pluto.spi.optional.PortalAdministrationService;
+import org.apache.pluto.spi.optional.PortletEnvironmentService;
 import org.apache.pluto.spi.optional.PortletInfoService;
+import org.apache.pluto.spi.optional.PortletInvokerService;
 import org.apache.pluto.spi.optional.PortletPreferencesService;
-import org.apache.pluto.spi.optional.PortletEnvironmentService;
 import org.apache.pluto.spi.optional.PortletRegistryService;
-import org.apache.pluto.spi.optional.PortletInvokerService;
+import org.apache.pluto.spi.optional.RequestAttributeService;
 import org.apache.pluto.spi.optional.UserInfoService;
 
 /**
@@ -117,5 +118,8 @@
     	return null;
     }
 
+    public RequestAttributeService getRequestAttributeService() {
+        return null;
+    }
 }