diff --git a/.classpath b/.classpath
index dff3caf30..6a8406065 100644
--- a/.classpath
+++ b/.classpath
@@ -1,14 +1,13 @@
Represents a class ID (16 bytes). Unlike other little-endian * type the {@link ClassID} is not just 16 bytes stored in the wrong @@ -98,15 +95,21 @@ public class ClassID */ public ClassID() { - bytes = new byte[LENGTH]; - for (int i = 0; i < LENGTH; i++) - bytes[i] = 0x00; + bytes = new byte[LENGTH]; + for (int i = 0; i < LENGTH; i++) + bytes[i] = 0x00; } - public final static int LENGTH = 16; + /**
The number of bytes occupied by this object in the byte + * stream.
*/ + public static final int LENGTH = 16; + /** + * @return The number of bytes occupied by this object in the byte + * stream. + */ public int length() { return LENGTH; @@ -117,10 +120,12 @@ public class ClassID /** *Gets the bytes making out the class ID. They are returned in * correct order, i.e. big-endian.
+ * + * @return the bytes making out the class ID. */ public byte[] getBytes() { - return bytes; + return bytes; } @@ -153,9 +158,9 @@ public class ClassID bytes[6] = src[7 + offset]; bytes[7] = src[6 + offset]; - /* Read 8 bytes. */ - for (int i = 8; i < 16; i++) - bytes[i] = src[i + offset]; + /* Read 8 bytes. */ + for (int i = 8; i < 16; i++) + bytes[i] = src[i + offset]; return bytes; } @@ -170,30 +175,34 @@ public class ClassID * * @param offset The offset within the dst byte array. * - * @throws ArrayIndexOutOfBoundsException if there is not enough - * room for the class ID in the byte array. There must be at least - * 16 bytes in the byte array after the offset - * position. + * @exception ArrayStoreException if there is not enough room for the class + * ID 16 bytes in the byte array after the offset position. */ public void write(final byte[] dst, final int offset) + throws ArrayStoreException { + /* Check array size: */ + if (dst.length < 16) + throw new ArrayStoreException + ("Destination byte[] must have room for at least 16 bytes, " + + "but has a length of only " + dst.length + "."); /* Write double word. */ - dst[0 + offset] = bytes[3]; - dst[1 + offset] = bytes[2]; - dst[2 + offset] = bytes[1]; - dst[3 + offset] = bytes[0]; + dst[0 + offset] = bytes[3]; + dst[1 + offset] = bytes[2]; + dst[2 + offset] = bytes[1]; + dst[3 + offset] = bytes[0]; /* Write first word. */ - dst[4 + offset] = bytes[5]; - dst[5 + offset] = bytes[4]; + dst[4 + offset] = bytes[5]; + dst[5 + offset] = bytes[4]; /* Write second word. */ - dst[6 + offset] = bytes[7]; - dst[7 + offset] = bytes[6]; + dst[6 + offset] = bytes[7]; + dst[7 + offset] = bytes[6]; - /* Write 8 bytes. */ - for (int i = 8; i < 16; i++) - dst[i + offset] = bytes[i]; + /* Write 8 bytes. */ + for (int i = 8; i < 16; i++) + dst[i + offset] = bytes[i]; } } diff --git a/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java b/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java index 92005867a..d1b694f08 100644 --- a/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java +++ b/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java @@ -54,9 +54,7 @@ */ package org.apache.poi.hpsf; -import java.io.*; -import java.util.*; -import org.apache.poi.hpsf.wellknown.*; +import org.apache.poi.hpsf.wellknown.PropertyIDMap; /** *Convenience class representing a DocumentSummary Information stream in a @@ -90,12 +88,12 @@ public class DocumentSummaryInformation extends SpecialPropertySet * does not contain a document summary information stream. */ public DocumentSummaryInformation(final PropertySet ps) - throws UnexpectedPropertySetTypeException + throws UnexpectedPropertySetTypeException { super(ps); if (!isDocumentSummaryInformation()) throw new UnexpectedPropertySetTypeException - ("Not a " + getClass().getName()); + ("Not a " + getClass().getName()); } diff --git a/src/java/org/apache/poi/hpsf/HPSFException.java b/src/java/org/apache/poi/hpsf/HPSFException.java index 7358f0365..8a9b7c86d 100644 --- a/src/java/org/apache/poi/hpsf/HPSFException.java +++ b/src/java/org/apache/poi/hpsf/HPSFException.java @@ -66,12 +66,16 @@ package org.apache.poi.hpsf; public class HPSFException extends Exception { + /** + *
The underlying reason for this exception - may be
+ * null
.
Creates a new {@link HPSFException}.
+ *Creates an {@link HPSFException}.
*/ public HPSFException() { @@ -81,8 +85,7 @@ public class HPSFException extends Exception /** - *Creates a new {@link HPSFException} with a message - * string.
+ *Creates an {@link HPSFException} with a message string.
* * @param msg The message string. */ @@ -108,8 +111,8 @@ public class HPSFException extends Exception /** - *Creates a new {@link HPSFException} with a message string - * and a reason.
+ *Creates an {@link HPSFException} with a message string and a + * reason.
* * @param msg The message string. * @param reason The reason, i.e. a throwable that indirectly diff --git a/src/java/org/apache/poi/hpsf/HPSFRuntimeException.java b/src/java/org/apache/poi/hpsf/HPSFRuntimeException.java index 7fb09274f..d86f8e871 100644 --- a/src/java/org/apache/poi/hpsf/HPSFRuntimeException.java +++ b/src/java/org/apache/poi/hpsf/HPSFRuntimeException.java @@ -66,6 +66,8 @@ package org.apache.poi.hpsf; public class HPSFRuntimeException extends RuntimeException { + /**The underlying reason for this exception - may be
+ * null
.
Constructor
+ */ public IllegalPropertySetDataException() { super(); @@ -76,6 +79,11 @@ public class IllegalPropertySetDataException extends HPSFRuntimeException + /** + *Constructor
+ * + * @param msg The exception's message string + */ public IllegalPropertySetDataException(final String msg) { super(msg); @@ -83,6 +91,11 @@ public class IllegalPropertySetDataException extends HPSFRuntimeException + /** + *Constructor
+ * + * @param reason This exception's underlying reason + */ public IllegalPropertySetDataException(final Throwable reason) { super(reason); @@ -90,10 +103,16 @@ public class IllegalPropertySetDataException extends HPSFRuntimeException + /** + *Constructor
+ * + * @param msg The exception's message string + * @param reason This exception's underlying reason + */ public IllegalPropertySetDataException(final String msg, final Throwable reason) { - super(msg,reason); + super(msg, reason); } } diff --git a/src/java/org/apache/poi/hpsf/MarkUnsupportedException.java b/src/java/org/apache/poi/hpsf/MarkUnsupportedException.java index 820243075..656f3cab3 100644 --- a/src/java/org/apache/poi/hpsf/MarkUnsupportedException.java +++ b/src/java/org/apache/poi/hpsf/MarkUnsupportedException.java @@ -65,27 +65,46 @@ package org.apache.poi.hpsf; public class MarkUnsupportedException extends HPSFException { + /** + *Constructor
+ */ public MarkUnsupportedException() { super(); } + /** + *Constructor
+ * + * @param msg The exception's message string + */ public MarkUnsupportedException(final String msg) { super(msg); } + /** + *Constructor
+ * + * @param reason This exception's underlying reason + */ public MarkUnsupportedException(final Throwable reason) { super(reason); } + /** + *Constructor
+ * + * @param msg The exception's message string + * @param reason This exception's underlying reason + */ public MarkUnsupportedException(final String msg, final Throwable reason) { super(msg, reason); } -} +} \ No newline at end of file diff --git a/src/java/org/apache/poi/hpsf/NoPropertySetStreamException.java b/src/java/org/apache/poi/hpsf/NoPropertySetStreamException.java index 1fc2c50ca..cfccbb733 100644 --- a/src/java/org/apache/poi/hpsf/NoPropertySetStreamException.java +++ b/src/java/org/apache/poi/hpsf/NoPropertySetStreamException.java @@ -71,26 +71,45 @@ package org.apache.poi.hpsf; public class NoPropertySetStreamException extends HPSFException { + /** + *Constructor
+ */ public NoPropertySetStreamException() { super(); } + /** + *Constructor
+ * + * @param msg The exception's message string + */ public NoPropertySetStreamException(final String msg) { super(msg); } + /** + *Constructor
+ * + * @param reason This exception's underlying reason + */ public NoPropertySetStreamException(final Throwable reason) { super(reason); } + /** + *Constructor
+ * + * @param msg The exception's message string + * @param reason This exception's underlying reason + */ public NoPropertySetStreamException(final String msg, - final Throwable reason) + final Throwable reason) { super(msg, reason); } diff --git a/src/java/org/apache/poi/hpsf/NoSingleSectionException.java b/src/java/org/apache/poi/hpsf/NoSingleSectionException.java index da9e2fd8d..9b22c40b0 100644 --- a/src/java/org/apache/poi/hpsf/NoSingleSectionException.java +++ b/src/java/org/apache/poi/hpsf/NoSingleSectionException.java @@ -70,24 +70,43 @@ package org.apache.poi.hpsf; public class NoSingleSectionException extends HPSFRuntimeException { + /** + *Constructor
+ */ public NoSingleSectionException() { super(); } + /** + *Constructor
+ * + * @param msg The exception's message string + */ public NoSingleSectionException(final String msg) { super(msg); } + /** + *Constructor
+ * + * @param reason This exception's underlying reason + */ public NoSingleSectionException(final Throwable reason) { super(reason); } + /** + *Constructor
+ * + * @param msg The exception's message string + * @param reason This exception's underlying reason + */ public NoSingleSectionException(final String msg, final Throwable reason) { super(msg, reason); diff --git a/src/java/org/apache/poi/hpsf/Property.java b/src/java/org/apache/poi/hpsf/Property.java index 9ea91ae7b..b6d92ebeb 100644 --- a/src/java/org/apache/poi/hpsf/Property.java +++ b/src/java/org/apache/poi/hpsf/Property.java @@ -62,7 +62,8 @@ */ package org.apache.poi.hpsf; -import java.util.*; +import java.util.HashMap; +import java.util.Map; import org.apache.poi.util.LittleEndian; /** @@ -95,9 +96,10 @@ import org.apache.poi.util.LittleEndian; public class Property { - /* Codepage 1200 denotes Unicode. */ - private static int CP_UNICODE = 1200; + /**Codepage 1200 denotes Unicode.
*/ + private static final int CP_UNICODE = 1200; + /**The property's ID.
*/ private int id; @@ -113,6 +115,7 @@ public class Property + /**The property's type.
*/ private long type; @@ -128,6 +131,7 @@ public class Property + /**The property's value.
*/ private Object value; @@ -156,7 +160,7 @@ public class Property * codepage. It is needed only when reading string values. */ public Property(final int id, final byte[] src, final long offset, - int length, int codepage) + final int length, final int codepage) { this.id = id; @@ -165,7 +169,7 @@ public class Property * property IDs and property names. */ if (id == 0) - { + { value = readDictionary(src, offset, length, codepage); return; } @@ -174,15 +178,15 @@ public class Property type = LittleEndian.getUInt(src, o); o += LittleEndian.INT_SIZE; - try - { - value = TypeReader.read(src, o, length, (int) type); - } - catch (Throwable t) - { - t.printStackTrace(); - value = "*** null ***"; - } + try + { + value = TypeReader.read(src, o, length, (int) type); + } + catch (Throwable t) + { + t.printStackTrace(); + value = "*** null ***"; + } } @@ -199,13 +203,13 @@ public class Property * @return The dictonary */ protected Map readDictionary(final byte[] src, final long offset, - final int length, final int codepage) + final int length, final int codepage) { - /* Check whether "offset" points into the "src" array". */ - if (offset < 0 || offset > src.length) - throw new HPSFRuntimeException - ("Illegal offset " + offset + " while HPSF stream contains " + - length + " bytes."); + /* Check whether "offset" points into the "src" array". */ + if (offset < 0 || offset > src.length) + throw new HPSFRuntimeException + ("Illegal offset " + offset + " while HPSF stream contains " + + length + " bytes."); int o = (int) offset; /* @@ -216,7 +220,7 @@ public class Property final Map m = new HashMap((int) nrEntries, (float) 1.0); for (int i = 0; i < nrEntries; i++) - { + { /* The key. */ final Long id = new Long(LittleEndian.getUInt(src, o)); o += LittleEndian.INT_SIZE; @@ -231,31 +235,44 @@ public class Property /* Read the bytes or characters depending on whether the * character set is Unicode or not. */ - StringBuffer b = new StringBuffer((int) sLength); - for (int j = 0; j < sLength; j++) - if (codepage == CP_UNICODE) - { - final int i1 = o + (j * 2); - final int i2 = i1 + 1; - b.append((char) ((src[i2] << 8) + src[i1])); - } - else - b.append((char) src[o + j]); + StringBuffer b = new StringBuffer((int) sLength); + for (int j = 0; j < sLength; j++) + if (codepage == CP_UNICODE) + { + final int i1 = o + (j * 2); + final int i2 = i1 + 1; + b.append((char) ((src[i2] << 8) + src[i1])); + } + else + b.append((char) src[o + j]); - /* Strip 0x00 characters from the end of the string: */ - while (b.charAt(b.length() - 1) == 0x00) - b.setLength(b.length() - 1); - if (codepage == CP_UNICODE) - { - if (sLength % 2 == 1) - sLength++; - o += (sLength + sLength); - } - else - o += sLength; + /* Strip 0x00 characters from the end of the string: */ + while (b.charAt(b.length() - 1) == 0x00) + b.setLength(b.length() - 1); + if (codepage == CP_UNICODE) + { + if (sLength % 2 == 1) + sLength++; + o += (sLength + sLength); + } + else + o += sLength; m.put(id, b.toString()); } return m; } + + + /** + *Returns the property's size in bytes. This is always a multiple of + * 4.
+ * + * @return the property's size in bytes + */ + protected int getSize() + { + throw new UnsupportedOperationException("FIXME: Not yet implemented."); + } + } diff --git a/src/java/org/apache/poi/hpsf/PropertySet.java b/src/java/org/apache/poi/hpsf/PropertySet.java index 17eda580a..a0b2f9bc3 100644 --- a/src/java/org/apache/poi/hpsf/PropertySet.java +++ b/src/java/org/apache/poi/hpsf/PropertySet.java @@ -54,10 +54,11 @@ */ package org.apache.poi.hpsf; -import java.io.*; -import java.util.*; -import org.apache.poi.hpsf.wellknown.*; -import org.apache.poi.poifs.filesystem.*; +import java.io.InputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.poi.hpsf.wellknown.SectionIDMap; import org.apache.poi.util.LittleEndian; /** @@ -99,8 +100,8 @@ public class PropertySet /** *The "byteOrder" field must equal this value.
*/ - final static byte[] BYTE_ORDER_ASSERTION = - new byte[]{(byte) 0xFE, (byte) 0xFF}; + static final byte[] BYTE_ORDER_ASSERTION = + new byte[] {(byte) 0xFE, (byte) 0xFF}; /** *Specifies this {@link PropertySet}'s byte order. See the @@ -124,8 +125,8 @@ public class PropertySet /** *
The "format" field must equal this value.
*/ - final static byte[] FORMAT_ASSERTION = - new byte[]{(byte) 0x00, (byte) 0x00}; + static final byte[] FORMAT_ASSERTION = + new byte[]{(byte) 0x00, (byte) 0x00}; /** *Specifies this {@link PropertySet}'s format. See the HPFS @@ -154,21 +155,31 @@ public class PropertySet protected int osVersion; - public final static int OS_WIN16 = 0x0000; - public final static int OS_MACINTOSH = 0x0001; - public final static int OS_WIN32 = 0x0002; + /** + *
If the OS version field holds this value the property set stream was + * created on a 16-bit Windows system.
+ */ + public static final int OS_WIN16 = 0x0000; + + /** + *If the OS version field holds this value the property set stream was + * created on a Macintosh system.
+ */ + public static final int OS_MACINTOSH = 0x0001; + + /** + *If the OS version field holds this value the property set stream was + * created on a 32-bit Windows system.
+ */ + public static final int OS_WIN32 = 0x0002; /** *Returns the property set stream's low-level "OS version" * field.
* - *FIXME: Return an int
instead
- * of a long
in the next major version, i.e. when
- * incompatible changes are allowed.
Returns the number of {@link Section}s in the property * set.
* - *FIXME: Return an int
instead
- * of a long
in the next major version, i.e. when
- * incompatible changes are allowed.
false
.
* @throws MarkUnsupportedException if the {@link InputStream}
* does not support the {@link InputStream#mark} method.
+ * @exception IOException if an I/O error occurs
*/
public static boolean isPropertySetStream(final InputStream stream)
- throws MarkUnsupportedException, IOException
+ throws MarkUnsupportedException, IOException
{
/*
* Read at most this many bytes.
@@ -353,17 +363,17 @@ public class PropertySet
*/
if (!stream.markSupported())
throw new MarkUnsupportedException(stream.getClass().getName());
- stream.mark(BUFFER_SIZE);
+ stream.mark(BUFFER_SIZE);
/*
* Read a couple of bytes from the stream.
*/
final byte[] buffer = new byte[BUFFER_SIZE];
final int bytes =
- stream.read(buffer, 0,
- Math.min(buffer.length, stream.available()));
+ stream.read(buffer, 0,
+ Math.min(buffer.length, stream.available()));
final boolean isPropertySetStream =
- isPropertySetStream(buffer, 0, bytes);
+ isPropertySetStream(buffer, 0, bytes);
stream.reset();
return isPropertySetStream;
}
@@ -381,34 +391,38 @@ public class PropertySet
* @return true
if the byte array is a property set
* stream, false
if not.
*/
- public static boolean isPropertySetStream(final byte[] src, int offset,
- final int length)
+ public static boolean isPropertySetStream(final byte[] src,
+ final int offset,
+ final int length)
{
+ /* FIXME: Ensure that at most "length" bytes are read. */
+
/*
* Read the header fields of the stream. They must always be
* there.
*/
- final int byteOrder = LittleEndian.getUShort(src, offset);
- offset += LittleEndian.SHORT_SIZE;
+ int o = offset;
+ final int byteOrder = LittleEndian.getUShort(src, o);
+ o += LittleEndian.SHORT_SIZE;
byte[] temp = new byte[LittleEndian.SHORT_SIZE];
- LittleEndian.putShort(temp,(short)byteOrder);
+ LittleEndian.putShort(temp, (short) byteOrder);
if (!Util.equal(temp, BYTE_ORDER_ASSERTION))
return false;
- final int format = LittleEndian.getUShort(src, offset);
- offset += LittleEndian.SHORT_SIZE;
+ final int format = LittleEndian.getUShort(src, o);
+ o += LittleEndian.SHORT_SIZE;
temp = new byte[LittleEndian.SHORT_SIZE];
- LittleEndian.putShort(temp,(short)format);
+ LittleEndian.putShort(temp, (short) format);
if (!Util.equal(temp, FORMAT_ASSERTION))
return false;
- final long osVersion = LittleEndian.getUInt(src, offset);
- offset += LittleEndian.INT_SIZE;
- final ClassID classID = new ClassID(src, offset);
- offset += ClassID.LENGTH;
- final long sectionCount = LittleEndian.getUInt(src, offset);
- offset += LittleEndian.INT_SIZE;
+ // final long osVersion = LittleEndian.getUInt(src, offset);
+ o += LittleEndian.INT_SIZE;
+ // final ClassID classID = new ClassID(src, offset);
+ o += ClassID.LENGTH;
+ final long sectionCount = LittleEndian.getUInt(src, o);
+ o += LittleEndian.INT_SIZE;
if (sectionCount < 1)
return false;
- return true;
+ return true;
}
@@ -424,24 +438,27 @@ public class PropertySet
* from the beginning of src
* @param length Length of the property set stream.
*/
- private void init(final byte[] src, int offset, final int length)
+ private void init(final byte[] src, final int offset, final int length)
{
+ /* FIXME: Ensure that at most "length" bytes are read. */
+
/*
* Read the stream's header fields.
*/
- byteOrder = LittleEndian.getUShort(src, offset);
- offset += LittleEndian.SHORT_SIZE;
- format = LittleEndian.getUShort(src, offset);
- offset += LittleEndian.SHORT_SIZE;
- osVersion = (int) LittleEndian.getUInt(src, offset);
- offset += LittleEndian.INT_SIZE;
- classID = new ClassID(src, offset);
- offset += ClassID.LENGTH;
- sectionCount = LittleEndian.getInt(src, offset);
- offset += LittleEndian.INT_SIZE;
- if (sectionCount <= 0)
- throw new HPSFRuntimeException("Section count " + sectionCount +
- " must be greater than 0.");
+ int o = offset;
+ byteOrder = LittleEndian.getUShort(src, o);
+ o += LittleEndian.SHORT_SIZE;
+ format = LittleEndian.getUShort(src, o);
+ o += LittleEndian.SHORT_SIZE;
+ osVersion = (int) LittleEndian.getUInt(src, o);
+ o += LittleEndian.INT_SIZE;
+ classID = new ClassID(src, o);
+ o += ClassID.LENGTH;
+ sectionCount = LittleEndian.getInt(src, o);
+ o += LittleEndian.INT_SIZE;
+ if (sectionCount <= 0)
+ throw new HPSFRuntimeException("Section count " + sectionCount +
+ " must be greater than 0.");
/*
* Read the sections, which are following the header. They
@@ -463,9 +480,9 @@ public class PropertySet
* "offset" accordingly.
*/
for (int i = 0; i < sectionCount; i++)
- {
- final Section s = new Section(src, offset);
- offset += ClassID.LENGTH + LittleEndian.INT_SIZE;
+ {
+ final Section s = new Section(src, o);
+ o += ClassID.LENGTH + LittleEndian.INT_SIZE;
sections.add(s);
}
}
@@ -482,7 +499,7 @@ public class PropertySet
public boolean isSummaryInformation()
{
return Util.equal(((Section) sections.get(0)).getFormatID().getBytes(),
- SectionIDMap.SUMMARY_INFORMATION_ID);
+ SectionIDMap.SUMMARY_INFORMATION_ID);
}
@@ -497,7 +514,7 @@ public class PropertySet
public boolean isDocumentSummaryInformation()
{
return Util.equal(((Section) sections.get(0)).getFormatID().getBytes(),
- SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID);
+ SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID);
}
@@ -517,7 +534,7 @@ public class PropertySet
* more or less than one {@link Section}.
*/
public Property[] getProperties()
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getProperties();
}
@@ -556,7 +573,7 @@ public class PropertySet
* more or less than one {@link Section}.
*/
protected boolean getPropertyBooleanValue(final int id)
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getPropertyBooleanValue(id);
}
@@ -576,7 +593,7 @@ public class PropertySet
* more or less than one {@link Section}.
*/
protected int getPropertyIntValue(final int id)
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getPropertyIntValue(id);
}
@@ -609,16 +626,14 @@ public class PropertySet
* If the {@link PropertySet} has only a single section this * method returns it.
* - *@return The singleSection value - *@throws NoSingleSectionException if the {@link PropertySet} has - *more or less than exactly one {@link Section}. + * @return The singleSection value */ public Section getSingleSection() { if (sectionCount != 1) - throw new NoSingleSectionException - ("Property set contains " + sectionCount + " sections."); - return ((Section) sections.get(0)); + throw new NoSingleSectionException + ("Property set contains " + sectionCount + " sections."); + return ((Section) sections.get(0)); } } diff --git a/src/java/org/apache/poi/hpsf/PropertySetFactory.java b/src/java/org/apache/poi/hpsf/PropertySetFactory.java index ebd094a15..bb03da05c 100644 --- a/src/java/org/apache/poi/hpsf/PropertySetFactory.java +++ b/src/java/org/apache/poi/hpsf/PropertySetFactory.java @@ -54,7 +54,8 @@ */ package org.apache.poi.hpsf; -import java.io.*; +import java.io.InputStream; +import java.io.IOException; /** *Factory class to create instances of {@link SummaryInformation}, @@ -86,8 +87,8 @@ public class PropertySetFactory * @throws IOException if some I/O problem occurs. */ public static PropertySet create(final InputStream stream) - throws NoPropertySetStreamException, MarkUnsupportedException, - UnexpectedPropertySetTypeException, IOException + throws NoPropertySetStreamException, MarkUnsupportedException, + UnexpectedPropertySetTypeException, IOException { final PropertySet ps = new PropertySet(stream); if (ps.isSummaryInformation()) diff --git a/src/java/org/apache/poi/hpsf/Section.java b/src/java/org/apache/poi/hpsf/Section.java index ac75accda..bd8bcf0d6 100644 --- a/src/java/org/apache/poi/hpsf/Section.java +++ b/src/java/org/apache/poi/hpsf/Section.java @@ -54,9 +54,10 @@ */ package org.apache.poi.hpsf; -import java.util.*; +import java.util.Map; import org.apache.poi.util.LittleEndian; -import org.apache.poi.hpsf.wellknown.*; +import org.apache.poi.hpsf.wellknown.PropertyIDMap; +import org.apache.poi.hpsf.wellknown.SectionIDMap; /** *
Represents a section in a {@link PropertySet}.
@@ -75,6 +76,9 @@ public class Section */ protected Map dictionary; + /** + *The section's format ID, {@link #getFormatID}.
+ */ protected ClassID formatID; @@ -95,6 +99,9 @@ public class Section + /** + * @see #getOffset + */ protected long offset; @@ -110,6 +117,9 @@ public class Section + /** + * @see #getSize + */ protected int size; @@ -125,6 +135,9 @@ public class Section + /** + * @see #getPropertyCount + */ protected int propertyCount; @@ -140,6 +153,9 @@ public class Section + /** + * @see #getProperties + */ protected Property[] properties; @@ -159,7 +175,7 @@ public class Section *Creates an empty and uninitialized {@link Section}. */ protected Section() - {} + { } @@ -170,32 +186,34 @@ public class Section * @param offset The position in the stream that points to the * section's format ID. */ - public Section(final byte[] src, int offset) + public Section(final byte[] src, final int offset) { + int o1 = offset; + /* * Read the format ID. */ - formatID = new ClassID(src, offset); - offset += ClassID.LENGTH; + formatID = new ClassID(src, o1); + o1 += ClassID.LENGTH; /* * Read the offset from the stream's start and positions to * the section header. */ - this.offset = LittleEndian.getUInt(src, offset); - offset = (int)this.offset; + this.offset = LittleEndian.getUInt(src, o1); + o1 = (int) this.offset; /* * Read the section length. */ - size = (int)LittleEndian.getUInt(src, offset); - offset += LittleEndian.INT_SIZE; + size = (int) LittleEndian.getUInt(src, o1); + o1 += LittleEndian.INT_SIZE; /* * Read the number of properties. */ - propertyCount = (int)LittleEndian.getUInt(src, offset); - offset += LittleEndian.INT_SIZE; + propertyCount = (int) LittleEndian.getUInt(src, o1); + o1 += LittleEndian.INT_SIZE; /* * Read the properties. The offset is positioned at the first @@ -207,20 +225,19 @@ public class Section * other words: Before we can read any strings we have to know * whether they are in Unicode or not. Unfortunately property * 1 is not guaranteed to be the first in a section. - * - * The algorithm below reads the properties in two passes: The - * first one looks for property ID 1 and extracts the codepage - * number. The seconds pass reads the other properties. + * + * The algorithm below reads the properties in two passes: The + * first one looks for property ID 1 and extracts the codepage + * number. The seconds pass reads the other properties. */ properties = new Property[propertyCount]; - Property propertyOne; - /* Pass 1: Look for the codepage. */ - int codepage = -1; - int pass1Offset = offset; + /* Pass 1: Look for the codepage. */ + int codepage = -1; + int pass1Offset = o1; for (int i = 0; i < properties.length; i++) - { - /* Read the property ID. */ + { + /* Read the property ID. */ final int id = (int) LittleEndian.getUInt(src, pass1Offset); pass1Offset += LittleEndian.INT_SIZE; @@ -229,44 +246,44 @@ public class Section pass1Offset += LittleEndian.INT_SIZE; /* Calculate the length of the property. */ - int length; - if (i == properties.length - 1) - length = (int) (src.length - this.offset - sOffset); - else - length = (int) - LittleEndian.getUInt(src, pass1Offset + - LittleEndian.INT_SIZE) - sOffset; +// int length; +// if (i == properties.length - 1) +// length = (int) (src.length - this.offset - sOffset); +// else +// length = (int) +// LittleEndian.getUInt(src, pass1Offset + +// LittleEndian.INT_SIZE) - sOffset; - if (id == PropertyIDMap.PID_CODEPAGE) - { - /* Read the codepage if the property ID is 1. */ + if (id == PropertyIDMap.PID_CODEPAGE) + { + /* Read the codepage if the property ID is 1. */ - /* Read the property's value type. It must be - * VT_I2. */ - int o = (int) (this.offset + sOffset); - final long type = LittleEndian.getUInt(src, o); - o += LittleEndian.INT_SIZE; + /* Read the property's value type. It must be + * VT_I2. */ + int o = (int) (this.offset + sOffset); + final long type = LittleEndian.getUInt(src, o); + o += LittleEndian.INT_SIZE; - if (type != Variant.VT_I2) - throw new HPSFRuntimeException - ("Value type of property ID 1 is not VT_I2 but " + - type + "."); + if (type != Variant.VT_I2) + throw new HPSFRuntimeException + ("Value type of property ID 1 is not VT_I2 but " + + type + "."); /* Read the codepage number. */ codepage = LittleEndian.getUShort(src, o); - } - } + } + } - /* Pass 2: Read all properties, including 1. */ + /* Pass 2: Read all properties, including 1. */ for (int i = 0; i < properties.length; i++) - { - /* Read the property ID. */ - final int id = (int) LittleEndian.getUInt(src, offset); - offset += LittleEndian.INT_SIZE; + { + /* Read the property ID. */ + final int id = (int) LittleEndian.getUInt(src, o1); + o1 += LittleEndian.INT_SIZE; /* Offset from the section. */ - final int sOffset = (int) LittleEndian.getUInt(src, offset); - offset += LittleEndian.INT_SIZE; + final int sOffset = (int) LittleEndian.getUInt(src, o1); + o1 += LittleEndian.INT_SIZE; /* Calculate the length of the property. */ int length; @@ -274,12 +291,12 @@ public class Section length = (int) (src.length - this.offset - sOffset); else length = (int) - LittleEndian.getUInt(src, offset + LittleEndian.INT_SIZE) - + LittleEndian.getUInt(src, o1 + LittleEndian.INT_SIZE) - sOffset; /* Create it. */ properties[i] = new Property(id, src, this.offset + sOffset, - length, codepage); + length, codepage); } /* @@ -325,9 +342,7 @@ public class Section */ protected int getPropertyIntValue(final int id) { - /* FIXME: Find out why the following is a Long instead of an - * Integer! */ - final Long i = (Long) getProperty(id); + final Integer i = (Integer) getProperty(id); if (i != null) return i.intValue(); else @@ -358,6 +373,11 @@ public class Section + /** + *
This member is true
if the last call to {@link
+ * #getPropertyIntValue} or {@link #getProperty} tried to access a
+ * property that was not available, else false
.
Abstract superclass for the convenience classes {@link @@ -90,17 +89,30 @@ import org.apache.poi.util.LittleEndian; public abstract class SpecialPropertySet extends PropertySet { + /** + *
The "real" property set SpecialPropertySet
+ * delegates to.
Creates a SpecialPropertySet
.
+ *
+ * @param ps The property set encapsulated by the
+ * SpecialPropertySet
+ */
+ public SpecialPropertySet(final PropertySet ps)
{
delegate = ps;
}
+ /**
+ * @see PropertySet#getByteOrder
+ */
public int getByteOrder()
{
return delegate.getByteOrder();
@@ -108,6 +120,9 @@ public abstract class SpecialPropertySet extends PropertySet
+ /**
+ * @see PropertySet#getFormat
+ */
public int getFormat()
{
return delegate.getFormat();
@@ -115,20 +130,19 @@ public abstract class SpecialPropertySet extends PropertySet
- /*
- * This is intentionally no javadoc comment.
- *
- * FIXME: Return an int
instead of a
- * long
in the next major version, i.e. when
- * incompatible changes are allowed.
+ /**
+ * @see PropertySet#getOSVersion
*/
- public long getOSVersion()
+ public int getOSVersion()
{
return delegate.getOSVersion();
}
+ /**
+ * @see PropertySet#getClassID
+ */
public ClassID getClassID()
{
return delegate.getClassID();
@@ -136,20 +150,19 @@ public abstract class SpecialPropertySet extends PropertySet
- /*
- * This is intentionally no javadoc comment.
- *
- * FIXME: Return an int
instead of a
- * long
in the next major version, i.e. when
- * incompatible changes are allowed.
+ /**
+ * @see PropertySet#getSectionCount
*/
- public long getSectionCount()
+ public int getSectionCount()
{
return delegate.getSectionCount();
}
+ /**
+ * @see PropertySet#getSections
+ */
public List getSections()
{
return delegate.getSections();
@@ -157,6 +170,9 @@ public abstract class SpecialPropertySet extends PropertySet
+ /**
+ * @see PropertySet#isSummaryInformation
+ */
public boolean isSummaryInformation()
{
return delegate.isSummaryInformation();
@@ -164,6 +180,9 @@ public abstract class SpecialPropertySet extends PropertySet
+ /**
+ * @see PropertySet#isDocumentSummaryInformation
+ */
public boolean isDocumentSummaryInformation()
{
return delegate.isDocumentSummaryInformation();
@@ -171,6 +190,9 @@ public abstract class SpecialPropertySet extends PropertySet
+ /**
+ * @see PropertySet#getSingleSection
+ */
public Section getSingleSection()
{
return delegate.getSingleSection();
diff --git a/src/java/org/apache/poi/hpsf/SummaryInformation.java b/src/java/org/apache/poi/hpsf/SummaryInformation.java
index c9a5e8ebb..be54e79b0 100644
--- a/src/java/org/apache/poi/hpsf/SummaryInformation.java
+++ b/src/java/org/apache/poi/hpsf/SummaryInformation.java
@@ -58,9 +58,8 @@
*/
package org.apache.poi.hpsf;
-import java.io.*;
-import java.util.*;
-import org.apache.poi.hpsf.wellknown.*;
+import java.util.Date;
+import org.apache.poi.hpsf.wellknown.PropertyIDMap;
/**
*
Convenience class representing a Summary Information stream in a @@ -96,12 +95,12 @@ public class SummaryInformation extends SpecialPropertySet * does not contain a summary information stream. */ public SummaryInformation(final PropertySet ps) - throws UnexpectedPropertySetTypeException + throws UnexpectedPropertySetTypeException { super(ps); if (!isSummaryInformation()) throw new UnexpectedPropertySetTypeException - ("Not a " + getClass().getName()); + ("Not a " + getClass().getName()); } diff --git a/src/java/org/apache/poi/hpsf/Thumbnail.java b/src/java/org/apache/poi/hpsf/Thumbnail.java index 037113850..e17bcab8e 100644 --- a/src/java/org/apache/poi/hpsf/Thumbnail.java +++ b/src/java/org/apache/poi/hpsf/Thumbnail.java @@ -208,7 +208,7 @@ public class Thumbnail * * @param thumbnailData The thumbnail data */ - public Thumbnail(byte[] thumbnailData) + public Thumbnail(final byte[] thumbnailData) { this.thumbnailData = thumbnailData; } @@ -236,7 +236,7 @@ public class Thumbnail * @param thumbnail The new thumbnail value * @see SummaryInformation#getThumbnail() */ - public void setThumbnail(byte[] thumbnail) + public void setThumbnail(final byte[] thumbnail) { this.thumbnailData = thumbnail; } @@ -260,7 +260,7 @@ public class Thumbnail public long getClipboardFormatTag() { long clipboardFormatTag = LittleEndian.getUInt(getThumbnail(), - OFFSET_CFTAG); + OFFSET_CFTAG); return clipboardFormatTag; } @@ -289,7 +289,7 @@ public class Thumbnail { if (!(getClipboardFormatTag() == CFTAG_WINDOWS)) throw new HPSFException("Clipboard Format Tag of Thumbnail must " + - "be CFTAG_WINDOWS."); + "be CFTAG_WINDOWS."); return LittleEndian.getUInt(getThumbnail(), OFFSET_CF); } @@ -316,20 +316,20 @@ public class Thumbnail { if (!(getClipboardFormatTag() == CFTAG_WINDOWS)) throw new HPSFException("Clipboard Format Tag of Thumbnail must " + - "be CFTAG_WINDOWS."); + "be CFTAG_WINDOWS."); if (!(getClipboardFormat() == CF_METAFILEPICT)) throw new HPSFException("Clipboard Format of Thumbnail must " + - "be CF_METAFILEPICT."); + "be CF_METAFILEPICT."); else - { + { byte[] thumbnail = getThumbnail(); int wmfImageLength = thumbnail.length - OFFSET_WMFDATA; byte[] wmfImage = new byte[wmfImageLength]; System.arraycopy(thumbnail, - OFFSET_WMFDATA, - wmfImage, - 0, - wmfImageLength); + OFFSET_WMFDATA, + wmfImage, + 0, + wmfImageLength); return wmfImage; } } diff --git a/src/java/org/apache/poi/hpsf/UnexpectedPropertySetTypeException.java b/src/java/org/apache/poi/hpsf/UnexpectedPropertySetTypeException.java index 83779fe7a..0f541f989 100644 --- a/src/java/org/apache/poi/hpsf/UnexpectedPropertySetTypeException.java +++ b/src/java/org/apache/poi/hpsf/UnexpectedPropertySetTypeException.java @@ -69,26 +69,50 @@ package org.apache.poi.hpsf; public class UnexpectedPropertySetTypeException extends HPSFException { + /** + *
Creates an {@link UnexpectedPropertySetTypeException}.
+ */ public UnexpectedPropertySetTypeException() { super(); } + /** + *Creates an {@link UnexpectedPropertySetTypeException} with a message + * string.
+ * + * @param msg The message string. + */ public UnexpectedPropertySetTypeException(final String msg) { super(msg); } + /** + *Creates a new {@link UnexpectedPropertySetTypeException} with a + * reason.
+ * + * @param reason The reason, i.e. a throwable that indirectly + * caused this exception. + */ public UnexpectedPropertySetTypeException(final Throwable reason) { super(reason); } + /** + *Creates an {@link UnexpectedPropertySetTypeException} with a message + * string and a reason.
+ * + * @param msg The message string. + * @param reason The reason, i.e. a throwable that indirectly + * caused this exception. + */ public UnexpectedPropertySetTypeException(final String msg, - final Throwable reason) + final Throwable reason) { super(msg, reason); } diff --git a/src/java/org/apache/poi/hpsf/Util.java b/src/java/org/apache/poi/hpsf/Util.java index 9d138114d..00182e225 100644 --- a/src/java/org/apache/poi/hpsf/Util.java +++ b/src/java/org/apache/poi/hpsf/Util.java @@ -54,7 +54,7 @@ */ package org.apache.poi.hpsf; -import java.util.*; +import java.util.Date; /** *Provides various static utility methods.
@@ -90,10 +90,10 @@ public class Util { if (a.length != b.length) return false; - for (int i = 0; i < a.length; i++) + for (int i = 0; i < a.length; i++) if (a[i] != b[i]) return false; - return true; + return true; } @@ -108,8 +108,8 @@ public class Util * @param dstOffset Offset in the destination byte array. */ public static void copy(final byte[] src, final int srcOffset, - final int length, final byte[] dst, - final int dstOffset) + final int length, final byte[] dst, + final int dstOffset) { for (int i = 0; i < length; i++) dst[dstOffset + i] = src[srcOffset + i]; @@ -130,7 +130,7 @@ public class Util int capacity = 0; for (int i = 0; i < byteArrays.length; i++) capacity += byteArrays[i].length; - final byte[] result = new byte[capacity]; + final byte[] result = new byte[capacity]; int r = 0; for (int i = 0; i < byteArrays.length; i++) for (int j = 0; j < byteArrays[i].length; j++) @@ -150,7 +150,7 @@ public class Util * @return The new byte array. Its length is number of copied bytes. */ public static byte[] copy(final byte[] src, final int offset, - final int length) + final int length) { final byte[] result = new byte[length]; copy(src, offset, length, result, 0); @@ -167,7 +167,7 @@ public class Util * did you notice that you can tell from the epochs which * operating system is the modern one? :-)) */ - public final static long EPOCH_DIFF = 11644473600000L; + public static final long EPOCH_DIFF = 11644473600000L; /** diff --git a/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java b/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java index 9d64c1613..f5a907449 100644 --- a/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java +++ b/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java @@ -54,7 +54,7 @@ */ package org.apache.poi.hpsf.wellknown; -import java.util.*; +import java.util.HashMap; /** *This is a dictionary which maps property ID values to property @@ -66,10 +66,10 @@ import java.util.*; * should treat them as unmodifiable, copy them and modifiy the * copies.
* - *FIXME: Make the singletons - * unmodifiable. However, since this requires to use a {@link HashMap} - * delegate instead of extending {@link HashMap} and thus requires a - * lot of stupid typing. I won't do that for the time being.
+ *FIXME: Make the singletons unmodifiable. However, + * since this requires to use a {@link HashMap} delegate instead of + * extending {@link HashMap} and thus requires a lot of stupid typing. I won't + * do that for the time being.
* * @author Rainer Klute (klute@rainer-klute.de) * @version $Id$ @@ -82,24 +82,67 @@ public class PropertyIDMap extends HashMap * The following definitions are for property IDs in the first * (and only) section of the Summary Information property set. */ - public final static int PID_TITLE = 2; - public final static int PID_SUBJECT = 3; - public final static int PID_AUTHOR = 4; - public final static int PID_KEYWORDS = 5; - public final static int PID_COMMENTS = 6; - public final static int PID_TEMPLATE = 7; - public final static int PID_LASTAUTHOR = 8; - public final static int PID_REVNUMBER = 9; - public final static int PID_EDITTIME = 10; - public final static int PID_LASTPRINTED = 11; - public final static int PID_CREATE_DTM = 12; - public final static int PID_LASTSAVE_DTM = 13; - public final static int PID_PAGECOUNT = 14; - public final static int PID_WORDCOUNT = 15; - public final static int PID_CHARCOUNT = 16; - public final static int PID_THUMBNAIL = 17; - public final static int PID_APPNAME = 18; - public final static int PID_SECURITY = 19; + + /**ID of the property that denotes the document's title
*/ + public static final int PID_TITLE = 2; + + /**ID of the property that denotes the document's subject
*/ + public static final int PID_SUBJECT = 3; + + /**ID of the property that denotes the document's author
*/ + public static final int PID_AUTHOR = 4; + + /**ID of the property that denotes the document's keywords
*/ + public static final int PID_KEYWORDS = 5; + + /**ID of the property that denotes the document's comments
*/ + public static final int PID_COMMENTS = 6; + + /**ID of the property that denotes the document's template
*/ + public static final int PID_TEMPLATE = 7; + + /**ID of the property that denotes the document's last author
*/ + public static final int PID_LASTAUTHOR = 8; + + /**ID of the property that denotes the document's revision number
*/ + public static final int PID_REVNUMBER = 9; + + /**ID of the property that denotes the document's edit time
*/ + public static final int PID_EDITTIME = 10; + + /**ID of the property that denotes the date and time the document was + * last printed
*/ + public static final int PID_LASTPRINTED = 11; + + /**ID of the property that denotes the date and time the document was + * created.
*/ + public static final int PID_CREATE_DTM = 12; + + /**ID of the property that denotes the date and time the document was + * saved
*/ + public static final int PID_LASTSAVE_DTM = 13; + + /**ID of the property that denotes the number of pages in the + * document
*/ + public static final int PID_PAGECOUNT = 14; + + /**ID of the property that denotes the number of words in the + * document
*/ + public static final int PID_WORDCOUNT = 15; + + /**ID of the property that denotes the number of characters in the + * document
*/ + public static final int PID_CHARCOUNT = 16; + + /**ID of the property that denotes the document's thumbnail
*/ + public static final int PID_THUMBNAIL = 17; + + /**ID of the property that denotes the application that created the + * document
*/ + public static final int PID_APPNAME = 18; + + /**ID of the property that denotes... FIXME
*/ + public static final int PID_SECURITY = 19; @@ -111,66 +154,66 @@ public class PropertyIDMap extends HashMap /** *The entry is a dictionary.
*/ - public final static int PID_DICTIONARY = 0; + public static final int PID_DICTIONARY = 0; /** *The entry denotes a code page.
*/ - public final static int PID_CODEPAGE = 1; + public static final int PID_CODEPAGE = 1; /** *The entry is a string denoting the category the file belongs * to, e.g. review, memo, etc. This is useful to find documents of * same type.
*/ - public final static int PID_CATEGORY = 2; + public static final int PID_CATEGORY = 2; /** *Target format for power point presentation, e.g. 35mm, * printer, video etc.
*/ - public final static int PID_PRESFORMAT = 3; + public static final int PID_PRESFORMAT = 3; /** *Number of bytes.
*/ - public final static int PID_BYTECOUNT = 4; + public static final int PID_BYTECOUNT = 4; /** *Number of lines.
*/ - public final static int PID_LINECOUNT = 5; + public static final int PID_LINECOUNT = 5; /** *Number of paragraphs.
*/ - public final static int PID_PARCOUNT = 6; + public static final int PID_PARCOUNT = 6; /** *Number of slides in a power point presentation.
*/ - public final static int PID_SLIDECOUNT = 7; + public static final int PID_SLIDECOUNT = 7; /** *Number of slides with notes.
*/ - public final static int PID_NOTECOUNT = 8; + public static final int PID_NOTECOUNT = 8; /** *Number of hidden slides.
*/ - public final static int PID_HIDDENCOUNT = 9; + public static final int PID_HIDDENCOUNT = 9; /** *Number of multimedia clips, e.g. sound or video.
*/ - public final static int PID_MMCLIPCOUNT = 10; + public static final int PID_MMCLIPCOUNT = 10; /** *This entry is set to -1 when scaling of the thumbnail is * desired. Otherwise the thumbnail should be cropped.
*/ - public final static int PID_SCALE = 11; + public static final int PID_SCALE = 11; /** *This entry denotes an internally used property. It is a @@ -179,30 +222,30 @@ public class PropertyIDMap extends HashMap * number tells how many document parts are under that * heading.
*/ - public final static int PID_HEADINGPAIR = 12; + public static final int PID_HEADINGPAIR = 12; /** *This entry contains the names of document parts (word: names * of the documents in the master document, excel: sheet names, * power point: slide titles, binder: document names).
*/ - public final static int PID_DOCPARTS = 13; + public static final int PID_DOCPARTS = 13; /** *This entry contains the name of the project manager.
*/ - public final static int PID_MANAGER = 14; + public static final int PID_MANAGER = 14; /** *This entry contains the company name.
*/ - public final static int PID_COMPANY = 15; + public static final int PID_COMPANY = 15; /** *If this entry is -1 the links are dirty and should be * re-evaluated.
*/ - public final static int PID_LINKSDIRTY = 16; + public static final int PID_LINKSDIRTY = 16; @@ -224,8 +267,12 @@ public class PropertyIDMap extends HashMap /** *Creates a {@link PropertyIDMap}.
+ * + * @param initialCapacity The initial capacity as defined for + * {@link HashMap} + * @param loadFactor The load factor as defined for {@link HashMap} */ - public PropertyIDMap(int initialCapacity, float loadFactor) + public PropertyIDMap(final int initialCapacity, final float loadFactor) { super(initialCapacity, loadFactor); } @@ -238,12 +285,12 @@ public class PropertyIDMap extends HashMap * * @param id The ID. * @param idString The ID string. - * @return As specified by the {@link Map} interface, this method + * @return As specified by the {@link java.util.Map} interface, this method * returns the previous value associated with the specified * id, ornull
if there was no mapping for
* key.
*/
- public Object put(int id, String idString)
+ public Object put(final int id, final String idString)
{
return put(new Integer(id), idString);
}
@@ -257,7 +304,7 @@ public class PropertyIDMap extends HashMap
* @param id The ID.
* @return The ID string associated with id.
*/
- public Object get(int id)
+ public Object get(final int id)
{
return get(new Integer(id));
}
@@ -265,12 +312,12 @@ public class PropertyIDMap extends HashMap
/**
- * Returns the Summary Information properties singleton.
+ * @return the Summary Information properties singleton */ public static PropertyIDMap getSummaryInformationProperties() { if (summaryInformationProperties == null) - { + { PropertyIDMap m = new PropertyIDMap(18, (float) 1.0); m.put(PID_TITLE, "PID_TITLE"); m.put(PID_SUBJECT, "PID_SUBJECT"); @@ -306,7 +353,7 @@ public class PropertyIDMap extends HashMap public static PropertyIDMap getDocumentSummaryInformationProperties() { if (documentSummaryInformationProperties == null) - { + { PropertyIDMap m = new PropertyIDMap(17, (float) 1.0); m.put(PID_DICTIONARY, "PID_DICTIONARY"); m.put(PID_CODEPAGE, "PID_CODEPAGE"); @@ -334,8 +381,10 @@ public class PropertyIDMap extends HashMap /** *For the most basic testing.
+ * + * @param args The command-line arguments */ - public static void main(String args[]) + public static void main(final String[] args) { PropertyIDMap s1 = getSummaryInformationProperties(); PropertyIDMap s2 = getDocumentSummaryInformationProperties(); diff --git a/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java b/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java index 4a7bfbc6b..7dfe60fd0 100644 --- a/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java +++ b/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java @@ -54,7 +54,7 @@ */ package org.apache.poi.hpsf.wellknown; -import java.util.*; +import java.util.HashMap; /** *Maps section format IDs to {@link PropertyIDMap}s. It is
@@ -67,7 +67,7 @@ import java.util.*;
* is well-known and you can query the {@link PropertyIDMap} for PID
* strings. If you get back null
you are on your own.
This {@link Map} expects the byte arrays of section format IDs + *
This {@link java.util.Map} expects the byte arrays of section format IDs * as keys. A key maps to a {@link PropertyIDMap} describing the * property IDs in sections with the specified section format ID.
* @@ -81,12 +81,12 @@ public class SectionIDMap extends HashMap /** *The SummaryInformation's section's format ID.
*/ - public final static byte[] SUMMARY_INFORMATION_ID = new byte[] + public static final byte[] SUMMARY_INFORMATION_ID = new byte[] { - (byte) 0xF2, (byte) 0x9F, (byte) 0x85, (byte) 0xE0, - (byte) 0x4F, (byte) 0xF9, (byte) 0x10, (byte) 0x68, - (byte) 0xAB, (byte) 0x91, (byte) 0x08, (byte) 0x00, - (byte) 0x2B, (byte) 0x27, (byte) 0xB3, (byte) 0xD9 + (byte) 0xF2, (byte) 0x9F, (byte) 0x85, (byte) 0xE0, + (byte) 0x4F, (byte) 0xF9, (byte) 0x10, (byte) 0x68, + (byte) 0xAB, (byte) 0x91, (byte) 0x08, (byte) 0x00, + (byte) 0x2B, (byte) 0x27, (byte) 0xB3, (byte) 0xD9 }; /** @@ -94,16 +94,23 @@ public class SectionIDMap extends HashMap * ID. The second section has a different format ID which is not * well-known. */ - public final static byte[] DOCUMENT_SUMMARY_INFORMATION_ID = new byte[] + public static final byte[] DOCUMENT_SUMMARY_INFORMATION_ID = new byte[] { - (byte) 0xD5, (byte) 0xCD, (byte) 0xD5, (byte) 0x02, - (byte) 0x2E, (byte) 0x9C, (byte) 0x10, (byte) 0x1B, - (byte) 0x93, (byte) 0x97, (byte) 0x08, (byte) 0x00, - (byte) 0x2B, (byte) 0x2C, (byte) 0xF9, (byte) 0xAE + (byte) 0xD5, (byte) 0xCD, (byte) 0xD5, (byte) 0x02, + (byte) 0x2E, (byte) 0x9C, (byte) 0x10, (byte) 0x1B, + (byte) 0x93, (byte) 0x97, (byte) 0x08, (byte) 0x00, + (byte) 0x2B, (byte) 0x2C, (byte) 0xF9, (byte) 0xAE }; - public final static String UNDEFINED = "[undefined]"; + /** + *A property without a known name is described by this string.
+ */ + public static final String UNDEFINED = "[undefined]"; + /** + *The default section ID map. It maps section format IDs to + * {@link PropertyIDMap}s.
+ */ private static SectionIDMap defaultMap; @@ -117,12 +124,12 @@ public class SectionIDMap extends HashMap public static SectionIDMap getInstance() { if (defaultMap == null) - { + { final SectionIDMap m = new SectionIDMap(); m.put(SUMMARY_INFORMATION_ID, - PropertyIDMap.getSummaryInformationProperties()); + PropertyIDMap.getSummaryInformationProperties()); m.put(DOCUMENT_SUMMARY_INFORMATION_ID, - PropertyIDMap.getDocumentSummaryInformationProperties()); + PropertyIDMap.getDocumentSummaryInformationProperties()); defaultMap = m; } return defaultMap; @@ -144,14 +151,14 @@ public class SectionIDMap extends HashMap * string "[undefined]" is returned. */ public static String getPIDString(final byte[] sectionFormatID, - final int pid) + final int pid) { final PropertyIDMap m = - (PropertyIDMap) getInstance().get(sectionFormatID); + (PropertyIDMap) getInstance().get(sectionFormatID); if (m == null) return UNDEFINED; else - { + { final String s = (String) m.get(pid); if (s == null) return UNDEFINED; @@ -164,6 +171,9 @@ public class SectionIDMap extends HashMap /** *Returns the {@link PropertyIDMap} for a given section format * ID.
+ * + * @param sectionFormatID the section format ID + * @return the property ID map */ public PropertyIDMap get(final byte[] sectionFormatID) { @@ -178,6 +188,7 @@ public class SectionIDMap extends HashMap * * @param sectionFormatID A section format ID as a byte[] . * @deprecated Use {@link #get(byte[])} instead! + * @return the property ID map */ public Object get(final Object sectionFormatID) { @@ -189,9 +200,13 @@ public class SectionIDMap extends HashMap /** *Associates a section format ID with a {@link * PropertyIDMap}.
+ * + * @param sectionFormatID the section format ID + * @param propertyIDMap the property ID map + * @return as defined by {@link java.util.Map#put} */ public Object put(final byte[] sectionFormatID, - final PropertyIDMap propertyIDMap) + final PropertyIDMap propertyIDMap) { return super.put(new String(sectionFormatID), propertyIDMap); } @@ -200,6 +215,14 @@ public class SectionIDMap extends HashMap /** * @deprecated Use {@link #put(byte[], PropertyIDMap)} instead! + * @link #put(byte[], PropertyIDMap) + * + * @param key This parameter remains undocumented since the method is + * deprecated. + * @param value This parameter remains undocumented since the method is + * deprecated. + * @return The return value remains undocumented since the method is + * deprecated. */ public Object put(final Object key, final Object value) {