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 2004/11/23 01:01:32 UTC

cvs commit: jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/folder Folder.java

taylor      2004/11/22 16:01:32

  Modified:    components/page-manager/src/java/org/apache/jetspeed/page/document
                        FileSystemFolderHandler.java
                        CastorFileSystemDocumentHandler.java
                        AbstractNode.java
               jetspeed-api/src/java/org/apache/jetspeed/page/document
                        NodeSet.java
               components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
                        FolderMetaDataImpl.java FolderImpl.java
               components/page-manager/src/java/org/apache/jetspeed/om/page/psml
                        AbstractBaseElement.java
               components/page-manager/src/java/org/apache/jetspeed/page/impl
                        CastorXmlPageManager.java AbstractPageManager.java
               jetspeed-api/src/java/org/apache/jetspeed/om/folder
                        Folder.java
  Log:
  patch from Randy Watler
  
  The security checks implemented on the PageManager and Folder element accessors are as follows:
  
  - All folder and page.security document read access is always granted to facilitate navigation.
  - Pages, links, and document set documents are checked for "view" access on read.
  - Page update/register/remove usage is checked for "edit" access.
  
  Revision  Changes    Path
  1.5       +8 -8      jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/FileSystemFolderHandler.java
  
  Index: FileSystemFolderHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/FileSystemFolderHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FileSystemFolderHandler.java	21 Oct 2004 02:28:07 -0000	1.4
  +++ FileSystemFolderHandler.java	23 Nov 2004 00:01:31 -0000	1.5
  @@ -384,7 +384,7 @@
               if (regexp)
               {
                   // get regexp matched folders
  -                matchedFolders = folder.getFolders().inclusiveSubset(folderPath);
  +                matchedFolders = ((FolderImpl)folder).getFolders(false).inclusiveSubset(folderPath);
               }
               else
               {
  @@ -418,7 +418,7 @@
           if (regexp)
           {
               // get regexp matched nodes
  -            Iterator addIter = folder.getAllNodes().inclusiveSubset(nodePath).iterator();
  +            Iterator addIter = ((FolderImpl)folder).getAllNodes().inclusiveSubset(nodePath).iterator();
               while (addIter.hasNext())
               {
                   matched.add((Node) addIter.next());
  @@ -427,7 +427,7 @@
           else
           {
               // get single matched node
  -            Iterator findIter = folder.getAllNodes().iterator();
  +            Iterator findIter = ((FolderImpl)folder).getAllNodes().iterator();
               while (findIter.hasNext())
               {
                   Node addNode = (Node) findIter.next();
  @@ -486,18 +486,18 @@
           {
               Folder folder = (Folder) entry.getDocument();            
               entry.setDocument(getFolder(folder.getPath(), false));
  -            if(folder.getParent() != null)
  +            if (((AbstractNode)folder).getParent(false) != null)
               {
  -                FileCacheEntry parentEntry = (FileCacheEntry)fileCache.get(folder.getParent().getPath());
  +                FileCacheEntry parentEntry = (FileCacheEntry)fileCache.get(((AbstractNode)folder).getParent(false).getPath());
                   refresh(parentEntry);                
               }
           }
           else if(entry.getDocument() instanceof Document)
           {
               Document doc = (Document) entry.getDocument();
  -            if(doc.getType().equals(FolderMetaData.DOCUMENT_TYPE))
  +            if (doc.getType().equals(FolderMetaData.DOCUMENT_TYPE))
               {
  -                FileCacheEntry folderEntry = fileCache.get(doc.getParent().getPath());
  +                FileCacheEntry folderEntry = fileCache.get(((AbstractNode)doc).getParent().getPath());
                   refresh(folderEntry);
               }
           }
  
  
  
  1.9       +5 -5      jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/CastorFileSystemDocumentHandler.java
  
  Index: CastorFileSystemDocumentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/CastorFileSystemDocumentHandler.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- CastorFileSystemDocumentHandler.java	19 Nov 2004 03:06:44 -0000	1.8
  +++ CastorFileSystemDocumentHandler.java	23 Nov 2004 00:01:31 -0000	1.9
  @@ -30,7 +30,7 @@
   import org.apache.jetspeed.cache.file.FileCache;
   import org.apache.jetspeed.cache.file.FileCacheEntry;
   import org.apache.jetspeed.cache.file.FileCacheEventListener;
  -import org.apache.jetspeed.om.folder.Folder;
  +import org.apache.jetspeed.om.folder.impl.FolderImpl;
   import org.apache.jetspeed.om.page.Document;
   import org.apache.jetspeed.om.page.psml.AbstractBaseElement;
   import org.apache.jetspeed.page.PageNotFoundException;
  @@ -452,12 +452,12 @@
           {
               Document document = (Document) entry.getDocument();
               Document freshDoc = getDocument(document.getPath(), false);
  -            Node parent = document.getParent();
  +            Node parent = ((AbstractNode)document).getParent(false);
    
               freshDoc.setParent(parent);
  -            if(parent instanceof Folder)
  +            if(parent instanceof FolderImpl)
               {
  -                Folder folder = (Folder) parent;
  +                FolderImpl folder = (FolderImpl) parent;
                   folder.getAllNodes().add(freshDoc);
               }
               
  
  
  
  1.8       +31 -9     jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/AbstractNode.java
  
  Index: AbstractNode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/AbstractNode.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- AbstractNode.java	19 Nov 2004 03:06:44 -0000	1.7
  +++ AbstractNode.java	23 Nov 2004 00:01:31 -0000	1.8
  @@ -25,6 +25,7 @@
   
   import org.apache.jetspeed.om.common.GenericMetadata;
   import org.apache.jetspeed.om.common.LocalizedField;
  +import org.apache.jetspeed.om.common.SecuredResource;
   import org.apache.jetspeed.om.common.SecurityConstraints;
   import org.apache.jetspeed.om.page.psml.AbstractBaseElement;
   import org.apache.jetspeed.om.page.psml.PageMetadataImpl;
  @@ -197,12 +198,33 @@
        * getParent
        * </p>
        * 
  -     * @see org.apache.jetspeed.om.folder.ChildNode#getParent()
  +     * @param checkAccess flag
  +     * @return parent node
  +     */
  +    public Node getParent(boolean checkAccess)
  +    {
  +        AbstractNode parent = (AbstractNode) this.parent;
  +
  +        // check access
  +        if ((parent != null) && checkAccess)
  +        {
  +            parent.checkAccess(SecuredResource.VIEW_ACTION);
  +        }
  +        return parent;
  +    }
  +
  +    /**
  +     * <p>
  +     * getParent
  +     * </p>
  +     * 
  +     * @see org.apache.jetspeed.page.document.Node#getParent()
        * @return
        */
       public Node getParent()
       {
  -        return parent;
  +        // by default disable access checks to facilitate navigation
  +        return getParent(false);
       }
   
       /**
  @@ -210,7 +232,7 @@
        * setParent
        * </p>
        * 
  -     * @see org.apache.jetspeed.om.folder.ChildNode#setParent(org.apache.jetspeed.om.folder.Folder)
  +     * @see org.apache.jetspeed.page.document.Node#setParent(org.apache.jetspeed.om.folder.Folder)
        * @param parent
        */
       public void setParent( Node parent )
  @@ -220,26 +242,26 @@
   
       /**
        * <p>
  -     * getRelativeName
  +     * getName
        * </p>
        *
  -     * @see org.apache.jetspeed.om.folder.ChildNode#getRelativeName()
  +     * @see org.apache.jetspeed.page.document.Node#getName()
        * @return
        */
       public String getName()
       {
           String path = getPath();
           String parentName = "";
  -        if(getParent() != null)
  +        if(getParent(false) != null)
           {
  -            parentName = getParent().getPath();
  +            parentName = getParent(false).getPath();
               if (! parentName.endsWith(PATH_SEPARATOR))
               {
                   parentName += PATH_SEPARATOR;
               }
           }
           
  -        if(path.indexOf(parentName) > -1)
  +        if (path.startsWith(parentName))
           {
               return path.substring(parentName.length());
           }
  
  
  
  1.4       +2 -3      jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/document/NodeSet.java
  
  Index: NodeSet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/document/NodeSet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NodeSet.java	15 Oct 2004 07:07:49 -0000	1.3
  +++ NodeSet.java	23 Nov 2004 00:01:31 -0000	1.4
  @@ -35,7 +35,7 @@
   
       /**
        * <p>
  -     * getNode
  +     * get
        * </p>     
        * Returns a Node based on <code>name</code>. <code>name</code>
        * can either be the fully quallified path, <code>folder1/folder2/myPage.psml</code>
  @@ -56,5 +56,4 @@
       NodeSet exclusiveSubset(String regex);
   
       int size();
  -
   }
  
  
  
  1.6       +2 -2      jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderMetaDataImpl.java
  
  Index: FolderMetaDataImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderMetaDataImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FolderMetaDataImpl.java	21 Oct 2004 02:28:07 -0000	1.5
  +++ FolderMetaDataImpl.java	23 Nov 2004 00:01:31 -0000	1.6
  @@ -66,7 +66,7 @@
       public String getUrl()
       {
          
  -        return getParent().getPath() + PATH_SEPARATOR + getType();
  +        return getParent(false).getPath() + PATH_SEPARATOR + getType();
       }
       /**
        * <p>
  
  
  
  1.20      +287 -15   jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderImpl.java
  
  Index: FolderImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderImpl.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- FolderImpl.java	19 Nov 2004 03:06:44 -0000	1.19
  +++ FolderImpl.java	23 Nov 2004 00:01:31 -0000	1.20
  @@ -23,6 +23,7 @@
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.apache.jetspeed.om.common.GenericMetadata;
  +import org.apache.jetspeed.om.common.SecuredResource;
   import org.apache.jetspeed.om.common.SecurityConstraints;
   import org.apache.jetspeed.om.folder.DocumentSet;
   import org.apache.jetspeed.om.folder.Folder;
  @@ -30,10 +31,12 @@
   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.om.page.PageSecurity;
   import org.apache.jetspeed.page.PageNotFoundException;
   import org.apache.jetspeed.page.document.AbstractNode;
   import org.apache.jetspeed.page.document.DocumentException;
   import org.apache.jetspeed.page.document.DocumentHandlerFactory;
  +import org.apache.jetspeed.page.document.DocumentNotFoundException;
   import org.apache.jetspeed.page.document.FolderHandler;
   import org.apache.jetspeed.page.document.Node;
   import org.apache.jetspeed.page.document.NodeException;
  @@ -106,7 +109,7 @@
               {
                   defaultPage = FALLBACK_DEFAULT_PAGE;
               }
  -            return getPage(defaultPage).getName();
  +            return getPage(defaultPage, false).getName();
           }
           catch (NodeException e)
           {
  @@ -114,7 +117,7 @@
               {
                   try
                   {
  -                    Iterator pagesIter = getPages().iterator();
  +                    Iterator pagesIter = getPages(false).iterator();
                       if (pagesIter.hasNext())
                       {
                           return ((Page) pagesIter.next()).getName();
  @@ -163,6 +166,29 @@
           this.defaultTheme = defaultTheme;
       }
   
  +    /**
  +     * <p>
  +     * getFolders
  +     * </p>
  +     * 
  +     * @param checkAccess flag
  +     * @return folders node set
  +     * @throws FolderNotFoundException
  +     * @throws DocumentException
  +     */
  +    public NodeSet getFolders(boolean checkAccess) throws FolderNotFoundException, DocumentException
  +    {
  +        // get list of all folders
  +        NodeSet folders = getAllNodes().subset(Folder.FOLDER_TYPE);
  +
  +        // filter node set by access
  +        if (checkAccess)
  +        {
  +            folders = checkAccess(folders, SecuredResource.VIEW_ACTION);
  +        }
  +        return folders;
  +    }
  +
       /*
        * (non-Javadoc)
        * 
  @@ -170,7 +196,69 @@
        */
       public NodeSet getFolders() throws FolderNotFoundException, DocumentException
       {
  -        return getAllNodes().subset(Folder.FOLDER_TYPE);
  +        // by default disable access checks to facilitate navigation
  +        return getFolders(false);
  +    }
  +
  +    /**
  +     * <p>
  +     * getFolder
  +     * </p>
  +     * 
  +     * @param name
  +     * @param checkAccess flag
  +     * @return folder
  +     * @throws FolderNotFoundException
  +     * @throws DocumentException
  +     */
  +    public Folder getFolder(String name, boolean checkAccess) throws FolderNotFoundException, DocumentException
  +    {
  +        // get folder
  +        Folder folder = (Folder) getAllNodes().subset(Folder.FOLDER_TYPE).get(name);
  +        if (folder == null)
  +        {
  +            throw new FolderNotFoundException("Jetspeed PSML folder not found: " + name);
  +        }
  +
  +        // check access
  +        if (checkAccess)
  +        {
  +            folder.checkAccess(SecuredResource.VIEW_ACTION);
  +        }
  +        return folder;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.folder.Folder#getFolder(java.lang.String)
  +     */
  +    public Folder getFolder(String name) throws FolderNotFoundException, DocumentException
  +    {
  +        // by default disable access checks to facilitate navigation
  +        return getFolder(name, false);
  +    }
  +
  +    /**
  +     * <p>
  +     * getPages
  +     * </p>
  +     * 
  +     * @param checkAccess flag
  +     * @return pages node set
  +     * @throws NodeException
  +     */
  +    public NodeSet getPages(boolean checkAccess) throws NodeException
  +    {
  +        // get list of all pages
  +        NodeSet pages = getAllNodes().subset(Page.DOCUMENT_TYPE);
  +
  +        // filter node set by access
  +        if (checkAccess)
  +        {
  +            pages = checkAccess(pages, SecuredResource.VIEW_ACTION);
  +        }
  +        return pages;
       }
   
       /*
  @@ -180,31 +268,119 @@
        */
       public NodeSet getPages() throws NodeException
       {
  -        return getAllNodes().subset(Page.DOCUMENT_TYPE);
  +        // by default enable access checks
  +        return getPages(true);
       }
   
  -    public Page getPage( String name ) throws PageNotFoundException, NodeException
  +    /**
  +     * <p>
  +     * getPage
  +     * </p>
  +     * 
  +     * @param name
  +     * @param checkAccess flag
  +     * @return page
  +     * @throws PageNotFoundException
  +     * @throws NodeException
  +     */
  +    public Page getPage(String name, boolean checkAccess) throws PageNotFoundException, NodeException
       {
  -        Page page = (Page) getPages().get(name);
  +        // get page
  +        Page page = (Page) getAllNodes().subset(Page.DOCUMENT_TYPE).get(name);
           if (page == null)
           {
               throw new PageNotFoundException("Jetspeed PSML page not found: " + name);
           }
  +
  +        // check access
  +        if (checkAccess)
  +        {
  +            page.checkAccess(SecuredResource.VIEW_ACTION);
  +        }
           return page;
       }
   
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.folder.Folder#getPage(java.lang.String)
  +     */
  +    public Page getPage(String name) throws PageNotFoundException, NodeException
  +    {
  +        // by default enable access checks
  +        return getPage(name, true);
  +    }
  +
       /**
        * <p>
        * getLinks
        * </p>
        * 
  +     * @param checkAccess flag
  +     * @return links node set
  +     * @throws NodeException
  +     */
  +    public NodeSet getLinks(boolean checkAccess) throws NodeException
  +    {
  +        // get list of all links
  +        NodeSet links = getAllNodes().subset(Link.DOCUMENT_TYPE);
  +
  +        // filter node set by access
  +        if (checkAccess)
  +        {
  +            links = checkAccess(links, SecuredResource.VIEW_ACTION);
  +        }
  +        return links;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getLinks()
  -     * @return @throws
  -     *         DocumentNotFoundException
        */
       public NodeSet getLinks() throws NodeException
       {
  -        return getAllNodes().subset(Link.DOCUMENT_TYPE);
  +        // by default enable access checks
  +        return getLinks(true);
  +    }
  +
  +    /**
  +     * <p>
  +     * getLink
  +     * </p>
  +     * 
  +     * @param name
  +     * @param checkAccess flag
  +     * @return link
  +     * @throws DocumentNotFoundException
  +     * @throws NodeException
  +     */
  +    public Link getLink(String name, boolean checkAccess) throws DocumentNotFoundException, NodeException
  +    {
  +        // get link
  +        Link link = (Link) getAllNodes().subset(Link.DOCUMENT_TYPE).get(name);
  +        if (link == null)
  +        {
  +            throw new DocumentNotFoundException("Jetspeed PSML link not found: " + name);
  +        }
  +
  +        // check access
  +        if (checkAccess)
  +        {
  +            link.checkAccess(SecuredResource.VIEW_ACTION);
  +        }
  +        return link;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.folder.Folder#getLink(java.lang.String)
  +     */
  +    public Link getLink(String name) throws DocumentNotFoundException, NodeException
  +    {
  +        // by default enable access checks
  +        return getLink(name, true);
       }
   
       /**
  @@ -212,13 +388,110 @@
        * getDocumentSets
        * </p>
        * 
  +     * @param checkAccess flag
  +     * @return documentSets node set
  +     * @throws NodeException
  +     */
  +    public NodeSet getDocumentSets(boolean checkAccess) throws NodeException
  +    {
  +        // get list of all documentSets
  +        NodeSet documentSets = getAllNodes().subset(DocumentSet.DOCUMENT_TYPE);
  +
  +        // filter node set by access
  +        if (checkAccess)
  +        {
  +            documentSets = checkAccess(documentSets, SecuredResource.VIEW_ACTION);
  +        }
  +        return documentSets;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getDocumentSets()
  -     * @return @throws
  -     *         DocumentNotFoundException
        */
       public NodeSet getDocumentSets() throws NodeException
       {
  -        return getAllNodes().subset(DocumentSet.DOCUMENT_TYPE);
  +        // by default enable access checks
  +        return getDocumentSets(true);
  +    }
  +
  +    /**
  +     * <p>
  +     * getDocumentSet
  +     * </p>
  +     * 
  +     * @param name
  +     * @param checkAccess flag
  +     * @return document set
  +     * @throws DocumentNotFoundException
  +     * @throws NodeException
  +     */
  +    public DocumentSet getDocumentSet(String name, boolean checkAccess) throws DocumentNotFoundException, NodeException
  +    {
  +        // get documentSet
  +        DocumentSet documentSet = (DocumentSet) getAllNodes().subset(DocumentSet.DOCUMENT_TYPE).get(name);
  +        if (documentSet == null)
  +        {
  +            throw new DocumentNotFoundException("Jetspeed PSML document set not found: " + name);
  +        }
  +
  +        // check access
  +        if (checkAccess)
  +        {
  +            documentSet.checkAccess(SecuredResource.VIEW_ACTION);
  +        }
  +        return documentSet;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.folder.Folder#getDocumentSet(java.lang.String)
  +     */
  +    public DocumentSet getDocumentSet(String name) throws DocumentNotFoundException, NodeException
  +    {
  +        // by default enable access checks
  +        return getDocumentSet(name, true);
  +    }
  +
  +    /**
  +     * <p>
  +     * getPageSecurity
  +     * </p>
  +     * 
  +     * @param checkAccess flag
  +     * @return page security
  +     * @throws DocumentNotFoundException
  +     * @throws NodeException
  +     */
  +    public PageSecurity getPageSecurity(boolean checkAccess) throws DocumentNotFoundException, NodeException
  +    {
  +        // check access to this folder in place
  +        // of access to page security document
  +        if (checkAccess)
  +        {
  +            checkAccess(SecuredResource.VIEW_ACTION);
  +        }
  +
  +        // get pageSecurity
  +        PageSecurity pageSecurity = (PageSecurity) getAllNodes().subset(PageSecurity.DOCUMENT_TYPE).get(PageSecurity.DOCUMENT_TYPE);
  +        if (pageSecurity == null)
  +        {
  +            throw new DocumentNotFoundException("Jetspeed PSML page security not found: " + PageSecurity.DOCUMENT_TYPE);
  +        }
  +        return pageSecurity;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.folder.Folder#getPageSecurity()
  +     */
  +    public PageSecurity getPageSecurity() throws DocumentNotFoundException, NodeException
  +    {
  +        // by default disable access checks
  +        return getPageSecurity(false);
       }
   
       /**
  @@ -239,8 +512,7 @@
        * getAllNodes
        * </p>
        *
  -     * @see org.apache.jetspeed.om.folder.Folder#getAllNodes()
  -     * @return
  +     * @return all nodes immediatley under this
        * @throws DocumentException
        * @throws FolderNotFoundException
        */
  
  
  
  1.6       +69 -1     jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java
  
  Index: AbstractBaseElement.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/AbstractBaseElement.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractBaseElement.java	19 Nov 2004 03:06:43 -0000	1.5
  +++ AbstractBaseElement.java	23 Nov 2004 00:01:31 -0000	1.6
  @@ -30,6 +30,9 @@
   import org.apache.jetspeed.om.common.SecurityConstraints;
   import org.apache.jetspeed.om.page.BaseElement;
   import org.apache.jetspeed.page.document.DocumentHandlerFactory;
  +import org.apache.jetspeed.page.document.Node;
  +import org.apache.jetspeed.page.document.NodeSet;
  +import org.apache.jetspeed.page.document.NodeSetImpl;
   import org.apache.jetspeed.security.FolderPermission;
   import org.apache.jetspeed.security.GroupPrincipal;
   import org.apache.jetspeed.security.PagePermission;
  @@ -484,5 +487,70 @@
       public String toString()
       {      
           return getId();
  +    }
  +
  +    /**
  +     * <p>
  +     * checkAccess
  +     * </p>
  +     *
  +     * @param nodes
  +     * @param actions
  +     * @return
  +     */
  +    public static NodeSet checkAccess(NodeSet nodes, String actions)
  +    {
  +        if ((nodes != null) && (nodes.size() > 0))
  +        {
  +            // check permissions and constraints, filter nodes as required
  +            NodeSetImpl filteredNodes = null;
  +            Iterator checkAccessIter = nodes.iterator();
  +            while (checkAccessIter.hasNext())
  +            {
  +                AbstractBaseElement node = (AbstractBaseElement)checkAccessIter.next();
  +                try
  +                {
  +                    // check access
  +                    node.checkAccess(actions);
  +
  +                    // add to filteredNodes nodes if copying
  +                    if (filteredNodes != null)
  +                    {
  +                        // permitted, add to filteredNodes nodes
  +                        filteredNodes.add((Node)node);
  +                    }
  +                }
  +                catch (SecurityException se)
  +                {
  +                    // create filteredNodes nodes if not already copying
  +                    if (filteredNodes == null)
  +                    {
  +                        // not permitted, copy previously permitted nodes
  +                        // to new filteredNodes node set with same comparator
  +                        filteredNodes = new NodeSetImpl(null, ((NodeSetImpl) nodes).getComparator());
  +                        Iterator copyIter = nodes.iterator();
  +                        while (copyIter.hasNext())
  +                        {
  +                            Node copyNode = (Node)copyIter.next();
  +                            if (copyNode != node)
  +                            {
  +                                filteredNodes.add(copyNode);
  +                            }
  +                            else
  +                            {
  +                                break;
  +                            }
  +                        }
  +                    }
  +                }
  +            }
  +
  +            // return filteredNodes nodes if generated
  +            if (filteredNodes != null)
  +            {
  +                return filteredNodes;
  +            }
  +        }
  +        return nodes;
       }
   }
  
  
  
  1.23      +96 -88    jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java
  
  Index: CastorXmlPageManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- CastorXmlPageManager.java	19 Nov 2004 03:06:44 -0000	1.22
  +++ CastorXmlPageManager.java	23 Nov 2004 00:01:31 -0000	1.23
  @@ -38,6 +38,7 @@
   import org.apache.jetspeed.cache.file.FileCacheEventListener;
   import org.apache.jetspeed.exception.JetspeedException;
   import org.apache.jetspeed.idgenerator.IdGenerator;
  +import org.apache.jetspeed.om.common.SecuredResource;
   import org.apache.jetspeed.om.folder.DocumentSet;
   import org.apache.jetspeed.om.folder.DocumentSetPath;
   import org.apache.jetspeed.om.folder.Folder;
  @@ -259,8 +260,8 @@
                   foldersIter = profiledFolders.iterator();
                   while (foldersIter.hasNext())
                   {
  -                    Folder aggregatePagesFolder = (Folder) foldersIter.next();
  -                    NodeSet aggregatePages = aggregatePagesFolder.getPages();
  +                    FolderImpl aggregatePagesFolder = (FolderImpl) foldersIter.next();
  +                    NodeSet aggregatePages = aggregatePagesFolder.getPages(false);
                       Iterator aggregatePagesIter = aggregatePages.iterator();
                       while (aggregatePagesIter.hasNext())
                       {
  @@ -269,9 +270,10 @@
                   }
   
                   // profile parent folder using profiled parent
  -                if ((folder.getParent() != null) && ! ((AbstractNode) folder).getProfiledPath().equals(Folder.PATH_SEPARATOR))
  +                if ((((AbstractNode)folder).getParent(false) != null) &&
  +                    !((AbstractNode)folder).getProfiledPath().equals(Folder.PATH_SEPARATOR))
                   {
  -                    parentFolder = (Folder) setProfiledNodePathAndUrl((AbstractNode) folder.getParent());
  +                    parentFolder = (Folder)setProfiledNodePathAndUrl((AbstractNode)((AbstractNode)folder).getParent(false));
                   }
   
                   // profile sibling folders by aggregating all siblings in profiled folders
  @@ -280,8 +282,8 @@
                   foldersIter = profiledFolders.iterator();
                   while (foldersIter.hasNext())
                   {
  -                    Folder aggregateFoldersFolder = (Folder) foldersIter.next();
  -                    NodeSet aggregateFolders = aggregateFoldersFolder.getFolders().exclusiveSubset("^.*/" + PROFILE_PROPERTY_FOLDER_PREFIX + "[^/]*$");
  +                    FolderImpl aggregateFoldersFolder = (FolderImpl) foldersIter.next();
  +                    NodeSet aggregateFolders = aggregateFoldersFolder.getFolders(false).exclusiveSubset("^.*/" + PROFILE_PROPERTY_FOLDER_PREFIX + "[^/]*$");
                       Iterator aggregateFoldersIter = aggregateFolders.iterator();
                       while (aggregateFoldersIter.hasNext())
                       {
  @@ -295,8 +297,8 @@
                   foldersIter = searchProfiledFolders.iterator();
                   while (foldersIter.hasNext())
                   {
  -                    Folder aggregateFolder = (Folder) foldersIter.next();
  -                    NodeSet aggregateFolderDocumentSets = aggregateFolder.getDocumentSets();
  +                    FolderImpl aggregateFolder = (FolderImpl) foldersIter.next();
  +                    NodeSet aggregateFolderDocumentSets = aggregateFolder.getDocumentSets(false);
                       Iterator aggregateFolderDocumentSetsIter = aggregateFolderDocumentSets.iterator();
                       while (aggregateFolderDocumentSetsIter.hasNext())
                       {
  @@ -363,10 +365,10 @@
                       foldersIter = profiledFolders.iterator();
                       while (foldersIter.hasNext())
                       {
  -                        Folder aggregateLinksFolder = (Folder) setProfiledNodePathAndUrl((AbstractNode) foldersIter.next());
  -                        if (((AbstractNode) aggregateLinksFolder).getProfiledPath().equals(Folder.PATH_SEPARATOR))
  +                        FolderImpl aggregateLinksFolder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) foldersIter.next());
  +                        if (aggregateLinksFolder.getProfiledPath().equals(Folder.PATH_SEPARATOR))
                           {
  -                            NodeSet aggregateLinks = aggregateLinksFolder.getLinks();
  +                            NodeSet aggregateLinks = aggregateLinksFolder.getLinks(false);
                               Iterator aggregateLinksIter = aggregateLinks.iterator();
                               while (aggregateLinksIter.hasNext())
                               {
  @@ -408,13 +410,13 @@
                           folderPath = Folder.PATH_SEPARATOR;
                       }
                   }
  -                folder = getFolder(folderPath);
  +                folder = folderHandler.getFolder(folderPath);
                   String pagePath = requestPath;
                   if (! pagePath.endsWith(Page.DOCUMENT_TYPE))
                   {
                       pagePath = folder.getDefaultPage(true);
                   }
  -                page = folder.getPage(pagePath);
  +                page = ((FolderImpl)folder).getPage(pagePath, false);
               }
               catch (NodeException ne)
               {
  @@ -425,9 +427,9 @@
                   log.warn("computeProfiledPageContext(): Falling back to managed root default page for " + requestPath);
                   try
                   {
  -                    folder = getFolder(Folder.PATH_SEPARATOR);
  +                    folder = folderHandler.getFolder(Folder.PATH_SEPARATOR);
                       String pagePath = folder.getDefaultPage(true);
  -                    page = folder.getPage(pagePath);
  +                    page = ((FolderImpl)folder).getPage(pagePath, false);
                   }
                   catch (NodeException ne)
                   {
  @@ -438,13 +440,13 @@
               if (page != null)
               {
                   // return folders and pages relative to requested page
  -                siblingPages = folder.getPages();
  -                parentFolder = (Folder) folder.getParent();
  -                siblingFolders = folder.getFolders();
  +                siblingPages = ((FolderImpl)folder).getPages(false);
  +                parentFolder = (Folder) ((AbstractNode)folder).getParent(false);
  +                siblingFolders = ((FolderImpl)folder).getFolders(false);
                   try
                   {
  -                    Folder rootFolder = getFolder(Folder.PATH_SEPARATOR);
  -                    rootLinks = rootFolder.getLinks();
  +                    Folder rootFolder = folderHandler.getFolder(Folder.PATH_SEPARATOR);
  +                    rootLinks = ((FolderImpl)rootFolder).getLinks(false);
                   }
                   catch (NodeException ne)
                   {
  @@ -452,18 +454,18 @@
                   try
                   {
                       // get default document set order from folder
  -                    Comparator documentComparator = ((NodeSetImpl) folder.getAllNodes()).getComparator();
  +                    Comparator documentComparator = ((NodeSetImpl)((FolderImpl)folder).getAllNodes()).getComparator();
   
                       // aggregate and expand document sets from page to root folder;
                       documentSets = new NodeSetImpl(null, documentComparator);
                       documentSetNames = new HashMap(8);
                       documentSetNodeSets = new HashMap(8);
                       Set uniqueDocumentSetPaths = new HashSet(8);
  -                    Folder aggregateFolder = folder;
  +                    FolderImpl aggregateFolder = (FolderImpl)folder;
                       do
                       {
                           // aggregate uniquely named and expand folder document sets
  -                        Iterator documentSetsIter = aggregateFolder.getDocumentSets().iterator();
  +                        Iterator documentSetsIter = aggregateFolder.getDocumentSets(false).iterator();
                           while (documentSetsIter.hasNext())
                           {
                               DocumentSet documentSet = (DocumentSet) documentSetsIter.next();
  @@ -487,7 +489,7 @@
                           }
   
                           // aggregate document sets in parent
  -                        aggregateFolder = (Folder) aggregateFolder.getParent();
  +                        aggregateFolder = (FolderImpl) ((AbstractNode)aggregateFolder).getParent(false);
                       }
                       while (aggregateFolder != null);
                   }
  @@ -547,7 +549,7 @@
                   }
                   try
                   {
  -                    FolderImpl folder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) getFolder(folderPath));
  +                    FolderImpl folder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
                       if ((folder.getMetaData() != null) && (folder.getMetaData().getDocumentOrder() != null) &&
                           ! folder.getMetaData().getDocumentOrder().isEmpty())
                       {
  @@ -602,7 +604,7 @@
                   // document set nodes
                   try
                   {
  -                    Iterator pathNodesIter = filterDocumentSet(getNodes(searchPath, regexp, null)).iterator();
  +                    Iterator pathNodesIter = filterDocumentSet(folderHandler.getNodes(searchPath, regexp, null)).iterator();
                       while (pathNodesIter.hasNext())
                       {
                           expandedNodes = addUniqueOrDescribedUrlNode(expandedNodes, setProfiledNodePathAndUrl((AbstractNode) pathNodesIter.next()));
  @@ -928,7 +930,7 @@
                           folderPath = Folder.PATH_SEPARATOR;
                       }
                   }
  -                searchFolder = getFolder(folderPath);
  +                searchFolder = folderHandler.getFolder(folderPath);
   
                   // match page if not previously matched
                   if (page[0] == null)
  @@ -974,7 +976,7 @@
                       // access matched page
                       if (pagePath != null)
                       {
  -                        searchPage = searchFolder.getPage(pagePath);
  +                        searchPage = ((FolderImpl)searchFolder).getPage(pagePath, false);
                       }
                   }
   
  @@ -1023,7 +1025,7 @@
                       do
                       {
                           searchFolders.add(searchFolder);
  -                        searchFolder = (Folder) searchFolder.getParent();
  +                        searchFolder = (Folder) ((AbstractNode)searchFolder).getParent(false);
                       }
                       while ((searchFolder != null) && ! searchFolder.getName().startsWith(PROFILE_PROPERTY_FOLDER_PREFIX));
                   }
  @@ -1051,7 +1053,7 @@
                               // get folder if it exists and folder name
                               try
                               {
  -                                searchFolder = getFolder(folderPath);
  +                                searchFolder = folderHandler.getFolder(folderPath);
                                   searchFolderName = searchFolder.getName();
                               }
                               catch (NodeException ne)
  @@ -1070,7 +1072,7 @@
                           else
                           {
                               // get folder as parent of search folder
  -                            searchFolder = (Folder) searchFolder.getParent();
  +                            searchFolder = (Folder) ((AbstractNode)searchFolder).getParent(false);
                               if (searchFolder != null)
                               {
                                   searchFolderName = searchFolder.getName();
  @@ -1104,7 +1106,7 @@
               Page lastSearchFolderFoundPage = null;
               try
               {
  -                lastSearchFolderFoundPage = lastSearchFolderFound.getPage(defaultPagePath);
  +                lastSearchFolderFoundPage = ((FolderImpl)lastSearchFolderFound).getPage(defaultPagePath, false);
               }
               catch (NodeException ne)
               {
  @@ -1306,7 +1308,7 @@
               // get filtered document/folder node or nodes and add to expanded set
               try
               {
  -                Iterator pathNodesIter = filterDocumentSet(getNodes(path, regexp, null)).iterator();
  +                Iterator pathNodesIter = filterDocumentSet(folderHandler.getNodes(path, regexp, null)).iterator();
                   while (pathNodesIter.hasNext())
                       expandedNodes.add((AbstractNode) pathNodesIter.next());
               }
  @@ -1381,27 +1383,32 @@
       }
   
       /**
  -     * 
        * <p>
        * getPage
        * </p>
        * 
        * @see org.apache.jetspeed.page.PageManager#getPage(java.lang.String)
        * @param path
  -     * @return @throws
  -     *         PageNotFoundException
  -     * @throws IllegalStateException
  -     *             if the page could be inserted into the FileCache.
  +     * @return page
  +     * @throws PageNotFoundException
  +     * @throws NodeException
  +     * @throws FolderNotFoundException
        */
  -    public Page getPage( String path ) throws PageNotFoundException, NodeException
  +    public Page getPage(String path) throws PageNotFoundException, FolderNotFoundException, NodeException
       {
  -        return (Page) addParent(handlerFactory.getDocumentHandler(Page.DOCUMENT_TYPE).getDocument(path), path);
  +        // get page via folder, (access checked in Folder.getPage())
  +        Folder folder = getNodeFolder(path);
  +        return folder.getPage(getNodeName(path));
       }
   
       /**
  +     * <p>
  +     * registerPage
  +     * </p>
  +     * 
        * @see org.apache.jetspeed.services.page.PageManagerService#registerPage(org.apache.jetspeed.om.page.Page)
        */
  -    public void registerPage( Page page ) throws JetspeedException
  +    public void registerPage(Page page) throws JetspeedException
       {
           // make sure path and related members are set
           if (page.getPath() == null)
  @@ -1416,26 +1423,42 @@
                   return;
               }
               setProfiledNodePathAndUrl((AbstractNode)page);
  -            addParent(page, page.getPath());
  +            Folder folder = getNodeFolder(page.getPath());
  +            page.setParent(folder);
           }
   
  +        // check for edit access
  +        page.checkAccess(SecuredResource.EDIT_ACTION);
  +
           // register page
           handlerFactory.getDocumentHandler(Page.DOCUMENT_TYPE).updateDocument(page);
       }
   
       /**
  +     * <p>
  +     * updatePage
  +     * </p>
  +     * 
        * @see org.apache.jetspeed.services.page.PageManagerService#updatePage(org.apache.jetspeed.om.page.Page)
        */
  -    public void updatePage( Page page ) throws JetspeedException
  +    public void updatePage(Page page) throws JetspeedException
       {
           registerPage(page);
       }
   
       /**
  +     * <p>
  +     * removePage
  +     * </p>
  +     * 
        * @see org.apache.jetspeed.services.page.PageManagerService#removePage(org.apache.jetspeed.om.page.Page)
        */
  -    public void removePage( Page page ) throws JetspeedException
  +    public void removePage(Page page) throws JetspeedException
       {
  +        // check for edit access
  +        page.checkAccess(SecuredResource.EDIT_ACTION);
  +
  +        // remove page
           handlerFactory.getDocumentHandler(Page.DOCUMENT_TYPE).removeDocument(page);
       }
   
  @@ -1446,17 +1469,17 @@
        * 
        * @see org.apache.jetspeed.page.PageManager#getLink(java.lang.String)
        * @param path
  -     * @return @throws
  -     *         DocumentNotFoundException
  +     * @return link
        * @throws DocumentNotFoundException
        * @throws UnsupportedDocumentTypeException
  -     * @throws 
        * @throws NodeException
        * @throws FolderNotFoundException
        */
  -    public Link getLink( String path ) throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
  +    public Link getLink(String path) throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
       {
  -        return (Link) addParent(handlerFactory.getDocumentHandler(Link.DOCUMENT_TYPE).getDocument(path), path);
  +        // get link via folder, (access checked in Folder.getLink())
  +        Folder folder = getNodeFolder(path);
  +        return folder.getLink(getNodeName(path));
       }
   
       /**
  @@ -1466,16 +1489,17 @@
        * 
        * @see org.apache.jetspeed.page.PageManager#getDocumentSet(java.lang.String)
        * @param path
  -     * @return @throws
  -     *         DocumentNotFoundException
  +     * @return document set
        * @throws DocumentNotFoundException
        * @throws UnsupportedDocumentTypeException
        * @throws NodeException
        * @throws FolderNotFoundException
        */
  -    public DocumentSet getDocumentSet( String path ) throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
  +    public DocumentSet getDocumentSet(String path) throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
       {
  -        return (DocumentSet) addParent(handlerFactory.getDocumentHandler(DocumentSet.DOCUMENT_TYPE).getDocument(path), path);
  +        // get document set via folder, (access checked in Folder.getDocumentSet())
  +        Folder folder = getNodeFolder(path);
  +        return folder.getDocumentSet(getNodeName(path));
       }
   
       /**
  @@ -1492,8 +1516,9 @@
        */
       public PageSecurity getPageSecurity() throws DocumentNotFoundException, UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
       {
  -        String pageSecurityPath = Folder.PATH_SEPARATOR + PageSecurity.DOCUMENT_TYPE;
  -        return (PageSecurity) addParent(handlerFactory.getDocumentHandler(PageSecurity.DOCUMENT_TYPE).getDocument(pageSecurityPath), pageSecurityPath);
  +        // get page security via folder, (always allow access)
  +        Folder folder = getNodeFolder(Folder.PATH_SEPARATOR);
  +        return folder.getPageSecurity();
       }
   
       /**
  @@ -1510,48 +1535,31 @@
        * @throws InvalidFolderException
        * @throws IOException
        */
  -    public Folder getFolder( String folderPath ) throws FolderNotFoundException, InvalidFolderException, NodeException
  +    public Folder getFolder(String folderPath) throws FolderNotFoundException, InvalidFolderException, NodeException
       {
  +        // get folder, (always allow access to facilitate
  +        // navigation to potentially accessible pages)
           return folderHandler.getFolder(folderPath);
       }
   
  -    protected Node addParent( Node childNode, String nodePath ) throws NodeException, InvalidFolderException
  +    private Folder getNodeFolder(String nodePath) throws NodeException, InvalidFolderException
       {
  -        int lastSlash = nodePath.indexOf(Folder.PATH_SEPARATOR);
  -        if (lastSlash > -1)
  -        {
  -            childNode.setParent(folderHandler.getFolder(nodePath.substring(0, lastSlash)));
  -        }
  -        else
  +        int folderIndex = nodePath.lastIndexOf(Folder.PATH_SEPARATOR);
  +        if (folderIndex > 0)
           {
  -            childNode.setParent(folderHandler.getFolder(Folder.PATH_SEPARATOR));
  +            return folderHandler.getFolder(nodePath.substring(0, folderIndex));
           }
  -        return childNode;
  +        return folderHandler.getFolder(Folder.PATH_SEPARATOR);
       }
   
  -    /**
  -     * <p>
  -     * getNodes
  -     * </p>
  -     * <p>
  -     * Returns a set of nodes relative to the <code>folder</code> argument of the type
  -     * indicated by the <code>documentType</code> argument. The <code>folder</code> argument
  -     * may include regular expressions if indicated by the <code>regex</code> argument. The
  -     * returned set is unordered.
  -     * </p>
  -     *
  -     * @param path Path from which to locate documents
  -     * @param regex Flag indicating whether regex should be expanded in path
  -     * @param documentType document type to filter on.
  -     * @return NodeSet of documents and folders located under the <code>path</code> argument.
  -     * @throws FolderNotFoundException if folder under the <code>path</code> does not actually exist.
  -     * @throws DocumentException if an error is encountered reading the folders.
  -     * @throws InvalidFolderException
  -     * @throws NodeException
  -     */
  -    public NodeSet getNodes(String path, boolean regex, String documentType) throws FolderNotFoundException, InvalidFolderException, NodeException
  +    private String getNodeName(String nodePath)
       {
  -        return folderHandler.getNodes(path,regex,documentType);
  +        int folderIndex = nodePath.lastIndexOf(Folder.PATH_SEPARATOR);
  +        if (folderIndex > -1)
  +        {
  +            return nodePath.substring(folderIndex+1);
  +        }
  +        return nodePath;
       }
   
       /**
  
  
  
  1.9       +4 -50     jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/AbstractPageManager.java
  
  Index: AbstractPageManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/AbstractPageManager.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AbstractPageManager.java	19 Nov 2004 03:06:44 -0000	1.8
  +++ AbstractPageManager.java	23 Nov 2004 00:01:32 -0000	1.9
  @@ -30,6 +30,7 @@
   import org.apache.jetspeed.om.page.Link;
   import org.apache.jetspeed.om.page.Page;
   import org.apache.jetspeed.om.page.Property;
  +import org.apache.jetspeed.om.page.psml.AbstractBaseElement;
   import org.apache.jetspeed.om.page.psml.FragmentImpl;
   import org.apache.jetspeed.om.page.psml.PageImpl;
   import org.apache.jetspeed.om.page.psml.PropertyImpl;
  @@ -324,7 +325,6 @@
               }
               catch (SecurityException se)
               {
  -                log.debug("checkAccess(): Access denied to folder or document " + node);
                   if (!throwException)
                   {
                       return null;
  @@ -337,56 +337,10 @@
   
       protected NodeSet checkAccess(NodeSet nodes, String actions)
       {
  -        if ((nodes != null) && (nodes.size() > 0))
  +        if (nodes != null)
           {
               // check permissions and constraints, filter nodes as required
  -            NodeSet filteredNodes = null;
  -            Iterator checkAccessIter = nodes.iterator();
  -            while (checkAccessIter.hasNext())
  -            {
  -                AbstractNode node = (AbstractNode)checkAccessIter.next();
  -                try
  -                {
  -                    // check access
  -                    checkAccess(node, actions, true);
  -
  -                    // add to filtered nodes if copying
  -                    if (filteredNodes != null)
  -                    {
  -                        // permitted, add to filtered nodes
  -                        filteredNodes.add(node);
  -                    }
  -                }
  -                catch (SecurityException se)
  -                {
  -                    // create filtered nodes if not already copying
  -                    if (filteredNodes == null)
  -                    {
  -                        // not permitted, copy previously permitted nodes
  -                        // to new filtered node set with same comparator
  -                        filteredNodes = new NodeSetImpl(null, ((NodeSetImpl)nodes).getComparator());;
  -                        Iterator copyIter = nodes.iterator();
  -                        while (copyIter.hasNext())
  -                        {
  -                            Node copyNode = (Node)copyIter.next();
  -                            if (copyNode != node)
  -                            {
  -                                filteredNodes.add(copyNode);
  -                            }
  -                            else
  -                            {
  -                                break;
  -                            }
  -                        }
  -                    }
  -                }
  -            }
  -
  -            // return filtered nodes if generated
  -            if (filteredNodes != null)
  -            {
  -                nodes = filteredNodes;
  -            }
  +            return AbstractBaseElement.checkAccess(nodes, actions);
           }
           return nodes;
       }
  
  
  
  1.8       +56 -10    jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/folder/Folder.java
  
  Index: Folder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/folder/Folder.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Folder.java	19 Oct 2004 04:43:18 -0000	1.7
  +++ Folder.java	23 Nov 2004 00:01:32 -0000	1.8
  @@ -16,9 +16,14 @@
   package org.apache.jetspeed.om.folder;
   
   
  +import org.apache.jetspeed.om.folder.DocumentSet;
  +import org.apache.jetspeed.om.folder.Folder;
  +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.page.PageNotFoundException;
   import org.apache.jetspeed.page.document.DocumentException;
  +import org.apache.jetspeed.page.document.DocumentNotFoundException;
   import org.apache.jetspeed.page.document.Node;
   import org.apache.jetspeed.page.document.NodeException;
   import org.apache.jetspeed.page.document.NodeSet;
  @@ -91,6 +96,19 @@
       /**
        * 
        * <p>
  +     * getFolder
  +     * </p>
  +     *
  +     * @param name
  +     * @return A Folder referenced by this folder.
  +     * @throws FolderNotFoundException
  +     * @throws DocumentException
  +     */
  +    Folder getFolder(String name) throws FolderNotFoundException, DocumentException;
  +
  +    /**
  +     * 
  +     * <p>
        * getPages
        * </p>
        *
  @@ -108,7 +126,8 @@
        * </p>
        *
        * @param name
  -.     * @throws PageNotFoundException if the Page requested could not be found.
  +     * @return A Page referenced by this folder.
  +     * @throws PageNotFoundException if the Page requested could not be found.
        * @throws DocumentException
        * @throws NodeException
        */
  @@ -120,7 +139,7 @@
        * getLinks
        * </p>
        *
  -     * @return
  +     * @return NodeSet of all the Links referenced by this Folder.
        * @throws DocumentException
        * @throws NodeException
        */    
  @@ -129,10 +148,23 @@
       /**
        * 
        * <p>
  +     * getLink
  +     * </p>
  +     *
  +     * @param name
  +     * @return A Link referenced by this folder.
  +     * @throws DocumentNotFoundException if the document requested could not be found.
  +     * @throws NodeException
  +     */    
  +    Link getLink(String name) throws DocumentNotFoundException, NodeException;
  +    
  +    /**
  +     * 
  +     * <p>
        * getDocumentSets
        * </p>
        *
  -     * @return
  +     * @return NodeSet of all the Document Sets referenced by this Folder.
        * @throws DocumentException
        * @throws NodeException
        */    
  @@ -141,12 +173,26 @@
       /**
        * 
        * <p>
  -     * getAllNodes
  +     * getDocumentSet
        * </p>
        *
  -     * @return All Nodes immediatley under this Folder.
  -     * @throws DocumentException
  -     * @throws FolderNotFoundException
  -     */
  -    NodeSet getAllNodes() throws FolderNotFoundException, DocumentException;
  +     * @param name
  +     * @return A DocumentSet referenced by this folder.
  +     * @throws DocumentNotFoundException if the document requested could not be found.
  +     * @throws NodeException
  +     */    
  +    DocumentSet getDocumentSet(String name) throws DocumentNotFoundException, NodeException;
  +    
  +    /**
  +     * 
  +     * <p>
  +     * getPageSecurity
  +     * </p>
  +     *
  +     * @param name
  +     * @return A PageSecurity referenced by this folder.
  +     * @throws DocumentNotFoundException if the document requested could not be found.
  +     * @throws NodeException
  +     */    
  +    PageSecurity getPageSecurity() throws DocumentNotFoundException, NodeException;
   }
  
  
  

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