[bug-69434] -- add more properties to AttachmentChunks

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921800 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Tim Allison 2024-11-06 20:45:12 +00:00
parent b9eabbb477
commit 157512d437
2 changed files with 65 additions and 1 deletions

View File

@ -17,12 +17,17 @@
package org.apache.poi.hsmf.datatypes;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_CONTENT_ID;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_CONTENT_LOCATION;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_DATA;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_EXTENSION;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_FILENAME;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_LONG_FILENAME;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_LONG_PATHNAME;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_MIME_TAG;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_RENDERING;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.DISPLAY_NAME;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.LANGUAGE;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.RECORD_KEY;
import java.io.IOException;
import java.io.Serializable;
@ -46,9 +51,14 @@ public class AttachmentChunks implements ChunkGroup {
private StringChunk attachExtension;
private StringChunk attachFileName;
private StringChunk attachLongFileName;
private StringChunk attachLongPathName;
private StringChunk attachDisplayName;
private StringChunk attachMimeTag;
private DirectoryChunk attachmentDirectory;
private StringChunk attachContentId;
private StringChunk attachLanguage;
private StringChunk attachContentLocation;
private ByteChunk attachRecordKey;
/**
* This is in WMF Format. You'll probably want to pass it to Apache Batik to
@ -138,6 +148,35 @@ public class AttachmentChunks implements ChunkGroup {
return attachLongFileName;
}
/**
* @return long path name for the attachment
*/
public StringChunk getAttachLongPathName() {
return attachLongPathName;
}
/**
* @return attachment content location -- relative or absolute URI matching reference in html body
*/
public StringChunk getAttachContentLocation() {
return attachContentLocation;
}
/**
*
* @return the display name of the attachment
*/
public StringChunk getAttachDisplayName() {
return attachDisplayName;
}
/**
* @return the language property for the attachment
*/
public StringChunk getAttachLanguage() {
return attachLanguage;
}
/**
* @return the attachment mimetag
*/
@ -166,6 +205,13 @@ public class AttachmentChunks implements ChunkGroup {
return attachContentId;
}
/**
* @return record key
*/
public ByteChunk getAttachRecordKey() {
return attachRecordKey;
}
/**
* Called by the parser whenever a chunk is found.
*/
@ -178,7 +224,6 @@ public class AttachmentChunks implements ChunkGroup {
// - ATTACH_DISPOSITION
// - ATTACH_ENCODING
// - ATTACH_FLAGS
// - ATTACH_LONG_PATHNAME
// - ATTACH_SIZE
final int chunkId = chunk.getChunkId();
@ -203,6 +248,16 @@ public class AttachmentChunks implements ChunkGroup {
attachRenderingWMF = (ByteChunk) chunk;
} else if (chunkId == ATTACH_CONTENT_ID.id) {
attachContentId = (StringChunk) chunk;
} else if (chunkId == DISPLAY_NAME.id) {
attachDisplayName = (StringChunk) chunk;
} else if (chunkId == LANGUAGE.id) {
attachLanguage = (StringChunk) chunk;
} else if (chunkId == ATTACH_LONG_PATHNAME.id) {
attachLongPathName = (StringChunk) chunk;
} else if (chunkId == ATTACH_CONTENT_LOCATION.id) {
attachContentLocation = (StringChunk) chunk;
} else if (chunkId == RECORD_KEY.id) {
attachRecordKey = (ByteChunk) chunk;
} else {
LOG.atWarn().log("Currently unsupported attachment chunk property will be ignored. {}", chunk.getEntryName());
}

View File

@ -193,6 +193,15 @@ public final class TestBasics {
noRecipientAddress.setReturnNullOnMissingChunk(false);
}
@Test
public void testAttachmentProperties() {
AttachmentChunks[] attachmentChunks = noRecipientAddress.getAttachmentFiles();
assertEquals(11, attachmentChunks.length);
assertEquals("1.jpg", attachmentChunks[0].getAttachContentLocation().toString());
assertEquals("1.jpg", attachmentChunks[0].getAttachDisplayName().toString());
assertEquals(4, attachmentChunks[0].getAttachRecordKey().getValue().length);
}
/**
* Test the 7 bit detection
*/