package org.radrails.rails.ui.browser; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.swt.browser.TitleEvent; import org.eclipse.swt.browser.TitleListener; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.internal.browser.BrowserViewer; import org.eclipse.ui.internal.browser.WebBrowserEditorInput; import org.radrails.rails.internal.ui.browser.BrowserEditor; import org.radrails.rails.internal.ui.browser.CoreBrowserLocationListener; import org.radrails.rails.ui.RailsUIPlugin; public class BrowserUtil { public static final IEditorPart openBrowser(String url) throws PartInitException, MalformedURLException { IEditorPart part = IDE.openEditor(getActivePage(), getInput(url), BrowserEditor.ID); if (part instanceof BrowserEditor) { final BrowserEditor browser = (BrowserEditor) part; browser.getBrowser().addTitleListener(new TitleListener() { public void changed(TitleEvent event) { browser.getBrowser().execute(RailsUIPlugin.getInstance().getFileContents("scripts/link.js")); } }); browser.getBrowser().addLocationListener(new CoreBrowserLocationListener()); } return part; } public static void openOrActivateBrowser(String url) throws PartInitException, MalformedURLException { IEditorPart editor = getActivePage().findEditor(getInput(url)); if (editor != null) { getActivePage().activate(editor); // TODO reload/refresh? } IEditorReference[] refs = getActivePage().getEditorReferences(); for (int i = 0; i < refs.length; i++) { IEditorInput input = refs[i].getEditorInput(); if (input instanceof WebBrowserEditorInput) { WebBrowserEditorInput webInput = (WebBrowserEditorInput) input; String blah = webInput.getURL().toString(); if (blah.equals(url)) { editor = refs[i].getEditor(false); if (editor != null) { getActivePage().activate(editor);// TODO reload/refresh? return; } } } } // if the internal browser isn't open yet, do so BrowserUtil.openBrowser(url); } private static WebBrowserEditorInput getInput(String url) throws MalformedURLException { return new WebBrowserEditorInput(new URL(url), BrowserViewer.BUTTON_BAR | BrowserViewer.LOCATION_BAR); } private static IWorkbenchPage getActivePage() { return PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getActivePage(); } }