Author: yradtsevich
Date: 2012-02-04 13:30:28 -0500 (Sat, 04 Feb 2012)
New Revision: 38431
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/plugin.xml
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/actions/RunBrowserSimAction.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/editors/BrowserSimEditorLauncher.java
Log:
https://issues.jboss.org/browse/JBIDE-10553 : BrowserSim launch via toolbar/command should
guess which url based on current selection/editor
Modified: trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/plugin.xml
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/plugin.xml 2012-02-04
07:09:00 UTC (rev 38430)
+++ trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/plugin.xml 2012-02-04
18:30:28 UTC (rev 38431)
@@ -41,7 +41,7 @@
<extension
point="org.eclipse.ui.editors">
<editor
- extensions="html"
+ extensions="htm, html"
icon="icons/sample.gif"
id="org.jboss.tools.vpe.browsersim.eclipse.editors.BrowserSimLauncher"
launcher="org.jboss.tools.vpe.browsersim.eclipse.editors.BrowserSimEditorLauncher"
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/actions/RunBrowserSimAction.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/actions/RunBrowserSimAction.java 2012-02-04
07:09:00 UTC (rev 38430)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/actions/RunBrowserSimAction.java 2012-02-04
18:30:28 UTC (rev 38431)
@@ -10,10 +10,31 @@
******************************************************************************/
package org.jboss.tools.vpe.browsersim.eclipse.actions;
+import java.lang.reflect.Field;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.browser.BrowserViewer;
+import org.eclipse.ui.internal.browser.WebBrowserEditor;
+import org.eclipse.ui.internal.browser.WebBrowserView;
+import org.jboss.tools.vpe.browsersim.eclipse.Activator;
+import org.jboss.tools.vpe.browsersim.eclipse.editors.BrowserSimEditorLauncher;
import org.jboss.tools.vpe.browsersim.eclipse.util.BrowserSimLauncher;
/**
@@ -23,9 +44,154 @@
@Override
public void run(IAction action) {
- BrowserSimLauncher.launchBrowserSim(null);
+ String url = guessUrl();
+ BrowserSimLauncher.launchBrowserSim(url);
}
+ private String guessUrl() {
+ String url = null;
+
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null) {
+ IWorkbenchPage page = window.getActivePage();
+ if (page != null) {
+ IWorkbenchPart part = page.getActivePart();
+ url = getInternalWebBrowserUrl(part);
+ if (url == null) {
+ IFile activeEditorFile = getEditorFile(part);
+ if (isSupportedFile(activeEditorFile)) {
+ url = toUrl(activeEditorFile);
+ }
+ }
+ }
+
+ if (url == null) {
+ ISelection selection = window.getSelectionService().getSelection();
+ IFile selectedFile = getSelectedFile(selection);
+ if (isSupportedFile(selectedFile)) {
+ url = toUrl(selectedFile);
+ }
+ }
+ }
+
+ return url;
+ }
+
+ private boolean isSupportedFile(IFile file) {
+ if (file != null) {
+ IEditorDescriptor[] editors = PlatformUI.getWorkbench()
+ .getEditorRegistry().getEditors(file.getName());
+
+ for (IEditorDescriptor editor : editors) {
+ if (BrowserSimEditorLauncher.EDITOR_ID.equals(editor.getId())) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * If {@code part} is Internal Web Browser, returns opened URL. Otherwise
+ * returns {@code null}.
+ */
+ private String getInternalWebBrowserUrl(IWorkbenchPart part) {
+ String url = null;
+
+ BrowserViewer browserViewer = null;
+ if (part instanceof IViewPart) {
+ IViewSite viewSite = ((IViewPart) part).getViewSite();
+ if (WebBrowserView.WEB_BROWSER_VIEW_ID.equals(viewSite.getId()) && part
instanceof WebBrowserView) {
+ browserViewer = getFieldValue(part, "viewer");
+ }
+ } else if (part instanceof IEditorPart) {
+ IEditorPart editorPart = (IEditorPart) part;
+ IEditorSite editorSite = editorPart.getEditorSite();
+ if (WebBrowserEditor.WEB_BROWSER_EDITOR_ID.equals(editorSite.getId()) && part
instanceof WebBrowserEditor) {
+ browserViewer = getFieldValue(part, "webBrowser");
+ }
+ }
+
+ if (browserViewer != null) {
+ url = browserViewer.getURL();
+ }
+
+ return url;
+ }
+
+ /**
+ * If {@code part} is Internal Web Browser, returns opened URL. Otherwise
+ * returns {@code null}.
+ */
+ private IFile getEditorFile(IWorkbenchPart part) {
+ IFile file = null;
+
+ if (part instanceof IEditorPart) {
+ IEditorPart editorPart = (IEditorPart) part;
+
+ if (editorPart.getEditorInput() instanceof IFileEditorInput) {
+ IFileEditorInput fileEditorInput = (IFileEditorInput) editorPart.getEditorInput();
+ file = fileEditorInput.getFile();
+ }
+ }
+
+ return file;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <T> T getFieldValue(Object object, String name) {
+ T fieldValue = null;
+ try {
+ Field field = object.getClass().getDeclaredField(name);
+ field.setAccessible(true);
+ fieldValue = (T) field.get(object);
+ } catch (SecurityException e) {
+ Activator.logError(e.getMessage(), e);
+ } catch (NoSuchFieldException e) {
+ Activator.logError(e.getMessage(), e);
+ } catch (IllegalArgumentException e) {
+ Activator.logError(e.getMessage(), e);
+ } catch (IllegalAccessException e) {
+ Activator.logError(e.getMessage(), e);
+ }
+
+ return fieldValue;
+ }
+
+ /**
+ * Returns selected file, if a file is contained in the {@code selection}.
+ * Otherwise returns {@code null}.
+ */
+ private IFile getSelectedFile(ISelection selection) {
+ IFile file = null;
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection ssel = (IStructuredSelection) selection;
+ Object firstSelectedElement = ssel.getFirstElement();
+ file = (IFile) Platform.getAdapterManager().getAdapter(firstSelectedElement,
+ IFile.class);
+
+ if (file == null) {
+ if (firstSelectedElement instanceof IAdaptable) {
+ file = (IFile) ((IAdaptable)
firstSelectedElement).getAdapter(IFile.class);
+ }
+ }
+ }
+ return file;
+ }
+
+ private String toUrl(IFile file) {
+ String url = null;
+
+ if (file != null) {
+ IPath location = file.getLocation();
+ if (location != null) {
+ url = location.toFile().toURI().toASCIIString();
+ }
+ }
+ return url;
+ }
+
@Override
public void selectionChanged(IAction action, ISelection selection) {
}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/editors/BrowserSimEditorLauncher.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/editors/BrowserSimEditorLauncher.java 2012-02-04
07:09:00 UTC (rev 38430)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/editors/BrowserSimEditorLauncher.java 2012-02-04
18:30:28 UTC (rev 38431)
@@ -19,6 +19,7 @@
* @author "Yahor Radtsevich (yradtsevich)"
*/
public class BrowserSimEditorLauncher implements IEditorLauncher {
+ public static final String EDITOR_ID =
"org.jboss.tools.vpe.browsersim.eclipse.editors.BrowserSimLauncher";
//$NON-NLS-1$
@Override
public void open(IPath file) {