X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/mover/DirectoryWalker.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/mover/DirectoryWalker.java new file mode 100644 index 0000000..0746ad3 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/mover/DirectoryWalker.java @@ -0,0 +1,105 @@ +package net.sourceforge.phpeclipse.mover; + +import java.io.File; +import java.io.IOException; + +public class DirectoryWalker { + + protected IMover[] fMover; + protected IFilter[] fFilter; + /** + * creates a new DirectoryWalker + * mover and filter array should have the same length ! + */ + public DirectoryWalker(IMover[] mover, IFilter[] filter) { + this.fMover = mover; + this.fFilter = filter; + } + + /** + * creates a new DirectoryWalker with a IFilter.DEFAULT_FILTER + */ + public DirectoryWalker(IMover[] mover) { + this.fMover = mover; + this.fFilter = new IFilter[mover.length]; + for (int i = 0; i < mover.length; i++) { + this.fFilter[i] = IFilter.DEFAULT_FILTER; + } + } + /** + * walks through the source directory, processing files as it + * goes along to create the target directory + * @param source source directory + * @param target target directory + * @throws IOException error with the file system + * @throws XMException error caught by the application + */ + public void walk(String source, String target) throws IOException { + try { + + walk(new File(source), new File(target)); + } finally { + + } + } + + /** + * actual implementation of the walking + * @param source source directory + * @param target target directory + * @throws IOException error with the file system + * @return true if walking should continue, false if the messenger + * has asked for the end of the walking + */ + protected boolean walk(File source, File target) throws IOException { + + if (!(target.exists() && target.isDirectory())) + if (!target.mkdirs()) + return false; + + for (int j = 0; j < fMover.length; j++) { + File[] dirs; + File[] docs; + int idirs = 0, idocs = 0; + if (source.isDirectory()) { + File[] files = source.listFiles(); + dirs = new File[files.length]; + docs = new File[files.length]; + String fileName; + + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + if (fFilter[j].isDirectoryOk(files[i])) { + dirs[idirs++] = files[i]; + } + } else if (files[i].isFile()) { + if (fFilter[j].isFileOk(files[i])) { + docs[idocs++] = files[i]; + } + } else + return false; + } + } else { + dirs = new File[0]; + docs = new File[1]; + docs[0] = source; + idocs = 1; + } + + for (int i = 0; i < idocs; i++) { + System.out.println(docs[i].getAbsolutePath()); + + File result = fMover[j].move(docs[i], target); + } + + System.out.println("directories"); + for (int i = 0; i < idirs; i++) { + System.out.println(dirs[i].getAbsolutePath()); + if (!walk(dirs[i], new File(target, dirs[i].getName()))) + return false; + } + } + + return true; + } +} \ No newline at end of file