* @throws IOException
*/
public MAPIMessage(InputStream in) throws IOException {
- this(new POIFSFileSystem(in));
+ this(new NPOIFSFileSystem(in));
}
/**
* Constructor for reading MSG Files from a POIFS filesystem
import org.apache.poi.util.IOUtils;
/**
- * A Chunk that holds binary data, normally
- * unparsed.
+ * A Chunk that holds binary data, normally unparsed.
* Generally as we know how to make sense of the
* contents, we create a new Chunk class and add
* a special case in the parser for them.
*/
public class ByteChunk extends Chunk {
- private byte[] value;
-
- /**
- * Creates a Byte Chunk.
- */
+ private byte[] value;
+
+ /**
+ * Creates a Byte Chunk.
+ */
public ByteChunk(String namePrefix, int chunkId, MAPIType type) {
super(namePrefix, chunkId, type);
}
- /**
- * Create a Byte Chunk, with the specified
- * type.
- */
- public ByteChunk(int chunkId, MAPIType type) {
- super(chunkId, type);
- }
+ /**
+ * Create a Byte Chunk, with the specified
+ * type.
+ */
+ public ByteChunk(int chunkId, MAPIType type) {
+ super(chunkId, type);
+ }
public void readValue(InputStream value) throws IOException {
this.value = IOUtils.toByteArray(value);
import org.apache.poi.hsmf.datatypes.Types.MAPIType;
-abstract public class Chunk {
+public abstract class Chunk {
public static final String DEFAULT_NAME_PREFIX = "__substg1.0_";
- protected int chunkId;
- protected MAPIType type;
- protected String namePrefix;
+ protected int chunkId;
+ protected MAPIType type;
+ protected String namePrefix;
protected Chunk(String namePrefix, int chunkId, MAPIType type) {
this.namePrefix = namePrefix;
this.chunkId = chunkId;
this.type = type;
}
- protected Chunk(int chunkId, MAPIType type) {
- this(DEFAULT_NAME_PREFIX, chunkId, type);
- }
+ protected Chunk(int chunkId, MAPIType type) {
+ this(DEFAULT_NAME_PREFIX, chunkId, type);
+ }
- /**
- * Gets the id of this chunk
- */
- public int getChunkId() {
- return this.chunkId;
- }
+ /**
+ * Gets the id of this chunk
+ */
+ public int getChunkId() {
+ return this.chunkId;
+ }
- /**
- * Gets the numeric type of this chunk.
- */
- public MAPIType getType() {
- return this.type;
- }
+ /**
+ * Gets the numeric type of this chunk.
+ */
+ public MAPIType getType() {
+ return this.type;
+ }
- /**
- * Creates a string to use to identify this chunk in the POI file system object.
- */
- public String getEntryName() {
- String type = this.type.asFileEnding();
+ /**
+ * Creates a string to use to identify this chunk in the POI file system object.
+ */
+ public String getEntryName() {
+ String type = this.type.asFileEnding();
- String chunkId = Integer.toHexString(this.chunkId);
- while(chunkId.length() < 4) chunkId = "0" + chunkId;
+ String chunkId = Integer.toHexString(this.chunkId);
+ while(chunkId.length() < 4) chunkId = "0" + chunkId;
- return this.namePrefix + chunkId.toUpperCase() + type.toUpperCase();
- }
+ return this.namePrefix + chunkId.toUpperCase() + type.toUpperCase();
+ }
- /**
- * Writes the value of this chunk back out again.
- */
- public abstract void writeValue(OutputStream out) throws IOException;
+ /**
+ * Writes the value of this chunk back out again.
+ */
+ public abstract void writeValue(OutputStream out) throws IOException;
- /**
- * Reads the value of this chunk using an InputStream
- */
- public abstract void readValue(InputStream value) throws IOException;
+ /**
+ * Reads the value of this chunk using an InputStream
+ */
+ public abstract void readValue(InputStream value) throws IOException;
}
* Should certainly contain all the interesting Chunks,
* but needn't always contain all of the Chunks.
*/
- public Chunk[] getChunks();
-
- /**
- * Called by the parser whenever a chunk is found.
- */
- public void record(Chunk chunk);
-
- /**
- * Called by the parser when all chunks have been found.
- */
- public void chunksComplete();
+ public Chunk[] getChunks();
+
+ /**
+ * Called by the parser whenever a chunk is found.
+ */
+ public void record(Chunk chunk);
+
+ /**
+ * Called by the parser when all chunks have been found.
+ */
+ public void chunksComplete();
}
* server, and an ID that's used if you want to cancel
* a message or similar
*/
-
public class MessageSubmissionChunk extends Chunk {
- private static POILogger logger = POILogFactory.getLogger(MessageSubmissionChunk.class);
- private String rawId;
- private Calendar date;
-
- private static final Pattern datePatern =
- Pattern.compile("(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)Z?");
-
- /**
- * Creates a Byte Chunk.
- */
- public MessageSubmissionChunk(String namePrefix, int chunkId, MAPIType type) {
- super(namePrefix, chunkId, type);
- }
-
- /**
- * Create a Byte Chunk, with the specified
- * type.
- */
- public MessageSubmissionChunk(int chunkId, MAPIType type) {
- super(chunkId, type);
- }
+ private static POILogger logger = POILogFactory.getLogger(MessageSubmissionChunk.class);
+ private String rawId;
+ private Calendar date;
+
+ private static final Pattern datePatern =
+ Pattern.compile("(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)Z?");
+
+ /**
+ * Creates a Byte Chunk.
+ */
+ public MessageSubmissionChunk(String namePrefix, int chunkId, MAPIType type) {
+ super(namePrefix, chunkId, type);
+ }
+
+ /**
+ * Create a Byte Chunk, with the specified
+ * type.
+ */
+ public MessageSubmissionChunk(int chunkId, MAPIType type) {
+ super(chunkId, type);
+ }
public void readValue(InputStream value) throws IOException {
// Stored in the file as us-ascii
import org.apache.poi.hsmf.datatypes.PropertyValue.LongLongPropertyValue;
import org.apache.poi.hsmf.datatypes.PropertyValue.TimePropertyValue;
import org.apache.poi.hsmf.datatypes.Types.MAPIType;
-import org.apache.poi.util.HexDump;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndian.BufferUnderrunException;
*/
private ChunkGroup parentGroup;
- /**
- * Creates a Properties Chunk.
- */
- protected PropertiesChunk(ChunkGroup parentGroup) {
- super(NAME, -1, Types.UNKNOWN);
- this.parentGroup = parentGroup;
- }
+ /**
+ * Creates a Properties Chunk.
+ */
+ protected PropertiesChunk(ChunkGroup parentGroup) {
+ super(NAME, -1, Types.UNKNOWN);
+ this.parentGroup = parentGroup;
+ }
- @Override
+ @Override
public String getEntryName() {
- return NAME;
+ return NAME;
}
/**
going = false;
}
}
- }
-
- protected void writeProperties(OutputStream out) throws IOException {
- // TODO
- }
+ }
+
+ protected void writeProperties(OutputStream out) throws IOException {
+ // TODO
+ }
}
private byte[] rawValue;
private String value;
- /**
- * Creates a String Chunk.
- */
- public StringChunk(String namePrefix, int chunkId, MAPIType type) {
- super(namePrefix, chunkId, type);
- }
-
- /**
- * Create a String Chunk, with the specified
- * type.
- */
- public StringChunk(int chunkId, MAPIType type) {
- super(chunkId, type);
- }
-
- /**
- * Returns the Encoding that will be used to
- * decode any "7 bit" (non unicode) data.
- * Most files default to CP1252
- */
- public String get7BitEncoding() {
- return encoding7Bit;
- }
-
- /**
- * Sets the Encoding that will be used to
- * decode any "7 bit" (non unicode) data.
- * This doesn't appear to be stored anywhere
- * specific in the file, so you may need
- * to guess by looking at headers etc
- */
- public void set7BitEncoding(String encoding) {
- this.encoding7Bit = encoding;
-
- // Re-read the String if we're a 7 bit one
- if(type == Types.ASCII_STRING) {
- parseString();
- }
- }
-
- public void readValue(InputStream value) throws IOException {
- rawValue = IOUtils.toByteArray(value);
- parseString();
- }
- private void parseString() {
- String tmpValue;
- if (type == Types.ASCII_STRING) {
- tmpValue = parseAs7BitData(rawValue, encoding7Bit);
- } else if (type == Types.UNICODE_STRING) {
- tmpValue = StringUtil.getFromUnicodeLE(rawValue);
- } else {
- throw new IllegalArgumentException("Invalid type " + type + " for String Chunk");
- }
-
- // Clean up
- this.value = tmpValue.replace("\0", "");
- }
-
- public void writeValue(OutputStream out) throws IOException {
- out.write(rawValue);
- }
- private void storeString() {
+ /**
+ * Creates a String Chunk.
+ */
+ public StringChunk(String namePrefix, int chunkId, MAPIType type) {
+ super(namePrefix, chunkId, type);
+ }
+
+ /**
+ * Create a String Chunk, with the specified
+ * type.
+ */
+ public StringChunk(int chunkId, MAPIType type) {
+ super(chunkId, type);
+ }
+
+ /**
+ * Returns the Encoding that will be used to
+ * decode any "7 bit" (non unicode) data.
+ * Most files default to CP1252
+ */
+ public String get7BitEncoding() {
+ return encoding7Bit;
+ }
+
+ /**
+ * Sets the Encoding that will be used to
+ * decode any "7 bit" (non unicode) data.
+ * This doesn't appear to be stored anywhere
+ * specific in the file, so you may need
+ * to guess by looking at headers etc
+ */
+ public void set7BitEncoding(String encoding) {
+ this.encoding7Bit = encoding;
+
+ // Re-read the String if we're a 7 bit one
+ if(type == Types.ASCII_STRING) {
+ parseString();
+ }
+ }
+
+ public void readValue(InputStream value) throws IOException {
+ rawValue = IOUtils.toByteArray(value);
+ parseString();
+ }
+ private void parseString() {
+ String tmpValue;
+ if (type == Types.ASCII_STRING) {
+ tmpValue = parseAs7BitData(rawValue, encoding7Bit);
+ } else if (type == Types.UNICODE_STRING) {
+ tmpValue = StringUtil.getFromUnicodeLE(rawValue);
+ } else {
+ throw new IllegalArgumentException("Invalid type " + type + " for String Chunk");
+ }
+
+ // Clean up
+ this.value = tmpValue.replace("\0", "");
+ }
+
+ public void writeValue(OutputStream out) throws IOException {
+ out.write(rawValue);
+ }
+ private void storeString() {
if (type == Types.ASCII_STRING) {
try {
rawValue = value.getBytes(encoding7Bit);
} else {
throw new IllegalArgumentException("Invalid type " + type + " for String Chunk");
}
- }
-
- /**
- * Returns the Text value of the chunk
- */
+ }
+
+ /**
+ * Returns the Text value of the chunk
+ */
public String getValue() {
return this.value;
}
-
+
public byte[] getRawValue() {
return this.rawValue;
}
this.value = str;
storeString();
}
-
+
public String toString() {
return this.value;
}