Convert POIFS EntryUtils.copyNodes(POFS,POIFS) to use FilteringDirectoryNode, so can exclude from copying nodes not just directly under the root

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1207445 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-11-28 17:00:11 +00:00
parent 9874de32e3
commit c3072e1efc
2 changed files with 58 additions and 8 deletions

View 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>

View File

@ -59,15 +59,48 @@ 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 )
throws IOException
@ -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)
);
}
/**