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 rw...@apache.org on 2005/11/07 04:55:35 UTC

svn commit: r331191 [2/2] - in /portals/jetspeed-2/trunk: components/page-manager/src/java/JETSPEED-INF/castor/ components/page-manager/src/java/JETSPEED-INF/ojb/ components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/ components/page-mana...

Propchange: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecurityImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecuritySecurityConstraintsDef.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecuritySecurityConstraintsDef.java?rev=331191&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecuritySecurityConstraintsDef.java (added)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecuritySecurityConstraintsDef.java Sun Nov  6 19:55:13 2005
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.om.page.impl;
+
+/**
+ * PageSecuritySecurityConstraintsDef
+ *
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id$
+ */
+public class PageSecuritySecurityConstraintsDef extends BaseSecurityConstraint
+{
+    private String name;
+
+    /**
+     * getName
+     *
+     * @return name of defined constraint
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * setName
+     *
+     * @param name name of defined constraint
+     */
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+}

Propchange: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageSecuritySecurityConstraintsDef.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java?rev=331191&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java (added)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java Sun Nov  6 19:55:13 2005
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.om.page.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.jetspeed.om.common.SecurityConstraint;
+import org.apache.jetspeed.om.common.SecurityConstraints;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
+
+/**
+ * SecurityConstraintsImpl
+ *
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id$
+ */
+public class SecurityConstraintsImpl implements SecurityConstraints
+{
+    private String owner;
+    private List constraints;
+    private List constraintsRefs;
+
+    private List securityConstraints;
+    private List securityConstraintsRefs;
+
+    /**
+     * beforeUpdate
+     *
+     * Update persistent constraints using transient constraints.
+     */
+    public void beforeUpdate()
+    {
+        // synchronize persistent constraints
+        if ((securityConstraints != null) && !securityConstraints.isEmpty())
+        {
+            // update constraints collection size
+            if (constraints == null)
+            {
+                constraints = new ArrayList(securityConstraints.size());
+            }
+            while (constraints.size() < securityConstraints.size())
+            {
+                BaseSecurityConstraint constraint = newSecurityConstraint();
+                constraint.setApplyOrder(constraints.size());
+                constraints.add(constraint);
+            }
+            while (constraints.size() > securityConstraints.size())
+            {
+                constraints.remove(constraints.size()-1);
+            }
+            // update constraints
+            Iterator updateIter0 = securityConstraints.iterator();
+            Iterator updateIter1 = constraints.iterator();
+            while (updateIter0.hasNext() && updateIter1.hasNext())
+            {
+                SecurityConstraint securityConstraint = (SecurityConstraint)updateIter0.next();
+                BaseSecurityConstraint constraint = (BaseSecurityConstraint)updateIter1.next();
+                constraint.setUserPrincipals(securityConstraint.getUsersList());
+                constraint.setRolePrincipals(securityConstraint.getRolesList());
+                constraint.setGroupPrincipals(securityConstraint.getGroupsList());
+                constraint.setPermissions(securityConstraint.getPermissionsList());
+            }
+        }
+        else
+        {
+            // empty constraints collection
+            if (constraints != null)
+            {
+                constraints.clear();
+            }
+        }
+
+        // synchronize persistent constraints references
+        if ((securityConstraintsRefs != null) && !securityConstraintsRefs.isEmpty())
+        {
+            // update constraints references collection size
+            if (constraintsRefs == null)
+            {
+                constraintsRefs = new ArrayList(securityConstraintsRefs.size());
+            }
+            while (constraintsRefs.size() < securityConstraintsRefs.size())
+            {
+                BaseSecurityConstraintsRef constraintsRef = newSecurityConstraintsRef();
+                constraintsRef.setApplyOrder(constraintsRefs.size());
+                constraintsRefs.add(constraintsRef);
+            }
+            while (constraintsRefs.size() > securityConstraintsRefs.size())
+            {
+                constraintsRefs.remove(constraintsRefs.size()-1);
+            }
+            // update constraints references
+            Iterator updateIter0 = securityConstraintsRefs.iterator();
+            Iterator updateIter1 = constraintsRefs.iterator();
+            while (updateIter0.hasNext() && updateIter1.hasNext())
+            {
+                String securityConstraintsRef = (String)updateIter0.next();
+                BaseSecurityConstraintsRef constraintsRef = (BaseSecurityConstraintsRef)updateIter1.next();
+                constraintsRef.setName(securityConstraintsRef);
+            }
+        }
+        else
+        {
+            // empty constraints references collection
+            if (constraintsRefs != null)
+            {
+                constraintsRefs.clear();
+            }
+        }
+    }
+
+    /**
+     * afterLookup
+     *
+     * Update transient constraints from persistent constraints.
+     */
+    public void afterLookup()
+    {
+        // synchronize constraints
+        if ((constraints != null) && !constraints.isEmpty())
+        {
+            // initialize security constraints collection
+            if (securityConstraints == null)
+            {
+                securityConstraints = new ArrayList(constraints.size());
+            }
+            else
+            {
+                securityConstraints.clear();
+            }
+            // construct security constraints
+            Iterator updateIter = constraints.iterator();
+            while (updateIter.hasNext())
+            {
+                BaseSecurityConstraint constraint = (BaseSecurityConstraint)updateIter.next();
+                SecurityConstraint securityConstraint = new SecurityConstraintImpl();
+                securityConstraint.setUsers(constraint.getUserPrincipals());
+                securityConstraint.setRoles(constraint.getRolePrincipals());
+                securityConstraint.setGroups(constraint.getGroupPrincipals());
+                securityConstraint.setPermissions(constraint.getPermissions());
+                securityConstraints.add(securityConstraint);
+            }
+        }
+        else
+        {
+            // remove security constraints collection
+            securityConstraints = null;
+        }
+
+        // synchronize constraints references
+        if ((constraintsRefs != null) && !constraintsRefs.isEmpty())
+        {
+            // update security constraints references
+            if (securityConstraintsRefs == null)
+            {
+                securityConstraintsRefs = new ArrayList(constraintsRefs.size());
+            }
+            else
+            {
+                securityConstraintsRefs.clear();
+            }
+            Iterator updateIter = constraintsRefs.iterator();
+            while (updateIter.hasNext())
+            {
+                BaseSecurityConstraintsRef constraintsRef = (BaseSecurityConstraintsRef)updateIter.next();
+                securityConstraintsRefs.add(constraintsRef.getName());
+            }
+        }
+        else
+        {
+            // remove security constraints references collection
+            securityConstraintsRefs = null;
+        }
+    }
+
+    /**
+     * newSecurityConstraint
+     *
+     * Create new persistent constraint instance.
+     */
+    public BaseSecurityConstraint newSecurityConstraint()
+    {
+        // transient by default
+        return null;
+    }
+
+    /**
+     * newSecurityConstraintsRef
+     *
+     * Create new persistent constraints reference instance.
+     */
+    public BaseSecurityConstraintsRef newSecurityConstraintsRef()
+    {
+        // transient by default
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#getOwner()
+     */
+    public String getOwner()
+    {
+        return owner;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#setOwner(java.lang.String)
+     */
+    public void setOwner(String owner)
+    {
+        this.owner = owner;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#getSecurityConstraints()
+     */
+    public List getSecurityConstraints()
+    {
+        return securityConstraints;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#setSecurityConstraints(java.util.List)
+     */
+    public void setSecurityConstraints(List constraints)
+    {
+        securityConstraints = constraints;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#getSecurityConstraintsRefs()
+     */
+    public List getSecurityConstraintsRefs()
+    {
+        return securityConstraintsRefs;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.SecurityConstraints#setSecurityConstraintsRefs(java.util.List)
+     */
+    public void setSecurityConstraintsRefs(List constraintsRefs)
+    {
+        securityConstraintsRefs = constraintsRefs;
+    }
+}

Propchange: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java Sun Nov  6 19:55:13 2005
@@ -30,6 +30,7 @@
 import org.apache.jetspeed.om.common.SecuredResource;
 import org.apache.jetspeed.om.common.SecurityConstraints;
 import org.apache.jetspeed.om.page.BaseElement;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
 import org.apache.jetspeed.page.document.DocumentHandlerFactory;
 import org.apache.jetspeed.page.document.Node;
 import org.apache.jetspeed.page.document.NodeSet;

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java Sun Nov  6 19:55:13 2005
@@ -111,36 +111,36 @@
     public Vector getPropertiesList()
     {
         return (Vector) this.propertiesList;
-            }
-
+    }
+    
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#getProperty(java.lang.String,java.lang.String)
+     * @see org.apache.jetspeed.om.page.Fragment#getProperty(java.lang.String)
      */
     public String getProperty(String propName)
     {
         return (String)propertiesMap.get(propName);
-        }
-
+    }
+    
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#getProperty(java.lang.String,java.lang.String)
+     * @see org.apache.jetspeed.om.page.Fragment#getIntProperty(java.lang.String)
      */
     public int getIntProperty(String propName)
-        {
+    {
         String prop = (String)propertiesMap.get(propName);
         if (prop != null)
-            {
+        {
             return Integer.parseInt(prop);
-            }
-        return -1;
         }
-
+        return -1;
+    }
+    
     /**
      * @see org.apache.jetspeed.om.page.Fragment#getProperties()
      */
     public Map getProperties()
     {
         return propertiesMap;
-            }
+    }
 
     /**
      * @see org.apache.jetspeed.om.page.Fragment#getLayoutRow()
@@ -151,7 +151,7 @@
         if (prop != null)
         {
             return Integer.parseInt(prop);
-            }
+        }
         return -1;
     }
 
@@ -165,10 +165,10 @@
             propertiesMap.put(ROW_PROPERTY_NAME, String.valueOf(row));
         }
         else
-            {
+        {
             propertiesMap.remove(ROW_PROPERTY_NAME);
-            }
         }
+    }
     
     /**
      * @see org.apache.jetspeed.om.page.Fragment#getLayoutColumn()
@@ -179,7 +179,7 @@
         if (prop != null)
         {
             return Integer.parseInt(prop);
-            }
+        }
         return -1;
     }
 
@@ -193,10 +193,10 @@
             propertiesMap.put(COLUMN_PROPERTY_NAME, String.valueOf(column));
         }
         else
-            {
+        {
             propertiesMap.remove(COLUMN_PROPERTY_NAME);
-            }
         }
+    }
     
     /**
      * @see org.apache.jetspeed.om.page.Fragment#getLayoutSizes()
@@ -204,7 +204,7 @@
     public String getLayoutSizes()
     {
         return (String)propertiesMap.get(SIZES_PROPERTY_NAME);
-            }
+    }
     
     /**
      * @see org.apache.jetspeed.om.page.Fragment#setLayoutSizes(java.lang.String)
@@ -216,10 +216,10 @@
             propertiesMap.put(SIZES_PROPERTY_NAME, sizes);
         }
         else
-            {
+        {
             propertiesMap.remove(SIZES_PROPERTY_NAME);
-            }
         }
+    }
     
     public Object clone() throws java.lang.CloneNotSupportedException
     {
@@ -381,4 +381,4 @@
         // notify super class implementation
         super.marshalling();
     }
-}
\ No newline at end of file
+}

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java Sun Nov  6 19:55:13 2005
@@ -22,6 +22,7 @@
 import org.apache.jetspeed.om.common.SecurityConstraints;
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
 import org.apache.jetspeed.om.page.SecurityConstraintsDef;
 import org.apache.jetspeed.page.document.DocumentHandlerFactory;
 import org.apache.jetspeed.page.PageNotFoundException;

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java Sun Nov  6 19:55:13 2005
@@ -38,6 +38,8 @@
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintsDef;
 import org.apache.jetspeed.page.document.Node;
 import org.apache.jetspeed.portalsite.MenuElement;
 
@@ -56,6 +58,7 @@
     protected Class pageClass;
     protected Class folderClass;
     protected Class linkClass;
+    protected Class pageSecurityClass;
     protected Class propertyClass;
     protected Class menuDefinitionClass;
     protected Class menuExcludeDefinitionClass;
@@ -64,6 +67,7 @@
     protected Class menuSeparatorDefinitionClass;
     protected Class securityConstraintsClass;
     protected Class securityConstraintClass;
+    protected Class securityConstraintsDefClass;
 
     private boolean permissionsEnabled;
 
@@ -85,6 +89,7 @@
         this.pageClass = (Class)modelClasses.get("PageImpl.class");
         this.folderClass = (Class)modelClasses.get("FolderImpl.class");
         this.linkClass = (Class)modelClasses.get("LinkImpl.class");
+        this.pageSecurityClass = (Class)modelClasses.get("PageSecurityImpl.class");
         this.menuDefinitionClass = (Class)modelClasses.get("MenuDefinitionImpl.class");
         this.menuExcludeDefinitionClass = (Class)modelClasses.get("MenuExcludeDefinitionImpl.class");
         this.menuIncludeDefinitionClass = (Class)modelClasses.get("MenuIncludeDefinitionImpl.class");
@@ -92,6 +97,7 @@
         this.menuSeparatorDefinitionClass = (Class)modelClasses.get("MenuSeparatorDefinitionImpl.class");
         this.securityConstraintsClass = (Class)modelClasses.get("SecurityConstraintsImpl.class");
         this.securityConstraintClass = (Class)modelClasses.get("SecurityConstraintImpl.class");
+        this.securityConstraintsDefClass = (Class)modelClasses.get("SecurityConstraintsDefImpl.class");
     }
     
     /**
@@ -204,6 +210,26 @@
     }
     
     /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newPageSecurity()
+     */
+    public PageSecurity newPageSecurity()
+    {
+        PageSecurity pageSecurity = null;
+        try
+        {
+            // factory create the document and set id/path
+            pageSecurity = (PageSecurity)createObject(this.pageSecurityClass);            
+            pageSecurity.setPath(Folder.PATH_SEPARATOR + PageSecurity.DOCUMENT_TYPE);
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create page security object for " + this.pageClass;
+            log.error(message, e);
+        }
+        return pageSecurity;        
+    }
+    
+    /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#newFragment()
      */
     public Fragment newFragment()
@@ -374,6 +400,25 @@
     }
 
     /**
+     * newSecurityConstraintsDef - creates a new security constraints definition
+     *
+     * @return a newly created SecurityConstraintsDef object
+     */
+    public SecurityConstraintsDef newSecurityConstraintsDef()
+    {
+        try
+        {
+            return (SecurityConstraintsDef)createObject(this.securityConstraintsDefClass);
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create security constraints definition object for " + this.securityConstraintsDefClass;
+            log.error(message, e);
+        }
+        return null;
+    }
+
+    /**
      * createObject - creates a new page manager implementation object
      *
      * @param classe implementation class
@@ -413,6 +458,14 @@
     {
         // remove listener from listeners list
         listeners.remove(listener);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#reset()
+     */
+    public void reset()
+    {
+        // nothing to reset by default
     }
 
     /**

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/DelegatingPageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/DelegatingPageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/DelegatingPageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/DelegatingPageManager.java Sun Nov  6 19:55:13 2005
@@ -11,6 +11,8 @@
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.PageSecurity;
 import org.apache.jetspeed.page.document.DocumentNotFoundException;
+import org.apache.jetspeed.page.document.FailedToDeleteDocumentException;
+import org.apache.jetspeed.page.document.FailedToUpdateDocumentException;
 import org.apache.jetspeed.page.document.NodeException;
 import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException;
 
@@ -143,4 +145,23 @@
 
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#updatePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
+     */
+    public void updatePageSecurity(PageSecurity pageSecurity) throws
+            JetspeedException, FailedToUpdateDocumentException
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
+     */
+    public void removePageSecurity(PageSecurity pageSecurity) throws
+            JetspeedException, FailedToDeleteDocumentException
+    {
+        // TODO Auto-generated method stub
+
+    }
 }

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/document/impl/NodeImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/document/impl/NodeImpl.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/document/impl/NodeImpl.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/document/impl/NodeImpl.java Sun Nov  6 19:55:13 2005
@@ -16,13 +16,14 @@
 package org.apache.jetspeed.page.document.impl;
 
 import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
 import java.util.Locale;
 
 import org.apache.jetspeed.om.common.GenericMetadata;
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.page.PageMetadataImpl;
 import org.apache.jetspeed.om.page.impl.BaseElementImpl;
+import org.apache.jetspeed.om.page.impl.SecurityConstraintsImpl;
 import org.apache.jetspeed.page.document.Node;
 
 /**
@@ -35,15 +36,14 @@
 {
     private Node parent;
     private boolean hidden;
-    private NodeAttributes attributes;
-    private List metadataFields;
+    private Collection metadataFields;
+    private NodeAttributes attributes = new NodeAttributes();
 
     private PageMetadataImpl pageMetadata;
 
-    public NodeImpl()
+    public NodeImpl(SecurityConstraintsImpl constraints)
     {
-        super();
-        attributes = new NodeAttributes();
+        super(constraints);
     }
 
     /**
@@ -67,7 +67,11 @@
      * @param fields mutable fields collection
      * @return page metadata
      */
-    public abstract PageMetadataImpl newPageMetadata(List fields);
+    public PageMetadataImpl newPageMetadata(Collection fields)
+    {
+        // no metadata available by default
+        return null;
+    }
 
     /**
      * getPageMetadata

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java Sun Nov  6 19:55:13 2005
@@ -38,8 +38,13 @@
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
+import org.apache.jetspeed.om.page.SecurityConstraintsDef;
+import org.apache.jetspeed.om.page.SecurityConstraintsDefImpl;
 import org.apache.jetspeed.om.page.impl.FragmentImpl;
 import org.apache.jetspeed.om.page.impl.PageImpl;
+import org.apache.jetspeed.om.page.impl.PageSecurityImpl;
+import org.apache.jetspeed.om.page.impl.SecurityConstraintsImpl;
 import org.apache.jetspeed.page.DelegatingPageManager;
 import org.apache.jetspeed.page.FolderNotRemovedException;
 import org.apache.jetspeed.page.FolderNotUpdatedException;
@@ -51,6 +56,8 @@
 import org.apache.jetspeed.page.PageNotRemovedException;
 import org.apache.jetspeed.page.PageNotUpdatedException;
 import org.apache.jetspeed.page.document.DocumentNotFoundException;
+import org.apache.jetspeed.page.document.FailedToDeleteDocumentException;
+import org.apache.jetspeed.page.document.FailedToUpdateDocumentException;
 import org.apache.jetspeed.page.document.NodeException;
 import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException;
 import org.apache.jetspeed.page.document.impl.NodeAttributes;
@@ -77,13 +84,15 @@
         modelClasses.put("PageImpl.class", PageImpl.class);
         modelClasses.put("FolderImpl.class", FolderImpl.class);
         //modelClasses.put("LinkImpl.class", LinkImpl.class);
+        modelClasses.put("PageSecurityImpl.class", PageSecurityImpl.class);
         //modelClasses.put("MenuDefinitionImpl.class", MenuDefinitionImpl.class);
         //modelClasses.put("MenuExcludeDefinitionImpl.class", MenuExcludeDefinitionImpl.class);
         //modelClasses.put("MenuIncludeDefinitionImpl.class", MenuIncludeDefinitionImpl.class);
         //modelClasses.put("MenuOptionsDefinitionImpl.class", MenuOptionsDefinitionImpl.class);
         //modelClasses.put("MenuSeparatorDefinitionImpl.class", MenuSeparatorDefinitionImpl.class);
-        //modelClasses.put("SecurityConstraintsImpl.class", SecurityConstraintsImpl.class);
-        //modelClasses.put("SecurityConstraintImpl.class", SecurityConstraintImpl.class);
+        modelClasses.put("SecurityConstraintsImpl.class", SecurityConstraintsImpl.class);
+        modelClasses.put("SecurityConstraintImpl.class", SecurityConstraintImpl.class);
+        modelClasses.put("SecurityConstraintsDefImpl.class", SecurityConstraintsDefImpl.class);
     }
 
     private DelegatingPageManager delegator;
@@ -138,6 +147,14 @@
     }
 
     /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newPageSecurity()
+     */
+    public PageSecurity newPageSecurity()
+    {
+        return delegator.newPageSecurity();
+    }
+
+    /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#newFragment()
      */
     public Fragment newFragment()
@@ -207,6 +224,43 @@
     }
 
     /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newSecurityConstraintsDef()
+     */
+    public SecurityConstraintsDef newSecurityConstraintsDef()
+    {
+        return delegator.newSecurityConstraintsDef();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#addListener(org.apache.jetspeed.page.PageManagerEventListener)
+     */
+    public void addListener(PageManagerEventListener listener)
+    {
+        delegator.addListener(listener);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removeListener(org.apache.jetspeed.page.PageManagerEventListener)
+     */
+    public void removeListener(PageManagerEventListener listener)
+    {
+        delegator.removeListener(listener);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#reset()
+     */
+    public void reset()
+    {
+        // propagate to delegator
+        delegator.reset();
+
+        // clean database node cache to force subsequent
+        // refreshs from persistent store
+        databaseNodeCache.clear();
+    }
+
+    /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#getPage(java.lang.String)
      */
     public Page getPage(String path) throws PageNotFoundException, NodeException
@@ -273,8 +327,44 @@
      */
     public PageSecurity getPageSecurity() throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
     {
-        // TODO Auto-generated method stub
-        return null;
+        // construct document attributes from path
+        String path = Folder.PATH_SEPARATOR + PageSecurity.DOCUMENT_TYPE;
+        NodeAttributes attributes = new NodeAttributes(path);
+        path = attributes.getCanonicalPath();
+
+        // test cache with canonical path if available
+        if (databaseNodeCache.containsKey(path))
+        {
+            // return cached document or throw exception if cached as null
+            PageSecurity document = (PageSecurity) databaseNodeCache.get(path);
+            if (document == null)
+            {
+                throw new DocumentNotFoundException("Document " + path + " not found.");
+            }
+            return document;
+        }
+        
+        // retrieve document from database
+        try
+        {
+            Criteria filter = attributes.newQueryCriteria();
+            QueryByCriteria query = QueryFactory.newQuery(PageSecurityImpl.class, filter);
+            PageSecurity document = (PageSecurity) getPersistenceBrokerTemplate().getObjectByQuery(query);
+            
+            // add to or delete entry in document cache
+            databaseNodeCache.put(path, document);
+            
+            // return page or throw exception
+            if (document == null)
+            {
+                throw new DocumentNotFoundException("Document " + path + " not found.");
+            }
+            return document;
+        }
+        catch (Exception e)
+        {
+            throw new DocumentNotFoundException("Document " + path + " not found.", e);
+        }
     }
 
     /* (non-Javadoc)
@@ -521,23 +611,90 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.jetspeed.page.PageManager#addListener(org.apache.jetspeed.page.PageManagerEventListener)
+     * @see org.apache.jetspeed.page.PageManager#updatePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
      */
-    public void addListener(PageManagerEventListener listener)
+    public void updatePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToUpdateDocumentException
     {
-        // TODO Auto-generated method stub
+        try
+        {
+            // dereference document in case proxy is supplied
+            pageSecurity = (PageSecurity)ProxyHelper.getRealObject(pageSecurity);
 
+            // look up and set parent folder if necessary
+            if (pageSecurity.getParent() == null)
+            {
+                // access folder by path
+                String pageSecurityPath = pageSecurity.getPath();
+                String parentPath = pageSecurityPath.substring(0, pageSecurityPath.lastIndexOf(Folder.PATH_SEPARATOR));
+                if (parentPath.length() == 0)
+                {
+                    parentPath = Folder.PATH_SEPARATOR;
+                }
+                FolderImpl parent = null;
+                try
+                {
+                    parent = (FolderImpl)getFolder(parentPath);
+                }
+                catch (FolderNotFoundException fnfe)
+                {
+                    throw new FailedToUpdateDocumentException("Missing parent folder: " + parentPath);
+                }
+                
+                // update parent folder with added document
+                parent.setPageSecurity((PageSecurityImpl)pageSecurity);
+                pageSecurity.setParent(parent);
+                getPersistenceBrokerTemplate().store(parent);
+                
+                // update document cache
+                databaseNodeCache.put(pageSecurityPath, pageSecurity);
+            }
+            else
+            {
+                // update document
+                getPersistenceBrokerTemplate().store(pageSecurity);
+                
+                // update document cache
+                databaseNodeCache.put(pageSecurity.getPath(), pageSecurity);
+            }
+        }
+        catch (Exception e)
+        {
+            throw new FailedToUpdateDocumentException("Document " + pageSecurity.getPath() + " not updated.", e);
+        }
     }
 
     /* (non-Javadoc)
-     * @see org.apache.jetspeed.page.PageManager#removeListener(org.apache.jetspeed.page.PageManagerEventListener)
+     * @see org.apache.jetspeed.page.PageManager#removePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
      */
-    public void removeListener(PageManagerEventListener listener)
+    public void removePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToDeleteDocumentException
     {
-        // TODO Auto-generated method stub
+        try
+        {
+            // dereference document in case proxy is supplied
+            pageSecurity = (PageSecurity)ProxyHelper.getRealObject(pageSecurity);
 
+            // look up and update parent folder if necessary
+            if (pageSecurity.getParent() != null)
+            {
+                // update parent folder with removed document; deletes document
+                FolderImpl parent = (FolderImpl)ProxyHelper.getRealObject(pageSecurity.getParent());
+                parent.setPageSecurity(null);
+                getPersistenceBrokerTemplate().store(parent);
+            }
+            else
+            {
+                // delete document
+                getPersistenceBrokerTemplate().delete(pageSecurity);
+            }
+            
+            // delete document cache entry
+            databaseNodeCache.put(pageSecurity.getPath(), null);
+        }
+        catch (Exception e)
+        {
+            throw new FailedToDeleteDocumentException("Document " + pageSecurity.getPath() + " not removed.", e);
+        }
     }
-
 
     public Page copyPage(Page source, String path)
     throws JetspeedException, PageNotUpdatedException

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/psml/CastorXmlPageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/psml/CastorXmlPageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/psml/CastorXmlPageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/psml/CastorXmlPageManager.java Sun Nov  6 19:55:13 2005
@@ -44,16 +44,20 @@
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
+import org.apache.jetspeed.om.page.SecurityConstraintsDefImpl;
 import org.apache.jetspeed.om.page.psml.FragmentImpl;
 import org.apache.jetspeed.om.page.psml.LinkImpl;
 import org.apache.jetspeed.om.page.psml.PageImpl;
-import org.apache.jetspeed.om.page.psml.SecurityConstraintImpl;
+import org.apache.jetspeed.om.page.psml.PageSecurityImpl;
 import org.apache.jetspeed.om.page.psml.SecurityConstraintsImpl;
 import org.apache.jetspeed.page.AbstractPageManager;
 import org.apache.jetspeed.page.PageManager;
 import org.apache.jetspeed.page.PageNotFoundException;
 import org.apache.jetspeed.page.document.DocumentHandlerFactory;
 import org.apache.jetspeed.page.document.DocumentNotFoundException;
+import org.apache.jetspeed.page.document.FailedToDeleteDocumentException;
+import org.apache.jetspeed.page.document.FailedToUpdateDocumentException;
 import org.apache.jetspeed.page.document.FolderHandler;
 import org.apache.jetspeed.page.document.Node;
 import org.apache.jetspeed.page.document.NodeException;
@@ -79,6 +83,7 @@
         modelClasses.put("PageImpl.class", PageImpl.class);
         modelClasses.put("FolderImpl.class", FolderImpl.class);
         modelClasses.put("LinkImpl.class", LinkImpl.class);
+        modelClasses.put("PageSecurityImpl.class", PageSecurityImpl.class);
         modelClasses.put("MenuDefinitionImpl.class", MenuDefinitionImpl.class);
         modelClasses.put("MenuExcludeDefinitionImpl.class", MenuExcludeDefinitionImpl.class);
         modelClasses.put("MenuIncludeDefinitionImpl.class", MenuIncludeDefinitionImpl.class);
@@ -86,6 +91,7 @@
         modelClasses.put("MenuSeparatorDefinitionImpl.class", MenuSeparatorDefinitionImpl.class);
         modelClasses.put("SecurityConstraintsImpl.class", SecurityConstraintsImpl.class);
         modelClasses.put("SecurityConstraintImpl.class", SecurityConstraintImpl.class);
+        modelClasses.put("SecurityConstraintsDefImpl.class", SecurityConstraintsDefImpl.class);
     }
 
     private IdGenerator generator = null;
@@ -374,6 +380,22 @@
         return folder.getPageSecurity();
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#updatePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
+     */
+    public void updatePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToUpdateDocumentException
+    {
+        throw new FailedToUpdateDocumentException("Document " + pageSecurity.getPath() + " not updated, update not implemented.");
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removePageSecurity(org.apache.jetspeed.om.page.PageSecurity)
+     */
+    public void removePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToDeleteDocumentException
+    {
+        throw new FailedToDeleteDocumentException("Document " + pageSecurity.getPath() + " not removed, remove not implemented.");
+    }
+
     /**
      * <p>
      * getFolder
@@ -478,6 +500,15 @@
 
         // notify page manager listeners
         notifyRemovedNode(folder);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#reset()
+     */
+    public void reset()
+    {
+        // propagate
+        super.reset();
     }
 
     /**

Modified: portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java Sun Nov  6 19:55:13 2005
@@ -15,14 +15,22 @@
  */
 package org.apache.jetspeed.page;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 
 import org.apache.jetspeed.components.test.AbstractSpringTestCase;
 import org.apache.jetspeed.om.common.GenericMetadata;
+import org.apache.jetspeed.om.common.SecurityConstraint;
+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.Fragment;
 import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintsDef;
+import org.apache.jetspeed.page.document.DocumentNotFoundException;
+import org.apache.jetspeed.page.document.FailedToUpdateDocumentException;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -36,6 +44,9 @@
  */
 public class TestDatabasePageManager extends AbstractSpringTestCase
 {
+    private String testAttributesPath = "/__subsite-rootX/_user/userX/_role/roleX/_group/groupX/_mediatype/xhtml/_language/en/_country/us/_custom/customX";
+    private String verifyTestAttributesPath = "/__subsite-rootx/_user/userx/_role/rolex/_group/groupx/_mediatype/xhtml/_language/en/_country/us/_custom/customx";
+
     private PageManager pageManager;
     
     public static void main(String args[])
@@ -48,12 +59,10 @@
     {
         super.setUp();        
         pageManager = (PageManager)ctx.getBean("pageManager");
-        // createTestData();
     }
 
     protected void tearDown() throws Exception
     {
-        //dropTestData();
         super.tearDown();
     }
     
@@ -75,52 +84,38 @@
         { "test-repository-datasource-spring.xml" };
     }
 
-    public void xtestPages() throws Exception
-    {
-        boolean pageNotFound = false;
-        try
-        {
-            Page page = pageManager.getPage("/notfound.psml");
-        }
-        catch (PageNotFoundException e)
-        {
-            pageNotFound = true;
-        }
-        assertTrue("should have got a page not found error", pageNotFound);
-        
-        try
-        {
-            Page page = pageManager.getPage("/default-page.psml");
-        }
-        catch (PageNotFoundException e)
-        {
-            fail("should have found root default page");                    
-        }
-    }
-    
-    public void xtestFolders() throws Exception
-    {
-        try
-        {
-            Folder folder = pageManager.getFolder("/");
-        }
-        catch (FolderNotFoundException e)
-        {
-            fail("should have found root folder");                    
-        }
-    }
-        
     public void testCreates()
     {
         try
         {
-            // test basic folder/page/fragment creation
+            // reset page manager cache
+            pageManager.reset();
+
+            // test document and folder creation
             Folder folder = pageManager.newFolder("/");
             folder.setTitle("Root Folder");
             folder.setDefaultPage("default-page.psml");
             folder.setShortTitle("Root");
             GenericMetadata metadata = folder.getMetadata();
             metadata.addField(Locale.FRENCH, "title", "[fr] Root Folder");
+            SecurityConstraints folderConstraints = pageManager.newSecurityConstraints();
+            folderConstraints.setOwner("admin");
+            List inlineFolderConstraints = new ArrayList(2);
+            SecurityConstraint folderConstraint = pageManager.newSecurityConstraint();
+            folderConstraint.setUsers("user,admin");
+            folderConstraint.setRoles("manager");
+            folderConstraint.setGroups("*");
+            folderConstraint.setPermissions("view,edit");
+            inlineFolderConstraints.add(folderConstraint);
+            folderConstraint = pageManager.newSecurityConstraint();
+            folderConstraint.setPermissions("edit");
+            inlineFolderConstraints.add(folderConstraint);
+            folderConstraints.setSecurityConstraints(inlineFolderConstraints);
+            List folderConstraintsRefs = new ArrayList(2);
+            folderConstraintsRefs.add("public-view");
+            folderConstraintsRefs.add("public-edit");
+            folderConstraints.setSecurityConstraintsRefs(folderConstraintsRefs);
+            folder.setSecurityConstraints(folderConstraints);
             pageManager.updateFolder(folder);
             
             assertNull(folder.getParent());
@@ -134,6 +129,18 @@
             metadata = page.getMetadata();
             metadata.addField(Locale.FRENCH, "title", "[fr] Default Page");
             metadata.addField(Locale.JAPANESE, "title", "[ja] Default Page");
+            SecurityConstraints pageConstraints = pageManager.newSecurityConstraints();
+            pageConstraints.setOwner("user");
+            List inlinePageConstraints = new ArrayList(1);
+            SecurityConstraint pageConstraint = pageManager.newSecurityConstraint();
+            pageConstraint.setUsers("jetspeed");
+            pageConstraint.setPermissions("edit");
+            inlinePageConstraints.add(pageConstraint);
+            pageConstraints.setSecurityConstraints(inlinePageConstraints);
+            List pageConstraintsRefs = new ArrayList(1);
+            pageConstraintsRefs.add("manager-edit");
+            pageConstraints.setSecurityConstraintsRefs(pageConstraintsRefs);
+            page.setSecurityConstraints(pageConstraints);
 
             Fragment root = page.getRootFragment();
             root.setDecorator("blue-gradient");
@@ -159,40 +166,70 @@
             assertNotNull(page.getParent());
             assertEquals(page.getParent().getId(), folder.getId());
 
+            PageSecurity pageSecurity = pageManager.newPageSecurity();
+            List constraintsDefs = new ArrayList(2);
+            SecurityConstraintsDef constraintsDef = pageManager.newSecurityConstraintsDef();
+            constraintsDef.setName("public-view");
+            List defConstraints = new ArrayList(1);
+            SecurityConstraint defConstraint = pageManager.newSecurityConstraint();
+            defConstraint.setUsers("*");
+            defConstraint.setPermissions("view");
+            defConstraints.add(defConstraint);
+            constraintsDef.setSecurityConstraints(defConstraints);
+            constraintsDefs.add(constraintsDef);
+            constraintsDef = pageManager.newSecurityConstraintsDef();
+            constraintsDef.setName("admin-all");
+            defConstraints = new ArrayList(2);
+            defConstraint = pageManager.newSecurityConstraint();
+            defConstraint.setRoles("admin");
+            defConstraint.setPermissions("view,edit");
+            defConstraints.add(defConstraint);
+            defConstraint = pageManager.newSecurityConstraint();
+            defConstraint.setRoles("nobody");
+            defConstraints.add(defConstraint);
+            constraintsDef.setSecurityConstraints(defConstraints);
+            constraintsDefs.add(constraintsDef);
+            pageSecurity.setSecurityConstraintsDefs(constraintsDefs);
+            List globalConstraintsRefs = new ArrayList(2);
+            globalConstraintsRefs.add("admin-all");
+            globalConstraintsRefs.add("public-view");
+            pageSecurity.setGlobalSecurityConstraintsRefs(globalConstraintsRefs);
+
+            pageManager.updatePageSecurity(pageSecurity);
+
+            assertNotNull(pageSecurity.getParent());
+            assertEquals(pageSecurity.getParent().getId(), folder.getId());
+
+            // test duplicate creates
             try
             {
-                Page check = pageManager.getPage("/default-page.psml");
-                assertEquals("/default-page.psml", check.getPath());
+                Folder dupFolder = pageManager.newFolder("/");
+                pageManager.updateFolder(dupFolder);
+                assertTrue("Duplicate Folder / CREATED", false);
             }
-            catch (PageNotFoundException e)
+            catch (FolderNotUpdatedException e)
             {
-                assertTrue("Page /default-page.psml NOT FOUND", false);
             }
             try
             {
-                Folder checkFolder = pageManager.getFolder("/");
-                assertEquals("/", checkFolder.getPath());
+                Page dupPage = pageManager.newPage("/default-page.psml");
+                pageManager.updatePage(dupPage);
+                assertTrue("Duplicate Page / CREATED", false);
             }
-            catch (FolderNotFoundException e)
+            catch (PageNotUpdatedException e)
             {
-                assertTrue("Folder / NOT FOUND", false);
             }
             try
             {
-                Folder checkFolder = pageManager.newFolder("/");
-                pageManager.updateFolder(checkFolder);
-                assertTrue("Duplicate Folder / CREATED", false);
+                PageSecurity dupPageSecurity = pageManager.newPageSecurity();
+                pageManager.updatePageSecurity(dupPageSecurity);
+                assertTrue("Duplicate PageSecurity / CREATED", false);
             }
-            catch (FolderNotUpdatedException e)
+            catch (FailedToUpdateDocumentException e)
             {
-                assertTrue("Duplicate Folder / NOT CREATED", true);
             }
 
-            pageManager.removeFolder(folder);
-
             // test folder/page creation with attributes
-            String testAttributesPath = "/__subsite-rootX/_user/userX/_role/roleX/_group/groupX/_mediatype/xhtml/_language/en/_country/us/_custom/customX";
-            String verifyTestAttributesPath = "/__subsite-rootx/_user/userx/_role/rolex/_group/groupx/_mediatype/xhtml/_language/en/_country/us/_custom/customx";
             folder = pageManager.newFolder(testAttributesPath);
             pageManager.updateFolder(folder);
             assertNull(folder.getParent());
@@ -202,56 +239,192 @@
 
             assertNotNull(page.getParent());
             assertEquals(page.getParent().getId(), folder.getId());
+        }
+        catch (Exception e)
+        {
+            fail("testCreates failed: "+e);
+            e.printStackTrace(System.out);
+        }
+    }
+    
+    public void testGets()
+    {
+        try
+        {
+            // reset page manager cache
+            pageManager.reset();
 
+            // read documents and folders from persisted store
             try
             {
-                Page check = pageManager.getPage(testAttributesPath + "/default-page.psml");
-                assertEquals(verifyTestAttributesPath + "/default-page.psml", check.getPath());
+                PageSecurity check = pageManager.getPageSecurity();
+                assertEquals("/page.security", check.getPath());
+                assertEquals("page.security", check.getName());
+                assertNotNull(check.getSecurityConstraintsDefs());
+                assertEquals(2, check.getSecurityConstraintsDefs().size());
+                assertEquals("admin-all", ((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(0)).getName());
+                assertNotNull(((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(0)).getSecurityConstraints());
+                assertEquals(2, ((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(0)).getSecurityConstraints().size());
+                assertEquals("view,edit", ((SecurityConstraint)((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(0)).getSecurityConstraints().get(0)).getPermissions());
+                assertEquals("public-view", ((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(1)).getName());
+                assertNotNull(((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(1)).getSecurityConstraints());
+                assertEquals(1, ((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(1)).getSecurityConstraints().size());
+                assertEquals("view", ((SecurityConstraint)((SecurityConstraintsDef)check.getSecurityConstraintsDefs().get(1)).getSecurityConstraints().get(0)).getPermissions());
+                assertNotNull(check.getGlobalSecurityConstraintsRefs());
+                assertEquals(2, check.getGlobalSecurityConstraintsRefs().size());
+                assertEquals("admin-all", (String)check.getGlobalSecurityConstraintsRefs().get(0));
+                assertEquals("public-view", (String)check.getGlobalSecurityConstraintsRefs().get(1));
+            }
+            catch (DocumentNotFoundException e)
+            {
+                assertTrue("PageSecurity NOT FOUND", false);
+            }
+            try
+            {
+                Page check = pageManager.getPage("/default-page.psml");
+                assertEquals("/default-page.psml", check.getPath());
+                assertEquals("default-page.psml", check.getName());
+                assertEquals("Default Page", check.getTitle());
+                assertEquals("tigris", check.getDefaultDecorator(Fragment.LAYOUT));
+                assertEquals("blue-gradient", check.getDefaultDecorator(Fragment.PORTLET));
+                assertEquals("skin-1", check.getDefaultSkin());
+                assertEquals("Default", check.getShortTitle());
+                assertNotNull(check.getMetadata());
+                assertEquals("[fr] Default Page", check.getTitle(Locale.FRENCH));
+                assertEquals("[ja] Default Page", check.getTitle(Locale.JAPANESE));
+                assertNotNull(check.getRootFragment());
+                assertEquals("blue-gradient", check.getRootFragment().getDecorator());
+                assertEquals("jetspeed-layouts::VelocityTwoColumns", check.getRootFragment().getName());
+                assertEquals("Root", check.getRootFragment().getShortTitle());
+                assertEquals("Root Fragment", check.getRootFragment().getTitle());
+                assertEquals("Normal", check.getRootFragment().getState());
+                assertEquals("50%,50%", check.getRootFragment().getLayoutSizes());
+                assertNotNull(check.getRootFragment().getProperties());
+                assertEquals("custom-prop-value1", check.getRootFragment().getProperty("custom-prop1"));
+                assertNotNull(check.getRootFragment().getFragments());
+                assertEquals(1, check.getRootFragment().getFragments().size());
+                assertEquals("security::LoginPortlet", ((Fragment)check.getRootFragment().getFragments().get(0)).getName());
+                assertEquals("Portlet", ((Fragment)check.getRootFragment().getFragments().get(0)).getShortTitle());
+                assertEquals("Portlet Fragment", ((Fragment)check.getRootFragment().getFragments().get(0)).getTitle());
+                assertEquals("Normal", ((Fragment)check.getRootFragment().getFragments().get(0)).getState());
+                assertEquals(88, ((Fragment)check.getRootFragment().getFragments().get(0)).getLayoutRow());
+                assertEquals(88, ((Fragment)check.getRootFragment().getFragments().get(0)).getIntProperty(Fragment.ROW_PROPERTY_NAME));
+                assertEquals(99, ((Fragment)check.getRootFragment().getFragments().get(0)).getLayoutColumn());
+                assertNotNull(check.getSecurityConstraints());
+                assertNotNull(check.getSecurityConstraints().getSecurityConstraintsRefs());
+                assertEquals(1, check.getSecurityConstraints().getSecurityConstraintsRefs().size());
+                assertEquals("manager-edit", (String)check.getSecurityConstraints().getSecurityConstraintsRefs().get(0));
+                assertNotNull(check.getSecurityConstraints().getSecurityConstraints());
+                assertEquals(1, check.getSecurityConstraints().getSecurityConstraints().size());
+                assertEquals("jetspeed", ((SecurityConstraint)check.getSecurityConstraints().getSecurityConstraints().get(0)).getUsers());
             }
             catch (PageNotFoundException e)
             {
-                assertTrue("Page " + testAttributesPath + "/default-page.psml NOT FOUND", false);
+                assertTrue("Page /default-page.psml NOT FOUND", false);
             }
             try
             {
-                Folder checkFolder = pageManager.getFolder(testAttributesPath);
-                assertEquals(verifyTestAttributesPath, checkFolder.getPath());
+                Folder check = pageManager.getFolder("/");
+                assertEquals("/", check.getPath());
+                assertEquals("/", check.getName());
+                assertEquals("Root Folder", check.getTitle());
+                assertEquals("default-page.psml", check.getDefaultPage());
+                assertEquals("Root", check.getShortTitle());
+                assertNotNull(check.getMetadata());
+                assertEquals("[fr] Root Folder", check.getTitle(Locale.FRENCH));
+                assertNotNull(check.getSecurityConstraints());
+                assertNotNull(check.getSecurityConstraints().getSecurityConstraintsRefs());
+                assertEquals(2, check.getSecurityConstraints().getSecurityConstraintsRefs().size());
+                assertEquals("public-edit", (String)check.getSecurityConstraints().getSecurityConstraintsRefs().get(1));
+                assertNotNull(check.getSecurityConstraints().getSecurityConstraints());
+                assertEquals(2, check.getSecurityConstraints().getSecurityConstraints().size());
+                assertEquals("user,admin", ((SecurityConstraint)check.getSecurityConstraints().getSecurityConstraints().get(0)).getUsers());
+                assertEquals("edit", ((SecurityConstraint)check.getSecurityConstraints().getSecurityConstraints().get(1)).getPermissions());
             }
             catch (FolderNotFoundException e)
             {
-                assertTrue("Folder " + testAttributesPath + " NOT FOUND", false);
+                assertTrue("Folder / NOT FOUND", false);
             }
             try
             {
-                Folder checkFolder = pageManager.newFolder(testAttributesPath);
-                pageManager.updateFolder(checkFolder);
-                assertTrue("Duplicate Folder " + testAttributesPath + " CREATED", false);
+                Page check = pageManager.getPage(testAttributesPath + "/default-page.psml");
+                assertEquals(verifyTestAttributesPath + "/default-page.psml", check.getPath());
             }
-            catch (FolderNotUpdatedException e)
+            catch (PageNotFoundException e)
             {
-                assertTrue("Duplicate Folder " + testAttributesPath + " NOT CREATED", true);
+                assertTrue("Page " + testAttributesPath + "/default-page.psml NOT FOUND", false);
+            }
+            try
+            {
+                Folder check = pageManager.getFolder(testAttributesPath);
+                assertEquals(verifyTestAttributesPath, check.getPath());
+            }
+            catch (FolderNotFoundException e)
+            {
+                assertTrue("Folder " + testAttributesPath + " NOT FOUND", false);
             }
-
-            pageManager.removeFolder(folder);
         }
         catch (Exception e)
         {
+            fail("testGets failed: "+e);
             e.printStackTrace(System.out);
-            fail("could not create test data: "+e);
         }
     }
-    
-    private void dropTestData()
+
+    public void testRemoves()
     {
         try
         {
-            Folder folder = pageManager.getFolder("/");
-            assertNotNull("folder should be found", folder);
-            pageManager.removeFolder(folder);
+            // reset page manager cache
+            pageManager.reset();
+
+            // remove root folders
+            try
+            {
+                Folder remove = pageManager.getFolder("/");
+                assertEquals("/", remove.getPath());
+                pageManager.removeFolder(remove);
+            }
+            catch (FolderNotFoundException e)
+            {
+                assertTrue("Folder / NOT FOUND", false);
+            }
+            try
+            {
+                Folder remove = pageManager.getFolder(testAttributesPath);
+                assertEquals(verifyTestAttributesPath, remove.getPath());
+                pageManager.removeFolder(remove);
+            }
+            catch (FolderNotFoundException e)
+            {
+                assertTrue("Folder " + testAttributesPath + " NOT FOUND", false);
+            }
+
+            // reset page manager cache
+            pageManager.reset();
+
+            // verify root folder removal
+            try
+            {
+                Folder check = pageManager.getFolder("/");
+                assertTrue("Folder / FOUND", false);
+            }
+            catch (FolderNotFoundException e)
+            {
+            }
+            try
+            {
+                Folder check = pageManager.getFolder(testAttributesPath);
+                assertTrue("Folder " + testAttributesPath + " FOUND", false);
+            }
+            catch (FolderNotFoundException e)
+            {
+            }
         }
         catch (Exception e)
         {
-            fail("could not remove test data: "+e);
+            fail("testRemoves failed: "+e);
+            e.printStackTrace(System.out);
         }
     }
 }

Modified: portals/jetspeed-2/trunk/etc/schema/phase2-schema.xml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/etc/schema/phase2-schema.xml?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/etc/schema/phase2-schema.xml (original)
+++ portals/jetspeed-2/trunk/etc/schema/phase2-schema.xml Sun Nov  6 19:55:13 2005
@@ -38,6 +38,7 @@
         <column name="LOCALE" required="true" size="20" type="VARCHAR"/>
         <column name="EXT_ATTR_NAME" required="true" size="15" type="VARCHAR"/>
         <column name="EXT_ATTR_VALUE" required="true" size="40" type="VARCHAR"/>
+        <column name="OWNER_PRINCIPAL" size="40" type="VARCHAR"/>
 		<foreign-key foreignTable="FOLDER" onDelete="cascade">
 			<reference foreign="FOLDER_ID" local="PARENT_ID"/>
 		</foreign-key>
@@ -66,6 +67,9 @@
 		<foreign-key foreignTable="FOLDER" onDelete="cascade">
 			<reference foreign="FOLDER_ID" local="FOLDER_ID"/>
 		</foreign-key>
+		<index name="IX_FOLDER_METADATA_1">
+			<index-column name="FOLDER_ID"/>
+		</index>
 		<unique name="UN_FOLDER_METADATA_1">
 			<unique-column name="FOLDER_ID"/>
 			<unique-column name="NAME"/>
@@ -74,6 +78,35 @@
 		</unique>
     </table>
 
+    <table name="FOLDER_SECURITY_CONSTRAINT">
+        <column name="CONSTRAINT_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="FOLDER_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="USER_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="ROLE_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="GROUP_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="PERMISSIONS_ACL" size="120" type="VARCHAR"/>
+		<foreign-key foreignTable="FOLDER" onDelete="cascade">
+			<reference foreign="FOLDER_ID" local="FOLDER_ID"/>
+		</foreign-key>
+		<index name="IX_FOLDER_SECURITY_CONSTRAINT_1">
+			<index-column name="FOLDER_ID"/>
+		</index>
+    </table>
+
+    <table name="FOLDER_SECURITY_CONSTRAINTS_REF">
+        <column name="CONSTRAINTS_REF_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="FOLDER_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="NAME" size="40" type="VARCHAR" required="true"/>
+		<foreign-key foreignTable="FOLDER" onDelete="cascade">
+			<reference foreign="FOLDER_ID" local="FOLDER_ID"/>
+		</foreign-key>
+		<index name="IX_FOLDER_SECURITY_CONSTRAINTS_REF_1">
+			<index-column name="FOLDER_ID"/>
+		</index>
+    </table>
+
     <!--
        Page Definition
     -->
@@ -97,6 +130,7 @@
         <column name="LOCALE" required="true" size="20" type="VARCHAR"/>
         <column name="EXT_ATTR_NAME" required="true" size="15" type="VARCHAR"/>
         <column name="EXT_ATTR_VALUE" required="true" size="40" type="VARCHAR"/>
+        <column name="OWNER_PRINCIPAL" size="40" type="VARCHAR"/>
 		<foreign-key foreignTable="FOLDER" onDelete="cascade">
 			<reference foreign="FOLDER_ID" local="PARENT_ID"/>
 		</foreign-key>
@@ -125,6 +159,9 @@
 		<foreign-key foreignTable="PAGE" onDelete="cascade">
 			<reference foreign="PAGE_ID" local="PAGE_ID"/>
 		</foreign-key>
+		<index name="IX_PAGE_METADATA_1">
+			<index-column name="PAGE_ID"/>
+		</index>
 		<unique name="UN_PAGE_METADATA_1">
 			<unique-column name="PAGE_ID"/>
 			<unique-column name="NAME"/>
@@ -133,6 +170,35 @@
 		</unique>
     </table>
 
+    <table name="PAGE_SECURITY_CONSTRAINT">
+        <column name="CONSTRAINT_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="PAGE_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="USER_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="ROLE_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="GROUP_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="PERMISSIONS_ACL" size="120" type="VARCHAR"/>
+		<foreign-key foreignTable="PAGE" onDelete="cascade">
+			<reference foreign="PAGE_ID" local="PAGE_ID"/>
+		</foreign-key>
+		<index name="IX_PAGE_SECURITY_CONSTRAINT_1">
+			<index-column name="PAGE_ID"/>
+		</index>
+    </table>
+
+    <table name="PAGE_SECURITY_CONSTRAINTS_REF">
+        <column name="CONSTRAINTS_REF_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="PAGE_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="NAME" size="40" type="VARCHAR" required="true"/>
+		<foreign-key foreignTable="PAGE" onDelete="cascade">
+			<reference foreign="PAGE_ID" local="PAGE_ID"/>
+		</foreign-key>
+		<index name="IX_PAGE_SECURITY_CONSTRAINTS_REF_1">
+			<index-column name="PAGE_ID"/>
+		</index>
+    </table>
+
     <!--
        Fragment Definitions (portlets, layouts)
     -->
@@ -155,6 +221,7 @@
         <column name="EXT_PROP_VALUE_1" size="80" type="VARCHAR"/>
         <column name="EXT_PROP_NAME_2" size="40" type="VARCHAR"/>
         <column name="EXT_PROP_VALUE_2" size="80" type="VARCHAR"/>
+        <column name="OWNER_PRINCIPAL" size="40" type="VARCHAR"/>
 		<foreign-key foreignTable="FRAGMENT" onDelete="cascade">
 			<reference foreign="FRAGMENT_ID" local="PARENT_ID"/>
 		</foreign-key>
@@ -167,6 +234,101 @@
 		<unique name="UN_FRAGMENT_1">
 			<unique-column name="PAGE_ID"/>
 		</unique>
+    </table>
+
+    <table name="FRAGMENT_SECURITY_CONSTRAINT">
+        <column name="CONSTRAINT_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="FRAGMENT_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="USER_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="ROLE_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="GROUP_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="PERMISSIONS_ACL" size="120" type="VARCHAR"/>
+		<foreign-key foreignTable="FRAGMENT" onDelete="cascade">
+			<reference foreign="FRAGMENT_ID" local="FRAGMENT_ID"/>
+		</foreign-key>
+		<index name="IX_FRAGMENT_SECURITY_CONSTRAINT_1">
+			<index-column name="FRAGMENT_ID"/>
+		</index>
+    </table>
+
+    <table name="FRAGMENT_SECURITY_CONSTRAINTS_REF">
+        <column name="CONSTRAINTS_REF_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="FRAGMENT_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="NAME" size="40" type="VARCHAR" required="true"/>
+		<foreign-key foreignTable="FRAGMENT" onDelete="cascade">
+			<reference foreign="FRAGMENT_ID" local="FRAGMENT_ID"/>
+		</foreign-key>
+		<index name="IX_FRAGMENT_SECURITY_CONSTRAINTS_REF_1">
+			<index-column name="FRAGMENT_ID"/>
+		</index>
+    </table>
+
+    <!--
+       Page Security Definition
+    -->
+
+    <table name="PAGE_SECURITY">
+        <column name="PAGE_SECURITY_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="PARENT_ID" type="INTEGER" required="true"/>
+        <column name="PATH" required="true" size="160" type="VARCHAR"/>
+        <column name="NAME" required="true" size="80" type="VARCHAR"/>
+        <column name="SUBSITE" required="true" size="40" type="VARCHAR"/>
+        <column name="USER_PRINCIPAL" required="true" size="40" type="VARCHAR"/>
+        <column name="ROLE_PRINCIPAL" required="true" size="40" type="VARCHAR"/>
+        <column name="GROUP_PRINCIPAL" required="true" size="40" type="VARCHAR"/>
+        <column name="MEDIATYPE" required="true" size="15" type="VARCHAR"/>
+        <column name="LOCALE" required="true" size="20" type="VARCHAR"/>
+        <column name="EXT_ATTR_NAME" required="true" size="15" type="VARCHAR"/>
+        <column name="EXT_ATTR_VALUE" required="true" size="40" type="VARCHAR"/>
+		<foreign-key foreignTable="FOLDER" onDelete="cascade">
+			<reference foreign="FOLDER_ID" local="PARENT_ID"/>
+		</foreign-key>
+		<unique name="UN_PAGE_SECURITY_1">
+			<unique-column name="PARENT_ID"/>
+		</unique>
+		<unique name="UN_PAGE_SECURITY_2">
+			<unique-column name="PATH"/>
+			<unique-column name="SUBSITE"/>
+			<unique-column name="USER_PRINCIPAL"/>
+			<unique-column name="ROLE_PRINCIPAL"/>
+			<unique-column name="GROUP_PRINCIPAL"/>
+			<unique-column name="MEDIATYPE"/>
+			<unique-column name="LOCALE"/>
+			<unique-column name="EXT_ATTR_NAME"/>
+			<unique-column name="EXT_ATTR_VALUE"/>
+		</unique>
+    </table>
+    
+    <table name="PAGE_SECURITY_SECURITY_CONSTRAINTS_DEF">
+        <column name="CONSTRAINTS_DEF_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="PAGE_SECURITY_ID" type="INTEGER" required="true"/>
+        <column name="NAME" required="true" size="40" type="VARCHAR"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="USER_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="ROLE_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="GROUP_PRINCIPALS_ACL" size="120" type="VARCHAR"/>
+        <column name="PERMISSIONS_ACL" size="120" type="VARCHAR"/>
+		<foreign-key foreignTable="PAGE_SECURITY" onDelete="cascade">
+			<reference foreign="PAGE_SECURITY_ID" local="PAGE_SECURITY_ID"/>
+		</foreign-key>
+		<index name="IX_PAGE_SECURITY_CONSTRAINT_1">
+			<index-column name="PAGE_SECURITY_ID"/>
+		</index>
+    </table>
+
+    <table name="PAGE_SECURITY_GLOBAL_SECURITY_CONSTRAINTS_REF">
+        <column name="CONSTRAINTS_REF_ID" primaryKey="true" required="true" type="INTEGER"/>
+		<column name="PAGE_SECURITY_ID" type="INTEGER" required="true"/>
+		<column name="APPLY_ORDER" type="INTEGER" required="true"/>
+        <column name="NAME" size="40" type="VARCHAR" required="true"/>
+		<foreign-key foreignTable="PAGE_SECURITY" onDelete="cascade">
+			<reference foreign="PAGE_SECURITY_ID" local="PAGE_SECURITY_ID"/>
+		</foreign-key>
+		<index name="IX_PAGE_SECURITY_SECURITY_CONSTRAINTS_REF_1">
+			<index-column name="PAGE_SECURITY_ID"/>
+		</index>
     </table>
 
     <!--

Modified: portals/jetspeed-2/trunk/etc/sql/drop.sql
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/etc/sql/drop.sql?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/etc/sql/drop.sql (original)
+++ portals/jetspeed-2/trunk/etc/sql/drop.sql Sun Nov  6 19:55:13 2005
@@ -15,15 +15,27 @@
 DROP TABLE CLIENT_TO_MIMETYPE;
 DROP TABLE MEDIATYPE_TO_CAPABILITY;
 DROP TABLE MEDIATYPE_TO_MIMETYPE;
+
+DROP TABLE PAGE_SECURITY_SECURITY_GLOBAL_CONSTRAINTS_REF;
+DROP TABLE PAGE_SECURITY_SECURITY_CONSTRAINTS_DEF;
+DROP TABLE PAGE_SECURITY;
+DROP TABLE FRAGMENT_SECURITY_CONSTRAINTS_REF;
+DROP TABLE FRAGMENT_SECURITY_CONSTRAINT;
 DROP TABLE FRAGMENT;
+DROP TABLE PAGE_SECURITY_CONSTRAINTS_REF;
+DROP TABLE PAGE_SECURITY_CONSTRAINT;
 DROP TABLE PAGE_METADATA;
 DROP TABLE PAGE;
+DROP TABLE FOLDER_SECURITY_CONSTRAINTS_REF;
+DROP TABLE FOLDER_SECURITY_CONSTRAINT;
 DROP TABLE FOLDER_METADATA;
 DROP TABLE FOLDER;
+
 DROP TABLE RULE_CRITERION;
 DROP TABLE PRINCIPAL_RULE_ASSOC;
 DROP TABLE PROFILE_PAGE_ASSOC;
 DROP TABLE PROFILING_RULE;
+
 drop table PREFS_PROPERTY_VALUE;
 drop table PREFS_NODE_PROPERTY_KEY;
 drop table PREFS_PROPERTY_KEY;

Modified: portals/jetspeed-2/trunk/etc/sql/oracle/drop.sql
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/etc/sql/oracle/drop.sql?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/etc/sql/oracle/drop.sql (original)
+++ portals/jetspeed-2/trunk/etc/sql/oracle/drop.sql Sun Nov  6 19:55:13 2005
@@ -21,9 +21,18 @@
 DROP TABLE MEDIATYPE_TO_CAPABILITY;
 DROP TABLE MEDIATYPE_TO_MIMETYPE;
 
+DROP TABLE PAGE_SECURITY_SECURITY_GLOBAL_CONSTRAINTS_REF;
+DROP TABLE PAGE_SECURITY_SECURITY_CONSTRAINTS_DEF;
+DROP TABLE PAGE_SECURITY;
+DROP TABLE FRAGMENT_SECURITY_CONSTRAINTS_REF;
+DROP TABLE FRAGMENT_SECURITY_CONSTRAINT;
 DROP TABLE FRAGMENT;
+DROP TABLE PAGE_SECURITY_CONSTRAINTS_REF;
+DROP TABLE PAGE_SECURITY_CONSTRAINT;
 DROP TABLE PAGE_METADATA;
 DROP TABLE PAGE;
+DROP TABLE FOLDER_SECURITY_CONSTRAINTS_REF;
+DROP TABLE FOLDER_SECURITY_CONSTRAINT;
 DROP TABLE FOLDER_METADATA;
 DROP TABLE FOLDER;
 

Modified: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/common/SecurityConstraint.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/common/SecurityConstraint.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/common/SecurityConstraint.java (original)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/common/SecurityConstraint.java Sun Nov  6 19:55:13 2005
@@ -63,6 +63,15 @@
 
     /**
      * <p>
+     * setUsers
+     * </p>
+     *
+     * @param users constraint list as List
+     */
+    void setUsers(List users);
+    
+    /**
+     * <p>
      * getRoles
      * </p>
      *
@@ -90,6 +99,15 @@
 
     /**
      * <p>
+     * setRoles
+     * </p>
+     *
+     * @param roles constraint list as List
+     */
+    void setRoles(List roles);
+    
+    /**
+     * <p>
      * getGroups
      * </p>
      *
@@ -117,6 +135,15 @@
 
     /**
      * <p>
+     * setGroups
+     * </p>
+     *
+     * @param groups constraint list as List
+     */
+    void setGroups(List groups);
+    
+    /**
+     * <p>
      * getPermissions
      * </p>
      *
@@ -138,7 +165,16 @@
      * setPermissions
      * </p>
      *
-     * @param permissions constraint list in CSV string form
+     * @param permissions constraint permissions list in CSV string form
      */
     void setPermissions(String permissions);
+
+    /**
+     * <p>
+     * setPermissions
+     * </p>
+     *
+     * @param permissions constraint permissions list as List
+     */
+    void setPermissions(List permissions);
 }

Modified: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java?rev=331191&r1=331190&r2=331191&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java (original)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java Sun Nov  6 19:55:13 2005
@@ -32,8 +32,11 @@
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintsDef;
 import org.apache.jetspeed.page.document.DocumentException;
 import org.apache.jetspeed.page.document.DocumentNotFoundException;
+import org.apache.jetspeed.page.document.FailedToDeleteDocumentException;
+import org.apache.jetspeed.page.document.FailedToUpdateDocumentException;
 import org.apache.jetspeed.page.document.NodeException;
 import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException;
 
@@ -88,6 +91,13 @@
     public Link newLink(String path);
 
     /**
+     * Creates a new empty PageSecurity instance
+     *
+     * @return a newly created PageSecurity object
+     */
+    public PageSecurity newPageSecurity();
+
+    /**
      * Creates a new empty Layout Fragment instance
      *
      * @return a newly created Fragment object
@@ -150,6 +160,13 @@
      */
     public SecurityConstraint newSecurityConstraint();
 
+    /**
+     * newSecurityConstraintsDef - creates a new security constraints definition
+     *
+     * @return a newly created SecurityConstraintsDef object
+     */
+    public SecurityConstraintsDef newSecurityConstraintsDef();
+
    /**
     * 
     * <p>
@@ -256,10 +273,22 @@
 
     /** Remove a link.
      *
-     * @param page The link to be removed.
+     * @param link The link to be removed.
      */
     public void removeLink(Link link) throws JetspeedException, LinkNotRemovedException;
 
+    /** Update a page security document in persistent storage
+     *
+     * @param pageSecurity The document to be updated.
+     */
+    public void updatePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToUpdateDocumentException;
+
+    /** Remove a page security document.
+     *
+     * @param pageSecurity The document to be removed.
+     */
+    public void removePageSecurity(PageSecurity pageSecurity) throws JetspeedException, FailedToDeleteDocumentException;
+
     /**
      * addListener - add page manager event listener
      *
@@ -274,6 +303,11 @@
      */
     public void removeListener(PageManagerEventListener listener);
     
+    /**
+     * reset - force subsequent refresh from persistent store 
+     */
+    public void reset();
+
     /** 
      * Copy the source page creating and returning a new copy of the page  
      * with the same portlet and fragment collection as the source



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