initial contribution
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / httpquery / AbstractHTTPQueryAction.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/httpquery/AbstractHTTPQueryAction.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/httpquery/AbstractHTTPQueryAction.java
new file mode 100644 (file)
index 0000000..32e155c
--- /dev/null
@@ -0,0 +1,96 @@
+package net.sourceforge.phpeclipse.wiki.actions.httpquery;
+
+import java.net.URL;
+import java.text.BreakIterator;
+
+import net.sourceforge.phpeclipse.webbrowser.views.BrowserView;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+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.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+public abstract class AbstractHTTPQueryAction implements IEditorActionDelegate {
+
+  private IEditorPart targetEditor;
+
+  public AbstractHTTPQueryAction() {
+    super();
+  }
+
+  public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+    this.targetEditor = targetEditor;
+  }
+
+  abstract protected String getUrl(String selection);
+
+  public void run(IAction action) {
+    String selection = findSelectedText();
+    if (selection != null && selection.trim().length() > 0) {
+      URL url;
+      IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+      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);
+          }
+          String urlStr = getUrl(selection);
+          if (urlStr != null && !urlStr.equals("")) {
+            ((BrowserView) part).setUrl(urlStr);
+          }
+        } catch (Exception e) {
+        }
+      }
+    }
+  }
+
+  public void selectionChanged(IAction action, ISelection selection) {
+  }
+
+  protected String findSelectedText() {
+    String selectedText = null;
+    ITextSelection textSelection = (ITextSelection) targetEditor.getEditorSite().getSelectionProvider().getSelection();
+
+    selectedText = textSelection.getText();
+    if (selectedText == null || selectedText.trim().length() == 0) {
+      selectedText = findWord(textSelection);
+    }
+    return selectedText;
+  }
+
+  private String findWord(ITextSelection textSelection) {
+    IDocumentProvider documentProvider = ((ITextEditor) targetEditor).getDocumentProvider();
+    IDocument document = documentProvider.getDocument(targetEditor.getEditorInput());
+    int caretPosition = textSelection.getOffset();
+    try {
+      IRegion line = document.getLineInformation(document.getLineOfOffset(caretPosition));
+      String currentLine = document.get(line.getOffset(), line.getLength());
+      int positionInLine = caretPosition - line.getOffset();
+      return findWordAt(positionInLine, currentLine);
+    } catch (Exception e) {
+    }
+    return null;
+  }
+
+  private String findWordAt(int pos, String source) {
+    BreakIterator boundary = BreakIterator.getWordInstance();
+    boundary.setText(source);
+    int end = boundary.following(pos);
+    int start = boundary.previous();
+    return source.substring(start, end);
+  }
+
+}
\ No newline at end of file