package net.sourceforge.phpeclipse.wiki.actions.category; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import net.sourceforge.phpeclipse.wiki.actions.CreateFilesJob; import net.sourceforge.phpeclipse.wiki.actions.OpenWikiLinkEditorAction; import net.sourceforge.phpeclipse.wiki.actions.mediawiki.connect.Loaded; import net.sourceforge.phpeclipse.wiki.actions.mediawiki.connect.MediaWikiConnector; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import net.sourceforge.phpeclipse.wiki.preferences.Util; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.dialogs.ListSelectionDialog; import org.eclipse.ui.internal.dialogs.ListContentProvider; public final class CreateFilesFromCategoryEditorAction extends OpenWikiLinkEditorAction { class WikiFile implements Comparable { IFile file; String wikiTitle; public WikiFile(IFile f, String title) { file = f; wikiTitle = title; } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { return wikiTitle + " - " + file.getProjectRelativePath().toString(); } /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(Object o) { return wikiTitle.compareTo(((WikiFile)o).wikiTitle); } } public void openWikiLinkOnSelection() { IDocument doc = getDocument(); Shell shell = Util.findShell(); if (shell == null) { return; } CategoryDialog dialog = new CategoryDialog(shell);//$NON-NLS-1$ dialog.open(); String category = dialog.getCategory(); // TODO: this doesn#t work at the moment: MediaWikiConnector connector = new MediaWikiConnector(); Loaded page = null; // connector.loadCategory(actionUrl, wikipedia.getCharSet(), "plog4u.org bot"); ParseCategory pc = new ParseCategory(); pc.parseCategory(page.getContent().getBody()); ArrayList startPositionList = pc.getTitleList(); HashSet wikiNames = new HashSet(); ArrayList filesList = new ArrayList(); ArrayList wikiList = new ArrayList(); String wikiTitle; Integer posInteger; IFile currentFile = ((IFileEditorInput) editor.getEditorInput()).getFile(); for (int i = 0; i < startPositionList.size(); i++) { wikiTitle = (String) startPositionList.get(i); if (wikiTitle != null && !wikiTitle.equals("")) { if (!wikiNames.contains(wikiTitle)) { IFile file = getWikiFile(currentFile, wikiTitle); if (!file.exists()) { filesList.add(new WikiFile(file, wikiTitle)); } wikiNames.add(wikiTitle); } } } if (filesList.size() > 0) { Collections.sort(filesList); ListSelectionDialog listSelectionDialog = new ListSelectionDialog(WikiEditorPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow().getShell(), filesList, new ListContentProvider(), new LabelProvider(), "Select the links for file creation:"); listSelectionDialog.setTitle("Links found in this article"); if (listSelectionDialog.open() == Window.OK) { Object[] locations = listSelectionDialog.getResult(); if (locations.length > 0) { IFile[] files = new IFile[locations.length]; String[] wikiTitles = new String[locations.length]; for (int i = 0; i < files.length; i++) { files[i] = ((WikiFile) locations[i]).file; wikiTitles[i] = ((WikiFile) locations[i]).wikiTitle; } Job job = new CreateFilesJob(files, wikiTitles); // job.setRule(createRule(files)); job.setRule(null); job.setUser(true); job.schedule(); } } } } }