]> source.dussan.org Git - poi.git/commitdiff
#57919 Add in-place and new-File write methods to POIDocument
authorNick Burch <nick@apache.org>
Wed, 20 Jul 2016 22:35:51 +0000 (22:35 +0000)
committerNick Burch <nick@apache.org>
Wed, 20 Jul 2016 22:35:51 +0000 (22:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1753619 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/POIDocument.java
src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
src/scratchpad/src/org/apache/poi/POIReadOnlyDocument.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java

index 10862c6c4b55ee67811ecb83a11ca9caf12c0c4e..80029e373d263e8464d1643499163bfcbdadc58d 100644 (file)
@@ -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
index 9b0f84d470efadd5a12df29e2cfb7daee1fc629c..2e6656acde789b21fdc4c3affd7ba5de86f7bd04 100644 (file)
@@ -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<String> excepts = new ArrayList<String>(1);
+        List<String> excepts = new ArrayList<String>(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
     }
 }
index b7d3ff0a0fb541385ad4250467c5b4ba6d3d3398..402b5d7e40a1ae9ff6ffc0a62c0982862bebc374 100644 (file)
@@ -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 {
index 7a5d1fd491b88387c848bc7f045bfff38e322f63..ae050e00a387e836f08813708165531de4236888 100644 (file)
@@ -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.
      */
index de6b34cc26addc6e52070863bcf4668ed97108c2..7b4a8c51c30bf1590449ab1a72c5ccc63004c558 100644 (file)
@@ -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);
index ed70d7641491d2f67f790d7097ac1e72134b98bf..60bb32598c9078e123153f8db1e9a0c8e7956a19 100644 (file)
@@ -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.
    * 
index 7930d4ac5522a61e3835787d1b5363a6e5c1aef4..6ff9f29bc4fbb23074806fb14ed7faf5df7e5800 100644 (file)
@@ -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");