]> source.dussan.org Git - poi.git/commitdiff
HMEF dumping and properties tweaks
authorNick Burch <nick@apache.org>
Wed, 12 Jan 2011 17:22:40 +0000 (17:22 +0000)
committerNick Burch <nick@apache.org>
Wed, 12 Jan 2011 17:22:40 +0000 (17:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1058243 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java
src/scratchpad/src/org/apache/poi/hmef/dev/HMEFDumper.java

index 81629e1db5ef584fb83c3b14aa62764bc9f6e986..badf25ce717883b36e57e6477fb276995c23303c 100644 (file)
@@ -104,7 +104,8 @@ public class MAPIAttribute {
          MAPIProperty prop = MAPIProperty.get(id);
          if(id >= 0x8000 && id <= 0xFFFF) {
             // TODO
-            throw new UnsupportedOperationException("Not yet implemented for id " + id);
+            System.err.println("Not yet implemented for id " + id);
+            break;
          }
          
          // Now read in the value(s)
@@ -128,11 +129,10 @@ public class MAPIAttribute {
             
             // Data is always padded out to a 4 byte boundary
             if(len % 4 != 0) {
-               byte[] padding = new byte[len % 4];
+               byte[] padding = new byte[4 - (len % 4)];
                IOUtils.readFully(inp, padding);
             }
          }
-         break;
       }
       
       // All done
index 133e9a634559c916c498a31fd43856112aed97d9..a64a558a17bad6bdd0615ff5aa6a50544da2d3e3 100644 (file)
@@ -37,15 +37,24 @@ public final class HMEFDumper {
          throw new IllegalArgumentException("Filename must be given");
       }
       
-      for(String filename : args) {
+      boolean truncatePropData = true;
+      for(int i=0; i<args.length; i++) {
+         if(args[i].equalsIgnoreCase("--full")) {
+            truncatePropData = false;
+            continue;
+         }
+         
          HMEFDumper dumper = new HMEFDumper(
-               new FileInputStream(filename)
+               new FileInputStream(args[i])
          );
+         dumper.setTruncatePropertyData(truncatePropData);
          dumper.dump();
       }
    }
    
    private InputStream inp;
+   private boolean truncatePropertyData;
+   
    public HMEFDumper(InputStream inp) throws IOException {
       this.inp = inp;
       
@@ -63,6 +72,10 @@ public final class HMEFDumper {
       LittleEndian.readUShort(inp);
    }
    
+   public void setTruncatePropertyData(boolean truncate) {
+      truncatePropertyData = truncate;
+   }
+   
    private void dump() throws IOException {
       int level;
       
@@ -86,7 +99,11 @@ public final class HMEFDumper {
          String indent = "  ";
          System.out.println(indent + "Data of length " + attr.getData().length);
          if(attr.getData().length > 0) {
-            int len = Math.min( attr.getData().length, 48 );
+            int len = attr.getData().length;
+            if(truncatePropertyData) {
+               len = Math.min( attr.getData().length, 48 );
+            }
+            
             int loops = len/16;
             if(loops == 0) loops = 1;