You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2016/07/26 10:58:09 UTC
svn commit: r1754108 - in /poi/trunk/src/scratchpad:
src/org/apache/poi/hwpf/HWPFDocument.java
testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java
Author: nick
Date: Tue Jul 26 10:58:08 2016
New Revision: 1754108
URL: http://svn.apache.org/viewvc?rev=1754108&view=rev
Log:
HWPFDocument.write(File) support and tests #57919
Added:
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java (with props)
Modified:
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java?rev=1754108&r1=1754107&r2=1754108&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java Tue Jul 26 10:58:08 2016
@@ -571,20 +571,39 @@ public final class HWPFDocument extends
return _fields;
}
+ /**
+ * Warning - not currently implemented for HWPF!
+ */
@Override
public void write() throws IOException {
+ // TODO Implement
throw new IllegalStateException("Coming soon!");
}
+
+ /**
+ * Writes out the word file that is represented by an instance of this class.
+ *
+ * If the {@link File} exists, it will be replaced, otherwise a new one
+ * will be created
+ *
+ * @param newFile The File to write to.
+ * @throws IOException If there is an unexpected IOException from writing
+ * to the File.
+ *
+ * @since 3.15 beta 3
+ */
@Override
public void write(File newFile) throws IOException {
- throw new IllegalStateException("Coming soon!");
+ NPOIFSFileSystem pfs = POIFSFileSystem.create(newFile);
+ write(pfs, true);
+ pfs.writeFilesystem();
}
/**
* Writes out the word file that is represented by an instance of this class.
*
- * If {@code stream} is a {@link java.io.FileOutputStream} on a networked drive
- * or has a high cost/latency associated with each written byte,
+ * For better performance when writing to files, use {@link #write(File)}.
+ * If {@code stream} has a high cost/latency associated with each written byte,
* consider wrapping the OutputStream in a {@link java.io.BufferedOutputStream}
* to improve write performance.
*
@@ -592,9 +611,12 @@ public final class HWPFDocument extends
* @throws IOException If there is an unexpected IOException from the passed
* in OutputStream.
*/
- public void write(OutputStream out)
- throws IOException
- {
+ public void write(OutputStream out) throws IOException {
+ NPOIFSFileSystem pfs = new NPOIFSFileSystem();
+ write(pfs, true);
+ pfs.writeFilesystem( out );
+ }
+ private void write(NPOIFSFileSystem pfs, boolean copyOtherEntries) throws IOException {
// initialize our streams for writing.
HWPFFileSystem docSys = new HWPFFileSystem();
HWPFOutputStream wordDocumentStream = docSys.getStream(STREAM_WORD_DOCUMENT);
@@ -891,7 +913,8 @@ public final class HWPFDocument extends
}
// create new document preserving order of entries
- NPOIFSFileSystem pfs = new NPOIFSFileSystem();
+ // TODO Check "copyOtherEntries" and tweak behaviour based on that
+ // TODO That's needed for in-place write
boolean docWritten = false;
boolean dataWritten = false;
boolean objectPoolWritten = false;
@@ -967,7 +990,6 @@ public final class HWPFDocument extends
if ( !objectPoolWritten )
_objectPool.writeTo( pfs.getRoot() );
- pfs.writeFilesystem( out );
this.directory = pfs.getRoot();
/*
Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java?rev=1754108&view=auto
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java (added)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java Tue Jul 26 10:58:08 2016
@@ -0,0 +1,81 @@
+/* ====================================================================
+ 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.hwpf.usermodel;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.HWPFTestCase;
+import org.apache.poi.hwpf.HWPFTestDataSamples;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.util.TempFile;
+
+/**
+ * Test various write situations
+ */
+public final class TestHWPFWrite extends HWPFTestCase {
+ /**
+ * Write to a stream
+ */
+ public void testWriteStream() throws Exception {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+ Range r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ doc.write(baos);
+ doc.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+ doc = new HWPFDocument(bais);
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+ }
+
+ /**
+ * Write to a new file
+ */
+ public void testWriteNewFile() throws Exception {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+ Range r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+ File file = TempFile.createTempFile("TestDocument", ".doc");
+ doc.write(file);
+ doc.close();
+
+ // Check reading from File and Stream
+ doc = new HWPFDocument(new FileInputStream(file));
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+
+ doc = new HWPFDocument(new POIFSFileSystem(file));
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+ }
+
+ // TODO In-place write positive and negative checks
+}
Propchange: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org