From 3fa0449747459b3410d869cae1c212c904e052b2 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 20 Jul 2016 22:35:51 +0000 Subject: [PATCH] #57919 Add in-place and new-File write methods to POIDocument git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1753619 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/POIDocument.java | 4 +-- .../poi/hpsf/HPSFPropertiesOnlyDocument.java | 30 ++++++++++++++++--- .../poi/hssf/usermodel/HSSFWorkbook.java | 4 +-- .../org/apache/poi/POIReadOnlyDocument.java | 16 +++++----- .../poi/hslf/usermodel/HSLFSlideShowImpl.java | 10 +++++++ .../src/org/apache/poi/hwpf/HWPFDocument.java | 10 +++++++ .../org/apache/poi/hwpf/HWPFOldDocument.java | 9 ++++++ 7 files changed, 67 insertions(+), 16 deletions(-) diff --git a/src/java/org/apache/poi/POIDocument.java b/src/java/org/apache/poi/POIDocument.java index 10862c6c4..80029e373 100644 --- a/src/java/org/apache/poi/POIDocument.java +++ b/src/java/org/apache/poi/POIDocument.java @@ -338,7 +338,7 @@ public abstract class POIDocument implements Closeable { * * @throws IOException thrown on errors writing to the file */ - //public abstract void write() throws IOException; // TODO Implement elsewhere + public abstract void write() throws IOException; /** * Writes the document out to the specified new {@link File}. If the file @@ -348,7 +348,7 @@ public abstract class POIDocument implements Closeable { * * @throws IOException thrown on errors writing to the file */ - //public abstract void write(File newFile) throws IOException; // TODO Implement elsewhere + public abstract void write(File newFile) throws IOException; /** * Writes the document out to the specified output stream. The diff --git a/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java b/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java index 9b0f84d47..2e6656acd 100644 --- a/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java +++ b/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java @@ -16,6 +16,7 @@ ==================================================================== */ package org.apache.poi.hpsf; +import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; @@ -44,14 +45,36 @@ public class HPSFPropertiesOnlyDocument extends POIDocument { super(fs); } + /** + * Write out to the currently open file the properties changes, but nothing else + */ + public void write() throws IOException { + NPOIFSFileSystem fs = directory.getFileSystem(); + + validateInPlaceWritePossible(); + writeProperties(fs, null); + fs.writeFilesystem(); + } + /** + * Write out, with any properties changes, but nothing else + */ + public void write(File newFile) throws IOException { + POIFSFileSystem fs = POIFSFileSystem.create(newFile); + write(fs); + fs.writeFilesystem(); + } /** * Write out, with any properties changes, but nothing else */ public void write(OutputStream out) throws IOException { NPOIFSFileSystem fs = new NPOIFSFileSystem(); - + write(fs); + fs.writeFilesystem(out); + } + + private void write(NPOIFSFileSystem fs) throws IOException { // For tracking what we've written out, so far - List excepts = new ArrayList(1); + List excepts = new ArrayList(2); // Write out our HPFS properties, with any changes writeProperties(fs, excepts); @@ -59,7 +82,6 @@ public class HPSFPropertiesOnlyDocument extends POIDocument { // Copy over everything else unchanged EntryUtils.copyNodes(directory, fs.getRoot(), excepts); - // Save the resultant POIFSFileSystem to the output stream - fs.writeFilesystem(out); + // Caller will save the resultant POIFSFileSystem to the stream/file } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index b7d3ff0a0..402b5d7e4 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -1301,7 +1301,7 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss * you must use {@link #write(OutputStream)} or {@link #write(File)} to * write to a brand new document. */ - //@Override // TODO Not yet on POIDocument + @Override public void write() throws IOException { validateInPlaceWritePossible(); @@ -1330,7 +1330,7 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss * @exception IOException if anything can't be written. * @see org.apache.poi.poifs.filesystem.POIFSFileSystem */ - //@Override // TODO Not yet on POIDocument + @Override public void write(File newFile) throws IOException { POIFSFileSystem fs = POIFSFileSystem.create(newFile); try { diff --git a/src/scratchpad/src/org/apache/poi/POIReadOnlyDocument.java b/src/scratchpad/src/org/apache/poi/POIReadOnlyDocument.java index 7a5d1fd49..ae050e00a 100644 --- a/src/scratchpad/src/org/apache/poi/POIReadOnlyDocument.java +++ b/src/scratchpad/src/org/apache/poi/POIReadOnlyDocument.java @@ -47,17 +47,17 @@ public abstract class POIReadOnlyDocument extends POIDocument { /** * Note - writing is not yet supported for this file format, sorry. */ -// @Override -// public void write() throws IOException { -// throw new IllegalStateException("Writing is not yet implemented for this Document Format"); -// } + @Override + public void write() throws IOException { + throw new IllegalStateException("Writing is not yet implemented for this Document Format"); + } /** * Note - writing is not yet supported for this file format, sorry. */ -// @Override -// public void write(File file) throws IOException { -// throw new IllegalStateException("Writing is not yet implemented for this Document Format"); -// } + @Override + public void write(File file) throws IOException { + throw new IllegalStateException("Writing is not yet implemented for this Document Format"); + } /** * Note - writing is not yet supported for this file format, sorry. */ diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java index de6b34cc2..7b4a8c51c 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java @@ -544,6 +544,15 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable { } currentUser.setCurrentEditOffset(usr.getLastOnDiskOffset()); } + + @Override + public void write() throws IOException { + throw new IllegalStateException("Coming soon!"); + } + @Override + public void write(File newFile) throws IOException { + throw new IllegalStateException("Coming soon!"); + } /** * Writes out the slideshow file the is represented by an instance @@ -554,6 +563,7 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable { * @throws IOException If there is an unexpected IOException from * the passed in OutputStream */ + @Override public void write(OutputStream out) throws IOException { // Write out, but only the common streams write(out,false); diff --git a/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java b/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java index ed70d7641..60bb32598 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java @@ -18,6 +18,7 @@ package org.apache.poi.hwpf; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -581,6 +582,15 @@ public final class HWPFDocument extends HWPFDocumentCore return _fields; } + @Override + public void write() throws IOException { + throw new IllegalStateException("Coming soon!"); + } + @Override + public void write(File newFile) throws IOException { + throw new IllegalStateException("Coming soon!"); + } + /** * Writes out the word file that is represented by an instance of this class. * diff --git a/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java b/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java index 7930d4ac5..6ff9f29bc 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java @@ -16,6 +16,7 @@ ==================================================================== */ package org.apache.poi.hwpf; +import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -154,6 +155,14 @@ public class HWPFOldDocument extends HWPFDocumentCore { return _text; } + @Override + public void write() throws IOException { + throw new IllegalStateException("Writing is not available for the older file formats"); + } + @Override + public void write(File out) throws IOException { + throw new IllegalStateException("Writing is not available for the older file formats"); + } @Override public void write(OutputStream out) throws IOException { throw new IllegalStateException("Writing is not available for the older file formats");