]> source.dussan.org Git - poi.git/commitdiff
Add new method to HSMF of MAPIMessage.has7BitEncodingStrings() to make it easier...
authorNick Burch <nick@apache.org>
Fri, 1 Apr 2011 15:20:07 +0000 (15:20 +0000)
committerNick Burch <nick@apache.org>
Fri, 1 Apr 2011 15:20:07 +0000 (15:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1087746 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java
src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java

index a4a3250d178f2fef956c60042b16695778925080..9dca32e47cf100570610f013b956336b3548dc0c 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta3" date="2011-??-??">
+           <action dev="poi-developers" type="add">Add new method to HSMF of MAPIMessage.has7BitEncodingStrings() to make it easier to decide when encoding guessing is needed</action>
            <action dev="poi-developers" type="fix">OutlookTextExtractor now requests 7 bit encoding guessing</action>
            <action dev="poi-developers" type="add">Improve HSMF encoding guessing for 7 bit fields in MAPIMessage</action>
            <action dev="poi-developers" type="add">Allow HSMF access to the HTML body contents in MAPIMessage</action>
index e9cc82d14d134b2cb416eadb3786fd49fd93d3c6..207f89e0e29480b5ca14edde0955d55a7f266f9e 100644 (file)
@@ -36,6 +36,7 @@ import org.apache.poi.hsmf.datatypes.ChunkGroup;
 import org.apache.poi.hsmf.datatypes.Chunks;
 import org.apache.poi.hsmf.datatypes.NameIdChunks;
 import org.apache.poi.hsmf.datatypes.RecipientChunks;
+import org.apache.poi.hsmf.datatypes.Types;
 import org.apache.poi.hsmf.datatypes.RecipientChunks.RecipientChunksSorter;
 import org.apache.poi.hsmf.datatypes.StringChunk;
 import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
@@ -396,6 +397,37 @@ public class MAPIMessage extends POIDocument {
       }
    }
    
+   /**
+    * Does this file contain any strings that
+    *  are stored as 7 bit rather than unicode?
+    */
+   public boolean has7BitEncodingStrings() {
+      for(Chunk c : mainChunks.getAll()) {
+         if(c instanceof StringChunk) {
+            if( ((StringChunk)c).getType() == Types.ASCII_STRING ) {
+               return true;
+            }
+         }
+      }
+      for(Chunk c : nameIdChunks.getAll()) {
+         if(c instanceof StringChunk) {
+            if( ((StringChunk)c).getType() == Types.ASCII_STRING ) {
+               return true;
+            }
+         }
+      }
+      for(RecipientChunks rc : recipientChunks) {
+         for(Chunk c : rc.getAll()) {
+            if(c instanceof StringChunk) {
+               if( ((StringChunk)c).getType() == Types.ASCII_STRING ) {
+                  return true;
+               }
+            }
+         }
+      }
+      return false;
+   }
+   
    /**
     * Returns all the headers, one entry per line
     */
index e2f6fe39d4d2939fe15f5acc75944c12bb18e3c5..e5d9a6e1d67bc37e73b1bf5621f8cc93516237d8 100644 (file)
@@ -34,6 +34,7 @@ public final class TestBasics extends TestCase {
    private MAPIMessage outlook30;
    private MAPIMessage attachments;
    private MAPIMessage noRecipientAddress;
+   private MAPIMessage unicode;
    private MAPIMessage cyrillic;
    private MAPIMessage chinese;
 
@@ -48,6 +49,7 @@ public final class TestBasics extends TestCase {
       outlook30  = new MAPIMessage(samples.openResourceAsStream("outlook_30_msg.msg"));
       attachments = new MAPIMessage(samples.openResourceAsStream("attachment_test_msg.msg"));
       noRecipientAddress = new MAPIMessage(samples.openResourceAsStream("no_recipient_address.msg"));
+      unicode = new MAPIMessage(samples.openResourceAsStream("example_received_unicode.msg"));
       cyrillic = new MAPIMessage(samples.openResourceAsStream("cyrillic_message.msg"));
       chinese = new MAPIMessage(samples.openResourceAsStream("chinese-traditional.msg"));
        }
@@ -182,6 +184,16 @@ public final class TestBasics extends TestCase {
       noRecipientAddress.setReturnNullOnMissingChunk(false);
        }
        
+       /**
+        * Test the 7 bit detection
+        */
+       public void test7BitDetection() throws Exception {
+          assertEquals(false, unicode.has7BitEncodingStrings());
+      assertEquals(true, simple.has7BitEncodingStrings());
+      assertEquals(true, chinese.has7BitEncodingStrings());
+      assertEquals(true, cyrillic.has7BitEncodingStrings());
+       }
+       
    /**
     * We default to CP1252, but can sometimes do better
     *  if needed.