klute       2002/07/17 09:23:22

  Modified:    src/contrib/src/org/apache/poi/contrib/poibrowser Codec.java
                        POIBrowser.java PropertySetDescriptorRenderer.java
               src/java/org/apache/poi/hpsf ClassID.java PropertySet.java
                        Section.java
  Log:
  Broken HPSF usage of POI's general little-endian classes fixed.
  
  Revision  Changes    Path
  1.2       +46 -1     
jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/Codec.java
  
  Index: Codec.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/Codec.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Codec.java        14 Feb 2002 04:00:58 -0000      1.1
  +++ Codec.java        17 Jul 2002 16:23:21 -0000      1.2
  @@ -60,6 +60,7 @@
   
   import java.io.*;
   import java.util.*;
  +import org.apache.poi.hpsf.ClassID;
   
   
   
  @@ -137,6 +138,50 @@
           sb.append((char) hexval[(b & 0xF0) >> 4]);
           sb.append((char) hexval[(b & 0x0F) >> 0]);
           return sb.toString();
  +    }
  +
  +
  +
  +    /**
  +     * <p>Converts an int value (32-bit) into its hexadecimal
  +     * notation.</p>
  +     */
  +    public static String hexEncode(final int i)
  +    {
  +        StringBuffer sb = new StringBuffer(8);
  +        sb.append((char) hexval[(i & 0xF0000000) >> 28]);
  +        sb.append((char) hexval[(i & 0x0F000000) >> 24]);
  +        sb.append((char) hexval[(i & 0x00F00000) >> 20]);
  +        sb.append((char) hexval[(i & 0x000F0000) >> 16]);
  +        sb.append((char) hexval[(i & 0x0000F000) >> 12]);
  +        sb.append((char) hexval[(i & 0x00000F00) >>  8]);
  +        sb.append((char) hexval[(i & 0x000000F0) >>  4]);
  +        sb.append((char) hexval[(i & 0x0000000F) >>  0]);
  +        return sb.toString();
  +    }
  +
  +
  +
  +    /**
  +     * <p>Converts a long value (64-bit) into its hexadecimal
  +     * notation.</p>
  +     */
  +    public static String hexEncode(final long l)
  +    {
  +        StringBuffer sb = new StringBuffer(16);
  +        sb.append((l & 0xFFFFFFFF00000000L) >> 32);
  +        sb.append((l & 0x00000000FFFFFFFFL) >>  0);
  +        return sb.toString();
  +    }
  +
  +
  +
  +    /**
  +     * <p>Converts a class ID into its hexadecimal notation.</p>
  +     */
  +    public static String hexEncode(final ClassID classID)
  +    {
  +        return hexEncode(classID.getBytes());
       }
   
   
  
  
  
  1.4       +2 -2      
jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/POIBrowser.java
  
  Index: POIBrowser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/POIBrowser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- POIBrowser.java   22 Feb 2002 04:27:18 -0000      1.3
  +++ POIBrowser.java   17 Jul 2002 16:23:21 -0000      1.4
  @@ -159,7 +159,7 @@
                         new PropertySetDescriptorRenderer());
           treeUI.setCellRenderer(etcr);
           setSize(600, 450);
  -        setTitle("POI Browser 0.06");
  +        setTitle("POI Browser 0.07");
           setVisible(true);
       }
   
  
  
  
  1.3       +4 -12     
jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/PropertySetDescriptorRenderer.java
  
  Index: PropertySetDescriptorRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/contrib/src/org/apache/poi/contrib/poibrowser/PropertySetDescriptorRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PropertySetDescriptorRenderer.java        19 May 2002 18:09:26 -0000      1.2
  +++ PropertySetDescriptorRenderer.java        17 Jul 2002 16:23:21 -0000      1.3
  @@ -85,9 +85,6 @@
                                                     final int row,
                                                     final boolean hasFocus)
       {
  -
  -        throw new RuntimeException("THIS FUNCTION BROKEN -- FIX IT");
  -/*
           final PropertySetDescriptor d = (PropertySetDescriptor)
               ((DefaultMutableTreeNode) value).getUserObject();
           final PropertySet ps = d.getPropertySet();
  @@ -110,9 +107,8 @@
   
           if (ps instanceof SummaryInformation)
           {
  -*/
               /* Use the convenience methods. */
  -/*            final SummaryInformation si = (SummaryInformation) ps;
  +            final SummaryInformation si = (SummaryInformation) ps;
               text.append("\n");
               text.append("\nTitle:               " + si.getTitle());
               text.append("\nSubject:             " + si.getSubject());
  @@ -136,7 +132,7 @@
   
           if (selected)
               Util.invert(text);
  -        return p;*/
  +        return p;
       }
   
   
  @@ -164,12 +160,9 @@
        */
       protected String toString(final Section s, final String name)
       {
  -
  -        throw new RuntimeException("THIS FUNCTION BROKEN -- FIX IT");
  -/*
           final StringBuffer b = new StringBuffer();
           b.append("\n" + name + " Format ID: ");
  -        b.append(Integer.toHexString(s.getFormatID()));
  +        b.append(Codec.hexEncode(s.getFormatID()));
           b.append("\n" + name + " Offset: " + s.getOffset());
           b.append("\n" + name + " Section size: " + s.getSize());
           b.append("\n" + name + " Property count: " + s.getPropertyCount());
  @@ -195,7 +188,6 @@
                   b.append(value.toString());
           }
           return b.toString();
  -*/
       }
   
   }
  
  
  
  1.4       +64 -54    jakarta-poi/src/java/org/apache/poi/hpsf/ClassID.java
  
  Index: ClassID.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hpsf/ClassID.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ClassID.java      17 Jul 2002 12:01:50 -0000      1.3
  +++ ClassID.java      17 Jul 2002 16:23:22 -0000      1.4
  @@ -59,83 +59,93 @@
   import org.apache.poi.util.LittleEndian;
   
   /**
  - *  REWRITE ME
  - *  <p>
  - *  Represents a class ID (16 bytes). Unlike other little-endian type the {@link
  - *  ClassID} is not just 16 bytes stored in the wrong order. Instead, it is a
  - *  double word (4 bytes) followed by two words (2 bytes each) followed by 8
  - *  bytes.</p>
  + *  <p>Represents a class ID (16 bytes). Unlike other little-endian
  + *  type the {@link ClassID} is not just 16 bytes stored in the wrong
  + *  order. Instead, it is a double word (4 bytes) followed by two
  + *  words (2 bytes each) followed by 8 bytes.</p>
    *
  - *@author     Rainer Klute ([EMAIL PROTECTED])
  - *@created    May 10, 2002
  - *@see        LittleEndian
  - *@version    $Id$
  - *@since      2002-02-09
  + * @author Rainer Klute ([EMAIL PROTECTED])
  + * @version $Id$
  + * @since 2002-02-09
    */
  -public class ClassID {
  +public class ClassID
  +{
   
       /**
  -     *  <p>
  -     *
  -     *  Creates a {@link ClassID} and reads its value from a byte array.</p>
  +     * <p>The bytes making out the class ID in correct order,
  +     * i.e. big-endian.</p>
  +     */
  +    protected byte[] bytes;
  +
  +
  +
  +    /**
  +     *  <p>Creates a {@link ClassID} and reads its value from a byte
  +     *  array.</p>
        *
  -     *@param  src     The byte array to read from.
  -     *@param  offset  The offset of the first byte to read.
  +     * @param src The byte array to read from.
  +     * @param offset The offset of the first byte to read.
        */
  -    public ClassID(final byte[] src, final int offset) {
  - //       super(src, offset);
  +    public ClassID(final byte[] src, final int offset)
  +    {
  +        read(src, offset);
       }
   
   
   
       public final static int LENGTH = 16;
   
  -    public int length() {
  +    public int length()
  +    {
           return LENGTH;
       }
   
  -    public byte[] getBytes() {
  -
  -        throw new RuntimeException("This fucntion must be rewritten");
  -    }
   
   
       /**
  -     *  Description of the Method - REWRITE ME REWRITE ME REWRITE ME
  -     *  ISNT += offset a bug?  -- doesn't the order of operations evaluate that
  -     * last?
  -     *
  -     *@param  src     Description of the Parameter
  -     *@param  offset  Description of the Parameter
  -     *@return         Description of the Return Value
  +     * <p>Gets the bytes making out the class ID. They are returned in
  +     * correct order, i.e. big-endian.</p>
        */
  -    public byte[] read(byte[] src, int offset) {
  -        byte[] retval = new byte[24];
  -
  -        //throw new RuntimeException("This fucntion must be rewritten");
  -
  -        //Number[] b = new Number[11];
  -
  -        //b[0] = new Integer(LittleEndian.getInt(src, offset));
  -        //transfer the first Int from little to big endian
  -        retval[0] = src[3];
  -        retval[1] = src[2];
  -        retval[2] = src[1];
  -        retval[3] = src[0];
  +    public byte[] getBytes()
  +    {
  +     return bytes;
  +    }
   
  -        //b[1] = new Short(LittleEndian.getInt(src, offset += 
LittleEndian.INT_SIZE));
  -        //transfer the second short from little to big endian
  -        retval[4] = src[5];
  -        retval[5] = src[4];
   
  -        //b[2] = new Short(LittleEndian.getInt(src, offset += 
LittleEndian.SHORT_SIZE));
  -        //transfer the third short from little to big endian
  -        retval[6] = src[7];
  -        retval[7] = src[6];
   
  -        System.arraycopy(src, 8, retval, 8, retval.length - 8);
  +    /**
  +     * <p>Reads a class ID from a byte array by turning little-endian
  +     * into big-endian.</p>
  +     *
  +     * @param src The byte array to read from
  +     *
  +     * @param offset The offset within the <var>src</var> byte array
  +     *
  +     * @return A byte array containing the class ID.
  +     */
  +    public byte[] read(final byte[] src, final int offset)
  +    {
  +        bytes = new byte[16];
  +
  +        /* Read double word. */
  +        bytes[0] = src[3 + offset];
  +        bytes[1] = src[2 + offset];
  +        bytes[2] = src[1 + offset];
  +        bytes[3] = src[0 + offset];
  +
  +        /* Read first word. */
  +        bytes[4] = src[5 + offset];
  +        bytes[5] = src[4 + offset];
  +
  +        /* Read second word. */
  +        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];
   
  -        return retval;
  +        return bytes;
       }
   
   }
  
  
  
  1.7       +2 -2      jakarta-poi/src/java/org/apache/poi/hpsf/PropertySet.java
  
  Index: PropertySet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hpsf/PropertySet.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PropertySet.java  19 May 2002 18:09:26 -0000      1.6
  +++ PropertySet.java  17 Jul 2002 16:23:22 -0000      1.7
  @@ -95,7 +95,7 @@
    */
   public class PropertySet {
       final static byte[] BYTE_ORDER_ASSERTION =
  -            new byte[]{(byte) 0xFF, (byte) 0xFE};
  +            new byte[]{(byte) 0xFE, (byte) 0xFF};
       final static byte[] FORMAT_ASSERTION =
               new byte[]{(byte) 0x00, (byte) 0x00};
   
  
  
  
  1.7       +100 -110  jakarta-poi/src/java/org/apache/poi/hpsf/Section.java
  
  Index: Section.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hpsf/Section.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Section.java      19 May 2002 18:09:26 -0000      1.6
  +++ Section.java      17 Jul 2002 16:23:22 -0000      1.7
  @@ -59,23 +59,19 @@
   import org.apache.poi.hpsf.wellknown.*;
   
   /**
  - *  <p>
  + * <p>Represents a section in a {@link PropertySet}.</p>
    *
  - *  Represents a section in a {@link PropertySet}.</p>
  - *
  - *@author     Rainer Klute ([EMAIL PROTECTED])
  - *@author     Drew Varner (Drew.Varner allUpIn sc.edu)
  - *@created    May 10, 2002
  - *@version    $Id$
  - *@since      2002-02-09
  + * @author Rainer Klute ([EMAIL PROTECTED])
  + * @author Drew Varner (Drew.Varner allUpIn sc.edu)
  + * @version $Id$
  + * @since 2002-02-09
    */
  -public class Section {
  +public class Section
  +{
   
       /**
  -     *  <p>
  -     *
  -     *  Maps property IDs to section-private PID strings. These strings can be
  -     *  found in the property with ID 0.</p>
  +     * <p>Maps property IDs to section-private PID strings. These
  +     * strings can be found in the property with ID 0.</p>
        */
       protected Map dictionary;
   
  @@ -83,13 +79,13 @@
   
   
       /**
  -     *  <p>
  -     *
  -     *  Returns the format ID. The format ID is the "type" of the section.</p>
  +     * <p>Returns the format ID. The format ID is the "type" of the
  +     * section.</p>
        *
  -     *@return    The formatID value
  +     * @return The format ID
        */
  -    public ClassID getFormatID() {
  +    public ClassID getFormatID()
  +    {
           return formatID;
       }
   
  @@ -99,13 +95,12 @@
   
   
       /**
  -     *  <p>
  +     * <p>Returns the offset of the section in the stream.</p>
        *
  -     *  Returns the offset of the section in the stream.</p>
  -     *
  -     *@return    The offset value
  +     * @return The offset of the section in the stream.
        */
  -    public long getOffset() {
  +    public long getOffset()
  +    {
           return offset;
       }
   
  @@ -115,13 +110,12 @@
   
   
       /**
  -     *  <p>
  -     *
  -     *  Returns the section's size in bytes.</p>
  +     * <p>Returns the section's size in bytes.</p>
        *
  -     *@return    The size value
  +     * @return The section's size in bytes.
        */
  -    public int getSize() {
  +    public int getSize()
  +    {
           return size;
       }
   
  @@ -131,13 +125,12 @@
   
   
       /**
  -     *  <p>
  +     * <p>Returns the number of properties in this section.</p>
        *
  -     *  Returns the number of properties in this section.</p>
  -     *
  -     *@return    The propertyCount value
  +     * @return The number of properties in this section.
        */
  -    public int getPropertyCount() {
  +    public int getPropertyCount()
  +    {
           return propertyCount;
       }
   
  @@ -147,28 +140,26 @@
   
   
       /**
  -     *  <p>
  -     *
  -     *  Returns this section's properties.</p>
  +     * <p>Returns this section's properties.</p>
        *
  -     *@return    The properties value
  +     * @return This section's properties.
        */
  -    public Property[] getProperties() {
  +    public Property[] getProperties()
  +    {
           return properties;
       }
   
   
   
       /**
  -     *  <p>
  +     * <p>Creates a {@link Section} instance from a byte array.</p>
        *
  -     *  Creates a {@link Section} instance from a byte array.</p>
  -     *
  -     *@param  src     Contains the complete property set stream.
  -     *@param  offset  The position in the stream that points to the section's
  -     *      format ID.
  +     * @param src Contains the complete property set stream.
  +     * @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, int offset)
  +    {
           /*
            *  Read the format ID.
            */
  @@ -217,7 +208,8 @@
                   length = (int)(src.length - this.offset - sOffset);
               } else {
                   length = (int)
  -                        LittleEndian.getUInt(src, offset + LittleEndian.INT_SIZE) - 
sOffset;
  +                    LittleEndian.getUInt(src, offset + LittleEndian.INT_SIZE) -
  +                    sOffset;
               }
   
               /*
  @@ -236,22 +228,21 @@
   
   
       /**
  -     *  <p>
  +     * <p>Returns the value of the property with the specified ID. If
  +     * the property is not available, <code>null</code> is returned
  +     * and a subsequent call to {@link #wasNull} will return
  +     * <code>true</code>.</p>
        *
  -     *  Returns the value of the property with the specified ID. If the property
  -     *  is not available, <code>null</code> is returned and a subsequent call to
  -     *  {@link #wasNull} will return <code>true</code>.</p>
  +     * @param id The property's ID
        *
  -     *@param  id  Description of the Parameter
  -     *@return     The property value
  +     * @return The property's value
        */
  -    protected Object getProperty(final int id) {
  +    protected Object getProperty(final int id)
  +    {
           wasNull = false;
  -        for (int i = 0; i < properties.length; i++) {
  -            if (id == properties[i].getID()) {
  +        for (int i = 0; i < properties.length; i++)
  +            if (id == properties[i].getID())
                   return properties[i].getValue();
  -            }
  -        }
           wasNull = true;
           return null;
       }
  @@ -259,47 +250,48 @@
   
   
       /**
  -     *  <p>
  -     *
  -     *  Returns the value of the numeric property with the specified ID. If the
  -     *  property is not available, 0 is returned. A subsequent call to {@link
  -     *  #wasNull} will return <code>true</code> to let the caller distinguish
  -     *  that case from a real property value of 0.</p>
  -     *
  -     *@param  id  Description of the Parameter
  -     *@return     The propertyIntValue value
  -     */
  -    protected int getPropertyIntValue(final int id) {
  -        final Integer i = (Integer) getProperty(id);
  -        if (i != null) {
  +     * <p>Returns the value of the numeric property with the specified
  +     * ID. If the property is not available, 0 is returned. A
  +     * subsequent call to {@link #wasNull} will return
  +     * <code>true</code> to let the caller distinguish that case from
  +     * a real property value of 0.</p>
  +     *
  +     * @param id The property's ID
  +     *
  +     * @return The property's value
  +     */
  +    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);
  +        if (i != null)
               return i.intValue();
  -        } else {
  +        else
               return 0;
  -        }
       }
   
   
   
       /**
  -     *  <p>
  +     * <p>Returns the value of the boolean property with the specified
  +     * ID. If the property is not available, <code>false</code> is
  +     * returned. A subsequent call to {@link #wasNull} will return
  +     * <code>true</code> to let the caller distinguish that case from
  +     * a real property value of <code>false</code>.</p>
        *
  -     *  Returns the value of the boolean property with the specified ID. If the
  -     *  property is not available, <code>false</code> is returned. A subsequent
  -     *  call to {@link #wasNull} will return <code>true</code> to let the caller
  -     *  distinguish that case from a real property value of <code>false</code>.
  -     *  </p>
  +     * @param id The property's ID
        *
  -     *@param  id  Description of the Parameter
  -     *@return     The propertyBooleanValue value
  +     * @return The property's value
        */
  -    protected boolean getPropertyBooleanValue(final int id) {
  +    protected boolean getPropertyBooleanValue(final int id)
  +    {
           final Boolean b = (Boolean) getProperty(id);
  -        if (b != null) {
  +        if (b != null)
               return b.booleanValue();
  -        } else {
  +        else
               return false;
           }
  -    }
   
   
   
  @@ -307,46 +299,44 @@
   
   
       /**
  -     *  <p>
  -     *
  -     *  Checks whether the property which the last call to {@link
  -     *  #getPropertyIntValue} or {@link #getProperty} tried to access was
  -     *  available or not. This information might be important for callers of
  -     *  {@link #getPropertyIntValue} since the latter returns 0 if the property
  -     *  does not exist. Using {@link #wasNull} the caller can distiguish this
  -     *  case from a property's real value of 0.</p>
  -     *
  -     *@return    <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>Checks whether the property which the last call to {@link
  +     * #getPropertyIntValue} or {@link #getProperty} tried to access
  +     * was available or not. This information might be important for
  +     * callers of {@link #getPropertyIntValue} since the latter
  +     * returns 0 if the property does not exist. Using {@link
  +     * #wasNull} the caller can distiguish this case from a property's
  +     * real value of 0.</p>
  +     *
  +     * @return <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>.
        */
  -    public boolean wasNull() {
  +    public boolean wasNull()
  +    {
           return wasNull;
       }
   
   
   
       /**
  -     *  <p>
  +     * <p>Returns the PID string associated with a property ID. The ID
  +     * is first looked up in the {@link Section}'s private
  +     * dictionary. If it is not found there, the method calls {@link
  +     * SectionIDMap#getPIDString}.</p>
        *
  -     *  Returns the PID string associated with a property ID. The ID is first
  -     *  looked up in the {@link Section}'s private dictionary. If it is not
  -     *  found there, the method calls {@link SectionIDMap#getPIDString}.</p>
  +     * @param pid The property ID
        *
  -     *@param  pid  Description of the Parameter
  -     *@return      The pIDString value
  +     * @return The property ID's string value
        */
  -    public String getPIDString(final int pid) {
  +    public String getPIDString(final int pid)
  +    {
           String s = null;
  -        if (dictionary != null) {
  +        if (dictionary != null)
               s = (String) dictionary.get(new Integer(pid));
  -        }
  -        if (s == null) {
  +        if (s == null)
               s = SectionIDMap.getPIDString(getFormatID().getBytes(), pid);
  -        }
  -        if (s == null) {
  +        if (s == null)
               s = SectionIDMap.UNDEFINED;
  -        }
           return s;
       }
   
  
  
  

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

Reply via email to