Class VariantSupport
- java.lang.Object
-
- loci.poi.hpsf.Variant
-
- loci.poi.hpsf.VariantSupport
-
public class VariantSupport extends Variant
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.
- Since:
- 2003-08-08
- Version:
- $Id: VariantSupport.java 489730 2006-12-22 19:18:16Z bayard $
- Author:
- Rainer Klute <klute@rainer-klute.de>
-
-
Field Summary
Fields Modifier and Type Field Description protected static List
unsupportedMessage
Keeps a list of the variant types an "unsupported" message has already been issued for.-
Fields inherited from class loci.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_VOID
-
-
Constructor Summary
Constructors Constructor Description VariantSupport()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static String
codepageToEncoding(int codepage)
Turns a codepage number into the equivalent character encoding's name.static boolean
isLogUnsupportedTypes()
Checks whether logging of unsupported variant types warning is turned on or off.static Object
read(byte[] src, int offset, int length, long type, int codepage)
Reads a variant type from a byte array.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
writeUnsupportedTypeMessage(UnsupportedVariantTypeException ex)
Writes a warning toSystem.err
that a variant type is unsupported by HPSF.-
Methods inherited from class loci.poi.hpsf.Variant
getVariantLength, getVariantName
-
-
-
-
Field Detail
-
unsupportedMessage
protected static List unsupportedMessage
Keeps a list of the variant types an "unsupported" message has already been issued for.
-
-
Method Detail
-
setLogUnsupportedTypes
public static void setLogUnsupportedTypes(boolean logUnsupportedTypes)
Specifies whether warnings about unsupported variant types are to be written to
System.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
protected static void writeUnsupportedTypeMessage(UnsupportedVariantTypeException ex)
Writes a warning to
System.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
-
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 to write 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:
Variant
-
codepageToEncoding
public static String codepageToEncoding(int codepage) throws UnsupportedEncodingException
Turns a codepage number into the equivalent character encoding's name.
- Parameters:
codepage
- The codepage number- Returns:
- The character encoding's name. If the codepage number is 65001, the encoding name is "UTF-8". All other positive numbers are mapped to "cp" followed by the number, e.g. if the codepage number is 1252 the returned character encoding name will be "cp1252".
- Throws:
UnsupportedEncodingException
- if the specified codepage is less than zero.
-
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.
If the codepage is UTF-16, which is encouraged, strings must always be written as
Variant.VT_LPWSTR
strings, not asVariant.VT_LPSTR
strings. This method ensure this by converting strings appropriately, if needed.- 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
-
-