diff options
author | Avik Sengupta <avik@apache.org> | 2003-10-31 16:39:05 +0000 |
---|---|---|
committer | Avik Sengupta <avik@apache.org> | 2003-10-31 16:39:05 +0000 |
commit | a09e297f9cdc23ced9d188e991a5f127751794d5 (patch) | |
tree | c70c4b04c7c8ee49027d993125601b1e9b5cfbe8 /src/java/org/apache | |
parent | 7b456c47187f6cbbb07f9eaeaf0a5d3717ec5db6 (diff) | |
download | poi-a09e297f9cdc23ced9d188e991a5f127751794d5.tar.gz poi-a09e297f9cdc23ced9d188e991a5f127751794d5.zip |
bug 22195 ClassID support, by Michael Zalewski, sync from branch, pls verify
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353429 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache')
-rw-r--r-- | src/java/org/apache/poi/hpsf/ClassID.java | 24 | ||||
-rw-r--r-- | src/java/org/apache/poi/poifs/property/Property.java | 35 |
2 files changed, 57 insertions, 2 deletions
diff --git a/src/java/org/apache/poi/hpsf/ClassID.java b/src/java/org/apache/poi/hpsf/ClassID.java index ddd52c686e..549cad05b6 100644 --- a/src/java/org/apache/poi/hpsf/ClassID.java +++ b/src/java/org/apache/poi/hpsf/ClassID.java @@ -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 {@link ClassID} is not just 16 bytes stored in the wrong @@ -229,7 +233,25 @@ public class ClassID 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() diff --git a/src/java/org/apache/poi/poifs/property/Property.java b/src/java/org/apache/poi/poifs/property/Property.java index 6811a72508..c09c25619b 100644 --- a/src/java/org/apache/poi/poifs/property/Property.java +++ b/src/java/org/apache/poi/poifs/property/Property.java @@ -59,6 +59,8 @@ import java.io.*; 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 @@ public abstract class Property 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 @@ public abstract class Property 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 @@ public abstract class Property _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 @@ public abstract class Property _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 @@ public abstract class Property 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(); @@ -328,6 +347,20 @@ public abstract class Property } /** + * 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. * * @param propertyType the property type (root, file, directory) |