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