RefreshJob loads max 10 articles at a time; there's a delay of 1 second for the next...
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / CreateFilesFromLinksEditorAction.java
index 5f6739b..0fa5c0d 100644 (file)
@@ -12,48 +12,19 @@ public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAc
 
   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
-    }
+    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);
@@ -61,35 +32,60 @@ public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAc
           wikiList.add(wikiTitle);
           wikiNames.add(wikiTitle);
         }
-      } 
+      }
     }
-    
+
     if (filesList.size() > 0) {
       IFile[] files = new IFile[filesList.size()];
       String[] wikiTitles = new String[filesList.size()];
       filesList.toArray(files);
       wikiList.toArray(wikiTitles);
+
       Job job = new CreateFilesJob(files, wikiTitles);
       //        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) {
-//      }
-//    } 
-//  }
+  /**
+   * @param doc
+   * @return
+   */
+  private ArrayList getLinksStartingPosition(IDocument doc) {
+    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));
+            startPos = -1;
+          }
+          break;
+        case '\r':
+        case '\n':
+          startPos = -1;
+          break;
+        }
+      }
+    } catch (IndexOutOfBoundsException e) {
+      // ignore it
+    }
+    return startPositionList;
+  }
 }
\ No newline at end of file