poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ye...@apache.org
Subject svn commit: r821500 - in /poi/trunk: ./ src/documentation/content/xdocs/ src/scratchpad/examples/src/org/apache/poi/hsmf/ src/scratchpad/examples/src/org/apache/poi/hsmf/examples/
Date Sun, 04 Oct 2009 10:25:54 GMT
Author: yegor
Date: Sun Oct  4 10:25:53 2009
New Revision: 821500

URL: http://svn.apache.org/viewvc?rev=821500&view=rev
Log:
added Ant target to compile scratchpad examples, added example HSMF application that converts
a .msg file to text and extracts attachments, see Bugzilla 47922

Added:
    poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/
    poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/
    poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java
Modified:
    poi/trunk/build.xml
    poi/trunk/src/documentation/content/xdocs/status.xml

Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=821500&r1=821499&r2=821500&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Sun Oct  4 10:25:53 2009
@@ -27,6 +27,7 @@
     Modified by:
 
         Rainer Klute        klute@rainer-klute.de
+        Bruno Girin         brunogirin@gmail.com
 
     This build was tested with ant 1.6.2 although it will probably work with
     other versions.  The following jar files should be available on the 
@@ -110,6 +111,10 @@
   <property name="examples.src" location="src/examples/src"/>
   <property name="examples.output.dir" location="build/examples-classes"/>
 
+  <!-- Scratchpad Examples: -->
+  <property name="scratchpad.examples.src" location="src/scratchpad/examples/src"/>
+  <property name="scratchpad.examples.output.dir" location="build/scratchpad-examples-classes"/>
+
   <!-- OOXML support: -->
   <property name="ooxml.src" location="src/ooxml/java"/>
   <property name="ooxml.src.test" location="src/ooxml/testcases"/>
@@ -273,6 +278,7 @@
         <mkdir dir="${scratchpad.output.dir}"/>
         <mkdir dir="${contrib.output.dir}"/>
         <mkdir dir="${examples.output.dir}"/>
+        <mkdir dir="${scratchpad.examples.output.dir}"/>
         <mkdir dir="${ooxml.output.dir}"/>
         <mkdir dir="${main.output.test.dir}"/>
         <mkdir dir="${contrib.output.test.dir}"/>
@@ -423,8 +429,8 @@
 	</target>
 
   <target name="compile" depends="init, compile-main, 
-    compile-scratchpad, compile-contrib, compile-examples"
-    description="Compiles the POI main classes, scratchpad, contrib, and examples"/>
+    compile-scratchpad, compile-contrib, compile-examples, compile-scratchpad-examples"
+    description="Compiles the POI main classes, scratchpad, contrib, examples, and scratchpad
examples"/>
 
   <target name="compile-main">
     <copy todir="${main.output.dir}">
@@ -508,6 +514,19 @@
     </javac>
   </target>
 
+  <target name="compile-scratchpad-examples" depends="init,compile-ooxml">
+    <javac target="${jdk.version.class}" source="${jdk.version.source}"
+      failonerror="true" destdir="${scratchpad.examples.output.dir}" debug="on" fork="yes"
+      srcdir="${scratchpad.examples.src}">
+      <classpath>
+        <path refid="examples.classpath"/>
+        <path refid="ooxml.classpath"/>
+        <pathelement path="${ooxml.output.dir}"/>
+        <pathelement location="${junit.jar1.dir}"/>
+      </classpath>
+    </javac>
+  </target>
+
   <target name="compile-ooxml" depends="init, compile-main, compile-scratchpad">
     <javac target="1.5" source="1.5"
       destdir="${ooxml.output.dir}" debug="on" srcdir="${ooxml.src}">

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=821500&r1=821499&r2=821500&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sun Oct  4 10:25:53 2009
@@ -33,6 +33,8 @@
 
     <changes>
         <release version="3.6-beta1" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="add">47922 - added example HSMF application
that converts a .msg file to text and extracts attachments</action>
+           <action dev="POI-DEVELOPERS" type="add">47903 - added Ant target to compile
scratchpad examples</action>
            <action dev="POI-DEVELOPERS" type="add">47839 - improved API for OOXML custom
properties</action>
            <action dev="POI-DEVELOPERS" type="fix">47862 - fixed XSSFSheet.setColumnWidth
to handle columns included in a column span</action>
            <action dev="POI-DEVELOPERS" type="fix">47804 - fixed XSSFSheet.setColumnHidden
to handle columns included in a column span</action>

Added: poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java?rev=821500&view=auto
==============================================================================
--- poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java (added)
+++ poi/trunk/src/scratchpad/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java Sun Oct
 4 10:25:53 2009
