aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache
diff options
context:
space:
mode:
authorAvik Sengupta <avik@apache.org>2003-10-31 16:39:05 +0000
committerAvik Sengupta <avik@apache.org>2003-10-31 16:39:05 +0000
commita09e297f9cdc23ced9d188e991a5f127751794d5 (patch)
treec70c4b04c7c8ee49027d993125601b1e9b5cfbe8 /src/java/org/apache
parent7b456c47187f6cbbb07f9eaeaf0a5d3717ec5db6 (diff)
downloadpoi-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.java24
-rw-r--r--src/java/org/apache/poi/poifs/property/Property.java35
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)