weaver      2004/08/24 07:12:12

  Modified:    components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
                        FolderImpl.java
  Added:       components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
                        FolderMetaDataImpl.java
  Log:
  Added the begins of folder meta data support.  I used Dublin Core schema for basic 
metadata like.  Metadata is marshaled/unmarshalled
  using JDom and metadata is accessed via XPath queries.  We may want to look into 
switching over to castor given that castor has the
  namespace support we require.
  
  Revision  Changes    Path
  1.9       +34 -5     
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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FolderImpl.java   19 Aug 2004 13:55:23 -0000      1.8
  +++ FolderImpl.java   24 Aug 2004 14:12:12 -0000      1.9
  @@ -16,14 +16,19 @@
   package org.apache.jetspeed.om.folder.impl;
   
   import java.io.File;
  +import java.io.FilenameFilter;
  +import java.io.IOException;
  +import java.util.Locale;
   
   import org.apache.jetspeed.om.folder.Folder;
  +import org.apache.jetspeed.om.folder.FolderMetaData;
   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.PageNotFoundException;
   import org.apache.jetspeed.page.impl.PageSetImpl;
  +import org.apache.jetspeed.util.ArgUtil;
   
   /**
    * FolderImpl
  @@ -46,15 +51,21 @@
       private Folder parent;
       private File directory;
       private PageManager pageManager;
  + 
  +    private FolderMetaData metaData;
  +    private Locale locale;
   
       //private GenericMetadata metadata;
   
  -    public FolderImpl( File directory, String name, PageManager pageManager )
  +    public FolderImpl( File directory, String name, PageManager pageManager ) 
throws   IOException
       {
   
           this.directory = directory;
  +        ArgUtil.assertNotNull(String.class, name, this);
           this.name = name;
           this.pageManager = pageManager;
  +        this.metaData = new FolderMetaDataImpl(this, directory);        
  +        
       }
   
       /**
  @@ -67,8 +78,9 @@
   
       /**
        * @return Returns the parent.
  +     * @throws IOException
        */
  -    public Folder getParent()
  +    public Folder getParent() throws IOException
       {
           if (name.equals("/"))
           {
  @@ -194,7 +206,7 @@
        * 
        * @see org.apache.jetspeed.om.folder.Folder#getFolders()
        */
  -    public FolderSet getFolders()
  +    public FolderSet getFolders() throws IOException
       {
           if (folders == null)
           {
  @@ -242,7 +254,12 @@
           if (pages == null)
           {
               pages = new PageSetImpl(this);
  -            File[] children = getDirectory().listFiles();
  +            File[] children = getDirectory().listFiles(new FilenameFilter(){
  +
  +                public boolean accept( File dir, String name )
  +                {                   
  +                    return !name.endsWith(".metadata");
  +                }});
               for (int i = 0; i < children.length; i++)
               {
                   if (children[i].isFile())
  @@ -283,4 +300,16 @@
           this.pages = pages;
       }
   
  +    /**
  +     * <p>
  +     * getMetaData
  +     * </p>
  +     *
  +     * @see org.apache.jetspeed.om.folder.Folder#getMetaData()
  +     * @return
  +     */
  +    public FolderMetaData getMetaData()
  +    {        
  +        return metaData;
  +    }
   }
  
  
  
  1.1                  
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderMetaDataImpl.java
  
  Index: FolderMetaDataImpl.java
  ===================================================================
  /*
   * Created on Aug 19, 2004
   *
   * TODO To change the template for this generated file go to
   * Window - Preferences - Java - Code Generation - Code and Comments
   */
  package org.apache.jetspeed.om.folder.impl;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Locale;
  import java.util.Map;
  
  import org.apache.jetspeed.om.folder.Folder;
  import org.apache.jetspeed.om.folder.FolderMetaData;
  import org.jdom.Document;
  import org.jdom.Element;
  import org.jdom.JDOMException;
  import org.jdom.Namespace;
  import org.jdom.input.SAXBuilder;
  import org.jdom.xpath.XPath;
  
  /**
   * <p>
   * FolderMetaDataImpl
   * </p>
   * <p>
   * 
   * </p>
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver </a>
   * @version $Id: FolderMetaDataImpl.java,v 1.1 2004/08/24 14:12:12 weaver Exp $
   *  
   */
  public class FolderMetaDataImpl implements FolderMetaData
  {
  
      private Folder folder;
      private Document metaDataDoc;
      private Locale locale;
      private static final XPath defaultTitleXPath;
      private Map titles;
  
      static
      {
          try
          {
              defaultTitleXPath = 
XPath.newInstance("/js:folder/dc:title[not(@xml:lang)]");
              defaultTitleXPath.addNamespace("js", 
"http://portals.apache.org/jetspeed";);
              defaultTitleXPath.addNamespace("dc", "http://www.purl.org/dc";);
  
          }
          catch (JDOMException e)
          {
              throw new IllegalArgumentException("Invalid XPath for default title.  " 
+ e.toString());
          }
      }
  
      public FolderMetaDataImpl( Folder folder, File directory) throws IOException
      {
          this.folder = folder;        
          this.titles = new HashMap();
          File metaDataFile = new File(directory, "folder.metadata");
          if (metaDataFile.exists())
          {
              SAXBuilder builder = new SAXBuilder();
              try
              {
                  metaDataDoc = builder.build(metaDataFile);
              }
              catch (JDOMException e)
              {
                  throw new IllegalStateException("Unable to read folder meta data: " 
+ e.toString());
              }
          }
  
      }
  
      /**
       * <p>
       * getTitle
       * </p>
       * 
       * @see org.apache.jetspeed.om.folder.FolderMetaData#getTitle()
       * @return
       */
      public String getTitle(Locale locale)
      {
          if (titles.containsKey(locale))
          {
              return (String) titles.get(locale);
          }
  
          try
          {
              if (metaDataDoc != null)
              {
  
                  XPath titleXpath = createLocalizedTitleXPath(locale);
                  List nodes = titleXpath.selectNodes(metaDataDoc);
                  Element titleElement = (Element) 
titleXpath.selectSingleNode(metaDataDoc);
                  if (titleElement != null)
                  {
                      titles.put(locale, titleElement.getTextTrim());
                  }
  
                  if (titleElement == null)
                  {
                      titleElement = (Element) 
defaultTitleXPath.selectSingleNode(metaDataDoc);
  
                      if (titleElement != null)
                      {
                          titles.put(locale, titleElement.getTextTrim());
                      }
                      else
                      {
                          titles.put(locale, folder.getName());
                      }
                  }
              }
              else
              {
                  titles.put(locale, folder.getName());
              }
  
              return (String) titles.get(locale);
          }
          catch (JDOMException e)
          {
              throw new IllegalArgumentException("Invalid XPath query for title:  " + 
e.toString());
          }
  
      }
      
      public String getTitle()
      {
          return getTitle(Locale.getDefault());
      }
  
      /**
       * @param title
       *            The title to set.
       */
      void setTitle( String title )
      {
  
      }
  
      protected XPath createLocalizedTitleXPath( Locale locale ) throws JDOMException
      {
          XPath titleXpath;
          String xpathString = "/js:folder/dc:[EMAIL PROTECTED]:lang='" + 
locale.getLanguage() + "']";
  
          titleXpath = XPath.newInstance(xpathString);
          titleXpath.addNamespace(Namespace.XML_NAMESPACE);
          titleXpath.addNamespace("js", "http://portals.apache.org/jetspeed";);
          titleXpath.addNamespace("dc", "http://www.purl.org/dc";);
          
          return titleXpath;
      }
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to