X-Git-Url: http://git.phpeclipse.com 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 index 0000000..c43dff2 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java @@ -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