From d99a03d6d9a7617af4f1a0c7f8b2cca60c5ba843 Mon Sep 17 00:00:00 2001 From: Rainer Klute <klute@apache.org> Date: Sat, 13 Sep 2003 12:31:28 +0000 Subject: [PATCH] - PropertySetFactory.create(InputStream) no longer throws an UnexpectedPropertySetTypeException. - HPSFRuntimeException is thrown when the application tries to read a non-integer property with Section.getPropertyIntValue(long). - Package description updated. - ClassIDhashCode() implemented. git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353349 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/hpsf/ClassID.java | 2 +- .../org/apache/poi/hpsf/MutableSection.java | 1 - .../apache/poi/hpsf/PropertySetFactory.java | 24 ++++++++---- src/java/org/apache/poi/hpsf/Section.java | 13 +++++-- .../apache/poi/hpsf/SummaryInformation.java | 17 +++++--- src/java/org/apache/poi/hpsf/package.html | 39 ++++++++++++------- 6 files changed, 65 insertions(+), 31 deletions(-) diff --git a/src/java/org/apache/poi/hpsf/ClassID.java b/src/java/org/apache/poi/hpsf/ClassID.java index e179a6352b..ddd52c686e 100644 --- a/src/java/org/apache/poi/hpsf/ClassID.java +++ b/src/java/org/apache/poi/hpsf/ClassID.java @@ -236,7 +236,7 @@ public class ClassID */ public int hashCode() { - throw new UnsupportedOperationException("FIXME: Not yet implemented."); + return new String(bytes).hashCode(); } } diff --git a/src/java/org/apache/poi/hpsf/MutableSection.java b/src/java/org/apache/poi/hpsf/MutableSection.java index 0249269a88..10945426ac 100644 --- a/src/java/org/apache/poi/hpsf/MutableSection.java +++ b/src/java/org/apache/poi/hpsf/MutableSection.java @@ -62,7 +62,6 @@ import java.util.LinkedList; import java.util.List; import org.apache.poi.util.LittleEndian; -import org.apache.poi.util.LittleEndianConsts; /** * <p>Adds writing capability to the {@link Section} class.</p> diff --git a/src/java/org/apache/poi/hpsf/PropertySetFactory.java b/src/java/org/apache/poi/hpsf/PropertySetFactory.java index 39b4ac88a2..6f6d8e6ed2 100644 --- a/src/java/org/apache/poi/hpsf/PropertySetFactory.java +++ b/src/java/org/apache/poi/hpsf/PropertySetFactory.java @@ -56,6 +56,7 @@ package org.apache.poi.hpsf; import java.io.InputStream; import java.io.IOException; +import java.rmi.UnexpectedException; /** * <p>Factory class to create instances of {@link SummaryInformation}, @@ -89,15 +90,24 @@ public class PropertySetFactory */ public static PropertySet create(final InputStream stream) throws NoPropertySetStreamException, MarkUnsupportedException, - UnexpectedPropertySetTypeException, IOException + IOException { final PropertySet ps = new PropertySet(stream); - if (ps.isSummaryInformation()) - return new SummaryInformation(ps); - else if (ps.isDocumentSummaryInformation()) - return new DocumentSummaryInformation(ps); - else - return ps; + try + { + if (ps.isSummaryInformation()) + return new SummaryInformation(ps); + else if (ps.isDocumentSummaryInformation()) + return new DocumentSummaryInformation(ps); + else + return ps; + } + catch (UnexpectedPropertySetTypeException ex) + { + /* This exception will never be throws because we already checked + * explicitly for this case above. */ + throw new UnexpectedException(ex.toString()); + } } } diff --git a/src/java/org/apache/poi/hpsf/Section.java b/src/java/org/apache/poi/hpsf/Section.java index a85894dcf1..9a27a3dedc 100644 --- a/src/java/org/apache/poi/hpsf/Section.java +++ b/src/java/org/apache/poi/hpsf/Section.java @@ -401,11 +401,16 @@ public class Section */ protected int getPropertyIntValue(final long id) { - final Long i = (Long) getProperty(id); - if (i != null) - return i.intValue(); - else + final Long i; + final Object o = getProperty(id); + if (o == null) return 0; + if (!(o instanceof Long)) + throw new HPSFRuntimeException + ("This property is not an integer type, but " + + o.getClass().getName() + "."); + i = (Long) o; + return i.intValue(); } diff --git a/src/java/org/apache/poi/hpsf/SummaryInformation.java b/src/java/org/apache/poi/hpsf/SummaryInformation.java index 5384ae4eee..2b32f3fc34 100644 --- a/src/java/org/apache/poi/hpsf/SummaryInformation.java +++ b/src/java/org/apache/poi/hpsf/SummaryInformation.java @@ -204,13 +204,19 @@ public class SummaryInformation extends SpecialPropertySet /** - * <p>Returns the stream's edit time (or <code>null</code>).</p> + * <p>Returns the total time spent in editing the document + * (or <code>0</code>).</p> * - * @return The edit time or <code>null</code> + * @return The total time spent in editing the document or 0 if the {@link + * SummaryInformation} does not contain this information. */ - public Date getEditTime() + public long getEditTime() { - return (Date) getProperty(PropertyIDMap.PID_EDITTIME); + final Date d = (Date) getProperty(PropertyIDMap.PID_EDITTIME); + if (d == null) + return 0; + else + return Util.dateToFileTime(d); } @@ -258,7 +264,8 @@ public class SummaryInformation extends SpecialPropertySet * <p>Returns the stream's page count or 0 if the {@link * SummaryInformation} does not contain a page count.</p> * - * @return The page count or <code>null</code> + * @return The page count or 0 if the {@link SummaryInformation} does not + * contain a page count. */ public int getPageCount() { diff --git a/src/java/org/apache/poi/hpsf/package.html b/src/java/org/apache/poi/hpsf/package.html index 31fcb05bf0..346b5c1bc1 100644 --- a/src/java/org/apache/poi/hpsf/package.html +++ b/src/java/org/apache/poi/hpsf/package.html @@ -9,7 +9,7 @@ <div> <p>Processes streams in the Horrible Property Set Format (HPSF) in POI filesystems. Microsoft Office documents, i.e. POI filesystems, usually - contain meta data like author, title, last editing date etc. These items + contain meta data like author, title, last saving time etc. These items are called <strong>properties</strong> and stored in <strong>property set streams</strong> along with the document itself. These streams are commonly named <tt>\005SummaryInformation</tt> and @@ -71,31 +71,44 @@ the hassle of first finding out what the title's property ID is and then using this ID to get the property's value.</p> + <p>Writing properties can be done with the classes + {@link org.apache.poi.hpsf.MutablePropertySet}, {@link + org.apache.poi.hpsf.MutableSection}, and {@link + org.apache.poi.hpsf.MutableProperty}.</p> + + <div> + <h2>History</h2> + + <dl> + <dt>2003-09-11:</dt> + + <dd> + <p>{@link org.apache.poi.hpsf.PropertySetFactory#create(InputStream)} no + longer throws an + {@link org.apache.poi.hpsf.UnexpectedPropertySetTypeException}.</p></dd> + </dl> + </div> + + <div> <h2>To Do</h2> - <p>The following is still left to be implemented:</p> + <p>The following is still left to be implemented. Sponsering could foster + these issues considerably.</p> <ul> <li> - <p>Property dictionaries</p> + <p>Convenience methods for setting summary information and document + summary information properties</p> </li> <li> - <p>Writing property sets</p> + <p>Better codepage support</p> </li> <li> - <p>Codepage support</p> - </li> - - <li> - <p>Property type Unicode string</p> - </li> - - <li> - <p>Further property types</p> + <p>Support for more property (variant) types</p> </li> </ul>