1b384c7aeeb85046ae2934f62dc9b1cdda3c613a
[phpeclipse.git] /
1 package net.sourceforge.phpeclipse.wiki.actions;
2 import java.io.ByteArrayInputStream;
3
4 import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
5 import net.sourceforge.phpeclipse.wiki.preferences.Util;
6
7 import org.eclipse.core.resources.IContainer;
8 import org.eclipse.core.resources.IFile;
9 import org.eclipse.core.resources.IFolder;
10 import org.eclipse.core.resources.WorkspaceJob;
11 import org.eclipse.core.runtime.CoreException;
12 import org.eclipse.core.runtime.IProgressMonitor;
13 import org.eclipse.core.runtime.IStatus;
14 import org.eclipse.core.runtime.Status;
15 import org.eclipse.core.runtime.jobs.Job;
16 import org.eclipse.ui.progress.IProgressConstants;
17
18 public class CreateFilesJob extends WorkspaceJob {
19   IFile[] files;
20
21   public CreateFilesJob(IFile[] files) {
22     super("Create Wiki Files Job");
23     this.files = files;
24   }
25
26   public IStatus runInWorkspace(IProgressMonitor monitor) {
27     try {
28       monitor.beginTask("Create Wiki Files", 100);
29       IFile file;
30       int partOfWork = 100 / files.length;
31       int work = 0;
32       String newText = WikiEditorPlugin.AUTOMATICALLY_CREATED;
33       byte[] buffer = newText.getBytes();
34       ByteArrayInputStream source = new ByteArrayInputStream(buffer);
35       ProblemConsole console = new ProblemConsole();
36       for (int i = 0; i < files.length; i++) {
37         file = files[i];
38
39         IContainer parent = file.getParent();
40         if (parent instanceof IFolder && (!((IFolder) parent).exists())) {
41           Util.createFolder((IFolder) parent, monitor);
42         }
43         try {
44           if (!file.exists()) {
45             monitor.subTask("Create File: "+file.getLocation().toString());
46             file.create(source, true, monitor);
47           } else {
48             String message = "File: " + file.getLocation().toString() + "\n==>file already exists!";
49             monitor.subTask(message);
50             console.println(message);
51           }
52         } catch (CoreException e) {
53           if (file != null) {
54             console.println("File: " + file.getLocation().toString() + "\n==>CoreException: "+e.getMessage());
55           }
56         }
57         if (monitor.isCanceled()) {
58           return Status.CANCEL_STATUS;
59         }
60         work += partOfWork;
61         monitor.worked(work);
62       }
63
64       if (isModal(this)) {
65         // The progress dialog is still open show the message
66         console.reportError();
67       } else {
68         setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
69         //            setProperty(IProgressConstants.ACTION_PROPERTY, getWikisCompletedAction());
70       }
71       return Status.OK_STATUS;
72       //        } catch(CoreException e) {
73       //          return e.getStatus();
74     } finally {
75       monitor.done();
76     }
77     //    return Status.OK_STATUS;
78   }
79
80   public boolean isModal(Job job) {
81     Boolean isModal = (Boolean) job.getProperty(IProgressConstants.PROPERTY_IN_DIALOG);
82     if (isModal == null) {
83       return false;
84     }
85     return isModal.booleanValue();
86   }
87
88 }