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 we...@apache.org on 2004/07/16 00:52:38 UTC

cvs commit: jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/common SecuredResource.java

weaver      2004/07/15 15:52:38

  Modified:    components/page-manager/src/java/org/apache/jetspeed/om/page/psml
                        AbstractBaseElement.java PageImpl.java
               jetspeed-api/src/java/org/apache/jetspeed/om/page Page.java
               components/page-manager/src/java/org/apache/jetspeed/page/impl
                        CastorXmlPageManager.java
               components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
                        FolderImpl.java
               jetspeed-api/src/java/org/apache/jetspeed/om/folder
                        Folder.java
               components/page-manager/src/test/org/apache/jetspeed/page
                        TestCastorXmlPageManager.java
  Added:       jetspeed-api/src/java/org/apache/jetspeed/om/page
                        PageSet.java
               components/page-manager/src/java/org/apache/jetspeed/page/impl
                        PageSetImpl.java
               components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
                        FolderSetImpl.java
               jetspeed-api/src/java/org/apache/jetspeed/om/folder
                        ChildNode.java FolderSet.java
               jetspeed-api/src/java/org/apache/jetspeed/om/common
                        SecuredResource.java
  Log:
  Expanded the Folder/Page functionallity.
  
  Revision  Changes    Path
  1.3       +4 -2      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractBaseElement.java	28 May 2004 22:05:08 -0000	1.2
  +++ AbstractBaseElement.java	15 Jul 2004 22:52:37 -0000	1.3
  @@ -16,12 +16,14 @@
   
   package org.apache.jetspeed.om.page.psml;
   
  +import org.apache.jetspeed.om.common.SecuredResource;
  +
   
   /**
    *
    * @version $Id$
    */
  -public abstract class AbstractBaseElement implements java.io.Serializable
  +public abstract class AbstractBaseElement implements java.io.Serializable, SecuredResource
   {
   
       private String id = null;
  
  
  
  1.3       +145 -58   jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java
  
  Index: PageImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PageImpl.java	28 May 2004 22:05:08 -0000	1.2
  +++ PageImpl.java	15 Jul 2004 22:52:37 -0000	1.3
  @@ -16,14 +16,15 @@
   
   package org.apache.jetspeed.om.page.psml;
   
  -import org.apache.jetspeed.om.common.GenericMetadata;
  -import org.apache.jetspeed.om.page.Page;
  -import org.apache.jetspeed.om.page.Fragment;
  -
   import java.util.ArrayList;
   import java.util.Collection;
  -import java.util.Stack;
   import java.util.Iterator;
  +import java.util.Stack;
  +
  +import org.apache.jetspeed.om.common.GenericMetadata;
  +import org.apache.jetspeed.om.folder.Folder;
  +import org.apache.jetspeed.om.page.Fragment;
  +import org.apache.jetspeed.om.page.Page;
   
   /**
    * @version $Id$
  @@ -33,32 +34,113 @@
       private Defaults defaults = new Defaults();
   
       private Fragment root = null;
  -    
  +
       private Collection metadataFields = null;
   
  +    private int hashCode;
  +
  +    private Folder parent;
  +
       public PageImpl()
       {
           // empty constructor
       }
   
  +    /**
  +     * <p>
  +     * setId
  +     * </p>
  +     *
  +     * @see org.apache.jetspeed.om.page.psml.AbstractBaseElement#setId(java.lang.String)
  +     * @param id
  +     */
  +    public void setId( String id )
  +    {
  +        // Cheaper to generate the hash code now then every call to hashCode()
  +        hashCode = (Page.class.getName()+":"+id).hashCode();
  +        super.setId(id);
  +    }
  +    /**
  +     * <p>
  +     * getParent
  +     * </p>
  +     * 
  +     * @see org.apache.jetspeed.om.folder.ChildNode#getParent()
  +     * @return
  +     */
  +    public Folder getParent()
  +    {
  +        return parent;
  +    }
  +
  +    /**
  +     * <p>
  +     * setParent
  +     * </p>
  +     * 
  +     * @see org.apache.jetspeed.om.folder.ChildNode#setParent(org.apache.jetspeed.om.folder.Folder)
  +     * @param parent
  +     */
  +    public void setParent( Folder parent )
  +    {
  +        this.parent = parent;
  +    }
  +
  +    /**
  +     * <p>
  +     * equals
  +     * </p>
  +     * 
  +     * @see java.lang.Object#equals(java.lang.Object)
  +     * @param obj
  +     * @return
  +     */
  +    public boolean equals( Object obj )
  +    {
  +        if (obj instanceof Page)
  +        {
  +            Page page = (Page) obj;
  +            return page != null && page.getId() != null && 
  +                   this.getId() != null && this.getId().equals(page.getId());
  +        }
  +        else
  +        {
  +            return false;
  +        }
  +
  +    }
  +
  +    /**
  +     * <p>
  +     * hashCode
  +     * </p>
  +     * 
  +     * @see java.lang.Object#hashCode()
  +     * @return
  +     */
  +    public int hashCode()
  +    {       
  +        return hashCode;
  +    }
  +
       public String getDefaultSkin()
       {
           return this.defaults.getSkin();
       }
   
  -    public void setDefaultSkin(String skinName)
  +    public void setDefaultSkin( String skinName )
       {
           this.defaults.setSkin(skinName);
       }
   
  -    public String getDefaultDecorator(String fragmentType)
  +    public String getDefaultDecorator( String fragmentType )
       {
           return this.defaults.getDecorator(fragmentType);
       }
   
  -    public void setDefaultDecorator(String decoratorName, String fragmentType)
  +    public void setDefaultDecorator( String decoratorName, String fragmentType )
       {
  -        this.defaults.setDecorator(decoratorName,fragmentType);
  +        this.defaults.setDecorator(decoratorName, fragmentType);
       }
   
       public Fragment getRootFragment()
  @@ -66,33 +148,33 @@
           return this.root;
       }
   
  -    public void setRootFragment(Fragment root)
  +    public void setRootFragment( Fragment root )
       {
  -        this.root=root;
  +        this.root = root;
       }
   
  -    public Fragment getFragmentById(String id)
  +    public Fragment getFragmentById( String id )
       {
           Stack stack = new Stack();
  -        if (getRootFragment()!=null)
  +        if (getRootFragment() != null)
           {
               stack.push(getRootFragment());
           }
   
  -        Fragment f = (Fragment)stack.pop();
  +        Fragment f = (Fragment) stack.pop();
   
  -        while ((f!=null)&&(!(f.getId().equals(id))))
  +        while ((f != null) && (!(f.getId().equals(id))))
           {
               Iterator i = f.getFragments().iterator();
   
  -            while(i.hasNext())
  +            while (i.hasNext())
               {
                   stack.push(i.next());
               }
   
  -            if (stack.size()>0)
  +            if (stack.size() > 0)
               {
  -                f = (Fragment)stack.pop();
  +                f = (Fragment) stack.pop();
               }
               else
               {
  @@ -108,13 +190,12 @@
           return this.defaults;
       }
   
  -    public void setDefaults(Defaults defaults)
  +    public void setDefaults( Defaults defaults )
       {
           this.defaults = defaults;
       }
   
  -    public Object clone()
  -        throws java.lang.CloneNotSupportedException
  +    public Object clone() throws java.lang.CloneNotSupportedException
       {
           Object cloned = super.clone();
   
  @@ -123,45 +204,51 @@
           return cloned;
       }
   
  -	/* (non-Javadoc)
  -	 * @see org.apache.jetspeed.om.page.Page#getMetadata()
  -	 */
  -	public GenericMetadata getMetadata()
  -	{
  -		if(metadataFields == null)
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.page.Page#getMetadata()
  +     */
  +    public GenericMetadata getMetadata()
  +    {
  +        if (metadataFields == null)
           {
               metadataFields = new ArrayList();
           }
  -		
  -		GenericMetadata metadata = new PageMetadataImpl();
  -	    metadata.setFields(metadataFields);
  -	    return metadata;
  -	}
  -
  -	/* (non-Javadoc)
  -	 * @see org.apache.jetspeed.om.page.Page#setMetadata(org.apache.jetspeed.om.common.GenericMetadata)
  -	 */
  -	public void setMetadata(GenericMetadata metadata)
  -	{
  +
  +        GenericMetadata metadata = new PageMetadataImpl();
  +        metadata.setFields(metadataFields);
  +        return metadata;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
  +     * @see org.apache.jetspeed.om.page.Page#setMetadata(org.apache.jetspeed.om.common.GenericMetadata)
  +     */
  +    public void setMetadata( GenericMetadata metadata )
  +    {
           this.metadataFields = metadata.getFields();
  -	}
  +    }
   
  -	/**
  -	 * This should only be used during castor marshalling 
  -	 * @see org.apache.jetspeed.om.page.Page#getMetadataFields()
  -	 */
  -	public Collection getMetadataFields()
  -	{
  -		return metadataFields;
  -	}
  -
  -	/**
  -	 * This should only be used during castor unmarshalling 
  -	 * @see org.apache.jetspeed.om.page.Page#setMetadataFields(java.util.Collection)
  -	 */
  -	public void setMetadataFields(Collection metadataFields)
  -	{
  -		this.metadataFields = metadataFields;
  -	}
  +    /**
  +     * This should only be used during castor marshalling
  +     * 
  +     * @see org.apache.jetspeed.om.page.Page#getMetadataFields()
  +     */
  +    public Collection getMetadataFields()
  +    {
  +        return metadataFields;
  +    }
  +
  +    /**
  +     * This should only be used during castor unmarshalling
  +     * 
  +     * @see org.apache.jetspeed.om.page.Page#setMetadataFields(java.util.Collection)
  +     */
  +    public void setMetadataFields( Collection metadataFields )
  +    {
  +        this.metadataFields = metadataFields;
  +    }
   }
   
  
  
  
  1.2       +3 -2      jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java
  
  Index: Page.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Page.java	28 May 2004 18:51:56 -0000	1.1
  +++ Page.java	15 Jul 2004 22:52:37 -0000	1.2
  @@ -16,6 +16,7 @@
   package org.apache.jetspeed.om.page;
   
   import org.apache.jetspeed.om.common.GenericMetadata;
  +import org.apache.jetspeed.om.folder.ChildNode;
   
   /**
    * This interface represents a complete page document used by Jetspeed
  @@ -23,7 +24,7 @@
    *
    * @version $Id$
    */
  -public interface Page extends BaseElement, java.io.Serializable, Cloneable
  +public interface Page extends BaseElement, java.io.Serializable, Cloneable, ChildNode
   {
   	public GenericMetadata getMetadata();
   	
  
  
  
  1.1                  jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/page/PageSet.java
  
  Index: PageSet.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 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;
  
  import java.util.Iterator;
  
  /**
   * <p>
   * PageCollection
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: PageSet.java,v 1.1 2004/07/15 22:52:37 weaver Exp $
   *
   */
  public interface PageSet
  {
      /**
       * <p>
       * getPage
       * </p>     
       * Returns a Page based on <code>name</code>. <code>name</code>
       * can either be the fully quallified path, <code>folder1/folder2/myPage.psml</code>
       * or the page name relative the <code>Folder</code> that this PageSet
       * was generated for.
       * 
       * @param name
       * @return
       */
      Page get(String name);
      
      void add(Page page);
      
      Iterator iterator();
      
      int size();
  }
  
  
  
  1.4       +27 -19    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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CastorXmlPageManager.java	14 Jul 2004 21:09:12 -0000	1.3
  +++ CastorXmlPageManager.java	15 Jul 2004 22:52:37 -0000	1.4
  @@ -185,7 +185,16 @@
   
           if (page == null)
           {
  -            File f = new File(this.rootDir, id + this.ext);
  +            File f = null;
  +            if(id.endsWith(this.ext))
  +            {
  +                f = new File(this.rootDir, id );
  +            }
  +            else
  +            {
  +                f = new File(this.rootDir, id + this.ext);
  +            }
  +            
               if (!f.exists())
               {
                   return null;
  @@ -197,7 +206,9 @@
               {
                   reader = new FileReader(f);
                   Unmarshaller unmarshaller = new Unmarshaller(this.mapping);
  -                page = (Page) unmarshaller.unmarshal(reader);
  +                page = (Page) unmarshaller.unmarshal(reader);    
  +                page.setId(id);
  +                
               }
               catch (IOException e)
               {
  @@ -236,6 +247,15 @@
                   try
                   {
                       pages.put(id, page);
  +                    int lastSlash = id.indexOf("/");
  +                    if(lastSlash > -1)
  +                    {
  +                        page.setParent(getFolder(id.substring(0, lastSlash)));
  +                    }
  +                    else
  +                    {
  +                        page.setParent(getFolder("/"));
  +                    }
                   }
                   catch (java.io.IOException e)
                   {
  @@ -256,26 +276,14 @@
           }
           else
           {
  -            Folder folder = new FolderImpl();
  -            folder.setName(folderPath);            
  -            File[] children = f.listFiles();
  -            for(int i=0; i < children.length; i++)
  -            {
  -                if(children[i].isDirectory())
  -                {
  -                    folder.getFolders().add(getFolder(folderPath+"/"+children[i].getName()));
  -                }
  -                else
  -                {
  -                    folder.getPages().add(getPage(folderPath+"/"+children[i].getName()));
  -                }                
  -            }
  -            
  +            FolderImpl folder = new FolderImpl(f, folderPath, this);                   
               return folder;
           }
  -        
       }
  +    
  +
   
  +    
       /**
        * @see org.apache.jetspeed.services.page.PageManagerService#listPages()
        */
  
  
  
  1.1                  jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/PageSetImpl.java
  
  Index: PageSetImpl.java
  ===================================================================
  /*
   * Created on Jul 15, 2004
   *
   * TODO To change the template for this generated file go to
   * Window - Preferences - Java - Code Generation - Code and Comments
   */
  package org.apache.jetspeed.page.impl;
  
  import java.util.Iterator;
  import java.util.Map;
  import java.util.TreeMap;
  
  import org.apache.jetspeed.om.folder.Folder;
  import org.apache.jetspeed.om.page.Page;
  import org.apache.jetspeed.om.page.PageSet;
  
  /**
   * <p>
   * PageSetImpl
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: PageSetImpl.java,v 1.1 2004/07/15 22:52:37 weaver Exp $
   *
   */
  public class PageSetImpl implements PageSet
  {
      
      
      private Map pages = new TreeMap();
      private Folder forFolder;
      
      public PageSetImpl(Folder forFolder)
      {
          this.forFolder = forFolder;
      }
  
      /**
       * 
       * <p>
       * get
       * </p>
       *
       * @see org.apache.jetspeed.om.page.PageSet#get(java.lang.String)
       * @param name
       * @return
       */
      public Page get( String name )
      {    
          if(!name.startsWith(forFolder.getName()))
          {
              name = forFolder.getName()+"/"+name;
          }
          return (Page) pages.get(name);
      }
  
      /**
       * <p>
       * addPage
       * </p>
       *
       * @see org.apache.jetspeed.om.page.PageSet#addPage()
       * 
       */
      public void add(Page page)
      {      
          page.setParent(forFolder);
          pages.put(page.getId(), page);        
      }
  
      /**
       * <p>
       * size
       * </p>
       *
       * @see org.apache.jetspeed.om.page.PageSet#size()
       * @return
       */
      public int size()
      {       
          return pages.size();
      }
      /**
       * <p>
       * iterator
       * </p>
       *
       * @see org.apache.jetspeed.om.page.PageSet#iterator()
       * @return
       */
      public Iterator iterator()
      {        
          return pages.values().iterator();
      }
      
      
  
  }
  
  
  
  1.4       +154 -61   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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FolderImpl.java	14 Jul 2004 21:09:12 -0000	1.3
  +++ FolderImpl.java	15 Jul 2004 22:52:37 -0000	1.4
  @@ -15,31 +15,83 @@
    */
   package org.apache.jetspeed.om.folder.impl;
   
  -import java.util.Collection;
  -import java.util.Comparator;
  -import java.util.HashSet;
  -import java.util.TreeSet;
  +import java.io.File;
   
   import org.apache.jetspeed.om.folder.Folder;
  +import org.apache.jetspeed.om.folder.FolderSet;
  +import org.apache.jetspeed.om.page.Page;
  +import org.apache.jetspeed.om.page.PageSet;
  +import org.apache.jetspeed.page.PageManager;
  +import org.apache.jetspeed.page.impl.PageSetImpl;
   
   /**
    * FolderImpl
  - *
  - * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  - * @author <a href="mailto:jford@apache.org">Jeremy Ford</a>
  + * 
  + * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
  + * @author <a href="mailto:jford@apache.org">Jeremy Ford </a>
    * @version $Id$
    */
  -public class FolderImpl implements Folder {
  -    
  +public class FolderImpl implements Folder
  +{
  +
       private int id;
       private String name;
       private String defaultPage;
       private String defaultTheme;
  -    private Collection folders=new HashSet();
  -    private Collection pages=new TreeSet(new FolderComparator());
  +    private FolderSet folders;
  +    private PageSet pages;
  +    private String acl;
  +    private Folder parent;
  +    private File directory;
  +    private PageManager pageManager;
  +
       //private GenericMetadata metadata;
   
  -    /* (non-Javadoc)
  +    public FolderImpl( File directory, String name, PageManager pageManager )
  +    {
  +
  +        this.directory = directory;
  +        this.name = name;
  +        this.pageManager = pageManager;
  +    }
  +
  +    /**
  +     * @return Returns the directory.
  +     */
  +    public File getDirectory()
  +    {
  +        return directory;
  +    }
  +
  +    /**
  +     * @return Returns the parent.
  +     */
  +    public Folder getParent()
  +    {
  +        if(parent == null)
  +        {
  +            int lastSlash = name.lastIndexOf('/');
  +            if(lastSlash != -1)
  +            {
  +                parent = pageManager.getFolder(name.substring(0, lastSlash));
  +            }            
  +        }
  +        
  +        return parent;
  +    }
  +
  +    /**
  +     * @param parent
  +     *            The parent to set.
  +     */
  +    public void setParent( Folder parent )
  +    {
  +        this.parent = parent;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getName()
        */
       public String getName()
  @@ -47,15 +99,36 @@
           return name;
       }
   
  -    /* (non-Javadoc)
  +    /**
  +     * @return Returns the acl.
  +     */
  +    public String getAcl()
  +    {
  +        return acl;
  +    }
  +
  +    /**
  +     * @param acl
  +     *            The acl to set.
  +     */
  +    public void setAcl( String acl )
  +    {
  +        this.acl = acl;
  +    }
  +
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#setName(java.lang.String)
        */
  -    public void setName(String name)
  +    public void setName( String name )
       {
           this.name = name;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getDefaultPage()
        */
       public String getDefaultPage()
  @@ -63,88 +136,108 @@
           return defaultPage;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#setDefaultPage()
        */
  -    public void setDefaultPage(String defaultPage)
  +    public void setDefaultPage( String defaultPage )
       {
           this.defaultPage = defaultPage;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getDefaultTheme()
        */
  -    public String getDefaultTheme() {
  +    public String getDefaultTheme()
  +    {
           return defaultTheme;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#setDefaultTheme()
        */
  -    public void setDefaultTheme(String defaultTheme)
  +    public void setDefaultTheme( String defaultTheme )
       {
           this.defaultTheme = defaultTheme;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getFolders()
        */
  -    public Collection getFolders()
  +    public FolderSet getFolders()
       {
  +        if (folders == null)
  +        {
  +            folders = new FolderSetImpl(this);
  +            File[] children = getDirectory().listFiles();
  +            for (int i = 0; i < children.length; i++)
  +            {
  +                if (children[i].isDirectory())
  +                {
  +                    String folderName = name + "/" + children[i].getName();
  +
  +                    folders.add(pageManager.getFolder(folderName));
  +                }
  +            }
  +        }
  +
           return folders;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#setFolders(java.util.Collection)
        */
  -    public void setFolders(Collection folders)
  +    public void setFolders( FolderSet folders )
       {
  -        this.folders = folders;        
  +        this.folders = folders;
       }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#getPages()
        */
  -    public Collection getPages()
  +    public PageSet getPages()
       {
  +        if (pages == null)
  +        {
  +            pages = new PageSetImpl(this);
  +            File[] children = getDirectory().listFiles();
  +            for (int i = 0; i < children.length; i++)
  +            {
  +                if (children[i].isFile())
  +                {
  +                    pages.add(pageManager.getPage(name + "/" + children[i].getName()));
  +                }
  +
  +            }
  +        }
  +
           return pages;
       }
  +    
  +    public Page getPage(String name)
  +    {
  +        return pages.get(name);
  +    }
   
  -    /* (non-Javadoc)
  +    /*
  +     * (non-Javadoc)
  +     * 
        * @see org.apache.jetspeed.om.folder.Folder#setPages(java.util.Collection)
        */
  -    public void setPages(Collection pages)
  +    public void setPages( PageSet pages )
       {
           this.pages = pages;
       }
  -    
  -    class FolderComparator implements Comparator
  -    {
  -
  -        /**
  -         * <p>
  -         * compare
  -         * </p>
  -         *
  -         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
  -         * @param o1
  -         * @param o2
  -         * @return
  -         */
  -        public int compare( Object o1, Object o2 )
  -        {
  -            if(o1 != null || o2 != null)
  -            {
  -                Folder f1 = (Folder) o1;
  -                Folder f2 = (Folder) o2;
  -                return f1.getName().compareTo(f2.getName());
  -            }
  -            else
  -            {
  -                return 1;
  -            }
  -        }
  -        
  -    }
   
  -}
  +}
  \ No newline at end of file
  
  
  
  1.1                  jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderSetImpl.java
  
  Index: FolderSetImpl.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 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.folder.impl;
  
  import java.util.Iterator;
  import java.util.Map;
  import java.util.TreeMap;
  
  import org.apache.jetspeed.om.folder.Folder;
  import org.apache.jetspeed.om.folder.FolderSet;
  
  /**
   * <p>
   * FolderSetImpl
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: FolderSetImpl.java,v 1.1 2004/07/15 22:52:37 weaver Exp $
   *
   */
  public class FolderSetImpl implements FolderSet
  {
      
      private Map folders = new TreeMap();
      private Folder forFolder;
      
      public FolderSetImpl(Folder forFolder)
      {
          this.forFolder = forFolder;
      }
  
      /**
       * <p>
       * get
       * </p>
       *
       * @see org.apache.jetspeed.om.folder.FolderSet#get(java.lang.String)
       * @param folderName
       * @return
       */
      public Folder get( String folderName )
      {   
          if(!folderName.startsWith(forFolder.getName()))
          {
              folderName = forFolder.getName()+"/"+folderName;
          }
          return (Folder) folders.get(folderName);
      }
  
      /**
       * <p>
       * add
       * </p>
       *
       * @see org.apache.jetspeed.om.folder.FolderSet#add(org.apache.jetspeed.om.folder.Folder)
       * @param folder
       */
      public void add( Folder folder )
      {
         folder.setParent(forFolder);
         folders.put(folder.getName(), folder);
  
      }
  
      /**
       * <p>
       * iterator
       * </p>
       *
       * @see org.apache.jetspeed.om.folder.FolderSet#iterator()
       * @return
       */
      public Iterator iterator()
      {
          return folders.values().iterator();
      }
  
      /**
       * <p>
       * size
       * </p>
       *
       * @see org.apache.jetspeed.om.folder.FolderSet#size()
       * @return
       */
      public int size()
      {
          return folders.size();
      }
  
  }
  
  
  
  1.2       +11 -7     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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Folder.java	28 May 2004 18:51:56 -0000	1.1
  +++ Folder.java	15 Jul 2004 22:52:37 -0000	1.2
  @@ -15,7 +15,9 @@
    */
   package org.apache.jetspeed.om.folder;
   
  -import java.util.Collection;
  +import org.apache.jetspeed.om.common.SecuredResource;
  +import org.apache.jetspeed.om.page.Page;
  +import org.apache.jetspeed.om.page.PageSet;
   
   /**
    * Folder
  @@ -24,7 +26,7 @@
    * @author <a href="mailto:jford@apache.org">Jeremy Ford</a>
    * @version $Id$
    */
  -public interface Folder
  +public interface Folder extends SecuredResource, ChildNode
   {
       /**
        * Gets the unique name of this desktop
  @@ -48,14 +50,16 @@
       
       void setDefaultTheme(String defaultTheme);
       
  -    Collection getFolders();
  +    FolderSet getFolders();
       
  -    void setFolders(Collection folders);
  +    void setFolders(FolderSet folders);
       
  -    Collection getPages();
  +    PageSet getPages();
       
  -    void setPages(Collection pages);
  +    void setPages(PageSet pages);
       
       //GenericMetadata getMetadata();
       //void setMetadata(GenericMetadata metadata);
  +    
  +    Page getPage(String name);
   }
  
  
  
  1.1                  jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/folder/ChildNode.java
  
  Index: ChildNode.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 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.folder;
  
  /**
   * <p>
   * ChildNode
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: ChildNode.java,v 1.1 2004/07/15 22:52:37 weaver Exp $
   *
   */
  public interface ChildNode
  {
      /**
       * 
       * <p>
       * getParent
       * </p>
       *
       * @return The parent folder for this node or <code>null</code> if this 
       * node is the root folder of a system.
       */
      Folder getParent();
      
      void setParent(Folder parent);
  }
  
  
  
  1.1                  jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/folder/FolderSet.java
  
  Index: FolderSet.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 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.folder;
  
  import java.util.Iterator;
  
  /**
   * <p>
   * FolderSet
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: FolderSet.java,v 1.1 2004/07/15 22:52:37 weaver Exp $
   *
   */
  public interface FolderSet
  {
      /**
       * 
       * <p>
       * get
       * </p>
       * Returns a folder based on <code>folderName</code>. <code>folderName</code>
       * can either be the fully quallified path, <code>folder1/folder2/folder3</code>
       * or the folder name relative the <code>Folder</code> that this FolderSet
       * was generated for.
       *
       * @param folderName
       * @return
       */
      Folder get(String folderName);
      
      void add(Folder folder);
      
      Iterator iterator();
      
      int size();
  
  }
  
  
  
  1.5       +14 -3     jakarta-jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
  
  Index: TestCastorXmlPageManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestCastorXmlPageManager.java	15 Jul 2004 20:41:54 -0000	1.4
  +++ TestCastorXmlPageManager.java	15 Jul 2004 22:52:38 -0000	1.5
  @@ -310,12 +310,23 @@
           assertNotNull(folder1);
           assertEquals(2, folder1.getFolders().size());
           Iterator childItr = folder1.getFolders().iterator();
  +        // Test that the folders are naturally orderd
           Folder folder2 = (Folder) childItr.next();
           assertEquals("folder1/folder2",folder2.getName());        
           Folder folder3 = (Folder) childItr.next();
  -        assertEquals("folder1/folder3",folder3.getName());  
  +        assertEquals("folder1/folder3",folder3.getName());        
  +        
           assertEquals(1, folder2.getPages().size());
  -        assertEquals(2, folder3.getPages().size());        
  +        assertEquals(2, folder3.getPages().size());       
  +        
  +        //Test FolderSet with both absolute and relative names
  +        assertNotNull(folder1.getFolders().get("folder1/folder2"));
  +        assertNotNull(folder1.getFolders().get("folder2"));
  +        assertEquals(folder1.getFolders().get("folder1/folder2"), folder1.getFolders().get("folder2"));
  +        
  +        //Test PageSet with both absolute and relative names
  +        assertNotNull(folder3.getPages().get("folder1/folder3/test001.psml"));
  +        assertNotNull(folder3.getPages().get("test001.psml"));
           
       }
   }
  
  
  
  1.1                  jakarta-jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/om/common/SecuredResource.java
  
  Index: SecuredResource.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 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.common;
  
  /**
   * <p>
   * SecuredResource
   * </p>
   * <p>
   * Implemented by those resources that have an Acl defined for
   * security purposes.
   *
   * </p>
   * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
   * @version $Id: SecuredResource.java,v 1.1 2004/07/15 22:52:38 weaver Exp $
   *
   */
  public interface SecuredResource
  {   
      /**
       * 
       * <p>
       * getAcl
       * </p>
       *
       * @return
       */
      String getAcl();
      
      /**
       * 
       * <p>
       * setAcl
       * </p>
       *
       * @param acl 
       */
      void setAcl(String acl);
  
  }
  
  
  

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