From amanda59@example.org Tue Mar 01 18:13:16 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 2359 invoked from network); 1 Mar 2011 18:13:15 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Mar 2011 18:13:15 -0000 Received: (qmail 91962 invoked by uid 500); 1 Mar 2011 18:13:15 -0000 Delivered-To: amanda59@example.org Received: (qmail 91932 invoked by uid 500); 1 Mar 2011 18:13:15 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 91925 invoked by uid 99); 1 Mar 2011 18:13:14 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:13:14 +0000 X-ASF-Spam-Status: No, hits=-1999.5 required=5.0 tests=ALL_TRUSTED,NULL_IN_BODY X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:13:08 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 965D223888E7; Tue, 1 Mar 2011 18:12:46 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r1075955 - in /poi/trunk: src/java/org/apache/poi/util/ src/scratchpad/src/org/apache/poi/hdgf/ src/scratchpad/src/org/apache/poi/hmef/ src/scratchpad/testcases/org/apache/poi/hmef/ src/testcases/org/apache/poi/ test-data/hmef/ test-data/hm... Date: Tue, 01 Mar 2011 18:12:46 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: nick Date: Tue Mar 1 18:12:44 2011 New Revision: 1075955 URL: http://svn.apache.org/viewvc?rev=1075955&view=rev Log: Start on unit tests for HMEF. Quite a bit is still stubbed out, and it shows that the LZW isn't quite right yet (so tests disabled) Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/ poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java poi/trunk/test-data/hmef/quick-contents/ poi/trunk/test-data/hmef/quick-contents/message.rtf poi/trunk/test-data/hmef/quick-contents/quick.doc (with props) poi/trunk/test-data/hmef/quick-contents/quick.html poi/trunk/test-data/hmef/quick-contents/quick.pdf (with props) poi/trunk/test-data/hmef/quick-contents/quick.txt poi/trunk/test-data/hmef/quick-contents/quick.xml poi/trunk/test-data/hmef/quick-winmail.dat (with props) Modified: poi/trunk/src/java/org/apache/poi/util/LZWDecompresser.java poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/HDGFLZW.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/CompressedRTF.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java poi/trunk/src/testcases/org/apache/poi/POIDataSamples.java Modified: poi/trunk/src/java/org/apache/poi/util/LZWDecompresser.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/LZWDecompresser.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/util/LZWDecompresser.java (original) +++ poi/trunk/src/java/org/apache/poi/util/LZWDecompresser.java Tue Mar 1 18:12:44 2011 @@ -35,10 +35,16 @@ public abstract class LZWDecompresser { /** * Does the mask bit mean it's compressed or uncompressed? */ - private boolean maskMeansCompressed; + private final boolean maskMeansCompressed; + /** + * How much to append to the code length in the stream + * to get the real code length? Normally 2 or 3 + */ + private final int codeLengthIncrease; - protected LZWDecompresser(boolean maskMeansCompressed) { + protected LZWDecompresser(boolean maskMeansCompressed, int codeLengthIncrease) { this.maskMeansCompressed = maskMeansCompressed; + this.codeLengthIncrease = codeLengthIncrease; } /** @@ -135,7 +141,7 @@ public abstract class LZWDecompresser { // what position of the code to start at // (The position is the first 12 bits, the // length is the last 4 bits) - len = (dataIPt2 & 15) + 3; + len = (dataIPt2 & 15) + codeLengthIncrease; pntr = (dataIPt2 & 240)*16 + dataIPt1; // Adjust the pointer as needed Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/HDGFLZW.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/HDGFLZW.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/HDGFLZW.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/HDGFLZW.java Tue Mar 1 18:12:44 2011 @@ -38,7 +38,7 @@ import org.apache.poi.util.LZWDecompress public class HDGFLZW extends LZWDecompresser { public HDGFLZW() { // We're the wrong way round! - super(false); + super(false, 3); } /** Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java Tue Mar 1 18:12:44 2011 @@ -254,4 +254,9 @@ public final class Attribute { public byte[] getData() { return data; } + + public String toString() { + return "Attachment " + getId().toString() + ", type=" + type + + ", data length=" + data.length; + } } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/CompressedRTF.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/CompressedRTF.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/CompressedRTF.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/CompressedRTF.java Tue Mar 1 18:12:44 2011 @@ -54,7 +54,7 @@ public final class CompressedRTF extends "{\\colortbl\\red0\\green0\\blue0\n\r\\par \\pard\\plain\\f0\\fs20\\b\\i\\u\\tab\\tx"; public CompressedRTF() { - super(true); + super(true, 2); } public void decompress(InputStream src, OutputStream res) throws IOException { Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java Tue Mar 1 18:12:44 2011 @@ -22,6 +22,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import org.apache.poi.hmef.Attribute.AttributeID; +import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.util.LittleEndian; /** @@ -103,4 +105,55 @@ public final class HMEFMessage { // Handle the next one down process(inp, level); } + + /** + * Returns all HMEF/TNEF attributes of the message. + * Note - In a typical message, most of the interesting properties + * are stored as {@link MAPIAttribute}s - see {@link #getMessageMAPIAttributes()} + */ + public List<Attribute> getMessageAttributes() { + return messageAttributes; + } + + /** + * Returns all MAPI attributes of the message. + * Note - A small number of HMEF/TNEF specific attributes normally + * apply to most messages, see {@link #getMessageAttributes()} + */ + public List<MAPIAttribute> getMessageMAPIAttributes() { + return mapiAttributes; + } + + /** + * Returns all the Attachments of the message. + */ + public List<Attachment> getAttachments() { + return attachments; + } + + /** + * Return the message attribute with the given ID, + * or null if there isn't one. + */ + public Attribute getMessageAttribute(AttributeID id) { + for(Attribute attr : messageAttributes) { + if(attr.getId() == id) { + return attr; + } + } + return null; + } + + /** + * Return the message MAPI Attribute with the given ID, + * or null if there isn't one. + */ + public MAPIAttribute getMessageMAPIAttribute(MAPIProperty id) { + for(MAPIAttribute attr : mapiAttributes) { + if(attr.getProperty() == id) { + return attr; + } + } + return null; + } } Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java?rev=1075955&view=auto ============================================================================== --- poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java (added) +++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java Tue Mar 1 18:12:44 2011 @@ -0,0 +1,155 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hmef; + +import java.io.ByteArrayInputStream; + +import junit.framework.TestCase; + +import org.apache.poi.POIDataSamples; +import org.apache.poi.hmef.Attribute.AttributeID; +import org.apache.poi.hsmf.datatypes.MAPIProperty; +import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.StringUtil; + +public final class TestCompressedRTF extends TestCase { + private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance(); + + private static final String block1 = "{\\rtf1\\adeflang102"; + private static final String block2 = block1 + "5\\ansi\\ansicpg1252"; + + /** + * Check that things are as we expected. If this fails, + * then decoding has no hope... + */ + public void testQuickBasics() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + MAPIAttribute rtfAttr = msg.getMessageMAPIAttribute(MAPIProperty.RTF_COMPRESSED); + assertNotNull(rtfAttr); + assertTrue(rtfAttr instanceof MAPIRtfAttribute); + + // Check the start of the compressed version + assertEquals(5907, rtfAttr.getData().length); + + // First 16 bytes is header stuff + // Check it has the length + compressed marker + assertEquals(5907-4, LittleEndian.getShort(rtfAttr.getData())); + assertEquals( + "LZFu", + StringUtil.getFromCompressedUnicode(rtfAttr.getData(), 8, 4) + ); + + + // Now Look at the code + assertEquals((byte)0x07, rtfAttr.getData()[16+0]); // Flag: cccUUUUU + assertEquals((byte)0x00, rtfAttr.getData()[16+1]); // c1a: offset 0 / 0x000 + assertEquals((byte)0x06, rtfAttr.getData()[16+2]); // c1b: length 6+2 -> {\rtf1\a + assertEquals((byte)0x01, rtfAttr.getData()[16+3]); // c2a: offset 16 / 0x010 + assertEquals((byte)0x01, rtfAttr.getData()[16+4]); // c2b: length 1+2 -> def + assertEquals((byte)0x0b, rtfAttr.getData()[16+5]); // c3a: offset 182 / 0xb6 + assertEquals((byte)0x60, rtfAttr.getData()[16+6]); // c3b: length 0+2 -> la + assertEquals((byte)0x6e, rtfAttr.getData()[16+7]); // n + assertEquals((byte)0x67, rtfAttr.getData()[16+8]); // g + assertEquals((byte)0x31, rtfAttr.getData()[16+9]); // 1 + assertEquals((byte)0x30, rtfAttr.getData()[16+10]); // 0 + assertEquals((byte)0x32, rtfAttr.getData()[16+11]); // 2 + + assertEquals((byte)0x66, rtfAttr.getData()[16+12]); // Flag: UccUUccU + assertEquals((byte)0x35, rtfAttr.getData()[16+13]); // 5 + assertEquals((byte)0x00, rtfAttr.getData()[16+14]); // c2a: offset 6 / 0x006 + assertEquals((byte)0x64, rtfAttr.getData()[16+15]); // c2b: length 4+2 -> \ansi\a + assertEquals((byte)0x00, rtfAttr.getData()[16+16]); // c3a: offset 7 / 0x007 + assertEquals((byte)0x72, rtfAttr.getData()[16+17]); // c3b: length 2+2 -> nsi + assertEquals((byte)0x63, rtfAttr.getData()[16+18]); // c + assertEquals((byte)0x70, rtfAttr.getData()[16+19]); // p + assertEquals((byte)0x0d, rtfAttr.getData()[16+20]); // c6a: offset 221 / 0x0dd + assertEquals((byte)0xd0, rtfAttr.getData()[16+21]); // c6b: length 0+2 -> g1 + assertEquals((byte)0x0e, rtfAttr.getData()[16+22]); // c7a: offset 224 / 0x0e0 + assertEquals((byte)0x00, rtfAttr.getData()[16+23]); // c7b: length 0+2 -> 25 + assertEquals((byte)0x32, rtfAttr.getData()[16+24]); // 2 + } + + /** + * Check that we can decode the first 8 codes + * (1 flag byte + 8 codes) + */ + public void DISABLEDtestFirstBlock() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + MAPIAttribute rtfAttr = msg.getMessageMAPIAttribute(MAPIProperty.RTF_COMPRESSED); + assertNotNull(rtfAttr); + + // Truncate to header + flag + data for flag + byte[] data = new byte[16+12]; + System.arraycopy(rtfAttr.getData(), 0, data, 0, data.length); + + // Decompress it + CompressedRTF comp = new CompressedRTF(); + byte[] decomp = comp.decompress(new ByteArrayInputStream(data)); + String decompStr = new String(decomp, "ASCII"); + + // Test +System.err.println(decompStr); + assertEquals(block1.length(), decomp.length); + assertEquals(block1, decompStr); + } + + /** + * Check that we can decode the first 16 codes + * (flag + 8 codes, flag + 8 codes) + */ + public void DISABLEDtestFirstTwoBlocks() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + MAPIAttribute rtfAttr = msg.getMessageMAPIAttribute(MAPIProperty.RTF_COMPRESSED); + assertNotNull(rtfAttr); + + // Truncate to header + flag + data for flag + flag + data + byte[] data = new byte[16+12+13]; + System.arraycopy(rtfAttr.getData(), 0, data, 0, data.length); + + // Decompress it + CompressedRTF comp = new CompressedRTF(); + byte[] decomp = comp.decompress(new ByteArrayInputStream(data)); + String decompStr = new String(decomp, "ASCII"); + + // Test +System.err.println(decompStr); + assertEquals(block2.length(), decomp.length); + assertEquals(block2, decompStr); + } + + /** + * Check that we can correctly decode the whole file + * @throws Exception + */ + public void testFull() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + // TODO + } +} Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java?rev=1075955&view=auto ============================================================================== --- poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java (added) +++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java Tue Mar 1 18:12:44 2011 @@ -0,0 +1,103 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hmef; + +import junit.framework.TestCase; + +import org.apache.poi.POIDataSamples; + +public final class TestHMEFMessage extends TestCase { + private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance(); + + public void testOpen() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + assertNotNull(msg); + } + + public void testCounts() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + // Should have 4 attributes on the message + assertEquals(4, msg.getMessageAttributes().size()); + + // And should have 54 MAPI attributes on it + assertEquals(54, msg.getMessageMAPIAttributes().size()); + + + // Should have 5 attachments + assertEquals(5, msg.getAttachments().size()); + + // Each attachment should have 6 normal attributes, and + // 20 or so MAPI ones + for(Attachment attach : msg.getAttachments()) { + int attrCount = attach.getAttributes().size(); + int mapiAttrCount = attach.getMAPIAttributes().size(); + + assertEquals(6, attrCount); + // TODO +// assertTrue("Should be 3-4 attributes, found " + mapiAttrCount, mapiAttrCount >= 20); +// assertTrue("Should be 3-4 attributes, found " + mapiAttrCount, mapiAttrCount <= 25); + } + + + // TODO + } + + public void testBasicMessageAttributes() throws Exception { + HMEFMessage msg = new HMEFMessage( + _samples.openResourceAsStream("quick-winmail.dat") + ); + + // Should have version, codepage, class and MAPI + assertEquals(4, msg.getMessageAttributes().size()); + assertNotNull(msg.getMessageAttribute(Attribute.ID_TNEFVERSION)); + assertNotNull(msg.getMessageAttribute(Attribute.ID_OEMCODEPAGE)); + assertNotNull(msg.getMessageAttribute(Attribute.ID_MESSAGECLASS)); + assertNotNull(msg.getMessageAttribute(Attribute.ID_MAPIPROPERTIES)); + + // Check the order + assertEquals(Attribute.ID_TNEFVERSION, msg.getMessageAttributes().get(0).getId()); + assertEquals(Attribute.ID_OEMCODEPAGE, msg.getMessageAttributes().get(1).getId()); + assertEquals(Attribute.ID_MESSAGECLASS, msg.getMessageAttributes().get(2).getId()); + assertEquals(Attribute.ID_MAPIPROPERTIES, msg.getMessageAttributes().get(3).getId()); + + // Check some that aren't there + assertNull(msg.getMessageAttribute(Attribute.ID_AIDOWNER)); + assertNull(msg.getMessageAttribute(Attribute.ID_ATTACHDATA)); + + // Now check the details of one or two + // TODO + } + + public void testBasicMessageMAPIAttributes() throws Exception { + // TODO + } + + public void testBasicAttachments() throws Exception { + // TODO + } + + public void testMessageAttributeDetails() throws Exception { + // TODO + } +} Modified: poi/trunk/src/testcases/org/apache/poi/POIDataSamples.java URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/POIDataSamples.java?rev=1075955&r1=1075954&r2=1075955&view=diff ============================================================================== --- poi/trunk/src/testcases/org/apache/poi/POIDataSamples.java (original) +++ poi/trunk/src/testcases/org/apache/poi/POIDataSamples.java Tue Mar 1 18:12:44 2011 @@ -35,6 +35,7 @@ public final class POIDataSamples { private static POIDataSamples _instOpenxml4j; private static POIDataSamples _instPOIFS; private static POIDataSamples _instDDF; + private static POIDataSamples _instHMEF; private static POIDataSamples _instHPSF; private static POIDataSamples _instHPBF; private static POIDataSamples _instHSMF; @@ -99,6 +100,11 @@ public final class POIDataSamples { return _instHPBF; } + public static POIDataSamples getHMEFInstance(){ + if(_instHMEF == null) _instHMEF = new POIDataSamples("hmef"); + return _instHMEF; + } + public static POIDataSamples getHSMFInstance(){ if(_instHSMF == null) _instHSMF = new POIDataSamples("hsmf"); return _instHSMF; Added: poi/trunk/test-data/hmef/quick-contents/message.rtf URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/message.rtf?rev=1075955&view=auto ============================================================================== --- poi/trunk/test-data/hmef/quick-contents/message.rtf (added) +++ poi/trunk/test-data/hmef/quick-contents/message.rtf Tue Mar 1 18:12:44 2011 @@ -0,0 +1,6 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang2057\deflangfe2057\themelang2057\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31506\fbidi \fswiss\fcharset0\fprq2{\*\pan ose 020f0502020204030204}Calibri;}{\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f411\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f412\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f414\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f415\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f418\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f419\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31508\fbidi \froman\fcharset238\fprq2 Times N ew Roman CE;}{\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese); }{\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31551\ fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f31569\fbidi \fswiss\fcharse t204\fprq2 Calibri Cyr;}{\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\g reen128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue255;\red128\green0\blue128;}{\*\defchp \f31506\fs22\lang2057\langfe1033\langfenp1033 }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext0 \sqformat \spriority0 \styrsid6847920 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\ rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \ssemihidden \sunhideused \styrsid8740586 Hyperlink;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf18 \sbasedon10 \ssemihidden \sunhideused \styrsid8740586 FollowedHyperlink;}{\*\cs17 \additive \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f31506\fs22\cf0 \sbasedon10 \ssemihidden \spriority0 \spersonal \scompose \styrsid8740586 EmailStyle17;}}{\*\revtbl {Unknown;}}{\*\rsidtbl \rsid6847920\rsid8740586}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\trackmoves1\track formatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin150\dgvorigin0\dghshow1\dgvshow1\jexpand\viewkind5\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pn seclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\cf0\insrsid8740586\charrsid8740586 These are five files. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 +\par +\par }{\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033\insrsid8740586 {{\objattph {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 }}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033\insrsid8740586 {{\objattph {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 }}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033\ins rsid8740586 {{\objattph {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 }}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 +\par Five files from }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf6\insrsid8740586\charrsid8740586 Hell}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 !}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 (Well Outlook actually)}{\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033\insrsid8740586 {{\objattph {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 }}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8740586 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033\insrsid8740586 {{\objattph {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586 }}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fc s1 \af31507 \ltrch\fcs0 \cf0\insrsid8740586\charrsid8740586 +\par }{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqf ormat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \ lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhid eused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Acce nt 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\ls dsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemih idden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdu nhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000700a60dc669ccb01feffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file Added: poi/trunk/test-data/hmef/quick-contents/quick.doc URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/quick.doc?rev=1075955&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/hmef/quick-contents/quick.doc ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: poi/trunk/test-data/hmef/quick-contents/quick.html URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/quick.html?rev=1075955&view=auto ============================================================================== --- poi/trunk/test-data/hmef/quick-contents/quick.html (added) +++ poi/trunk/test-data/hmef/quick-contents/quick.html Tue Mar 1 18:12:44 2011 @@ -0,0 +1,17 @@ +<html> + +<head> + <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> + <title>The quick brown fox jumps over the lazy dog</title> + <meta name="author" content="Nevin Nollop"> + <meta name="keywords" content="Pangram, fox, dog"> + <meta name="description" content="Gym class featuring a brown fox and lazy dog"> +</head> + +<body lang=EN-US> + +The quick brown fox jumps over the lazy dog + +</body> + +</html> Added: poi/trunk/test-data/hmef/quick-contents/quick.pdf URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/quick.pdf?rev=1075955&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/hmef/quick-contents/quick.pdf ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: poi/trunk/test-data/hmef/quick-contents/quick.txt URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/quick.txt?rev=1075955&view=auto ============================================================================== --- poi/trunk/test-data/hmef/quick-contents/quick.txt (added) +++ poi/trunk/test-data/hmef/quick-contents/quick.txt Tue Mar 1 18:12:44 2011 @@ -0,0 +1,7 @@ +The quick brown fox jumps over the lazy dog + +Le renard brun rapide saute par-dessus le chien paresseux + +Der schnelle braune Fuchs springt über den faulen Hund + +براون وكس السريع يقفز فوق الكلب كسالي \ No newline at end of file Added: poi/trunk/test-data/hmef/quick-contents/quick.xml URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-contents/quick.xml?rev=1075955&view=auto ============================================================================== --- poi/trunk/test-data/hmef/quick-contents/quick.xml (added) +++ poi/trunk/test-data/hmef/quick-contents/quick.xml Tue Mar 1 18:12:44 2011 @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> + +<document> + <text>The quick brown fox jumps over the lazy dog</text> +</document> \ No newline at end of file Added: poi/trunk/test-data/hmef/quick-winmail.dat URL: http://svn.apache.org/viewvc/poi/trunk/test-data/hmef/quick-winmail.dat?rev=1075955&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/hmef/quick-winmail.dat ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream --------------------------------------------------------------------- To unsubscribe, e-mail: amanda59@example.org For additional commands, e-mail: amanda59@example.org From amanda59@example.org Tue Mar 01 18:26:11 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 43752 invoked from network); 1 Mar 2011 18:26:11 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Mar 2011 18:26:11 -0000 Received: (qmail 9647 invoked by uid 500); 1 Mar 2011 18:26:11 -0000 Delivered-To: amanda59@example.org Received: (qmail 9617 invoked by uid 500); 1 Mar 2011 18:26:10 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 9610 invoked by uid 99); 1 Mar 2011 18:26:10 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:26:10 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:26:08 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 85F2F23888E7; Tue, 1 Mar 2011 18:25:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1075966 - /poi/trunk/src/documentation/content/xdocs/status.xml Date: Tue, 01 Mar 2011 18:25:47 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: yegor Date: Tue Mar 1 18:25:47 2011 New Revision: 1075966 URL: http://svn.apache.org/viewvc?rev=1075966&view=rev Log: mention ExcelAnt in status.xml Modified: poi/trunk/src/documentation/content/xdocs/status.xml Modified: poi/trunk/src/documentation/content/xdocs/status.xml URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1075966&r1=1075965&r2=1075966&view=diff ============================================================================== --- poi/trunk/src/documentation/content/xdocs/status.xml (original) +++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Mar 1 18:25:47 2011 @@ -34,6 +34,7 @@ <changes> <release version="3.8-beta1" date="2010-??-??"> + <action dev="poi-developers" type="add">50610 - Ant tasks for running POI against a workbook</action> <action dev="poi-developers" type="add">32903 - Correct XBAT chaining explanation in /poifs/fileformat.html</action> <action dev="poi-developers" type="add">50829 - Support for getting the tables associated with a XSSFSheet</action> <action dev="poi-developers" type="fix">50299 - More XSSFColor updates for ARGB vs RGB</action> --------------------------------------------------------------------- To unsubscribe, e-mail: amanda59@example.org For additional commands, e-mail: amanda59@example.org From amanda59@example.org Tue Mar 01 18:27:24 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 48187 invoked from network); 1 Mar 2011 18:27:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Mar 2011 18:27:24 -0000 Received: (qmail 10287 invoked by uid 500); 1 Mar 2011 18:27:24 -0000 Delivered-To: amanda59@example.org Received: (qmail 10247 invoked by uid 500); 1 Mar 2011 18:27:23 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 10240 invoked by uid 99); 1 Mar 2011 18:27:23 -0000 Received: from athena.apache.org (HELO athena.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:27:23 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 18:27:23 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 553BE23888E7; Tue, 1 Mar 2011 18:27:03 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1075967 - /poi/tags/REL_3_8_BETA1/ Date: Tue, 01 Mar 2011 18:27:03 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> Author: yegor Date: Tue Mar 1 18:27:02 2011 New Revision: 1075967 URL: http://svn.apache.org/viewvc?rev=1075967&view=rev Log: tag r1075966 as REL_3_8_BETA1 Added: poi/tags/REL_3_8_BETA1/ (props changed) - copied from r1075966, poi/trunk/ Propchange: poi/tags/REL_3_8_BETA1/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Tue Mar 1 18:27:02 2011 @@ -0,0 +1,16 @@ +classes +workbook.xls +bak +*.iws +build.number +*.el +TEST-org.apache.poi*.xml +build +.settings +scripts +*.ipr +untitled1.jpx +*.iml +log*.* +dist +*.log Propchange: poi/tags/REL_3_8_BETA1/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Mar 1 18:27:02 2011 @@ -0,0 +1,2 @@ +/poi/branches/excelant:1069732-1073692 +/poi/trunk:693591-694881,695264-695420,695621,695649-711764 Propchange: poi/tags/REL_3_8_BETA1/ ------------------------------------------------------------------------------ --- svnmerge-blocked (added) +++ svnmerge-blocked Tue Mar 1 18:27:02 2011 @@ -0,0 +1 @@ +/poi/trunk:638785,639487,639602,640057,642563,642567,642575,642737-642738,650915 Propchange: poi/tags/REL_3_8_BETA1/ ------------------------------------------------------------------------------ --- svnmerge-integrated (added) +++ svnmerge-integrated Tue Mar 1 18:27:02 2011 @@ -0,0 +1 @@ +/poi/trunk:1-638784,638786-639486,639488-639601,639603-640056,640058-642562,642564-642566,642568-642574,642576-642736,642739-650914,650916-711764 --------------------------------------------------------------------- To unsubscribe, e-mail: amanda59@example.org For additional commands, e-mail: amanda59@example.org From amanda59@example.org Tue Mar 01 21:03:35 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 68715 invoked from network); 1 Mar 2011 21:03:35 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Mar 2011 21:03:35 -0000 Received: (qmail 95283 invoked by uid 500); 1 Mar 2011 21:03:35 -0000 Delivered-To: amanda59@example.org Received: (qmail 95235 invoked by uid 500); 1 Mar 2011 21:03:35 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 95227 invoked by uid 99); 1 Mar 2011 21:03:34 -0000 Received: from athena.apache.org (HELO athena.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 21:03:34 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Mar 2011 21:03:34 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A29D823888EA; Tue, 1 Mar 2011 21:02:43 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1076022 - in /poi/trunk/src/ooxml: java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java Date: Tue, 01 Mar 2011 21:02:43 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> Author: nick Date: Tue Mar 1 21:02:43 2011 New Revision: 1076022 URL: http://svn.apache.org/viewvc?rev=1076022&view=rev Log: Tweak XSSFPrintSetup to make it a little clearer what happens, and add a round-trip unit test for it Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java?rev=1076022&r1=1076021&r2=1076022&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java Tue Mar 1 21:02:43 2011 @@ -35,16 +35,23 @@ import org.openxmlformats.schemas.spread * Page setup and page margins settings for the worksheet. */ public class XSSFPrintSetup implements PrintSetup { - private CTWorksheet ctWorksheet; private CTPageSetup pageSetup; private CTPageMargins pageMargins; - protected XSSFPrintSetup(CTWorksheet worksheet) { this.ctWorksheet = worksheet; - this.pageSetup = ctWorksheet.getPageSetup() == null ? ctWorksheet.addNewPageSetup() : ctWorksheet.getPageSetup(); - this.pageMargins = ctWorksheet.getPageMargins() == null ? ctWorksheet.addNewPageMargins() : ctWorksheet.getPageMargins(); + + if(ctWorksheet.isSetPageSetup()) { + this.pageSetup = ctWorksheet.getPageSetup(); + } else { + this.pageSetup = ctWorksheet.addNewPageSetup(); + } + if(ctWorksheet.isSetPageMargins()) { + this.pageMargins = ctWorksheet.getPageMargins(); + } else { + this.pageMargins = ctWorksheet.addNewPageMargins(); + } } /** Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java?rev=1076022&r1=1076021&r2=1076022&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPrintSetup.java Tue Mar 1 21:02:43 2011 @@ -24,13 +24,12 @@ import org.apache.poi.ss.usermodel.Paper import org.apache.poi.ss.usermodel.PageOrder; import org.apache.poi.ss.usermodel.PrintOrientation; import org.apache.poi.ss.usermodel.PrintCellComments; +import org.apache.poi.xssf.XSSFITestDataProvider; /** * Tests for {@link XSSFPrintSetup} */ public class TestXSSFPrintSetup extends TestCase { - - public void testSetGetPaperSize() { CTWorksheet worksheet = CTWorksheet.Factory.newInstance(); CTPageSetup pSetup = worksheet.addNewPageSetup(); @@ -206,5 +205,47 @@ public class TestXSSFPrintSetup extends printSetup.setCopies((short) 15); assertEquals(15, pSetup.getCopies()); } - + + public void testSetSaveRead() throws Exception { + XSSFWorkbook wb = new XSSFWorkbook(); + XSSFSheet s1 = wb.createSheet(); + assertEquals(false, s1.getCTWorksheet().isSetPageSetup()); + assertEquals(true, s1.getCTWorksheet().isSetPageMargins()); + + XSSFPrintSetup print = s1.getPrintSetup(); + assertEquals(true, s1.getCTWorksheet().isSetPageSetup()); + assertEquals(true, s1.getCTWorksheet().isSetPageMargins()); + + print.setCopies((short)3); + print.setLandscape(true); + assertEquals(3, print.getCopies()); + assertEquals(true, print.getLandscape()); + + XSSFSheet s2 = wb.createSheet(); + assertEquals(false, s2.getCTWorksheet().isSetPageSetup()); + assertEquals(true, s2.getCTWorksheet().isSetPageMargins()); + + // Round trip and check + wb = XSSFITestDataProvider.instance.writeOutAndReadBack(wb); + + s1 = wb.getSheetAt(0); + s2 = wb.getSheetAt(1); + + assertEquals(true, s1.getCTWorksheet().isSetPageSetup()); + assertEquals(true, s1.getCTWorksheet().isSetPageMargins()); + assertEquals(false, s2.getCTWorksheet().isSetPageSetup()); + assertEquals(true, s2.getCTWorksheet().isSetPageMargins()); + + print = s1.getPrintSetup(); + assertEquals(3, print.getCopies()); + assertEquals(true, print.getLandscape()); + } + + /** + * Open a file with print settings, save and check. + * Then, change, save, read, check + */ + public void testRoundTrip() { + // TODO + } } --------------------------------------------------------------------- To unsubscribe, e-mail: amanda59@example.org For additional commands, e-mail: amanda59@example.org From amanda59@example.org Wed Mar 02 08:35:56 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 33426 invoked from network); 2 Mar 2011 08:35:56 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 2 Mar 2011 08:35:56 -0000 Received: (qmail 18755 invoked by uid 500); 2 Mar 2011 08:35:55 -0000 Delivered-To: amanda59@example.org Received: (qmail 18722 invoked by uid 500); 2 Mar 2011 08:35:54 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 18715 invoked by uid 99); 2 Mar 2011 08:35:53 -0000 Received: from athena.apache.org (HELO athena.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Mar 2011 08:35:53 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Mar 2011 08:35:52 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A531823889EA; Wed, 2 Mar 2011 08:35:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1076139 - in /poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs: index.xml status.xml Date: Wed, 02 Mar 2011 08:35:31 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> Author: yegor Date: Wed Mar 2 08:35:31 2011 New Revision: 1076139 URL: http://svn.apache.org/viewvc?rev=1076139&view=rev Log: set release date of 3.8-beta1 to 2011-03-07 Modified: poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/index.xml poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/status.xml Modified: poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/index.xml URL: http://svn.apache.org/viewvc/poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/index.xml?rev=1076139&r1=1076138&r2=1076139&view=diff ============================================================================== --- poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/index.xml (original) +++ poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/index.xml Wed Mar 2 08:35:31 2011 @@ -32,8 +32,8 @@ </header> <body> - <section><title>29 October 2010 - POI 3.7 available</title> - <p>The Apache POI team is pleased to announce the release of 3.7. This includes a large number of bug fixes, and some + <section><title>7 March 2011 - POI 3.8-beta1 available</title> + <p>The Apache POI team is pleased to announce the release of 3.8. This includes a large number of bug fixes, and some enhancements (especially text extraction). See the <link href="http://www.apache.org/dist/poi/release/bin/RELEASE_NOTES.txt">full release notes</link> for more details. </p> Modified: poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/status.xml URL: http://svn.apache.org/viewvc/poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/status.xml?rev=1076139&r1=1076138&r2=1076139&view=diff ============================================================================== --- poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/status.xml (original) +++ poi/tags/REL_3_8_BETA1/src/documentation/content/xdocs/status.xml Wed Mar 2 08:35:31 2011 @@ -33,7 +33,7 @@ </developers> <changes> - <release version="3.8-beta1" date="2010-??-??"> + <release version="3.8-beta1" date="2011-03-07"> <action dev="poi-developers" type="add">50610 - Ant tasks for running POI against a workbook</action> <action dev="poi-developers" type="add">32903 - Correct XBAT chaining explanation in /poifs/fileformat.html</action> <action dev="poi-developers" type="add">50829 - Support for getting the tables associated with a XSSFSheet</action> --------------------------------------------------------------------- To unsubscribe, e-mail: amanda59@example.org For additional commands, e-mail: amanda59@example.org From amanda59@example.org Wed Mar 02 15:26:14 2011 Return-Path: <amanda59@example.org> Delivered-To: amanda59@example.org Received: (qmail 53636 invoked from network); 2 Mar 2011 15:26:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 2 Mar 2011 15:26:14 -0000 Received: (qmail 59523 invoked by uid 500); 2 Mar 2011 15:26:14 -0000 Delivered-To: amanda59@example.org Received: (qmail 59484 invoked by uid 500); 2 Mar 2011 15:26:13 -0000 Mailing-List: contact amanda59@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:amanda59@example.org> List-Unsubscribe: <mailto:amanda59@example.org> List-Post: <mailto:amanda59@example.org> List-Id: <commits.poi.apache.org> Reply-To: amanda59@example.org Delivered-To: mailing list amanda59@example.org Received: (qmail 59303 invoked by uid 99); 2 Mar 2011 15:26:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Mar 2011 15:26:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Mar 2011 15:26:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 92A34238899C; Wed, 2 Mar 2011 15:25:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1076251 - in /poi/trunk/src/scratchpad: src/org/apache/poi/hmef/ src/org/apache/poi/hmef/attribute/ src/org/apache/poi/hmef/dev/ testcases/org/apache/poi/hmef/ testcases/org/apache/poi/hmef/attribute/ Date: Wed, 02 Mar 2011 15:25:37 -0000 To: amanda59@example.org From: amanda59@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <amanda59@example.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: nick Date: Wed Mar 2 15:25:35 2011 New Revision: 1076251 URL: http://svn.apache.org/viewvc?rev=1076251&view=rev Log: Refactor the TNEF Attributes to better match the MAPI ones, and move both into their own package Added: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIAttribute.java - copied, changed from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java - copied, changed from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIRtfAttribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIStringAttribute.java - copied, changed from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIStringAttribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFAttribute.java - copied, changed from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFProperty.java poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/attribute/ Removed: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIRtfAttribute.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIStringAttribute.java Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attachment.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java poi/trunk/src/scratchpad/src/org/apache/poi/hmef/dev/HMEFDumper.java poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestCompressedRTF.java poi/trunk/src/scratchpad/testcases/org/apache/poi/hmef/TestHMEFMessage.java Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attachment.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attachment.java?rev=1076251&r1=1076250&r2=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attachment.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attachment.java Wed Mar 2 15:25:35 2011 @@ -20,15 +20,22 @@ package org.apache.poi.hmef; import java.util.ArrayList; import java.util.List; +import org.apache.poi.hmef.attribute.TNEFAttribute; +import org.apache.poi.hmef.attribute.MAPIAttribute; + /** - * An attachment within a {@link HMEFMessage} + * An attachment within a {@link HMEFMessage}. Provides both helper + * methods to get at common parts and attributes of the attachment, + * and list methods to get all of them. */ public final class Attachment { - private final List<Attribute> attributes = new ArrayList<Attribute>(); + private final List<TNEFAttribute> attributes = new ArrayList<TNEFAttribute>(); private final List<MAPIAttribute> mapiAttributes = new ArrayList<MAPIAttribute>(); - protected void addAttribute(Attribute attr) { + + + protected void addAttribute(TNEFAttribute attr) { attributes.add(attr); } @@ -36,7 +43,7 @@ public final class Attachment { mapiAttributes.add(attr); } - public List<Attribute> getAttributes() { + public List<TNEFAttribute> getAttributes() { return attributes; } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java?rev=1076251&r1=1076250&r2=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/HMEFMessage.java Wed Mar 2 15:25:35 2011 @@ -22,7 +22,9 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; -import org.apache.poi.hmef.Attribute.AttributeID; +import org.apache.poi.hmef.attribute.MAPIAttribute; +import org.apache.poi.hmef.attribute.TNEFAttribute; +import org.apache.poi.hmef.attribute.TNEFProperty; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.util.LittleEndian; @@ -38,7 +40,7 @@ public final class HMEFMessage { public static final long HEADER_SIGNATURE = 0x223e9f78; private int fileId; - private List<Attribute> messageAttributes = new ArrayList<Attribute>(); + private List<TNEFAttribute> messageAttributes = new ArrayList<TNEFAttribute>(); private List<MAPIAttribute> mapiAttributes = new ArrayList<MAPIAttribute>(); private List<Attachment> attachments = new ArrayList<Attachment>(); @@ -59,16 +61,16 @@ public final class HMEFMessage { process(inp, 0); // Finally expand out the MAPI Attributes - for(Attribute attr : messageAttributes) { - if(attr.getId() == Attribute.ID_MAPIPROPERTIES) { + for(TNEFAttribute attr : messageAttributes) { + if(attr.getProperty() == TNEFProperty.ID_MAPIPROPERTIES) { mapiAttributes.addAll( MAPIAttribute.create(attr) ); } } for(Attachment attachment : attachments) { - for(Attribute attr : attachment.getAttributes()) { - if(attr.getId() == Attribute.ID_MAPIPROPERTIES) { + for(TNEFAttribute attr : attachment.getAttributes()) { + if(attr.getProperty()== TNEFProperty.ID_MAPIPROPERTIES) { attachment.getMAPIAttributes().addAll( MAPIAttribute.create(attr) ); @@ -80,19 +82,19 @@ public final class HMEFMessage { private void process(InputStream inp, int lastLevel) throws IOException { // Fetch the level int level = inp.read(); - if(level == Attribute.LEVEL_END_OF_FILE) { + if(level == TNEFProperty.LEVEL_END_OF_FILE) { return; } // Build the attribute - Attribute attr = new Attribute(inp); + TNEFAttribute attr = new TNEFAttribute(inp); // Decide what to attach it to, based on the levels and IDs - if(level == Attribute.LEVEL_MESSAGE) { + if(level == TNEFProperty.LEVEL_MESSAGE) { messageAttributes.add(attr); - } else if(level == Attribute.LEVEL_ATTACHMENT) { + } else if(level == TNEFProperty.LEVEL_ATTACHMENT) { // Previous attachment or a new one? - if(attachments.size() == 0 || attr.getId() == Attribute.ID_ATTACHRENDERDATA) { + if(attachments.size() == 0 || attr.getProperty() == TNEFProperty.ID_ATTACHRENDERDATA) { attachments.add(new Attachment()); } @@ -111,7 +113,7 @@ public final class HMEFMessage { * Note - In a typical message, most of the interesting properties * are stored as {@link MAPIAttribute}s - see {@link #getMessageMAPIAttributes()} */ - public List<Attribute> getMessageAttributes() { + public List<TNEFAttribute> getMessageAttributes() { return messageAttributes; } @@ -135,9 +137,9 @@ public final class HMEFMessage { * Return the message attribute with the given ID, * or null if there isn't one. */ - public Attribute getMessageAttribute(AttributeID id) { - for(Attribute attr : messageAttributes) { - if(attr.getId() == id) { + public TNEFAttribute getMessageAttribute(TNEFProperty id) { + for(TNEFAttribute attr : messageAttributes) { + if(attr.getProperty() == id) { return attr; } } Copied: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIAttribute.java (from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java) URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIAttribute.java?p2=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIAttribute.java&p1=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java&r1=1076169&r2=1076251&rev=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIAttribute.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIAttribute.java Wed Mar 2 15:25:35 2011 @@ -15,7 +15,7 @@ limitations under the License. ==================================================================== */ -package org.apache.poi.hmef; +package org.apache.poi.hmef.attribute; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -23,6 +23,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import org.apache.poi.hmef.Attachment; +import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.hsmf.datatypes.Types; import org.apache.poi.util.HexDump; @@ -79,11 +81,11 @@ public class MAPIAttribute { * Parses a MAPI Properties TNEF Attribute, and returns * the list of MAPI Attributes contained within it */ - public static List<MAPIAttribute> create(Attribute parent) throws IOException { - if(parent.getId() != Attribute.ID_MAPIPROPERTIES) { + public static List<MAPIAttribute> create(TNEFAttribute parent) throws IOException { + if(parent.getProperty() != TNEFProperty.ID_MAPIPROPERTIES) { throw new IllegalArgumentException( "Can only create from a MAPIProperty attribute, " + - "instead received a " + parent.getId() + " one" + "instead received a " + parent.getProperty() + " one" ); } ByteArrayInputStream inp = new ByteArrayInputStream(parent.getData()); Copied: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java (from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIRtfAttribute.java) URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java?p2=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java&p1=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIRtfAttribute.java&r1=1076169&r2=1076251&rev=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIRtfAttribute.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java Wed Mar 2 15:25:35 2011 @@ -15,11 +15,14 @@ limitations under the License. ==================================================================== */ -package org.apache.poi.hmef; +package org.apache.poi.hmef.attribute; import java.io.ByteArrayInputStream; import java.io.IOException; +import org.apache.poi.hmef.Attachment; +import org.apache.poi.hmef.CompressedRTF; +import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.util.StringUtil; Copied: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIStringAttribute.java (from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIStringAttribute.java) URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIStringAttribute.java?p2=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIStringAttribute.java&p1=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIStringAttribute.java&r1=1076169&r2=1076251&rev=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/MAPIStringAttribute.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/MAPIStringAttribute.java Wed Mar 2 15:25:35 2011 @@ -15,24 +15,15 @@ limitations under the License. ==================================================================== */ -package org.apache.poi.hmef; +package org.apache.poi.hmef.attribute; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.apache.poi.util.HexDump; -import org.apache.poi.util.IOUtils; -import org.apache.poi.util.LittleEndian; -import org.apache.poi.util.StringUtil; -import org.apache.poi.hmef.Attribute.AttributeID; +import org.apache.poi.hmef.Attachment; +import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.hsmf.datatypes.Types; +import org.apache.poi.util.StringUtil; /** * A pure-MAPI attribute holding a String, which applies Copied: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFAttribute.java (from r1076169, poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java) URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFAttribute.java?p2=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFAttribute.java&p1=poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java&r1=1076169&r2=1076251&rev=1076251&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/Attribute.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFAttribute.java Wed Mar 2 15:25:35 2011 @@ -15,15 +15,13 @@ limitations under the License. ==================================================================== */ -package org.apache.poi.hmef; +package org.apache.poi.hmef.attribute; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import org.apache.poi.hmef.Attachment; +import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndian; @@ -34,192 +32,8 @@ import org.apache.poi.util.LittleEndian; * Note - the types and IDs differ from standard Outlook/MAPI * ones, so we can't just re-use the HSMF ones. */ -public final class Attribute { - // Types taken from http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.contenttypes.tnef.tnefattributetype%28v=EXCHG.140%29.aspx - public static final int TYPE_TRIPLES = 0x0000; - public static final int TYPE_STRING = 0x0001; - public static final int TYPE_TEXT = 0x0002; - public static final int TYPE_DATE = 0x0003; - public static final int TYPE_SHORT = 0x0004; - public static final int TYPE_LONG = 0x0005; - public static final int TYPE_BYTE = 0x0006; - public static final int TYPE_WORD = 0x0007; - public static final int TYPE_DWORD = 0x0008; - public static final int TYPE_MAX = 0x0009; - - // Types taken from http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.contenttypes.tnef.tnefpropertytype%28v=EXCHG.140%29.aspx - /** AppTime - application time value */ - public static final int PTYPE_APPTIME = 0x0007; - /** Binary - counted byte array */ - public static final int PTYPE_BINARY = 0x0102; - /** Boolean - 16-bit Boolean value. '0' is false. Non-zero is true */ - public static final int PTYPE_BOOLEAN = 0x000B; - /** ClassId - OLE GUID */ - public static final int PTYPE_CLASSID = 0x0048; - /** Currency - signed 64-bit integer that represents a base ten decimal with four digits to the right of the decimal point */ - public static final int PTYPE_CURRENCY = 0x0006; - /** Double - floating point double */ - public static final int PTYPE_DOUBLE = 0x0005; - /** Error - 32-bit error value */ - public static final int PTYPE_ERROR = 0x000A; - /** I2 - signed 16-bit value */ - public static final int PTYPE_I2 = 0x0002; - /** I8 - 8-byte signed integer */ - public static final int PTYPE_I8 = 0x0014; - /** Long - signed 32-bit value */ - public static final int PTYPE_LONG = 0x0003; - /** MultiValued - Value part contains multiple values */ - public static final int PTYPE_MULTIVALUED = 0x1000; - /** Null - NULL property value */ - public static final int PTYPE_NULL = 0x0001; - /** Object - embedded object in a property */ - public static final int PTYPE_OBJECT = 0x000D; - /** R4 - 4-byte floating point value */ - public static final int PTYPE_R4 = 0x0004; - /** String8 - null-terminated 8-bit character string */ - public static final int PTYPE_STRING8 = 0x001E; - /** SysTime - FILETIME 64-bit integer specifying the number of 100ns periods since Jan 1, 1601 */ - public static final int PTYPE_SYSTIME = 0x0040; - /** Unicode - null-terminated Unicode string */ - public static final int PTYPE_UNICODE = 0x001F; - /** Unspecified */ - public static final int PTYPE_UNSPECIFIED = 0x0000; - - - // Levels taken from http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.contenttypes.tnef.tnefattributelevel%28v=EXCHG.140%29.aspx - public static final int LEVEL_MESSAGE = 0x01; - public static final int LEVEL_ATTACHMENT = 0x02; - public static final int LEVEL_END_OF_FILE = -0x01; - - // ID information taken from http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.contenttypes.tnef.tnefattributetag%28v=EXCHG.140%29.aspx - public static final AttributeID ID_AIDOWNER = - new AttributeID(0x0008, TYPE_LONG, "AidOwner", "PR_OWNER_APPT_ID"); - public static final AttributeID ID_ATTACHCREATEDATE = - new AttributeID(0x8012, TYPE_DATE, "AttachCreateDate", "PR_CREATION_TIME"); - public static final AttributeID ID_ATTACHDATA = - new AttributeID(0x800F, TYPE_BYTE, "AttachData", "PR_ATTACH_DATA_BIN"); - public static final AttributeID ID_ATTACHMENT = - new AttributeID(0x9005, TYPE_BYTE, "Attachment", null); - public static final AttributeID ID_ATTACHMETAFILE = - new AttributeID(0x8011, TYPE_BYTE, "AttachMetaFile", "PR_ATTACH_RENDERING"); - public static final AttributeID ID_ATTACHMODIFYDATE = - new AttributeID(0x8013, TYPE_DATE, "AttachModifyDate", "PR_LAST_MODIFICATION_TIME"); - public static final AttributeID ID_ATTACHRENDERDATA = - new AttributeID(0x9002, TYPE_BYTE, "AttachRenderData", "attAttachRenddata"); - public static final AttributeID ID_ATTACHTITLE = - new AttributeID(0x8010, TYPE_STRING, "AttachTitle", "PR_ATTACH_FILENAME"); - public static final AttributeID ID_ATTACHTRANSPORTFILENAME = - new AttributeID(0x9001, TYPE_BYTE, "AttachTransportFilename", "PR_ATTACH_TRANSPORT_NAME"); - public static final AttributeID ID_BODY = - new AttributeID(0x800C, TYPE_TEXT, "Body", "PR_BODY"); - public static final AttributeID ID_CONVERSATIONID = - new AttributeID(0x800B, TYPE_STRING, "ConversationId", "PR_CONVERSATION_KEY"); - public static final AttributeID ID_DATEEND = - new AttributeID(0x0007, TYPE_DATE, "DateEnd", "PR_END_DATE"); - public static final AttributeID ID_DATEMODIFIED = - new AttributeID(0x8020, TYPE_DATE, "DateModified", "PR_LAST_MODIFICATION_TIME "); - public static final AttributeID ID_DATERECEIVED = - new AttributeID(0x8006, TYPE_DATE, "DateReceived", "PR_MESSAGE_DELIVERY_TIME "); - public static final AttributeID ID_DATESENT = - new AttributeID(0x8005, TYPE_DATE, "DateSent", "PR_CLIENT_SUBMIT_TIME "); - public static final AttributeID ID_DATESTART = - new AttributeID(0x0006, TYPE_DATE, "DateStart", "PR_START_DATE "); - public static final AttributeID ID_DELEGATE = - new AttributeID(0x0002, TYPE_BYTE, "Delegate", "PR_RCVD_REPRESENTING_xxx "); - public static final AttributeID ID_FROM = - new AttributeID(0x8000, TYPE_STRING, "From", "PR_SENDER_ENTRYID"); - public static final AttributeID ID_MAPIPROPERTIES = - new AttributeID(0x9003, TYPE_BYTE, "MapiProperties", null); - public static final AttributeID ID_MESSAGECLASS = - new AttributeID(0x8008, TYPE_WORD, "MessageClass", "PR_MESSAGE_CLASS "); - public static final AttributeID ID_MESSAGEID = - new AttributeID(0x8009, TYPE_STRING, "MessageId", "PR_SEARCH_KEY"); - public static final AttributeID ID_MESSAGESTATUS = - new AttributeID(0x8007, TYPE_BYTE, "MessageStatus", "PR_MESSAGE_FLAGS"); - public static final AttributeID ID_NULL = - new AttributeID(0x0000, -1, "Null", null); - public static final AttributeID ID_OEMCODEPAGE = - new AttributeID(0x9007, TYPE_BYTE, "OemCodepage", "AttOemCodepage"); - public static final AttributeID ID_ORIGINALMESSAGECLASS = - new AttributeID(0x0006, TYPE_WORD, "OriginalMessageClass", "PR_ORIG_MESSAGE_CLASS"); - public static final AttributeID ID_OWNER = - new AttributeID(0x0000, TYPE_BYTE, "Owner", "PR_RCVD_REPRESENTING_xxx"); - public static final AttributeID ID_PARENTID = - new AttributeID(0x800A, TYPE_STRING, "ParentId", "PR_PARENT_KEY"); - public static final AttributeID ID_PRIORITY = - new AttributeID(0x800D, TYPE_SHORT, "Priority", "PR_IMPORTANCE"); - public static final AttributeID ID_RECIPIENTTABLE = - new AttributeID(0x9004, TYPE_BYTE, "RecipientTable", "PR_MESSAGE_RECIPIENTS"); - public static final AttributeID ID_REQUESTRESPONSE = - new AttributeID(0x009, TYPE_SHORT, "RequestResponse", "PR_RESPONSE_REQUESTED"); - public static final AttributeID ID_SENTFOR = - new AttributeID(0x0001, TYPE_BYTE, "SentFor", "PR_SENT_REPRESENTING_xxx"); - public static final AttributeID ID_SUBJECT = - new AttributeID(0x8004, TYPE_STRING, "Subject", "PR_SUBJECT"); - public static final AttributeID ID_TNEFVERSION = - new AttributeID(0x9006, TYPE_DWORD, "TnefVersion", "attTnefVersion"); - public static final AttributeID ID_UNKNOWN = - new AttributeID(-1, -1, "Unknown", null); - - /** - * Holds information on one potential ID of an - * attribute, and provides handy lookups for it. - */ - public static class AttributeID { - private static Map<Integer, List<AttributeID>> attributes = new HashMap<Integer, List<AttributeID>>(); - - public final int id; - public final int usualType; - public final String name; - public final String mapiProperty; - - private AttributeID(int id, int usualType, String name, String mapiProperty) { - this.id = id; - this.usualType = usualType; - this.name = name; - this.mapiProperty = mapiProperty; - - // Store it for lookup - if(! attributes.containsKey(id)) { - attributes.put(id, new ArrayList<AttributeID>()); - } - attributes.get(id).add(this); - } - public static AttributeID getBest(int id, int type) { - List<AttributeID> attrs = attributes.get(id); - if(attrs == null) { - return ID_UNKNOWN; - } - - // If there's only one, it's easy - if(attrs.size() == 1) { - return attrs.get(0); - } - - // Try by type - for(AttributeID attr : attrs) { - if(attr.usualType == type) return attr; - } - - // Go for the first if we can't otherwise decide... - return attrs.get(0); - } - public String toString() { - StringBuffer str = new StringBuffer(); - str.append(name); - str.append(" ["); - str.append(id); - str.append("]"); - if(mapiProperty != null) { - str.append(" ("); - str.append(mapiProperty); - str.append(")"); - } - return str.toString(); - } - } - - private final AttributeID id; +public final class TNEFAttribute { + private final TNEFProperty property; private final int type; private final byte[] data; private final int checksum; @@ -228,12 +42,12 @@ public final class Attribute { * Constructs a single new attribute from * the contents of the stream */ - public Attribute(InputStream inp) throws IOException { + public TNEFAttribute(InputStream inp) throws IOException { int id = LittleEndian.readUShort(inp); this.type = LittleEndian.readUShort(inp); int length = LittleEndian.readInt(inp); - this.id = AttributeID.getBest(id, type); + property = TNEFProperty.getBest(id, type); data = new byte[length]; IOUtils.readFully(inp, data); @@ -243,8 +57,8 @@ public final class Attribute { // a different way, as we need to recurse into it } - public AttributeID getId() { - return id; + public TNEFProperty getProperty() { + return property; } public int getType() { @@ -256,7 +70,7 @@ public final class Attribute { } public String toString() { - return "Attachment " + getId().toString() + ", type=" + type + + return "Attachment " + property.toString() + ", type=" + type + ", data length=" + data.length; } } Added: poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFProperty.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFProperty.java?rev=1076251&view=auto ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFProperty.java (added) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hmef/attribute/TNEFProperty.java Wed Mar 2 15:25:35 2011 @@ -0,0 +1,216 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.hmef.attribute; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Holds the list of TNEF Attributes, and allows lookup + * by friendly name, ID and MAPI Property Name. + * + * Note - the types and IDs differ from standard Outlook/MAPI + * ones, so we can't just re-use the HSMF ones. + */ +public final class TNEFProperty { + private static Map<Integer, List<TNEFProperty>> properties = new HashMap<Integer, List<TNEFProperty>>(); + + // Types taken from http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.contenttypes.tnef.tnefattributetype%28v=EXCHG.140%29.aspx + public static final int TYPE_TRIPLES = 0x0000; + public static final int TYPE_STRING = 0x0001; + public static final int TYPE_TEXT = 0x0002; + public static final int TYPE_DATE = 0x0003; + public static final int TYPE_SHORT = 0x0004; + public static final int TYPE_LONG = 0x0005;
{'source': 'Apache Software Foundation Public Mail Archives'}