You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by wo...@apache.org on 2009/04/24 17:07:01 UTC

svn commit: r768331 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/ jetspeed-api/src/main/java/org/apache/jetspeed/ jetspeed-portal-resources/src/main/resources/assembly/

Author: woonsan
Date: Fri Apr 24 15:07:00 2009
New Revision: 768331

URL: http://svn.apache.org/viewvc?rev=768331&view=rev
Log:
JS2-818: Adds a new valve to refresh user's homepage from template based on a specific security attribute.

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/   (props changed)
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/CreateUserTemplatePagesValveImpl.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pipelines.xml

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Apr 24 15:07:00 2009
@@ -1,2 +1,2 @@
-target
+target
 surefire*.properties

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/CreateUserTemplatePagesValveImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/CreateUserTemplatePagesValveImpl.java?rev=768331&r1=768330&r2=768331&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/CreateUserTemplatePagesValveImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/CreateUserTemplatePagesValveImpl.java Fri Apr 24 15:07:00 2009
@@ -34,9 +34,12 @@
  * 
  * Create User Pages from template folder on first login feature
  * The CreateUserTemplatePagesValveImpl creates a new user's home page from the user template folder.
+ * <P>
+ * Note: this valve is deprecated. Please consider to use {@link RefreshUserHomepageValveImpl} instead.
+ * </P>
  * 
- * @author Woonsan Ko
  * @version $Id$
