]> source.dussan.org Git - poi.git/commitdiff
Convert POIFS EntryUtils.copyNodes(POFS,POIFS) to use FilteringDirectoryNode, so...
authorNick Burch <nick@apache.org>
Mon, 28 Nov 2011 17:00:11 +0000 (17:00 +0000)
committerNick Burch <nick@apache.org>
Mon, 28 Nov 2011 17:00:11 +0000 (17:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1207445 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/poifs/filesystem/EntryUtils.java

index 36754893384d041a31bc9901758f5ba8508ab0d2..ffee4df0d6f5e9cd65a99f6004d7d4c7a0763424 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta5" date="2011-??-??">
+           <action dev="poi-developers" type="add">POIFS EntryUtils.copyNodes(POFS,POIFS) now uses FilteringDirectoryNode, so can exclude from copying nodes not just directly under the root</action>
            <action dev="poi-developers" type="add">POIFS Helper FilteringDirectoryNode, which wraps a DirectoryEntry and allows certain parts to be ignored</action>
            <action dev="poi-developers" type="fix">52209 - fixed inserting multiple pictures in XSLF </action>
            <action dev="poi-developers" type="fix">51803 - fixed HSLF TextExtractor to extract content from master slide </action>
index b268fe0a3d2a6188c099d7f67c0795c50163f38a..2c9308bfe8ccf85e2f68a86e3a65da800dbf8d5f 100644 (file)
@@ -59,14 +59,47 @@ public class EntryUtils
     }
 
     /**
-     * Copies nodes from one POIFS to the other minus the excepts
+     * Copies all the nodes from one POIFS Directory to another
      * 
      * @param source
-     *            is the source POIFS to copy from
+     *            is the source Directory to copy from
      * @param target
-     *            is the target POIFS to copy to
+     *            is the target Directory to copy to
+     * @param excepts
+     *            is a list of Strings specifying what nodes NOT to copy
+     */
+    public static void copyNodes(DirectoryEntry sourceRoot,
+            DirectoryEntry targetRoot) throws IOException
+    {
+        for (Entry entry : sourceRoot) {
+            copyNodeRecursively( entry, targetRoot );
+        }
+    }
+
+    /**
+     * Copies nodes from one Directory to the other minus the excepts
+     * 
+     * @param source The filtering source Directory to copy from
+     * @param target The filtering target Directory to copy to
+     */
+    public static void copyNodes( FilteringDirectoryNode filteredSource,
+            FilteringDirectoryNode filteredTarget ) throws IOException
+    {
+        // Nothing special here, just overloaded types to make the
+        //  recommended new way to handle this clearer
+        copyNodes( (DirectoryEntry)filteredSource, (DirectoryEntry)filteredTarget );
+    }
+
+    /**
+     * Copies nodes from one Directory to the other minus the excepts
+     * 
+     * @param source
+     *            is the source Directory to copy from
+     * @param target
+     *            is the target Directory to copy to
      * @param excepts
      *            is a list of Strings specifying what nodes NOT to copy
+     * @deprecated use {@link FilteringDirectoryNode} instead
      */
     public static void copyNodes( DirectoryEntry sourceRoot,
             DirectoryEntry targetRoot, List<String> excepts )
@@ -84,20 +117,36 @@ public class EntryUtils
     }
 
     /**
-     * Copies nodes from one POIFS to the other minus the excepts
+     * Copies all nodes from one POIFS to the other
      * 
      * @param source
      *            is the source POIFS to copy from
      * @param target
      *            is the target POIFS to copy to
-     * @param excepts
-     *            is a list of Strings specifying what nodes NOT to copy
+     */
+    public static void copyNodes( POIFSFileSystem source,
+            POIFSFileSystem target ) throws IOException
+    {
+        copyNodes( source.getRoot(), target.getRoot() );
+    }
+    
+    /**
+     * Copies nodes from one POIFS to the other, minus the excepts.
+     * This delegates the filtering work to {@link FilteringDirectoryNode},
+     *  so excepts can be of the form "NodeToExclude" or
+     *  "FilteringDirectory/ExcludedChildNode"
+     * 
+     * @param source is the source POIFS to copy from
+     * @param target is the target POIFS to copy to
+     * @param excepts is a list of Entry Names to be excluded from the copy
      */
     public static void copyNodes( POIFSFileSystem source,
             POIFSFileSystem target, List<String> excepts ) throws IOException
     {
-        // System.err.println("CopyNodes called");
-        copyNodes( source.getRoot(), target.getRoot(), excepts );
+        copyNodes(
+              new FilteringDirectoryNode(source.getRoot(), excepts),
+              new FilteringDirectoryNode(target.getRoot(), excepts)
+        );
     }
     
     /**