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/03/19 01:06:09 UTC

svn commit: r638649 - in /portals/pluto/branches/pluto-1.1.x/pluto-container/src: main/java/org/apache/pluto/internal/impl/ main/java/org/apache/pluto/spi/optional/ test/java/org/apache/pluto/internal/impl/

Author: edalquist
Date: Tue Mar 18 17:06:08 2008
New Revision: 638649

URL: http://svn.apache.org/viewvc?rev=638649&view=rev
Log:
PLUTO-477 Allow the UserInfoService to return a null map
Added unit test to verify fix
Cleaned up javadocs on UserInfoService to more accurately describe the implementation contract.

Modified:
    portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
    portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java
    portals/pluto/branches/pluto-1.1.x/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java

Modified: portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java?rev=638649&r1=638648&r2=638649&view=diff
==============================================================================
--- portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java (original)
+++ portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java Tue Mar 18 17:06:08 2008
@@ -44,6 +44,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.OptionalContainerServices;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.descriptors.common.SecurityRoleRefDD;
@@ -54,6 +55,8 @@
 import org.apache.pluto.internal.InternalPortletRequest;
 import org.apache.pluto.internal.InternalPortletWindow;
 import org.apache.pluto.internal.PortletEntity;
+import org.apache.pluto.spi.optional.PortletRegistryService;
+import org.apache.pluto.spi.optional.UserInfoService;
 import org.apache.pluto.util.ArgumentUtility;
 import org.apache.pluto.util.Enumerator;
 import org.apache.pluto.util.NamespaceMapper;
@@ -436,19 +439,24 @@
     }
 
     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 );
+            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.getUserAttributes().iterator();
             while(i.hasNext()) {

Modified: portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java?rev=638649&r1=638648&r2=638649&view=diff
==============================================================================
--- portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java (original)
+++ portals/pluto/branches/pluto-1.1.x/pluto-container/src/main/java/org/apache/pluto/spi/optional/UserInfoService.java Tue Mar 18 17:06:08 2008
@@ -35,16 +35,22 @@
      * To access user information attributes as defined in PLT.17
      * of JSR-168.
      *
-     * @param request Used to extract the authenticated user name.
-     * @return A map of names and values of user information attributes
-     *         for a particular authenticated user.
      * @deprecated use {@link #getUserInfo(PortletRequest, PortletWindow)}
      */
     Map getUserInfo(PortletRequest request) throws PortletContainerException;
 
     /**
      * Retrieve the user attribues associated with the given
-     * request and window.
+     * request and window. This can return null if the user associated with the
+     * request is un-authenticated.
+     * 
+     * The results of this call will be filtered using the the UserAttributeDDs
+     * from the PortletAppDD for the PortletWindow.
+     *  
+     * @param request Used to extract the authenticated user name.
+     * @param window The portlet window to get user attributes for.
+     * @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;
 }

Modified: portals/pluto/branches/pluto-1.1.x/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/pluto-1.1.x/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java?rev=638649&r1=638648&r2=638649&view=diff
==============================================================================
--- portals/pluto/branches/pluto-1.1.x/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java (original)
+++ portals/pluto/branches/pluto-1.1.x/pluto-container/src/test/java/org/apache/pluto/internal/impl/PortletRequestImplTest.java Tue Mar 18 17:06:08 2008
@@ -16,20 +16,25 @@
  */
 package org.apache.pluto.internal.impl;
 
+import java.util.Map;
+
+import javax.portlet.PortalContext;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletPreferences;
+import javax.portlet.PortletSession;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
 import org.apache.pluto.OptionalContainerServices;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.RequiredContainerServices;
 import org.apache.pluto.core.PortletContainerImpl;
+import org.apache.pluto.internal.InternalPortletRequest;
 import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.spi.optional.UserInfoService;
 import org.jmock.Mock;
 import org.jmock.cglib.MockObjectTestCase;
 
-import javax.portlet.PortalContext;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletSession;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
 /**
  * Created by IntelliJ IDEA.
  * User: esm
@@ -42,6 +47,8 @@
     // Mock Objects
     private Mock mockContainer = null;
     private Mock mockServices = null;
+    private Mock mockOptionalServices = null;
+    private Mock mockUserInfoService = null;
     private Mock mockPortalContext = null;
     private Mock mockPortletContext = null;
     private Mock mockHttpServletRequest = null;
@@ -57,6 +64,8 @@
 
         // Create mocks
         mockServices = mock( RequiredContainerServices.class );
+        mockOptionalServices = mock( OptionalContainerServices.class );
+        mockUserInfoService = mock( UserInfoService.class );
         mockPortalContext = mock( PortalContext.class );
         mockPortletContext = mock( PortletContext.class );
         mockContainer = mock( PortletContainerImpl.class,
@@ -108,5 +117,36 @@
         mockHttpSession.expects( never() ).method( "invalidate" );
         
         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);
+        }
+
+        public TestPortletRequestImpl(PortletContainer container, InternalPortletWindow internalPortletWindow, HttpServletRequest servletRequest) {
+            super(container, internalPortletWindow, servletRequest);
+        }
+
+        public PortletPreferences getPreferences() {
+            return null;
+        }
     }
 }