--- /dev/null
+package net.sourceforge.phpeclipse.webbrowser.internal;
+
+import java.net.URL;
+
+import net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowser;
+import net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowserWorkingCopy;
+
+import org.eclipse.swt.program.Program;
+import org.eclipse.ui.IMemento;
+/**
+ *
+ */
+public class ExternalWebBrowser implements IExternalWebBrowser {
+ private static final String MEMENTO_NAME = "name";
+ private static final String MEMENTO_LOCATION = "location";
+ private static final String MEMENTO_PARAMETERS = "parameters";
+
+ protected String name;
+ protected String location;
+ protected String parameters;
+
+ /* (non-Javadoc)
+ * @see net.sourceforge.phpeclipse.webbrowser.IWebBrowser#getName()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /* (non-Javadoc)
+ * @see net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowser#getLocation()
+ */
+ public String getLocation() {
+ return location;
+ }
+
+ /* (non-Javadoc)
+ * @see net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowser#getParameters()
+ */
+ public String getParameters() {
+ return parameters;
+ }
+
+ public void delete() {
+ BrowserManager.getInstance().removeWebBrowser(this);
+ }
+
+ public boolean isWorkingCopy() {
+ return false;
+ }
+
+ public IExternalWebBrowserWorkingCopy getWorkingCopy() {
+ return new ExternalWebBrowserWorkingCopy(this);
+ }
+
+ protected void setInternal(IExternalWebBrowser browser) {
+ name = browser.getName();
+ location = browser.getLocation();
+ parameters = browser.getParameters();
+ }
+
+ /* (non-Javadoc)
+ * @see net.sourceforge.phpeclipse.webbrowser.IWebBrowser#openURL(java.net.URL)
+ */
+ public void openURL(URL url) {
+ String urlText = WebBrowserPreference.getHomePageURL();
+
+ if (url != null)
+ urlText = url.toExternalForm();
+ else if (urlText.startsWith("file:") & urlText.length() > 6) {
+ if (urlText.charAt(5) != '/' && urlText.charAt(5) != '\\')
+ urlText = urlText.substring(0, 5) + "/" + urlText.substring(5);
+ }
+
+ // change spaces to "%20"
+ if (!WebBrowserUtil.isWindows()) {
+ int index = urlText.indexOf(" ");
+ while (index >= 0) {
+ urlText = urlText.substring(0, index) + "%20" + urlText.substring(index + 1);
+ index = urlText.indexOf(" ");
+ }
+ }
+
+ Trace.trace(Trace.FINEST, "Launching external Web browser: " + location + " - " + parameters + " - " + urlText);
+ if (location == null || location.length() == 0) {
+ try {
+ String extension = null;
+ if (url != null)
+ extension = url.getFile();
+ else
+ extension = "html";
+ int index = extension.indexOf(".");
+ if (index >= 0)
+ extension = extension.substring(index + 1);
+ Program program = Program.findProgram(extension);
+ program.execute(urlText);
+ } catch (Exception e) {
+ Trace.trace(Trace.SEVERE, "Error launching default external browser", e);
+ WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorCouldNotLaunchWebBrowser", urlText));
+ }
+ return;
+ }
+
+ String params = parameters;
+ if (params == null)
+ params = "";
+
+ int urlIndex = params.indexOf(WebBrowserPreference.URL_PARAMETER);
+ if (urlIndex >= 0)
+ params = params.substring(0, urlIndex) + " " + urlText + " " + params.substring(urlIndex + WebBrowserPreference.URL_PARAMETER.length());
+ else {
+ if (!params.endsWith(" "))
+ params += " ";
+ params += urlText;
+ }
+
+ try {
+ Trace.trace(Trace.FINEST, "Launching " + location + " " + params);
+ Runtime.getRuntime().exec(location + " " + params);
+ } catch (Exception e) {
+ Trace.trace(Trace.SEVERE, "Could not launch external browser", e);
+ WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorCouldNotLaunchWebBrowser", urlText));
+ }
+ }
+
+ protected void save(IMemento memento) {
+ memento.putString(MEMENTO_NAME, name);
+ memento.putString(MEMENTO_LOCATION, location);
+ memento.putString(MEMENTO_PARAMETERS, parameters);
+ }
+
+ protected void load(IMemento memento) {
+ name = memento.getString(MEMENTO_NAME);
+ location = memento.getString(MEMENTO_LOCATION);
+ parameters = memento.getString(MEMENTO_PARAMETERS);
+ }
+
+ public String toString() {
+ return "External Web browser: " + getName() + " / " + getLocation() + " / " + getParameters();
+ }
+}
\ No newline at end of file