get category
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / mediawiki / RefreshJob.java
index bda1e0a..cc38239 100644 (file)
@@ -42,60 +42,57 @@ public class RefreshJob extends WorkspaceJob {
     this.files = files;
     this.configuration = configuration;
     this.actionURL = actionURL;
-  } 
+  }
 
   public IStatus runInWorkspace(IProgressMonitor monitor) {
     ProblemConsole console = new ProblemConsole();
     IFile file = null;
+
     try {
-      monitor.beginTask("Download Wiki Articles: ", 100);
+      int totalWork = files.length;
+      if (totalWork <= 0) {
+        totalWork = 100;
+      }
+      monitor.beginTask("Download Wiki Articles: ", totalWork);
       //      ArrayList wikiTitles = new ArrayList();
       //      for (int i = 0; i < files.length; i++) {
       //        wikiTitles.add( Util.getReadableWikiName(files[i]) );
       //      }
       StringBuffer buffer = new StringBuffer();
       HashMap map = new HashMap();
+      MediaWikiConnector mwConnector = new MediaWikiConnector();
       String wikiTitle;
+      int titleCounter = 0;
       for (int i = 0; i < files.length; i++) {
-        wikiTitle = Util.getReadableWikiName(files[i]);
+        file = files[i];
+        wikiTitle = createWikiTitle(file, i);
         buffer.append(wikiTitle);
-        map.put(wikiTitle, files[i]);
+        titleCounter++;
+        map.put(wikiTitle, file);
         if (i != files.length - 1) {
           buffer.append("\n");
         }
-      }
-      MediaWikiConnector mwConnector = new MediaWikiConnector();
-      String url = actionURL;
-      if (url == null) {
-        url = configuration.getActionUrl() + "/" + configuration.getSpecialNs() + ":Export";
-      }
-      // get a list of Parsed elements
-      monitor.subTask("Downloading (XML Import)");
-      ArrayList list = mwConnector.loadXML(configuration, url, buffer.toString());
-      String body;
-
-      for (int i = 0; i < list.size(); i++) {
-        Parsed parsed = (Parsed) list.get(i);
-        wikiTitle = parsed.getTitle();
-        if (wikiTitle != null) {
-          body = parsed.getBody();
-          if (body != null) {
-            file = (IFile) map.get(wikiTitle);
-            if (file != null) {
-              // rearrange parsed data into a page for XStream hamdling:
-              Page page = new Page(parsed.getDateTimestamp(), wikiTitle, body);
-              monitor.subTask("Modify file: " + file.getLocation().toString());
-              updateFileContent(console, file, page, body, configuration, monitor);
-            }
+        if (i % 5 == 0) {
+          // read only 5 files at a time
+          IStatus status = readWikisFromBuffer(mwConnector, buffer, map, monitor, console);
+          if (status.equals(Status.CANCEL_STATUS)) {
+            return Status.CANCEL_STATUS;
           }
+          buffer = new StringBuffer();
+          titleCounter = 0;
         }
-        if (monitor.isCanceled()) {
+      }
+      if (titleCounter > 0) {
+        IStatus status = readWikisFromBuffer(mwConnector, buffer, map, monitor, console);
+        if (status.equals(Status.CANCEL_STATUS)) {
           return Status.CANCEL_STATUS;
         }
+        buffer = new StringBuffer();
+        titleCounter = 0;
       }
+
       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());
@@ -115,16 +112,106 @@ public class RefreshJob extends WorkspaceJob {
       } else {
         console.println("HTTP-MethodException: " + e.getMessage());
       }
+    } catch (InterruptedException e) {
+      if (file != null) {
+        console.println("File: " + file.getLocation().toString() + "\n==>InterruptedException: " + e.getMessage());
+      } else {
+        console.println("InterruptedException: " + e.getMessage());
+      }
     } finally {
       monitor.done();
     }
     if (isModal(this)) {
       // The progress dialog is still open show the message
-      console.reportError();
     }
     return Status.OK_STATUS;
   }
 
+  /**
+   * @param buffer
+   * @param map
+   * @param monitor
+   * @param console
+   * @param file
+   * @return
+   * @throws UnexpectedAnswerException
+   * @throws MethodException
+   */
+  private IStatus readWikisFromBuffer(MediaWikiConnector mwConnector, StringBuffer buffer, HashMap map, IProgressMonitor monitor,
+      ProblemConsole console) throws UnexpectedAnswerException, InterruptedException, MethodException {
+    String wikiTitle;
+    boolean showConsole = WikiEditorPlugin.getDefault().getPreferenceStore().getBoolean(WikiEditorPlugin.CONSOLE_OUTPUT);
+
+    String url = actionURL;
+    if (url == null) {
+      url = configuration.getActionUrl() + "/" + configuration.getSpecialNs() + ":Export";
+    }
+    // get a list of Parsed elements
+    monitor.subTask("Downloading (XML Import)");
+    if (showConsole) {
+      console.println("Downloading (XML Import):\n" + buffer.toString());
+    }
+    ArrayList list = mwConnector.loadXML(configuration, url, buffer.toString());
+    String body;
+    IFile file = null;
+    for (int i = 0; i < list.size(); i++) {
+      Parsed parsed = (Parsed) list.get(i);
+      wikiTitle = parsed.getTitle();
+      if (wikiTitle != null) {
+        body = parsed.getBody();
+        if (body != null) {
+          file = (IFile) map.get(wikiTitle);
+          if (file != null) {
+            // rearrange parsed data into a page for XStream hamdling:
+            Page page = new Page(parsed.getDateTimestamp(), wikiTitle, body);
+            monitor.subTask("Modify file: " + file.getLocation().toString());
+            if (showConsole) {
+              console.println("Update file: " + file.getLocation().toString());
+            }
+            updateFileContent(console, file, page, body, configuration, monitor);
+          }
+        }
+      }
+      monitor.worked(1);
+      if (monitor.isCanceled()) {
+        return Status.CANCEL_STATUS;
+      }
+    }
+
+    return Status.OK_STATUS;
+  }
+
+  /**
+   * @param file
+   * @param wikiTitle
+   * @param i
+   * @return
+   */
+  private String createWikiTitle(IFile file, int i) {
+    String wikiTitle = null;
+    String srcBasePath = Util.getWikiTextsPath(file);
+    String binBasePath = Util.getProjectsWikiOutputPath(file.getProject(), WikiEditorPlugin.HTML_OUTPUT_PATH);
+
+    String fileXMLName = Util.getXMLFileName(file, binBasePath, srcBasePath);
+    IPath path = new Path(fileXMLName);
+    IFile xmlFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
+    if (xmlFile.exists()) {
+      try {
+        Page page = XStreamManager.fromXML(xmlFile.getContents());
+        if (page != null) {
+          wikiTitle = page.getTitle();
+        }
+        //                timestamp = XMLReader.getDateTimestamp(xmlFile.getContents());
+      } catch (Exception e2) {
+      }
+    }
+    if (wikiTitle == null) {
+      // if no XML file exists we create the name from the filename
+      wikiTitle = Util.getReadableWikiName(files[i]);
+    }
+    return wikiTitle;
+  }
+
   public boolean isModal(Job job) {
     Boolean isModal = (Boolean) job.getProperty(IProgressConstants.PROPERTY_IN_DIALOG);
     if (isModal == null) {