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]