0fa5c0d6d15454116ffba0a5706a0913b700c932
[phpeclipse.git] /
1 package net.sourceforge.phpeclipse.wiki.actions;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5
6 import org.eclipse.core.resources.IFile;
7 import org.eclipse.core.runtime.jobs.Job;
8 import org.eclipse.jface.text.IDocument;
9 import org.eclipse.ui.IFileEditorInput;
10
11 public final class CreateFilesFromLinksEditorAction extends OpenWikiLinkEditorAction {
12
13   public void openWikiLinkOnSelection() {
14     IDocument doc = getDocument();
15     ArrayList startPositionList = getLinksStartingPosition(doc);
16
17     HashSet wikiNames = new HashSet();
18     ArrayList filesList = new ArrayList();
19     ArrayList wikiList = new ArrayList();
20     String wikiTitle;
21     Integer posInteger;
22     IFile currentFile = ((IFileEditorInput) editor.getEditorInput()).getFile();
23
24     for (int i = 0; i < startPositionList.size(); i++) {
25       posInteger = (Integer) startPositionList.get(i);
26       wikiTitle = getWikiTitle(editor, doc, posInteger.intValue());
27
28       if (wikiTitle != null && !wikiTitle.equals("")) {
29         if (!wikiNames.contains(wikiTitle)) {
30           IFile file = getWikiFile(currentFile, wikiTitle);
31           filesList.add(file);
32           wikiList.add(wikiTitle);
33           wikiNames.add(wikiTitle);
34         }
35       }
36     }
37
38     if (filesList.size() > 0) {
39       IFile[] files = new IFile[filesList.size()];
40       String[] wikiTitles = new String[filesList.size()];
41       filesList.toArray(files);
42       wikiList.toArray(wikiTitles);
43
44       Job job = new CreateFilesJob(files, wikiTitles);
45       //        job.setRule(createRule(files));
46       job.setRule(null);
47       job.setUser(true);
48       job.schedule();
49
50     }
51   }
52
53   /**
54    * @param doc
55    * @return
56    */
57   private ArrayList getLinksStartingPosition(IDocument doc) {
58     ArrayList startPositionList = new ArrayList();
59     char[] text = doc.get().toCharArray();
60     try {
61       char ch = ' ';
62       int i = 0;
63       int startPos = -1;
64       while (true) {
65         ch = text[i++];
66         switch (ch) {
67         case '[':
68           ch = text[i++];
69           if (ch == '[') {
70             startPos = i;
71           }
72           break;
73         case ']':
74           ch = text[i++];
75           if (ch == ']' && startPos != (-1)) {
76             startPositionList.add(new Integer(startPos));
77             startPos = -1;
78           }
79           break;
80         case '\r':
81         case '\n':
82           startPos = -1;
83           break;
84         }
85       }
86     } catch (IndexOutOfBoundsException e) {
87       // ignore it
88     }
89     return startPositionList;
90   }
91 }