Upload/Download of multiple files now possible
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / CreateFilesJob.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesJob.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesJob.java
new file mode 100644 (file)
index 0000000..82f7769
--- /dev/null
@@ -0,0 +1,85 @@
+package net.sourceforge.phpeclipse.wiki.actions;
+import java.io.ByteArrayInputStream;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+import net.sourceforge.phpeclipse.wiki.preferences.Util;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ui.progress.IProgressConstants;
+
+public class CreateFilesJob extends WorkspaceJob {
+  IFile[] files;
+
+  public CreateFilesJob(IFile[] files) {
+    super("Create Wiki Files Job");
+    this.files = files;
+  }
+
+  public IStatus runInWorkspace(IProgressMonitor monitor) {
+    try {
+      monitor.beginTask("Create Wiki Files", 100);
+      IFile file;
+      int partOfWork = 100 / files.length;
+      int work = 0;
+      String newText = WikiEditorPlugin.AUTOMATICALLY_CREATED;
+      byte[] buffer = newText.getBytes();
+      ByteArrayInputStream source = new ByteArrayInputStream(buffer);
+      ProblemConsole console = new ProblemConsole();
+      for (int i = 0; i < files.length; i++) {
+        file = files[i];
+
+        IContainer parent = file.getParent();
+        if (parent instanceof IFolder && (!((IFolder) parent).exists())) {
+          Util.createFolder((IFolder) parent, monitor);
+        }
+        try {
+          if (!file.exists()) {
+            file.create(source, true, monitor);
+          } else {
+            console.println("File: " + file.getLocation().toString() + "\n==>file already exists!");
+          }
+        } catch (CoreException e) {
+          if (file != null) {
+            console.println("File: " + file.getLocation().toString() + "\n==>CoreException: "+e.getMessage());
+          }
+        }
+        if (monitor.isCanceled()) {
+          return Status.CANCEL_STATUS;
+        }
+        work += partOfWork;
+        monitor.worked(work);
+      }
+
+      if (isModal(this)) {
+        // The progress dialog is still open show the message
+        console.reportError();
+      } else {
+        setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
+        //            setProperty(IProgressConstants.ACTION_PROPERTY, getWikisCompletedAction());
+      }
+      return Status.OK_STATUS;
+      //        } catch(CoreException e) {
+      //          return e.getStatus();
+    } finally {
+      monitor.done();
+    }
+    //    return Status.OK_STATUS;
+  }
+
+  public boolean isModal(Job job) {
+    Boolean isModal = (Boolean) job.getProperty(IProgressConstants.PROPERTY_IN_DIALOG);
+    if (isModal == null) {
+      return false;
+    }
+    return isModal.booleanValue();
+  }
+
+}
\ No newline at end of file