package net.sourceforge.phpeclipse.wiki.actions; import java.util.ArrayList; import java.util.HashSet; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.IFileEditorInput; public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAction { public void openWikiLinkOnSelection() { IDocument doc = getDocument(); // ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection(); // int pos = selection.getOffset(); ArrayList startPositionList = new ArrayList(); char[] text = doc.get().toCharArray(); try { char ch = ' '; int i = 0; int startPos = -1; while (true) { ch = text[i++]; switch (ch) { case '[': ch = text[i++]; if (ch == '[') { startPos = i; } break; case ']': ch = text[i++]; if (ch == ']' && startPos != (-1)) { startPositionList.add(new Integer(startPos)); } break; case '\r': case '\n': startPos = -1; break; } } } 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); // } } // 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) { // } // } // } }