@@ -0,0 +1,185 @@
+/* ====================================================================
+   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.hsmf.examples;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.poi.hsmf.MAPIMessage;
+import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
+
+/**
+ * Reads one or several Outlook MSG files and for each of them creates
+ * a text file from available chunks and a directory that contains
+ * attachments.
+ * 
+ * @author Bruno Girin
+ *
+ */
+public class Msg2txt {
+	
+	/**
+	 * The stem used to create file names for the text file and the directory
+	 * that contains the attachments.
+	 */
+	private String fileNameStem;
+	
+	/**
+	 * The Outlook MSG file being processed.
+	 */
+	private MAPIMessage msg;
+	
+	public Msg2txt(String fileName) throws IOException {
+		fileNameStem = fileName;
+		if(fileNameStem.endsWith(".msg") || fileNameStem.endsWith(".MSG")) {
+			fileNameStem = fileNameStem.substring(0, fileNameStem.length() - 4);
+		}
+		msg = new MAPIMessage(fileName);
+	}
+	
+	/**
+	 * Processes the message.
+	 * 
+	 * @throws IOException if an exception occurs while writing the message out
+	 */
+	public void processMessage() throws IOException {
+		String txtFileName = fileNameStem + ".txt";
+		String attDirName = fileNameStem + "-att";
+		PrintWriter txtOut = null;
+		try {
+			txtOut = new PrintWriter(txtFileName);
+			try {
+				String displayFrom = msg.getDisplayFrom();
+				txtOut.println("From: "+displayFrom);
+			} catch (ChunkNotFoundException e) {
+				// ignore
+			}
+			try {
+				String displayTo = msg.getDisplayTo();
+				txtOut.println("To: "+displayTo);
+			} catch (ChunkNotFoundException e) {
+				// ignore
+			}
+			try {
+				String displayCC = msg.getDisplayCC();
+				txtOut.println("CC: "+displayCC);
+			} catch (ChunkNotFoundException e) {
+				// ignore
+			}
+			try {
+				String displayBCC = msg.getDisplayBCC();
+				txtOut.println("BCC: "+displayBCC);
+			} catch (ChunkNotFoundException e) {
+				// ignore
+			}
+			try {
+				String subject = msg.getSubject();
+				txtOut.println("Subject: "+subject);
+			} catch (ChunkNotFoundException e) {
+				// ignore
+			}
+			try {
+				String body = msg.getTextBody();
+				txtOut.println(body);
+			} catch (ChunkNotFoundException e) {
+				System.err.println("No message body");
+			}
+			Map attachmentMap = msg.getAttachmentFiles();
+			if(attachmentMap.size() > 0) {
+				File d = new File(attDirName);
+				if(d.mkdir()) {
+					for(
+							Iterator ii = attachmentMap.entrySet().iterator();
+							ii.hasNext();
+							) {
+						Map.Entry entry = (Map.Entry)ii.next();
+						processAttachment(d, entry.getKey().toString(),
+								(ByteArrayInputStream)entry.getValue());
+					}
+				} else {
+					System.err.println("Can't create directory "+attDirName);
+				}
+			}
+		} finally {
+			if(txtOut != null) {
+				txtOut.close();
+			}
+		}
+	}
+	
+	/**
+	 * Processes a single attachment: reads it from the Outlook MSG file and
+	 * writes it to disk as an individual file.
+	 * 
+	 * @param dir the directory in which to write the attachment file
+	 * @param fileName the name of the attachment file
+	 * @param fileIn the input stream that contains the attachment's data
+	 * @throws IOException when any of the file operations fails
+	 */
+	public void processAttachment(File dir, String fileName,
+			ByteArrayInputStream fileIn) throws IOException {
+		File f = new File(dir, fileName);
+		OutputStream fileOut = null;
+		try {
+			fileOut = new FileOutputStream(f);
+			byte[] buffer = new byte[2048];
+			int bNum = fileIn.read(buffer);
+			while(bNum > 0) {
+				fileOut.write(buffer);
+				bNum = fileIn.read(buffer);
+			}
+		} finally {
+			try {
+				if(fileIn != null) {
+					fileIn.close();
+				}
+			} finally {
+				if(fileOut != null) {
+					fileOut.close();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Processes the list of arguments as a list of names of Outlook MSG files.
+	 * 
+	 * @param args the list of MSG files to process
+	 */
+	public static void main(String[] args) {
+		if(args.length <= 0) {
+			System.err.println("No files names provided");
+		} else {
+			for(int i = 0; i < args.length; i++) {
+				try {
+					Msg2txt processor = new Msg2txt(args[i]);
+					processor.processMessage();
+				} catch (IOException e) {
+					System.err.println("Could not process "+args[i]+": "+e);
+				}
+			}
+		}
+	}
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message