*** empty log message ***
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / mover / DirectoryWalker.java
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 (file)
index 0000000..0746ad3
--- /dev/null
@@ -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