intial source from http://www.sf.net/projects/wdte
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / net / sourceforge / phpeclipse / webbrowser / internal / ExternalWebBrowser.java
diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/ExternalWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/ExternalWebBrowser.java
new file mode 100644 (file)
index 0000000..10e5086
--- /dev/null
@@ -0,0 +1,140 @@
+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