Open PHP Help Online Manual in the browser / add other http querie for google and...
[phpeclipse.git] / net.sourceforge.phpeclipse.phphelp / src / net / sourceforge / phpdt / httpquery / AbstractHTTPQueryAction.java
diff --git a/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/httpquery/AbstractHTTPQueryAction.java b/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/httpquery/AbstractHTTPQueryAction.java
new file mode 100644 (file)
index 0000000..6d36486
--- /dev/null
@@ -0,0 +1,138 @@
+package net.sourceforge.phpdt.httpquery;
+
+import net.sourceforge.phpdt.httpquery.config.Configuration;
+import net.sourceforge.phpeclipse.webbrowser.views.BrowserView;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IEditorActionDelegate;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+
+public abstract class AbstractHTTPQueryAction implements IEditorActionDelegate {
+
+       private AbstractTextEditor editor;
+
+       public AbstractHTTPQueryAction() {
+               super();
+       }
+
+       abstract protected Configuration getConfiguration();
+
+       public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+               if (targetEditor != null && (targetEditor instanceof AbstractTextEditor)) {
+                       editor = (AbstractTextEditor) targetEditor;
+               }
+       }
+
+       public void run(IAction action) {
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (editor == null) {
+                       IEditorPart targetEditor = window.getActivePage().getActiveEditor();
+                       if (targetEditor != null && (targetEditor instanceof AbstractTextEditor)) {
+                               editor = (AbstractTextEditor) targetEditor;
+                       }
+               }
+
+               if (window != null) {
+                       IWorkbenchPage page = window.getActivePage();
+                       try {
+                               IViewPart part = page.findView(BrowserView.ID_BROWSER);
+                               if (part == null) {
+                                       part = page.showView(BrowserView.ID_BROWSER);
+                               } else {
+                                       page.bringToTop(part);
+                               }
+                               Configuration config = getConfiguration();
+                               String templateString = generateUrl(config, config.getURL());
+                               if (templateString != null && !templateString.equals("")) {
+                                       ((BrowserView) part).setUrl(templateString);
+                               }
+                       } catch (Exception e) {
+                       }
+               }
+       }
+
+       public void selectionChanged(IAction action, ISelection selection) {
+       }
+
+       public IDocument getDocument() {
+               IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
+               return doc;
+       }
+
+       public static String getSelectedText(AbstractTextEditor editor, IDocument document, int initialPos) {
+               try {
+                       int pos = initialPos;
+                       int line = document.getLineOfOffset(pos);
+                       int start = document.getLineOffset(line);
+                       int end = start + document.getLineInformation(line).getLength();
+
+                       /*
+                        * The line does not include \n or \r so pos can be > end. Making pos =
+                        * end in this case is safe for the purposes of determining the TextRegion
+                        * at the cursor position
+                        */
+                       if (pos > end) {
+                               pos = end;
+                       }
+
+                       int offsetInLine = pos - start;
+                       String word = document.get(start, end - start);
+                       int wordlen = word.length();
+                       int textStart = -1;
+                       int textEnd = -1;
+
+                       for (int i = offsetInLine; i < wordlen; i++) {
+                               if (!Character.isJavaIdentifierPart(word.charAt(i))) {
+                                       textEnd = i;
+                                       break;
+                               }
+                       }
+                       for (int i = offsetInLine; i >= 0; i--) {
+                               if (!Character.isJavaIdentifierPart(word.charAt(i))) {
+                                       textStart = i + 1;
+                                       break;
+                               }
+                       }
+                       if (textStart != (-1) && textEnd != (-1) && textStart < textEnd) {
+                               return new String(word.toCharArray(), textStart, textEnd - textStart);
+                       }
+               } catch (Exception e) {
+
+               }
+               return null;
+       }
+
+       public String generateUrl(Configuration config, String template) {
+               IDocument doc = getDocument();
+               ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection();
+               int pos = selection.getOffset();
+               int len = selection.getLength();
+               String wikiTitle;
+               if (len > 0) {
+                       try {
+                               wikiTitle = doc.get(pos, len);
+                       } catch (BadLocationException e) {
+                               wikiTitle = null;
+                       }
+               } else {
+                       wikiTitle = getSelectedText(editor, doc, pos);
+               }
+
+               if (wikiTitle != null && !wikiTitle.equals("")) {
+                       template = template.replaceAll("\\$text.selection", wikiTitle);
+                       wikiTitle = wikiTitle.replaceAll("_", "-");
+                       template = template.replaceAll("\\$php.selection", wikiTitle);
+                       return template;
+               }
+               return null;
+       }
+}
\ No newline at end of file