X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesFromLinksEditorAction.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesFromLinksEditorAction.java index 1aa69ff..32a6ae0 100644 --- a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesFromLinksEditorAction.java +++ b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/CreateFilesFromLinksEditorAction.java @@ -1,19 +1,105 @@ package net.sourceforge.phpeclipse.wiki.actions; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; +import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; + 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.ui.IFileEditorInput; +import org.eclipse.ui.dialogs.ListSelectionDialog; +import org.eclipse.ui.internal.dialogs.ListContentProvider; public final class CreateFilesFromLinksEditorAction 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(); - // ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection(); - // int pos = selection.getOffset(); + ArrayList startPositionList = getLinksStartingPosition(doc); + + 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++) { + posInteger = (Integer) startPositionList.get(i); + wikiTitle = getWikiTitle(editor, doc, posInteger.intValue()); + + if (wikiTitle != null && !wikiTitle.equals("")) { + if (!wikiNames.contains(wikiTitle)) { + IFile file = getWikiFile(currentFile, wikiTitle); + filesList.add(new WikiFile(file, wikiTitle)); +// wikiList.add(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(); + } + } + + } + } + + /** + * @param doc + * @return + */ + private ArrayList getLinksStartingPosition(IDocument doc) { ArrayList startPositionList = new ArrayList(); char[] text = doc.get().toCharArray(); try { @@ -33,6 +119,7 @@ public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAc ch = text[i++]; if (ch == ']' && startPos != (-1)) { startPositionList.add(new Integer(startPos)); + startPos = -1; } break; case '\r': @@ -44,49 +131,6 @@ public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAc } catch (IndexOutOfBoundsException e) { // ignore it } - HashSet wikiNames = new HashSet(); - ArrayList filesList = new ArrayList(); - String str; - Integer posInteger; - IFile currentFile = ((IFileEditorInput) editor.getEditorInput()).getFile(); - for (int i = 0; i < startPositionList.size(); i++) { - posInteger = (Integer) startPositionList.get(i); - str = getWikiString(editor, doc, posInteger.intValue()); - - if (str != null && !str.equals("")) { - if (!wikiNames.contains(str)) { - IFile file = getWikiFile(currentFile, str); - filesList.add(file); - wikiNames.add(str); - } - } - } - - if (filesList.size() > 0) { - IFile[] files = new IFile[filesList.size()]; - filesList.toArray(files); - - Job job = new CreateFilesJob(files); - // job.setRule(createRule(files)); - job.setRule(null); - job.setUser(true); - job.schedule(); - } -// -// -// Iterator iter = wikiNames.iterator(); -// while (iter.hasNext()) { -// openWikiFile(file, (String) iter.next(), false); -// } + return startPositionList; } - -// public void openWikiFile(IFile cfile, String word, boolean openEditor) { -// if (word != null && !word.equals("")) { -// IFile file = getWikiFile(cfile, word); -// try { -// createNewFileIfNeeded(file, word); -// } catch (Exception e) { -// } -// } -// } } \ No newline at end of file