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 ta...@apache.org on 2007/04/05 00:03:30 UTC

svn commit: r525623 - /portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java

Author: taylor
Date: Wed Apr  4 15:03:29 2007
New Revision: 525623

URL: http://svn.apache.org/viewvc?view=rev&rev=525623
Log:
https://issues.apache.org/jira/browse/JS2-665

Modified:
    portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java?view=diff&rev=525623&r1=525622&r2=525623
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/PageManagerUtils.java Wed Apr  4 15:03:29 2007
@@ -1,269 +1,276 @@
-/*
+/*
  * 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.jetspeed.page;
-
-import java.security.Principal;
-import java.util.Iterator;
-
-import javax.security.auth.Subject;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jetspeed.om.common.SecurityConstraints;
-import org.apache.jetspeed.om.folder.Folder;
-import org.apache.jetspeed.om.folder.FolderNotFoundException;
-import org.apache.jetspeed.om.page.Link;
-import org.apache.jetspeed.om.page.Page;
-import org.apache.jetspeed.page.document.NodeException;
-import org.apache.jetspeed.security.RolePrincipal;
-import org.apache.jetspeed.security.SecurityHelper;
-import org.apache.jetspeed.security.UserPrincipal;
-
-
-/**
- * PageManagerUtils
- * 
- * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
- * @version $Id: $
- */
-public class PageManagerUtils
-{
-    protected static Log log = LogFactory.getLog(PageManagerUtils.class);    
-    
-    /**
-     * Creates a user's home page from the roles of the current user.
-     * The use case: when a portal is setup to use shared pages, but then
-     * the user attempts to customize. At this point, we create the new page(s) for the user.
-     * 
-     * @param subject
-     */
-    public static void createUserHomePagesFromRoles(PageManager pageManager, Subject subject)
-    throws NodeException
-    {
-        Principal principal = SecurityHelper.getBestPrincipal(subject, UserPrincipal.class); 
-        if (principal == null)
-        {
-            String errorMessage = "Could not create user home for null principal";
-            log.error(errorMessage);
-            throw new NodeException(errorMessage);
-        }
-        try
-        {
-            String userName = principal.getName();            
-            // get user home
-            Folder newUserFolder;
-            if (pageManager.userFolderExists(userName))
-            {
-                newUserFolder = pageManager.getUserFolder(userName);
-            }
-            else
-            {
-                newUserFolder = pageManager.newFolder(Folder.USER_FOLDER + userName);
-                SecurityConstraints constraints = pageManager.newSecurityConstraints();
-                newUserFolder.setSecurityConstraints(constraints);
-                newUserFolder.getSecurityConstraints().setOwner(userName);
-                pageManager.updateFolder(newUserFolder);                
-            }            
-            // for each role for a user, deep copy the folder contents for that role 
-            // into the user's home
-            // TODO: this algorithm could actually merge pages on dups
-            Iterator roles = SecurityHelper.getPrincipals(subject, RolePrincipal.class).iterator();
-            while (roles.hasNext())
-            {                            
-                RolePrincipal role = (RolePrincipal)roles.next();
-                if (pageManager.folderExists(Folder.ROLE_FOLDER + role.getName()))
-                {
-                    Folder roleFolder = pageManager.getFolder(Folder.ROLE_FOLDER + role.getName());                    
-                    deepMergeFolder(pageManager, roleFolder, Folder.USER_FOLDER + newUserFolder.getName(), userName, role.getName());
-                }
-            }
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "createUserHomePagesFromRoles failed: " + e.getMessage();
-            log.error(errorMessage, e);
-            throw new NodeException(errorMessage, e);
-        }
-    }
-
-    /**
-     * Deep merges from a source folder into a destination path for the given owner.
-     * The unique name is used in conflict resolution for name collisions.
-     * Example: deep merge a given role folder 'X' into /_user/david
-     *          uniqueName = 'X'
-     *          owner = 'david'
-     *          destinationPath = '_user/david'
-     *          
-     * @param srcFolder
-     * @param destinationPath
-     * @param owner
-     * @param uniqueName
-     * @throws NodeException
-     */
-    public static void deepMergeFolder(PageManager pageManager, Folder srcFolder, String destinationPath, String owner, String uniqueName)
-    throws NodeException
-    {        
-        Iterator pages = srcFolder.getPages().iterator();
-        while (pages.hasNext())
-        {
-            Page srcPage = (Page)pages.next();
-            String path = concatenatePaths(destinationPath, srcPage.getName());
-            if (!pageManager.pageExists(path))
-            {
-                Page dstPage = pageManager.copyPage(srcPage, path);
-                pageManager.updatePage(dstPage);
-            }
-            else
-            {
-                path = concatenatePaths(destinationPath, uniqueName + "-" +srcPage.getName());               
-                Page dstPage = pageManager.copyPage(srcPage, path);                
-                pageManager.updatePage(dstPage);                
-            }
-        }
-     
-        Iterator links = srcFolder.getLinks().iterator();
-        while (links.hasNext())
-        {
-            Link srcLink = (Link)links.next();
-            String path = concatenatePaths(destinationPath, srcLink.getName());
-            if (!pageManager.linkExists(path))
-            {
-                Link dstLink = pageManager.copyLink(srcLink, path);
-                pageManager.updateLink(dstLink);
-            }
-            else
-            {
-                path = concatenatePaths(destinationPath, uniqueName + "-" +srcLink.getName());               
-                Link dstLink = pageManager.copyLink(srcLink, path);                
-                pageManager.updateLink(dstLink);                                
-            }
-        }     
-        Iterator folders = srcFolder.getFolders().iterator();
-        while (folders.hasNext())
-        {
-            Folder folder = (Folder)folders.next();
-            String newPath = concatenatePaths(destinationPath, folder.getName());
-            if (!pageManager.folderExists(newPath))
-            {
-                Folder dstFolder = pageManager.copyFolder(folder, newPath);
-                pageManager.updateFolder(dstFolder);
-            }
-            deepMergeFolder(pageManager, folder, newPath, null, uniqueName);
-        }                
-    }
-
-    public static String concatenatePaths(String base, String path)
-    {
-        String result = "";
-        if (base == null)
-        {
-            if (path == null)
-            {
-                return result;
-            }
-            return path;
-        }
-        else
-        {
-            if (path == null)
-            {
-                return base;
-            }
-        }
-        if (base.endsWith(Folder.PATH_SEPARATOR)) 
-        {
-            if (path.startsWith(Folder.PATH_SEPARATOR))
-            {
-                result = base.concat(path.substring(1));
-                return result;
-            }
-        
-        }
-        else
-        {
-            if (!path.startsWith(Folder.PATH_SEPARATOR)) 
-            {
-                result = base.concat(Folder.PATH_SEPARATOR).concat(path);
-                return result;
-            }
-        }
-        return base.concat(path);
-    }
-    
-    /**
-     * Deep copy a folder
-     *  
-     * @param source source folder
-     * @param dest destination folder
-     */
-    public static void deepCopyFolder(PageManager pageManager, Folder srcFolder, String destinationPath, String owner)
-    throws NodeException
-    {
-        boolean found = true;
-        try
-        {
-            pageManager.getFolder(destinationPath);
-        }
-        catch (FolderNotFoundException e)
-        {
-            found = false;
-        }
-        if (found)
-        {
-            throw new NodeException("Destination already exists");
-        }
-        Folder dstFolder = pageManager.copyFolder(srcFolder, destinationPath);
-        if (owner != null)
-        {
-            SecurityConstraints constraints = dstFolder.getSecurityConstraints();
-            if (constraints == null)
-            {
-                constraints = pageManager.newSecurityConstraints();
-                dstFolder.setSecurityConstraints(constraints);
-            }
-            dstFolder.getSecurityConstraints().setOwner(owner);
-        }
-        pageManager.updateFolder(dstFolder);
-        
-        Iterator pages = srcFolder.getPages().iterator();
-        while (pages.hasNext())
-        {
-            Page srcPage = (Page)pages.next();
-            String path = PageManagerUtils.concatenatePaths(destinationPath, srcPage.getName());
-            Page dstPage = pageManager.copyPage(srcPage, path);
-            pageManager.updatePage(dstPage);
-        }
-     
-        Iterator links = srcFolder.getLinks().iterator();
-        while (links.hasNext())
-        {
-            Link srcLink = (Link)links.next();
-            String path = PageManagerUtils.concatenatePaths(destinationPath, srcLink.getName());
-            Link dstLink = pageManager.copyLink(srcLink, path);
-            pageManager.updateLink(dstLink);
-        }
-     
-        Iterator folders = srcFolder.getFolders().iterator();
-        while (folders.hasNext())
-        {
-            Folder folder = (Folder)folders.next();
-            String newPath = concatenatePaths(destinationPath, folder.getName()); 
-            deepCopyFolder(pageManager, folder, newPath, null);
-        }        
-    }
-    
-}
+ * 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.jetspeed.page;
+
+import java.security.Principal;
+import java.util.Iterator;
+
+import javax.security.auth.Subject;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.om.common.SecurityConstraints;
+import org.apache.jetspeed.om.folder.Folder;
+import org.apache.jetspeed.om.folder.FolderNotFoundException;
+import org.apache.jetspeed.om.page.Link;
+import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.page.document.NodeException;
+import org.apache.jetspeed.security.RolePrincipal;
+import org.apache.jetspeed.security.SecurityHelper;
+import org.apache.jetspeed.security.UserPrincipal;
+
+
+/**
+ * PageManagerUtils
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @author <a href="mailto:firevelocity@gmail.com">Vivek Kumar</a>
+ * @version $Id: $
+ */
+public class PageManagerUtils
+{
+    protected static Log log = LogFactory.getLog(PageManagerUtils.class);    
+    
+    /**
+     * Creates a user's home page from the roles of the current user.
+     * The use case: when a portal is setup to use shared pages, but then
+     * the user attempts to customize. At this point, we create the new page(s) for the user.
+     * 
+     * @param subject
+     */
+    public static void createUserHomePagesFromRoles(PageManager pageManager, Subject subject)
+    throws NodeException
+    {
+        Principal principal = SecurityHelper.getBestPrincipal(subject, UserPrincipal.class); 
+        if (principal == null)
+        {
+            String errorMessage = "Could not create user home for null principal";
+            log.error(errorMessage);
+            throw new NodeException(errorMessage);
+        }
+        try
+        {
+            String userName = principal.getName();            
+            // get user home
+            Folder newUserFolder;
+            if (pageManager.userFolderExists(userName))
+            {
+                newUserFolder = pageManager.getUserFolder(userName);
+            }
+            else
+            {
+                newUserFolder = pageManager.newFolder(Folder.USER_FOLDER + userName);
+                SecurityConstraints constraints = pageManager.newSecurityConstraints();
+                newUserFolder.setSecurityConstraints(constraints);
+                newUserFolder.getSecurityConstraints().setOwner(userName);
+                pageManager.updateFolder(newUserFolder);                
+            }            
+            // for each role for a user, deep copy the folder contents for that role 
+            // into the user's home
+            // TODO: this algorithm could actually merge pages on dups
+            Iterator roles = SecurityHelper.getPrincipals(subject, RolePrincipal.class).iterator();
+            while (roles.hasNext())
+            {                            
+                RolePrincipal role = (RolePrincipal)roles.next();
+                if (pageManager.folderExists(Folder.ROLE_FOLDER + role.getName()))
+                {
+                    Folder roleFolder = pageManager.getFolder(Folder.ROLE_FOLDER + role.getName());                    
+                    deepMergeFolder(pageManager, roleFolder, Folder.USER_FOLDER + newUserFolder.getName(), userName, role.getName());
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            String errorMessage = "createUserHomePagesFromRoles failed: " + e.getMessage();
+            log.error(errorMessage, e);
+            throw new NodeException(errorMessage, e);
+        }
+    }
+
+    /**
+     * Deep merges from a source folder into a destination path for the given owner.
+     * The unique name is used in conflict resolution for name collisions.
+     * Example: deep merge a given role folder 'X' into /_user/david
+     *          uniqueName = 'X'
+     *          owner = 'david'
+     *          destinationPath = '_user/david'
+     *          
+     * @param srcFolder
+     * @param destinationPath
+     * @param owner
+     * @param uniqueName
+     * @throws NodeException
+     */
+    public static void deepMergeFolder(PageManager pageManager, Folder srcFolder, String destinationPath, String owner, String uniqueName)
+    throws NodeException
+    {        
+        Iterator pages = srcFolder.getPages().iterator();
+        while (pages.hasNext())
+        {
+            Page srcPage = (Page)pages.next();
+            String path = concatenatePaths(destinationPath, srcPage.getName());
+            if (!pageManager.pageExists(path))
+            {
+                Page dstPage = pageManager.copyPage(srcPage, path);
+                pageManager.updatePage(dstPage);
+            }
+            //Commented, as these were creating the duplicate objects 
+            /*            
+            else
+            {
+                path = concatenatePaths(destinationPath, uniqueName + "-" +srcPage.getName());               
+                Page dstPage = pageManager.copyPage(srcPage, path);                
+                pageManager.updatePage(dstPage);                
+            }
+            */
+        }
+     
+        Iterator links = srcFolder.getLinks().iterator();
+        while (links.hasNext())
+        {
+            Link srcLink = (Link)links.next();
+            String path = concatenatePaths(destinationPath, srcLink.getName());
+            if (!pageManager.linkExists(path))
+            {
+                Link dstLink = pageManager.copyLink(srcLink, path);
+                pageManager.updateLink(dstLink);
+            }
+            //Commented, as these were creating the duplicate objects            
+            /*
+            else
+            {
+                path = concatenatePaths(destinationPath, uniqueName + "-" +srcLink.getName());               
+                Link dstLink = pageManager.copyLink(srcLink, path);                
+                pageManager.updateLink(dstLink);                                
+            }
+            */
+        }     
+        Iterator folders = srcFolder.getFolders().iterator();
+        while (folders.hasNext())
+        {
+            Folder folder = (Folder)folders.next();
+            String newPath = concatenatePaths(destinationPath, folder.getName());
+            if (!pageManager.folderExists(newPath))
+            {
+                Folder dstFolder = pageManager.copyFolder(folder, newPath);
+                pageManager.updateFolder(dstFolder);
+            }
+            deepMergeFolder(pageManager, folder, newPath, null, uniqueName);
+        }                
+    }
+
+    public static String concatenatePaths(String base, String path)
+    {
+        String result = "";
+        if (base == null)
+        {
+            if (path == null)
+            {
+                return result;
+            }
+            return path;
+        }
+        else
+        {
+            if (path == null)
+            {
+                return base;
+            }
+        }
+        if (base.endsWith(Folder.PATH_SEPARATOR)) 
+        {
+            if (path.startsWith(Folder.PATH_SEPARATOR))
+            {
+                result = base.concat(path.substring(1));
+                return result;
+            }
+        
+        }
+        else
+        {
+            if (!path.startsWith(Folder.PATH_SEPARATOR)) 
+            {
+                result = base.concat(Folder.PATH_SEPARATOR).concat(path);
+                return result;
+            }
+        }
+        return base.concat(path);
+    }
+    
+    /**
+     * Deep copy a folder
+     *  
+     * @param source source folder
+     * @param dest destination folder
+     */
+    public static void deepCopyFolder(PageManager pageManager, Folder srcFolder, String destinationPath, String owner)
+    throws NodeException
+    {
+        boolean found = true;
+        try
+        {
+            pageManager.getFolder(destinationPath);
+        }
+        catch (FolderNotFoundException e)
+        {
+            found = false;
+        }
+        if (found)
+        {
+            throw new NodeException("Destination already exists");
+        }
+        Folder dstFolder = pageManager.copyFolder(srcFolder, destinationPath);
+        if (owner != null)
+        {
+            SecurityConstraints constraints = dstFolder.getSecurityConstraints();
+            if (constraints == null)
+            {
+                constraints = pageManager.newSecurityConstraints();
+                dstFolder.setSecurityConstraints(constraints);
+            }
+            dstFolder.getSecurityConstraints().setOwner(owner);
+        }
+        pageManager.updateFolder(dstFolder);
+        
+        Iterator pages = srcFolder.getPages().iterator();
+        while (pages.hasNext())
+        {
+            Page srcPage = (Page)pages.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcPage.getName());
+            Page dstPage = pageManager.copyPage(srcPage, path);
+            pageManager.updatePage(dstPage);
+        }
+     
+        Iterator links = srcFolder.getLinks().iterator();
+        while (links.hasNext())
+        {
+            Link srcLink = (Link)links.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcLink.getName());
+            Link dstLink = pageManager.copyLink(srcLink, path);
+            pageManager.updateLink(dstLink);
+        }
+     
+        Iterator folders = srcFolder.getFolders().iterator();
+        while (folders.hasNext())
+        {
+            Folder folder = (Folder)folders.next();
+            String newPath = concatenatePaths(destinationPath, folder.getName()); 
+            deepCopyFolder(pageManager, folder, newPath, null);
+        }        
+    }
+    
+}



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