Package org.apache.poi.hpsf
Class VariantSupport
java.lang.Object
org.apache.poi.hpsf.Variant
org.apache.poi.hpsf.VariantSupport
Supports reading and writing of variant data.
FIXME (3): Reading and writing should be made more uniform than it is now. The following items should be resolved:
- Reading requires a length parameter that is 4 byte greater than the actual data, because the variant type field is included.
- Reading reads from a byte array while writing writes to an byte array output stream.
-
Field Summary
FieldsFields inherited from class org.apache.poi.hpsf.Variant
LENGTH_0, LENGTH_2, LENGTH_4, LENGTH_8, LENGTH_UNKNOWN, LENGTH_VARIABLE, VT_ARRAY, VT_BLOB, VT_BLOB_OBJECT, VT_BOOL, VT_BSTR, VT_BYREF, VT_CARRAY, VT_CF, VT_CLSID, VT_CY, VT_DATE, VT_DECIMAL, VT_DISPATCH, VT_EMPTY, VT_ERROR, VT_FILETIME, VT_HRESULT, VT_I1, VT_I2, VT_I4, VT_I8, VT_ILLEGAL, VT_ILLEGALMASKED, VT_INT, VT_LPSTR, VT_LPWSTR, VT_NULL, VT_PTR, VT_R4, VT_R8, VT_RESERVED, VT_SAFEARRAY, VT_STORAGE, VT_STORED_OBJECT, VT_STREAM, VT_STREAMED_OBJECT, VT_TYPEMASK, VT_UI1, VT_UI2, VT_UI4, VT_UI8, VT_UINT, VT_UNKNOWN, VT_USERDEFINED, VT_VARIANT, VT_VECTOR, VT_VERSIONED_STREAM, VT_VOID
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic boolean
Checks whether logging of unsupported variant types warning is turned on or off.boolean
isSupportedType
(int variantType) Checks whether HPSF supports the specified variant type.static Object
read
(byte[] src, int offset, int length, long type, int codepage) Reads a variant type from a byte array.static Object
read
(LittleEndianByteArrayInputStream lei, int length, long type, int codepage) static void
setLogUnsupportedTypes
(boolean logUnsupportedTypes) Specifies whether warnings about unsupported variant types are to be written toSystem.err
or not.static int
write
(OutputStream out, long type, Object value, int codepage) Writes a variant value to an output stream.protected static void
Writes a warning toSystem.err
that a variant type is unsupported by HPSF.Methods inherited from class org.apache.poi.hpsf.Variant
getVariantLength, getVariantName
-
Field Details
-
SUPPORTED_TYPES
public static final int[] SUPPORTED_TYPESHPSF is able to read theseVariant
types.
-
-
Constructor Details
-
VariantSupport
public VariantSupport()
-
-
Method Details
-
setLogUnsupportedTypes
public static void setLogUnsupportedTypes(boolean logUnsupportedTypes) Specifies whether warnings about unsupported variant types are to be written toSystem.err
or not.- Parameters:
logUnsupportedTypes
- Iftrue
warnings will be written, iffalse
they won't.
-
isLogUnsupportedTypes
public static boolean isLogUnsupportedTypes()Checks whether logging of unsupported variant types warning is turned on or off.- Returns:
true
if logging is turned on, elsefalse
.
-
writeUnsupportedTypeMessage
Writes a warning toSystem.err
that a variant type is unsupported by HPSF. Such a warning is written only once for each variant type. Log messages can be turned on or off by- Parameters:
ex
- The exception to log
-
isSupportedType
public boolean isSupportedType(int variantType) Checks whether HPSF supports the specified variant type. Unsupported types should be implemented included in theSUPPORTED_TYPES
array.- Parameters:
variantType
- the variant type to check- Returns:
true
if HPFS supports this type, elsefalse
- See Also:
-
read
public static Object read(byte[] src, int offset, int length, long type, int codepage) throws ReadingNotSupportedException, UnsupportedEncodingException Reads a variant type from a byte array.- Parameters:
src
- The byte arrayoffset
- The offset in the byte array where the variant startslength
- The length of the variant including the variant type fieldtype
- The variant type to readcodepage
- The codepage to use for non-wide strings- Returns:
- A Java object that corresponds best to the variant field. For
example, a VT_I4 is returned as a
Long
, a VT_LPSTR as aString
. - Throws:
ReadingNotSupportedException
- if a property is to be written who's variant type HPSF does not yet supportUnsupportedEncodingException
- if the specified codepage is not supported.- See Also:
-
read
public static Object read(LittleEndianByteArrayInputStream lei, int length, long type, int codepage) throws ReadingNotSupportedException, UnsupportedEncodingException -
write
public static int write(OutputStream out, long type, Object value, int codepage) throws IOException, WritingNotSupportedException Writes a variant value to an output stream. This method ensures that always a multiple of 4 bytes is written.- Parameters:
out
- The stream to write the value to.type
- The variant's type.value
- The variant's value.codepage
- The codepage to use to write non-wide strings- Returns:
- The number of entities that have been written. In many cases an "entity" is a byte but this is not always the case.
- Throws:
IOException
- if an I/O exceptions occursWritingNotSupportedException
- if a property is to be written who's variant type HPSF does not yet support
-