Initial version from the webtools project; sligthly modified for phpeclipse
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / org / eclipse / webbrowser / internal / BrowserSearcher.java
diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java
new file mode 100644 (file)
index 0000000..c43dff2
--- /dev/null
@@ -0,0 +1,126 @@
+package org.eclipse.webbrowser.internal;
+/**********************************************************************
+ * Copyright (c) 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+  *
+ * Contributors:
+ *    IBM - Initial API and implementation
+ **********************************************************************/
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy;
+import org.eclipse.core.runtime.IProgressMonitor;
+/**
+ * 
+ */
+public class BrowserSearcher {
+       private static boolean cancelled;
+       private BrowserSearcher() {
+               super();
+       }
+
+       /**
+        * Search for installed VMs in the file system
+        */
+       protected static List search(Shell shell) {
+               final List foundBrowsers = new ArrayList();
+               final List existingPaths = WebBrowserUtil.getExternalBrowserPaths();
+
+               // select a target directory for the search
+               DirectoryDialog dialog = new DirectoryDialog(shell);
+               dialog.setMessage(WebBrowserUIPlugin.getResource("%selectDirectory"));
+               dialog.setText(WebBrowserUIPlugin.getResource("%directoryDialogTitle"));
+
+               String path = dialog.open();
+               if (path == null)
+                       return null;
+               
+               cancelled = false;
+               
+               final File rootDir = new File(path);
+               ProgressMonitorDialog pm = new ProgressMonitorDialog(shell);
+
+               IRunnableWithProgress r = new IRunnableWithProgress() {
+                       public void run(IProgressMonitor monitor) {
+                               monitor.beginTask(
+                                       WebBrowserUIPlugin.getResource("%searchingTaskName"),
+                                       IProgressMonitor.UNKNOWN);
+                               search(rootDir, existingPaths, foundBrowsers, monitor);
+                               monitor.done();
+                               if (monitor.isCanceled())
+                                       setCancelled(true);
+                       }
+               };
+
+               try {
+                       pm.run(true, true, r);
+               } catch (InvocationTargetException e) {
+                       Trace.trace(Trace.SEVERE, "Invocation Exception occured running monitor: " + e);
+               } catch (InterruptedException e) {
+                       Trace.trace(Trace.SEVERE, "Interrupted exception occured running monitor: " + e);
+                       return null;
+               }
+               
+               if (cancelled)
+                       return null;
+
+               return foundBrowsers;
+       }
+       
+       protected static void setCancelled(boolean b) {
+               cancelled = b;
+       }
+
+       protected static void search(File directory, List existingPaths, List foundBrowsers, IProgressMonitor monitor) {
+               if (monitor.isCanceled())
+                       return;
+
+               String[] names = directory.list();
+               List subDirs = new ArrayList();
+
+               for (int i = 0; i < names.length; i++) {
+                       if (monitor.isCanceled())
+                               return;
+
+                       File file = new File(directory, names[i]);
+                       
+                       if (existingPaths.contains(file.getAbsolutePath().toLowerCase()))
+                               continue;
+
+                       IExternalWebBrowserWorkingCopy wc = WebBrowserUtil.createExternalBrowser(file);
+                       if (wc != null)
+                               foundBrowsers.add(wc);
+
+                       try {
+                               monitor.subTask(
+                                       MessageFormat.format(WebBrowserUIPlugin.getResource("%searching"),
+                                               new String[] { Integer.toString(foundBrowsers.size()), file.getCanonicalPath()}));
+                       } catch (IOException ioe) {
+                       }
+
+                       if (file.isDirectory()) {
+                               if (monitor.isCanceled())
+                                       return;
+                               subDirs.add(file);
+                       }
+               }
+               while (!subDirs.isEmpty()) {
+                       File subDir = (File) subDirs.remove(0);
+                       search(subDir, existingPaths, foundBrowsers, monitor);
+                       if (monitor.isCanceled()) {
+                               return;
+                       }
+               }
+       }
+}
\ No newline at end of file