+ * @deprecated
  */
 public class CreateUserTemplatePagesValveImpl extends ProfilerValveImpl
 {

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java?rev=768331&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java Fri Apr 24 15:07:00 2009
@@ -0,0 +1,185 @@
+package org.apache.jetspeed.profiler.impl;
+
+import java.security.Principal;
+
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.login.LoginConstants;
+import org.apache.jetspeed.om.folder.Folder;
+import org.apache.jetspeed.om.folder.FolderNotFoundException;
+import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.pipeline.PipelineException;
+import org.apache.jetspeed.pipeline.valve.PageProfilerValve;
+import org.apache.jetspeed.pipeline.valve.ValveContext;
+import org.apache.jetspeed.portalsite.PortalSite;
+import org.apache.jetspeed.profiler.Profiler;
+import org.apache.jetspeed.profiler.ProfilerException;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.security.SecurityAttribute;
+import org.apache.jetspeed.security.SecurityAttributes;
+import org.apache.jetspeed.security.User;
+import org.apache.jetspeed.security.UserManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * RefreshUserHomepageValveImpl
+ * <P>
+ * This valve copies all folders and files from the user template folder to a user's homepage folder after the user logs on
+ * if a security attribute named 'org.apache.jetspeed.profiler.refreshUserHomepage' is set to 'true' for the user.
+ * </P>
+ * <P><EM>Note: this valve should be located after {@link PageProfilerValve} in the pipeline.</EM></P>
+ * 
+ * @version $Id$
+ */
+public class RefreshUserHomepageValveImpl extends ProfilerValveImpl
+{
+    private static final Logger log = LoggerFactory.getLogger(RefreshUserHomepageValveImpl.class);
+
+    protected PageManager pageManager;
+    protected UserManager userManager;
+    protected String defaultTemplateFolder = "/_user/template/";
+    protected boolean removeBeforeCopy;
+
+    /**
+     * CreateUserTemplatePagesValveImpl - constructor
+     *
+     * @param profiler profiler component reference
+     * @param portalSite portal site component reference
+     * @param requestFallback flag to enable root folder fallback
+     * @param useHistory flag to enable selection of last visited folder page
+     * @param pageManager pageManagerComponent reference
+     */
+    public RefreshUserHomepageValveImpl(Profiler profiler, PortalSite portalSite, boolean requestFallback, boolean useHistoryPageManager, PageManager pageManager, UserManager userManager)
+    {
+        super(profiler, portalSite, requestFallback, useHistoryPageManager);
+        this.pageManager = pageManager;
+        this.userManager = userManager;
+    }
+    
+    public void setDefaultTemplateFolder(String defaultTemplateFolder)
+    {
+        this.defaultTemplateFolder = defaultTemplateFolder;
+    }
+    
+    public void setRemoveBeforeCopy(boolean removeBeforeCopy)
+    {
+        this.removeBeforeCopy = removeBeforeCopy;
+    }
+    
+    /**
+     * @see org.apache.jetspeed.pipeline.valve.Valve#invoke(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.pipeline.valve.ValveContext)
+     */
+    public void invoke(RequestContext request, ValveContext context) throws PipelineException
+    {
+        boolean userHomepagesUpdated = false;
+        
+        if ("true".equals(request.getRequest().getSession().getAttribute(LoginConstants.LOGIN_CHECK)))
+        {
+            try
+            {
+                userHomepagesUpdated = updateUserHomepagesByTemplate(request);
+            }
+            catch (Exception e)
+            {
+                log.error("Exception occurred during creating user folder.", e);
+            }
+        }
+
+        if (userHomepagesUpdated)
+        {
+            super.invoke(request, context);
+        }
+        else
+        {
+            context.invokeNext(request);
+        }
+    }
+    
+    private boolean updateUserHomepagesByTemplate(RequestContext request) throws Exception
+    {
+        boolean userHomepagesUpdated = false;
+        
+        Principal userPrincipal = request.getUserPrincipal();
+        
+        if (userPrincipal == null)
+        {
+            throw new ProfilerException("Missing user principal for request: " + request.getPath());
+        }
+        
+        User user = userManager.getUser(userPrincipal.getName());
+        
+        if (user == null)
+        {
+            throw new ProfilerException("Cannot retrieve user for " + userPrincipal.getName());
+        }
+        
+        SecurityAttributes secAttrs = user.getSecurityAttributes();
+        SecurityAttribute secAtttr = secAttrs.getAttribute(PortalReservedParameters.USER_HOMEPAGE_REFRESH_FLAG);
+        
+        if (secAtttr != null && Boolean.parseBoolean(secAtttr.getStringValue()))
+        {
+            try
+            {
+                String templateFolder = (String) request.getAttribute(PortalReservedParameters.USER_HOMEPAGE_TEMPLATE_PATH);
+                
+                if (templateFolder == null)
+                {
+                    SecurityAttribute secAttrTemplatePath = secAttrs.getAttribute(PortalReservedParameters.USER_HOMEPAGE_TEMPLATE_PATH);
+                    
+                    if (secAttrTemplatePath != null)
+                    {
+                        templateFolder = secAttrTemplatePath.getStringValue();
+                        
+                        if (templateFolder != null && "".equals(templateFolder.trim()))
+                        {
+                            templateFolder = null;
+                        }
+                    }
+                }
+                
+                if (templateFolder == null)
+                {
+                    templateFolder = this.defaultTemplateFolder;
+                }
+                
+                Folder source = this.pageManager.getFolder(templateFolder);
+                
+                // copy the entire dir tree from the template folder
+                String userName = user.getName();
+                String userFolder = Folder.USER_FOLDER + userName;
+                
+                if (removeBeforeCopy)
+                {
+                    try
+                    {
+                        this.pageManager.removeFolder(this.pageManager.getFolder(userFolder));
+                    }
+                    catch (FolderNotFoundException e)
+                    {
+                    }
+                }
+                
+                this.pageManager.deepCopyFolder(source, userFolder, userName);
+                
+                // The user folder will have titles named after the user name.
+                Folder destFolder = this.pageManager.getFolder(userFolder);
+                destFolder.setTitle(userName);
+                destFolder.setShortTitle(userName);   
+                this.pageManager.updateFolder(destFolder);
+                
+                userHomepagesUpdated = true;
+            }
+            catch (Exception e)
+            {
+                throw e;
+            }
+            finally
+            {
+                secAtttr.setStringValue("false");
+            }
+        }
+        
+        return userHomepagesUpdated;
+    }
+
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/profiler/impl/RefreshUserHomepageValveImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java?rev=768331&r1=768330&r2=768331&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/PortalReservedParameters.java Fri Apr 24 15:07:00 2009
@@ -79,6 +79,10 @@
     public static final String PAGE_THEME_OVERRIDE_ATTRIBUTE = "org.apache.jetspeed.theme.override";
     public static final String PORTAL_FILTER_ATTRIBUTE = "org.apache.jetspeed.login.filter.PortalFilter";
     
+    // Reserved security attribute names
+    public static final String USER_HOMEPAGE_REFRESH_FLAG = "org.apache.jetspeed.profiler.refreshUserHomepage";
+    public static final String USER_HOMEPAGE_TEMPLATE_PATH = "org.apache.jetspeed.profiler.userHomepageTemplate";
+    
     //
     // Settings for Metadata on jetspeed-portlet.xml
     //

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pipelines.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pipelines.xml?rev=768331&r1=768330&r2=768331&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pipelines.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pipelines.xml Fri Apr 24 15:07:00 2009
@@ -138,9 +138,49 @@
   </bean>
 
   <!-- 
+   This valve copies all folders and files from the user template folder to a user's homepage folder after the user logs on
+   if a security attribute named 'org.apache.jetspeed.profiler.refreshUserHomepage' is set to 'true' for the user.
+   Note: this valve should be located after {@link PageProfilerValve} in the pipeline.
+   By the way, this valve replaces the valve, 'createUserTemplatePagesValve', which is deprecated.
+  -->
+  <bean id="refreshUserHomepageValve" class="org.apache.jetspeed.profiler.impl.RefreshUserHomepageValveImpl">
+    <meta key="j2:cat" value="default" />
+    <constructor-arg index="0">
+      <ref bean="org.apache.jetspeed.profiler.Profiler" />
+    </constructor-arg>
+    <constructor-arg index="1">
+      <ref bean="org.apache.jetspeed.portalsite.PortalSite" />
+    </constructor-arg>
+    <!--
+      request fallback to root folder/page enabled by default;
+      if set to false, requests generate HTTP 403/404 errors
+      for access errors or missing pages
+    -->
+    <constructor-arg index="2">
+      <value>true</value>
+    </constructor-arg>
+    <!--
+      use last visited page histories to select default page
+      for folder navigational urls; if set to false, the
+      default page specified in PSML, (or the first page in
+      the folder), is always selected
+    -->
+    <constructor-arg index="3">
+      <value>true</value>
+    </constructor-arg>
+    <constructor-arg index="4">
+      <ref bean="org.apache.jetspeed.page.PageManager" />
+    </constructor-arg>
+    <constructor-arg index="5">
+      <ref bean="org.apache.jetspeed.security.UserManager" />
+    </constructor-arg>
+  </bean>
+  
+  <!-- 
     To create new pages when a user first logs in from user template pages,
     add this valve after each profilerValve entry in the pipeline configs 
-    below
+    below.
+    Note: this valve is deprecated. Please consider to utilize 'refreshUserHomepageValve' in the above. 
   -->
   <bean id="createUserTemplatePagesValve" class="org.apache.jetspeed.profiler.impl.CreateUserTemplatePagesValveImpl">
     <meta key="j2:cat" value="default" />
@@ -487,6 +527,7 @@
         <ref bean="passwordCredentialValve" />
         <ref bean="loginValidationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <!--
           JS2-806  
         -->
@@ -520,6 +561,7 @@
         <ref bean="passwordCredentialValve" />
         <ref bean="loginValidationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="actionValve" />
         <ref bean="resourceValve" />
@@ -556,6 +598,7 @@
         <ref bean="capabilityValve" />
         <ref bean="portalURLValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="actionValve" />
       </list>
@@ -574,6 +617,7 @@
         <ref bean="capabilityValve" />
         <ref bean="portalURLValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="desktopActionValve" />
       </list>
@@ -594,6 +638,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="resourceValve" />
         <ref bean="portletValveTitleInHeader" />
@@ -613,6 +658,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="portletValveTitleInHeader" />
       </list>
@@ -631,6 +677,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <!--  this is the standard Jetspeed API entry point -->
         <ref bean="layoutValve" />
@@ -650,6 +697,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="AJAXValve" />
       </list>
@@ -667,6 +715,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="containerValve" />
         <ref bean="fileServerValve" />
         <ref bean="portletValve" />
@@ -686,6 +735,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="headerAggregatorValveDesktop" />
         <ref bean="desktopValve" />
       </list>
@@ -704,6 +754,7 @@
         <ref bean="securityValve" />
         <ref bean="localizationValve" />
         <ref bean="profilerValve" />
+        <ref bean="refreshUserHomepageValve" />
         <ref bean="headerAggregatorValveDesktop" />
         <ref bean="desktopValve" />
       </list>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org