mirror of https://github.com/apache/poi.git
A bit more towards matching properties to chunks
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1442388 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d51fcd4843
commit
f9dccbc978
|
@ -1058,6 +1058,15 @@ public class MAPIProperty {
|
||||||
attributes.put(id, this);
|
attributes.put(id, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String asFileName() {
|
||||||
|
String str = Integer.toHexString(id).toUpperCase();
|
||||||
|
while(str.length() < 4) {
|
||||||
|
str = "0" + str;
|
||||||
|
}
|
||||||
|
return str + usualType.asFileEnding();
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuffer str = new StringBuffer();
|
StringBuffer str = new StringBuffer();
|
||||||
str.append(name);
|
str.append(name);
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Map;
|
||||||
import org.apache.poi.hsmf.datatypes.PropertyValue.LongLongPropertyValue;
|
import org.apache.poi.hsmf.datatypes.PropertyValue.LongLongPropertyValue;
|
||||||
import org.apache.poi.hsmf.datatypes.PropertyValue.TimePropertyValue;
|
import org.apache.poi.hsmf.datatypes.PropertyValue.TimePropertyValue;
|
||||||
import org.apache.poi.hsmf.datatypes.Types.MAPIType;
|
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.IOUtils;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.LittleEndian.BufferUnderrunException;
|
import org.apache.poi.util.LittleEndian.BufferUnderrunException;
|
||||||
|
@ -103,7 +104,33 @@ public abstract class PropertiesChunk extends Chunk {
|
||||||
* up the Chunks in it with our Variable Sized Properties.
|
* up the Chunks in it with our Variable Sized Properties.
|
||||||
*/
|
*/
|
||||||
protected void matchVariableSizedPropertiesToChunks() {
|
protected void matchVariableSizedPropertiesToChunks() {
|
||||||
// TODO
|
// Index the Parent Group chunks for easy lookup
|
||||||
|
// TODO Is this the right way?
|
||||||
|
Map<Integer,Chunk> chunks = new HashMap<Integer, Chunk>();
|
||||||
|
for (Chunk chunk : parentGroup.getChunks()) {
|
||||||
|
chunks.put(chunk.chunkId, chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop over our values, looking for chunk based ones
|
||||||
|
for (List<PropertyValue> vals : properties.values()) {
|
||||||
|
if (vals != null) {
|
||||||
|
for (PropertyValue val : vals) {
|
||||||
|
if (val instanceof ChunkBasedPropertyValue) {
|
||||||
|
ChunkBasedPropertyValue cVal = (ChunkBasedPropertyValue)val;
|
||||||
|
Chunk chunk = chunks.get(cVal.getProperty().id);
|
||||||
|
//System.err.println(cVal + " -> " + HexDump.toHex(cVal.data));
|
||||||
|
|
||||||
|
// TODO Make sense of the raw offset value
|
||||||
|
|
||||||
|
if (chunk != null) {
|
||||||
|
cVal.setValue(chunk);
|
||||||
|
} else {
|
||||||
|
logger.log(POILogger.WARN, "No chunk found matching Property " + cVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readProperties(InputStream value) throws IOException {
|
protected void readProperties(InputStream value) throws IOException {
|
||||||
|
|
Loading…
Reference in New Issue