<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/testcases"/>
- <classpathentry kind="src" path="src/java"/>
+ <classpathentry excluding="**/CVS/*" kind="src" path="src/testcases"/>
+ <classpathentry excluding="**/CVS/*" kind="src" path="src/java"/>
+ <classpathentry excluding="**/CVS/*" kind="src" path="src/contrib/src"/>
<classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/ant.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/junit.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/commons-logging.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/xerces-2.3.0.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/xercesImpl.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jboss/test/apache-ant-1.5.3-1/lib/xml-apis.jar"/>
- <classpathentry kind="lib" path="/Users/andrewoliver/projects/jakarta/poimerge/jakarta-poi/lib/xalan-2.2.0.jar"/>
+ <classpathentry kind="lib" path="lib/commons-logging-1.0.1.jar"/>
+ <classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
+ <classpathentry kind="lib" path="src/contrib/lib/commons-lang-1.0-b1.jar"/>
+ <classpathentry kind="lib" path="src/contrib/lib/commons-beanutils-1.6.jar"/>
+ <classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
<classpathentry kind="output" path="build"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>POI</name>
+ <name>POI-Head-1</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
+ <buildCommand>
+ <name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>
</natures>
</projectDescription>
*/
package org.apache.poi.hpsf;
-import java.io.*;
-import org.apache.poi.util.LittleEndian;
-
/**
* <p>Represents a class ID (16 bytes). Unlike other little-endian
* type the {@link ClassID} is not just 16 bytes stored in the wrong
*/
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;
+ /** <p>The number of bytes occupied by this object in the byte
+ * stream.</p> */
+ public static final int LENGTH = 16;
+ /**
+ * @return The number of bytes occupied by this object in the byte
+ * stream.
+ */
public int length()
{
return LENGTH;
/**
* <p>Gets the bytes making out the class ID. They are returned in
* correct order, i.e. big-endian.</p>
+ *
+ * @return the bytes making out the class ID.
*/
public byte[] getBytes()
{
- return bytes;
+ return bytes;
}
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;
}
*
* @param offset The offset within the <var>dst</var> 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 <var>offset</var>
- * position.
+ * @exception ArrayStoreException if there is not enough room for the class
+ * ID 16 bytes in the byte array after the <var>offset</var> 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];
}
}
*/
package org.apache.poi.hpsf;
-import java.io.*;
-import java.util.*;
-import org.apache.poi.hpsf.wellknown.*;
+import org.apache.poi.hpsf.wellknown.PropertyIDMap;
/**
* <p>Convenience class representing a DocumentSummary Information stream in a
* 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());
}
public class HPSFException extends Exception
{
+ /**
+ * <p>The underlying reason for this exception - may be
+ * <code>null</code>.</p>
+ * */
private Throwable reason;
/**
- * <p>Creates a new {@link HPSFException}.</p>
+ * <p>Creates an {@link HPSFException}.</p>
*/
public HPSFException()
{
/**
- * <p>Creates a new {@link HPSFException} with a message
- * string.</p>
+ * <p>Creates an {@link HPSFException} with a message string.</p>
*
* @param msg The message string.
*/
/**
- * <p>Creates a new {@link HPSFException} with a message string
- * and a reason.</p>
+ * <p>Creates an {@link HPSFException} with a message string and a
+ * reason.</p>
*
* @param msg The message string.
* @param reason The reason, i.e. a throwable that indirectly
public class HPSFRuntimeException extends RuntimeException
{
+ /** <p>The underlying reason for this exception - may be
+ * <code>null</code>.</p> */
private Throwable reason;
public class IllegalPropertySetDataException extends HPSFRuntimeException
{
+ /**
+ * <p>Constructor</p>
+ */
public IllegalPropertySetDataException()
{
super();
+ /**
+ * <p>Constructor</p>
+ *
+ * @param msg The exception's message string
+ */
public IllegalPropertySetDataException(final String msg)
{
super(msg);
+ /**
+ * <p>Constructor</p>
+ *
+ * @param reason This exception's underlying reason
+ */
public IllegalPropertySetDataException(final Throwable reason)
{
super(reason);
+ /**
+ * <p>Constructor</p>
+ *
+ * @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);
}
}
public class MarkUnsupportedException extends HPSFException
{
+ /**
+ * <p>Constructor</p>
+ */
public MarkUnsupportedException()
{
super();
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param msg The exception's message string
+ */
public MarkUnsupportedException(final String msg)
{
super(msg);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param reason This exception's underlying reason
+ */
public MarkUnsupportedException(final Throwable reason)
{
super(reason);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @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
public class NoPropertySetStreamException extends HPSFException
{
+ /**
+ * <p>Constructor</p>
+ */
public NoPropertySetStreamException()
{
super();
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param msg The exception's message string
+ */
public NoPropertySetStreamException(final String msg)
{
super(msg);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param reason This exception's underlying reason
+ */
public NoPropertySetStreamException(final Throwable reason)
{
super(reason);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @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);
}
public class NoSingleSectionException extends HPSFRuntimeException
{
+ /**
+ * <p>Constructor</p>
+ */
public NoSingleSectionException()
{
super();
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param msg The exception's message string
+ */
public NoSingleSectionException(final String msg)
{
super(msg);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @param reason This exception's underlying reason
+ */
public NoSingleSectionException(final Throwable reason)
{
super(reason);
}
+ /**
+ * <p>Constructor</p>
+ *
+ * @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);
*/
package org.apache.poi.hpsf;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.poi.util.LittleEndian;
/**
public class Property
{
- /* Codepage 1200 denotes Unicode. */
- private static int CP_UNICODE = 1200;
+ /** <p>Codepage 1200 denotes Unicode.</p> */
+ private static final int CP_UNICODE = 1200;
+ /** <p>The property's ID.</p> */
private int id;
+ /** <p>The property's type.</p> */
private long type;
+ /** <p>The property's value.</p> */
private Object value;
* 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;
* property IDs and property names.
*/
if (id == 0)
- {
+ {
value = readDictionary(src, offset, length, codepage);
return;
}
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 ***";
+ }
}
* @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;
/*
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;
/* 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]);
-
- /* 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;
+ 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;
m.put(id, b.toString());
}
return m;
}
+
+
+ /**
+ * <p>Returns the property's size in bytes. This is always a multiple of
+ * 4.</p>
+ *
+ * @return the property's size in bytes
+ */
+ protected int getSize()
+ {
+ throw new UnsupportedOperationException("FIXME: Not yet implemented.");
+ }
+
}
*/
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;
/**
/**
* <p>The "byteOrder" field must equal this value.</p>
*/
- final static byte[] BYTE_ORDER_ASSERTION =
- new byte[]{(byte) 0xFE, (byte) 0xFF};
+ static final byte[] BYTE_ORDER_ASSERTION =
+ new byte[] {(byte) 0xFE, (byte) 0xFF};
/**
* <p>Specifies this {@link PropertySet}'s byte order. See the
/**
* <p>The "format" field must equal this value.</p>
*/
- final static byte[] FORMAT_ASSERTION =
- new byte[]{(byte) 0x00, (byte) 0x00};
+ static final byte[] FORMAT_ASSERTION =
+ new byte[]{(byte) 0x00, (byte) 0x00};
/**
* <p>Specifies this {@link PropertySet}'s format. See the HPFS
protected int osVersion;
- public final static int OS_WIN16 = 0x0000;
- public final static int OS_MACINTOSH = 0x0001;
- public final static int OS_WIN32 = 0x0002;
+ /**
+ * <p>If the OS version field holds this value the property set stream was
+ * created on a 16-bit Windows system.</p>
+ */
+ public static final int OS_WIN16 = 0x0000;
+
+ /**
+ * <p>If the OS version field holds this value the property set stream was
+ * created on a Macintosh system.</p>
+ */
+ public static final int OS_MACINTOSH = 0x0001;
+
+ /**
+ * <p>If the OS version field holds this value the property set stream was
+ * created on a 32-bit Windows system.</p>
+ */
+ public static final int OS_WIN32 = 0x0002;
/**
* <p>Returns the property set stream's low-level "OS version"
* field.</p>
*
- * <p><strong>FIXME:</strong> Return an <code>int</code> instead
- * of a <code>long</code> in the next major version, i.e. when
- * incompatible changes are allowed.</p>
- *
* @return The property set stream's low-level "OS version" field.
*/
- public long getOSVersion()
+ public int getOSVersion()
{
return osVersion;
}
* <p>Returns the number of {@link Section}s in the property
* set.</p>
*
- * <p><strong>FIXME:</strong> Return an <code>int</code> instead
- * of a <code>long</code> in the next major version, i.e. when
- * incompatible changes are allowed.</p>
- *
* @return The number of {@link Section}s in the property set.
*/
- public long getSectionCount()
+ public int getSectionCount()
{
return sectionCount;
}
* writing functionality is implemented.</p>
*/
protected PropertySet()
- {}
+ { }
* the {@link InputStream#markSupported} method.
* @throws IOException if the {@link InputStream} cannot not be
* accessed as needed.
+ * @exception NoPropertySetStreamException if the input stream does not
+ * contain a property set
*/
public PropertySet(final InputStream stream)
- throws NoPropertySetStreamException, MarkUnsupportedException,
- IOException
+ throws NoPropertySetStreamException, MarkUnsupportedException,
+ IOException
{
if (isPropertySetStream(stream))
- {
+ {
final int avail = stream.available();
final byte[] buffer = new byte[avail];
stream.read(buffer, 0, buffer.length);
init(buffer, 0, buffer.length);
}
- else
+ else
throw new NoPropertySetStreamException();
}
* property set stream.
*/
public PropertySet(final byte[] stream, final int offset, final int length)
- throws NoPropertySetStreamException
+ throws NoPropertySetStreamException
{
if (isPropertySetStream(stream, offset, length))
init(stream, offset, length);
- else
+ else
throw new NoPropertySetStreamException();
}
* stream, else <code>false</code>.
* @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.
*/
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;
}
* @return <code>true</code> if the byte array is a property set
* stream, <code>false</code> 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;
}
* from the beginning of <var>src</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
* "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);
}
}
public boolean isSummaryInformation()
{
return Util.equal(((Section) sections.get(0)).getFormatID().getBytes(),
- SectionIDMap.SUMMARY_INFORMATION_ID);
+ SectionIDMap.SUMMARY_INFORMATION_ID);
}
public boolean isDocumentSummaryInformation()
{
return Util.equal(((Section) sections.get(0)).getFormatID().getBytes(),
- SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID);
+ SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID);
}
* more or less than one {@link Section}.
*/
public Property[] getProperties()
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getProperties();
}
* more or less than one {@link Section}.
*/
protected boolean getPropertyBooleanValue(final int id)
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getPropertyBooleanValue(id);
}
* more or less than one {@link Section}.
*/
protected int getPropertyIntValue(final int id)
- throws NoSingleSectionException
+ throws NoSingleSectionException
{
return getSingleSection().getPropertyIntValue(id);
}
* <p>If the {@link PropertySet} has only a single section this
* method returns it.</p>
*
- *@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));
}
}
*/
package org.apache.poi.hpsf;
-import java.io.*;
+import java.io.InputStream;
+import java.io.IOException;
/**
* <p>Factory class to create instances of {@link SummaryInformation},
* @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())
*/
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;
/**
* <p>Represents a section in a {@link PropertySet}.</p>
*/
protected Map dictionary;
+ /**
+ * <p>The section's format ID, {@link #getFormatID}.</p>
+ */
protected ClassID formatID;
+ /**
+ * @see #getOffset
+ */
protected long offset;
+ /**
+ * @see #getSize
+ */
protected int size;
+ /**
+ * @see #getPropertyCount
+ */
protected int propertyCount;
+ /**
+ * @see #getProperties
+ */
protected Property[] properties;
* <p>Creates an empty and uninitialized {@link Section}.
*/
protected 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
* 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;
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;
-
- 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;
-
- if (type != Variant.VT_I2)
- throw new HPSFRuntimeException
- ("Value type of property ID 1 is not VT_I2 but " +
- type + ".");
+// 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. */
+
+ /* 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 + ".");
/* 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;
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);
}
/*
*/
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
+ /**
+ * <p>This member is <code>true</code> if the last call to {@link
+ * #getPropertyIntValue} or {@link #getProperty} tried to access a
+ * property that was not available, else <code>false</code>.</p>
+ */
private boolean wasNull;
*/
package org.apache.poi.hpsf;
-import java.util.*;
-import org.apache.poi.util.LittleEndian;
+import java.util.List;
/**
* <p>Abstract superclass for the convenience classes {@link
public abstract class SpecialPropertySet extends PropertySet
{
+ /**
+ * <p>The "real" property set <code>SpecialPropertySet</code>
+ * delegates to.</p>
+ */
private PropertySet delegate;
- public SpecialPropertySet(PropertySet ps)
+ /**
+ * <p>Creates a <code>SpecialPropertySet</code>.
+ *
+ * @param ps The property set encapsulated by the
+ * <code>SpecialPropertySet</code>
+ */
+ public SpecialPropertySet(final PropertySet ps)
{
delegate = ps;
}
+ /**
+ * @see PropertySet#getByteOrder
+ */
public int getByteOrder()
{
return delegate.getByteOrder();
+ /**
+ * @see PropertySet#getFormat
+ */
public int getFormat()
{
return delegate.getFormat();
- /*
- * This is intentionally no javadoc comment.
- *
- * FIXME: Return an <code>int</code> instead of a
- * <code>long</code> 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();
- /*
- * This is intentionally no javadoc comment.
- *
- * FIXME: Return an <code>int</code> instead of a
- * <code>long</code> 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();
+ /**
+ * @see PropertySet#isSummaryInformation
+ */
public boolean isSummaryInformation()
{
return delegate.isSummaryInformation();
+ /**
+ * @see PropertySet#isDocumentSummaryInformation
+ */
public boolean isDocumentSummaryInformation()
{
return delegate.isDocumentSummaryInformation();
+ /**
+ * @see PropertySet#getSingleSection
+ */
public Section getSingleSection()
{
return delegate.getSingleSection();
*/
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;
/**
* <p>Convenience class representing a Summary Information stream in a
* 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());
}
*
* @param thumbnailData The thumbnail data
*/
- public Thumbnail(byte[] thumbnailData)
+ public Thumbnail(final byte[] thumbnailData)
{
this.thumbnailData = thumbnailData;
}
* @param thumbnail The new thumbnail value
* @see SummaryInformation#getThumbnail()
*/
- public void setThumbnail(byte[] thumbnail)
+ public void setThumbnail(final byte[] thumbnail)
{
this.thumbnailData = thumbnail;
}
public long getClipboardFormatTag()
{
long clipboardFormatTag = LittleEndian.getUInt(getThumbnail(),
- OFFSET_CFTAG);
+ OFFSET_CFTAG);
return clipboardFormatTag;
}
{
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);
}
{
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;
}
}
public class UnexpectedPropertySetTypeException extends HPSFException
{
+ /**
+ * <p>Creates an {@link UnexpectedPropertySetTypeException}.</p>
+ */
public UnexpectedPropertySetTypeException()
{
super();
}
+ /**
+ * <p>Creates an {@link UnexpectedPropertySetTypeException} with a message
+ * string.</p>
+ *
+ * @param msg The message string.
+ */
public UnexpectedPropertySetTypeException(final String msg)
{
super(msg);
}
+ /**
+ * <p>Creates a new {@link UnexpectedPropertySetTypeException} with a
+ * reason.</p>
+ *
+ * @param reason The reason, i.e. a throwable that indirectly
+ * caused this exception.
+ */
public UnexpectedPropertySetTypeException(final Throwable reason)
{
super(reason);
}
+ /**
+ * <p>Creates an {@link UnexpectedPropertySetTypeException} with a message
+ * string and a reason.</p>
+ *
+ * @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);
}
*/
package org.apache.poi.hpsf;
-import java.util.*;
+import java.util.Date;
/**
* <p>Provides various static utility methods.</p>
{
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;
}
* @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];
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++)
* @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);
* did you notice that you can tell from the epochs which
* operating system is the modern one? :-))</p>
*/
- public final static long EPOCH_DIFF = 11644473600000L;
+ public static final long EPOCH_DIFF = 11644473600000L;
/**
*/
package org.apache.poi.hpsf.wellknown;
-import java.util.*;
+import java.util.HashMap;
/**
* <p>This is a dictionary which maps property ID values to property
* should treat them as unmodifiable, copy them and modifiy the
* copies.</p>
*
- * <p><strong>FIXME:</strong> 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.</p>
+ * <p><strong>FIXME:</strong> 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.</p>
*
* @author Rainer Klute (klute@rainer-klute.de)
* @version $Id$
* 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;
+
+ /** <p>ID of the property that denotes the document's title</p> */
+ public static final int PID_TITLE = 2;
+
+ /** <p>ID of the property that denotes the document's subject</p> */
+ public static final int PID_SUBJECT = 3;
+
+ /** <p>ID of the property that denotes the document's author</p> */
+ public static final int PID_AUTHOR = 4;
+
+ /** <p>ID of the property that denotes the document's keywords</p> */
+ public static final int PID_KEYWORDS = 5;
+
+ /** <p>ID of the property that denotes the document's comments</p> */
+ public static final int PID_COMMENTS = 6;
+
+ /** <p>ID of the property that denotes the document's template</p> */
+ public static final int PID_TEMPLATE = 7;
+
+ /** <p>ID of the property that denotes the document's last author</p> */
+ public static final int PID_LASTAUTHOR = 8;
+
+ /** <p>ID of the property that denotes the document's revision number</p> */
+ public static final int PID_REVNUMBER = 9;
+
+ /** <p>ID of the property that denotes the document's edit time</p> */
+ public static final int PID_EDITTIME = 10;
+
+ /** <p>ID of the property that denotes the date and time the document was
+ * last printed</p> */
+ public static final int PID_LASTPRINTED = 11;
+
+ /** <p>ID of the property that denotes the date and time the document was
+ * created.</p> */
+ public static final int PID_CREATE_DTM = 12;
+
+ /** <p>ID of the property that denotes the date and time the document was
+ * saved</p> */
+ public static final int PID_LASTSAVE_DTM = 13;
+
+ /** <p>ID of the property that denotes the number of pages in the
+ * document</p> */
+ public static final int PID_PAGECOUNT = 14;
+
+ /** <p>ID of the property that denotes the number of words in the
+ * document</p> */
+ public static final int PID_WORDCOUNT = 15;
+
+ /** <p>ID of the property that denotes the number of characters in the
+ * document</p> */
+ public static final int PID_CHARCOUNT = 16;
+
+ /** <p>ID of the property that denotes the document's thumbnail</p> */
+ public static final int PID_THUMBNAIL = 17;
+
+ /** <p>ID of the property that denotes the application that created the
+ * document</p> */
+ public static final int PID_APPNAME = 18;
+
+ /** <p>ID of the property that denotes... FIXME</p> */
+ public static final int PID_SECURITY = 19;
/**
* <p>The entry is a dictionary.</p>
*/
- public final static int PID_DICTIONARY = 0;
+ public static final int PID_DICTIONARY = 0;
/**
* <p>The entry denotes a code page.</p>
*/
- public final static int PID_CODEPAGE = 1;
+ public static final int PID_CODEPAGE = 1;
/**
* <p>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.</p>
*/
- public final static int PID_CATEGORY = 2;
+ public static final int PID_CATEGORY = 2;
/**
* <p>Target format for power point presentation, e.g. 35mm,
* printer, video etc.</p>
*/
- public final static int PID_PRESFORMAT = 3;
+ public static final int PID_PRESFORMAT = 3;
/**
* <p>Number of bytes.</p>
*/
- public final static int PID_BYTECOUNT = 4;
+ public static final int PID_BYTECOUNT = 4;
/**
* <p>Number of lines.</p>
*/
- public final static int PID_LINECOUNT = 5;
+ public static final int PID_LINECOUNT = 5;
/**
* <p>Number of paragraphs.</p>
*/
- public final static int PID_PARCOUNT = 6;
+ public static final int PID_PARCOUNT = 6;
/**
* <p>Number of slides in a power point presentation.</p>
*/
- public final static int PID_SLIDECOUNT = 7;
+ public static final int PID_SLIDECOUNT = 7;
/**
* <p>Number of slides with notes.</p>
*/
- public final static int PID_NOTECOUNT = 8;
+ public static final int PID_NOTECOUNT = 8;
/**
* <p>Number of hidden slides.</p>
*/
- public final static int PID_HIDDENCOUNT = 9;
+ public static final int PID_HIDDENCOUNT = 9;
/**
* <p>Number of multimedia clips, e.g. sound or video.</p>
*/
- public final static int PID_MMCLIPCOUNT = 10;
+ public static final int PID_MMCLIPCOUNT = 10;
/**
* <p>This entry is set to -1 when scaling of the thumbnail is
* desired. Otherwise the thumbnail should be cropped.</p>
*/
- public final static int PID_SCALE = 11;
+ public static final int PID_SCALE = 11;
/**
* <p>This entry denotes an internally used property. It is a
* number tells how many document parts are under that
* heading.</p>
*/
- public final static int PID_HEADINGPAIR = 12;
+ public static final int PID_HEADINGPAIR = 12;
/**
* <p>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).</p>
*/
- public final static int PID_DOCPARTS = 13;
+ public static final int PID_DOCPARTS = 13;
/**
* <p>This entry contains the name of the project manager.</p>
*/
- public final static int PID_MANAGER = 14;
+ public static final int PID_MANAGER = 14;
/**
* <p>This entry contains the company name.</p>
*/
- public final static int PID_COMPANY = 15;
+ public static final int PID_COMPANY = 15;
/**
* <p>If this entry is -1 the links are dirty and should be
* re-evaluated.</p>
*/
- public final static int PID_LINKSDIRTY = 16;
+ public static final int PID_LINKSDIRTY = 16;
/**
* <p>Creates a {@link PropertyIDMap}.</p>
+ *
+ * @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);
}
*
* @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
* <var>id</var>, or <code>null</code> 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);
}
* @param id The ID.
* @return The ID string associated with <var>id</var>.
*/
- public Object get(int id)
+ public Object get(final int id)
{
return get(new Integer(id));
}
/**
- * <p>Returns the Summary Information properties singleton.</p>
+ * @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");
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");
/**
* <p>For the most basic testing.</p>
+ *
+ * @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();
*/
package org.apache.poi.hpsf.wellknown;
-import java.util.*;
+import java.util.HashMap;
/**
* <p>Maps section format IDs to {@link PropertyIDMap}s. It is
* is well-known and you can query the {@link PropertyIDMap} for PID
* strings. If you get back <code>null</code> you are on your own.</p>
*
- * <p>This {@link Map} expects the byte arrays of section format IDs
+ * <p>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.</p>
*
/**
* <p>The SummaryInformation's section's format ID.</p>
*/
- 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
};
/**
* ID. The second section has a different format ID which is not
* well-known.</p>
*/
- 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]";
+ /**
+ * <p>A property without a known name is described by this string.</p>
+ */
+ public static final String UNDEFINED = "[undefined]";
+ /**
+ * <p>The default section ID map. It maps section format IDs to
+ * {@link PropertyIDMap}s.</p>
+ */
private static SectionIDMap defaultMap;
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;
* 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;
/**
* <p>Returns the {@link PropertyIDMap} for a given section format
* ID.</p>
+ *
+ * @param sectionFormatID the section format ID
+ * @return the property ID map
*/
public PropertyIDMap get(final byte[] sectionFormatID)
{
*
* @param sectionFormatID A section format ID as a <tt>byte[]</tt> .
* @deprecated Use {@link #get(byte[])} instead!
+ * @return the property ID map
*/
public Object get(final Object sectionFormatID)
{
/**
* <p>Associates a section format ID with a {@link
* PropertyIDMap}.</p>
+ *
+ * @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);
}
/**
* @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)
{