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