X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/RefreshJob.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/RefreshJob.java index 49dec5b..cc38239 100644 --- a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/RefreshJob.java +++ b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/RefreshJob.java @@ -13,6 +13,8 @@ import net.sourceforge.phpeclipse.wiki.actions.mediawiki.exceptions.MethodExcept import net.sourceforge.phpeclipse.wiki.actions.mediawiki.exceptions.UnexpectedAnswerException; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import net.sourceforge.phpeclipse.wiki.preferences.Util; +import net.sourceforge.phpeclipse.wiki.xml.Page; +import net.sourceforge.phpeclipse.wiki.xml.XStreamManager; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; @@ -45,51 +47,52 @@ public class RefreshJob extends WorkspaceJob { public IStatus runInWorkspace(IProgressMonitor monitor) { ProblemConsole console = new ProblemConsole(); IFile file = null; + try { - monitor.beginTask("Refresh Wikis", 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 mwc = new MediaWikiConnector(); - String url = actionURL; - if (url == null) { - url = configuration.getActionUrl() + "/" + configuration.getSpecialNs() + ":Export"; - } - // get a list of Parsed elements - ArrayList list = mwc.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) { - updateFileContent(console, file, parsed, 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()); @@ -109,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) { @@ -127,7 +220,7 @@ public class RefreshJob extends WorkspaceJob { return isModal.booleanValue(); } - private static void updateFileContent(ProblemConsole console, IFile file, Parsed parsed, String body, IWikipedia wp, + private static void updateFileContent(ProblemConsole console, IFile file, Page page, String body, IWikipedia wp, IProgressMonitor monitor) { try { if (file.exists()) { @@ -156,25 +249,23 @@ public class RefreshJob extends WorkspaceJob { Util.createFolder((IFolder) parent, monitor); } try { - String xmlData = parsed.getXmlData(); - String charSet = "UTF-8"; - StringBuffer buf = new StringBuffer(); - int index = xmlData.indexOf(""); - if (index<0) { - console.println("File: " + xmlFile.getLocation().toString() + "\n==>Couldn't create xml file - tag not found"); - return; - } - xmlData = xmlData.substring(index); -// buf.setLength(xmlData.length() + WikiEditorPlugin.XML_START_1.length() + WikiEditorPlugin.XML_START_2.length() -// + WikiEditorPlugin.XML_END.length() + charSet.length()); -// - buf.append(WikiEditorPlugin.XML_START_1); - buf.append(charSet); - buf.append(WikiEditorPlugin.XML_START_2); - buf.append(xmlData); - buf.append(WikiEditorPlugin.XML_END); - - byte[] buffer = buf.toString().getBytes(); + // String xmlData = parsed.getXmlData(); + // String charSet = "UTF-8"; + // StringBuffer buf = new StringBuffer(); + // int index = xmlData.indexOf(""); + // if (index<0) { + // console.println("File: " + xmlFile.getLocation().toString() + "\n==>Couldn't create xml file - tag not found"); + // return; + // } + // xmlData = xmlData.substring(index); + // buf.append(WikiEditorPlugin.XML_START_1); + // buf.append(charSet); + // buf.append(WikiEditorPlugin.XML_START_2); + // buf.append(xmlData); + // buf.append(WikiEditorPlugin.XML_END); + + // byte[] buffer = buf.toString().getBytes(); + byte[] buffer = XStreamManager.toXML(page).getBytes(); ByteArrayInputStream source = new ByteArrayInputStream(buffer); if (!xmlFile.exists()) { xmlFile.create(source, true, monitor); @@ -188,8 +279,8 @@ public class RefreshJob extends WorkspaceJob { } } catch (UnsupportedEncodingException e) { console.println("File: " + file.getLocation().toString() + "\n==>UnsupportedEncodingException: " + e.getMessage()); - } catch (CoreException e) { - console.println("File: " + file.getLocation().toString() + "\n==>CoreException: " + e.getMessage()); + } catch (Exception e) { + console.println("File: " + file.getLocation().toString() + "\n==>Exception: " + e.getMessage()); } } } \ No newline at end of file