avik 2003/10/31 08:39:05
Modified: src/java/org/apache/poi/hpsf ClassID.java
src/java/org/apache/poi/poifs/property Property.java
src/testcases/org/apache/poi/poifs/property
TestDocumentProperty.java TestRootProperty.java
Added: src/testcases/org/apache/poi/hpsf/basic TestClassID.java
Log:
bug 22195 ClassID support, by Michael Zalewski, sync from branch, pls verify
Revision Changes Path
1.10 +24 -2 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ClassID.java 13 Sep 2003 12:31:28 -0000 1.9
+++ ClassID.java 31 Oct 2003 16:39:05 -0000 1.10
@@ -55,6 +55,10 @@
*/
package org.apache.poi.hpsf;
+import java.io.*;
+import org.apache.poi.util.HexDump;
+import org.apache.poi.util.LittleEndian;
+
/**
* <p>Represents a class ID (16 bytes). Unlike other little-endian
* type the [EMAIL PROTECTED] ClassID} is not just 16 bytes stored in the wrong
@@ -229,7 +233,25 @@
return true;
}
-
+ /**
+ * Returns a human readable representation of the Class ID
+ * in standard format <code>"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"</code>
+ * @return String representation of the Class ID represented
+ * by this object.
+ */
+ public String toString()
+ {
+ StringBuffer sbClassId = new StringBuffer( 38);
+ sbClassId.append( '{');
+ for( int i=0; i < 16; i++) {
+ sbClassId.append( HexDump.toHex( bytes[ i]));
+ if( i == 3 || i == 5 || i == 7 || i == 9) {
+ sbClassId.append( '-');
+ }
+ }
+ sbClassId.append( '}');
+ return sbClassId.toString();
+ }
/**
* @see Object#hashCode()
1.4 +34 -1 jakarta-poi/src/java/org/apache/poi/poifs/property/Property.java
Index: Property.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/poifs/property/Property.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Property.java 30 Apr 2003 04:39:16 -0000 1.3
+++ Property.java 31 Oct 2003 16:39:05 -0000 1.4
@@ -59,6 +59,8 @@
import java.util.*;
+import org.apache.poi.hpsf.ClassID;
+
import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.poifs.dev.POIFSViewable;
import org.apache.poi.util.ByteField;
@@ -87,6 +89,8 @@
static final private int _previous_property_offset = 0x44;
static final private int _next_property_offset = 0x48;
static final private int _child_property_offset = 0x4C;
+ static final private int _storage_clsid_offset = 0x50;
+ static final private int _user_flags_offset = 0x60;
static final private int _seconds_1_offset = 0x64;
static final private int _days_1_offset = 0x68;
static final private int _seconds_2_offset = 0x6C;
@@ -107,6 +111,8 @@
private IntegerField _previous_property;
private IntegerField _next_property;
private IntegerField _child_property;
+ private ClassID _storage_clsid;
+ private IntegerField _user_flags;
private IntegerField _seconds_1;
private IntegerField _days_1;
private IntegerField _seconds_2;
@@ -136,6 +142,8 @@
_NO_INDEX, _raw_data);
_child_property = new IntegerField(_child_property_offset,
_NO_INDEX, _raw_data);
+ _storage_clsid = new ClassID(_raw_data,_storage_clsid_offset);
+ _user_flags = new IntegerField(_user_flags_offset, 0, _raw_data);
_seconds_1 = new IntegerField(_seconds_1_offset, 0,
_raw_data);
_days_1 = new IntegerField(_days_1_offset, 0, _raw_data);
@@ -173,6 +181,8 @@
_raw_data);
_child_property = new IntegerField(_child_property_offset,
_raw_data);
+ _storage_clsid = new ClassID(_raw_data,_storage_clsid_offset);
+ _user_flags = new IntegerField(_user_flags_offset, 0, _raw_data);
_seconds_1 = new IntegerField(_seconds_1_offset, _raw_data);
_days_1 = new IntegerField(_days_1_offset, _raw_data);
_seconds_2 = new IntegerField(_seconds_2_offset, _raw_data);
@@ -296,11 +306,20 @@
abstract public boolean isDirectory();
/**
+ * Sets the storage clsid, which is the Class ID of a COM object which
+ * reads and writes this stream
+ * @return storage Class ID for this property stream
+ */
+ public ClassID getStorageClsid()
+ {
+ return _storage_clsid;
+ }
+
+ /**
* Set the name; silently truncates the name if it's too long.
*
* @param name the new name
*/
-
protected final void setName(final String name)
{
char[] char_array = name.toCharArray();
@@ -327,6 +346,20 @@
* LittleEndianConsts.SHORT_SIZE), _raw_data);
}
+ /**
+ * Sets the storage class ID for this property stream. This is the Class ID
+ * of the COM object which can read and write this property stream
+ * @param clsidStorage Storage Class ID
+ */
+ public void setStorageClsid( ClassID clsidStorage)
+ {
+ _storage_clsid = clsidStorage;
+ if( clsidStorage == null) {
+ Arrays.fill( _raw_data, _storage_clsid_offset, _storage_clsid_offset +
ClassID.LENGTH, (byte) 0);
+ } else {
+ clsidStorage.write( _raw_data, _storage_clsid_offset);
+ }
+ }
/**
* Set the property type. Makes no attempt to validate the value.
*
1.2 +171 -0
jakarta-poi/src/testcases/org/apache/poi/hpsf/basic/TestClassID.java
1.3 +3 -0
jakarta-poi/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java
Index: TestDocumentProperty.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestDocumentProperty.java 30 Apr 2003 04:39:17 -0000 1.2
+++ TestDocumentProperty.java 31 Oct 2003 16:39:05 -0000 1.3
@@ -150,6 +150,7 @@
( byte ) 0xFE, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF,
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
+
( byte ) 0x57, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00,
( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x6B, ( byte ) 0x00,
( byte ) 0x62, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00,
@@ -182,6 +183,7 @@
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00,
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
+
( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x53, ( byte ) 0x00,
( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00,
( byte ) 0x6D, ( byte ) 0x00, ( byte ) 0x61, ( byte ) 0x00,
@@ -214,6 +216,7 @@
( byte ) 0x08, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00,
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00,
+
( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x44, ( byte ) 0x00,
( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x63, ( byte ) 0x00,
( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00,
1.4 +3 -2
jakarta-poi/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java
Index: TestRootProperty.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/poifs/property/TestRootProperty.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestRootProperty.java 30 Apr 2003 04:39:17 -0000 1.3
+++ TestRootProperty.java 31 Oct 2003 16:39:05 -0000 1.4
@@ -217,11 +217,11 @@
( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00
};
- verifyReadingProperty(0, input, 0, "Root Entry");
+ verifyReadingProperty(0, input, 0, "Root Entry",
"{00020820-0000-0000-C000-000000000046}");
}
private void verifyReadingProperty(int index, byte [] input, int offset,
- String name)
+ String name, String sClsId)
throws IOException
{
RootProperty property = new RootProperty(index, input,
@@ -242,6 +242,7 @@
assertEquals(index, property.getIndex());
assertEquals(name, property.getName());
assertTrue(!property.getChildren().hasNext());
+ assertEquals(property.getStorageClsid().toString(), sClsId);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]