diff --git a/src/java/org/apache/poi/POIDocument.java b/src/java/org/apache/poi/POIDocument.java index fad5b47bc..f0503a1a0 100644 --- a/src/java/org/apache/poi/POIDocument.java +++ b/src/java/org/apache/poi/POIDocument.java @@ -24,6 +24,8 @@ import java.io.OutputStream; import java.util.Iterator; import java.util.List; +import org.apache.poi.util.POIUtils; + import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.MutablePropertySet; import org.apache.poi.hpsf.PropertySet; @@ -237,50 +239,34 @@ public abstract class POIDocument { * @param target is the target POIFS to copy to * @param excepts is a list of Strings specifying what nodes NOT to copy */ - protected void copyNodes(POIFSFileSystem source, POIFSFileSystem target, - List excepts) throws IOException { - //System.err.println("CopyNodes called"); - copyNodes(source.getRoot(), target.getRoot(), excepts); - } - + @Deprecated + protected void copyNodes( POIFSFileSystem source, POIFSFileSystem target, + List excepts ) throws IOException + { + POIUtils.copyNodes( source, target, excepts ); + } + /** * Copies nodes from one POIFS to the other minus the excepts * @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 */ - protected void copyNodes(DirectoryNode sourceRoot, DirectoryNode targetRoot, - List excepts) throws IOException { - Iterator entries = sourceRoot.getEntries(); - while (entries.hasNext()) { - Entry entry = entries.next(); - if (!excepts.contains(entry.getName())) { - copyNodeRecursively(entry,targetRoot); - } - } - } - + @Deprecated + protected void copyNodes( DirectoryNode sourceRoot, + DirectoryNode targetRoot, List excepts ) throws IOException + { + POIUtils.copyNodes( sourceRoot, targetRoot, excepts ); + } + /** * Copies an Entry into a target POIFS directory, recursively */ @Internal - protected void copyNodeRecursively(Entry entry, DirectoryEntry target) - throws IOException { - //System.err.println("copyNodeRecursively called with "+entry.getName()+ - // ","+target.getName()); - DirectoryEntry newTarget = null; - if (entry.isDirectoryEntry()) { - newTarget = target.createDirectory(entry.getName()); - Iterator entries = ((DirectoryEntry)entry).getEntries(); - - while (entries.hasNext()) { - copyNodeRecursively(entries.next(),newTarget); - } - } else { - DocumentEntry dentry = (DocumentEntry)entry; - DocumentInputStream dstream = new DocumentInputStream(dentry); - target.createDocument(dentry.getName(),dstream); - dstream.close(); - } - } + @Deprecated + protected void copyNodeRecursively( Entry entry, DirectoryEntry target ) + throws IOException + { + POIUtils.copyNodeRecursively( entry, target ); + } } diff --git a/src/java/org/apache/poi/util/POIUtils.java b/src/java/org/apache/poi/util/POIUtils.java new file mode 100644 index 000000000..fa057bc57 --- /dev/null +++ b/src/java/org/apache/poi/util/POIUtils.java @@ -0,0 +1,103 @@ +/* ==================================================================== + 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.util; + +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import org.apache.poi.poifs.filesystem.DirectoryEntry; +import org.apache.poi.poifs.filesystem.DirectoryNode; +import org.apache.poi.poifs.filesystem.DocumentEntry; +import org.apache.poi.poifs.filesystem.DocumentInputStream; +import org.apache.poi.poifs.filesystem.Entry; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; + +@Internal +public class POIUtils +{ + + /** + * Copies an Entry into a target POIFS directory, recursively + */ + @Internal + public static void copyNodeRecursively( Entry entry, DirectoryEntry target ) + throws IOException + { + // System.err.println("copyNodeRecursively called with "+entry.getName()+ + // ","+target.getName()); + DirectoryEntry newTarget = null; + if ( entry.isDirectoryEntry() ) + { + newTarget = target.createDirectory( entry.getName() ); + Iterator entries = ( (DirectoryEntry) entry ).getEntries(); + + while ( entries.hasNext() ) + { + copyNodeRecursively( entries.next(), newTarget ); + } + } + else + { + DocumentEntry dentry = (DocumentEntry) entry; + DocumentInputStream dstream = new DocumentInputStream( dentry ); + target.createDocument( dentry.getName(), dstream ); + dstream.close(); + } + } + + /** + * Copies nodes from one POIFS to the other minus the excepts + * + * @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( DirectoryNode sourceRoot, + DirectoryNode targetRoot, List excepts ) throws IOException + { + Iterator entries = sourceRoot.getEntries(); + while ( entries.hasNext() ) + { + Entry entry = entries.next(); + if ( !excepts.contains( entry.getName() ) ) + { + copyNodeRecursively( entry, targetRoot ); + } + } + } + + /** + * Copies nodes from one POIFS to the other minus the excepts + * + * @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, List excepts ) throws IOException + { + // System.err.println("CopyNodes called"); + copyNodes( source.getRoot(), target.getRoot(), excepts ); + } +}