X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserManager.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserManager.java index 30a22f9..cd2b875 100644 --- a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserManager.java +++ b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserManager.java @@ -4,7 +4,7 @@ * 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 **********************************************************************/ @@ -30,258 +30,273 @@ import org.eclipse.ui.IMemento; import org.eclipse.ui.XMLMemento; /** - * + * */ public class BrowserManager { - private static final int ADD = 0; - - private static final int CHANGE = 1; - - private static final int REMOVE = 2; - - protected List browsers; - - protected IWebBrowser currentBrowser; - - protected List browserListeners = new ArrayList(); - - private Preferences.IPropertyChangeListener pcl; - - protected boolean ignorePreferenceChanges = false; - - protected static BrowserManager instance; - - public static BrowserManager getInstance() { - if (instance == null) - instance = new BrowserManager(); - return instance; - } - - private BrowserManager() { - pcl = new Preferences.IPropertyChangeListener() { - public void propertyChange(Preferences.PropertyChangeEvent event) { - if (ignorePreferenceChanges) - return; - String property = event.getProperty(); - if (property.equals("browsers")) { - loadBrowsers(); - } - } - }; - - WebBrowserUIPlugin.getInstance().getPluginPreferences().addPropertyChangeListener(pcl); - } - - protected void dispose() { - WebBrowserUIPlugin.getInstance().getPluginPreferences().removePropertyChangeListener(pcl); - - // clear the cache - if (browsers != null) { - Iterator iterator = browsers.iterator(); - while (iterator.hasNext()) { - Object obj = iterator.next(); - if (obj instanceof IInternalWebBrowser) { - IInternalWebBrowser wb = (IInternalWebBrowser) obj; - if (wb.getClearHistoryOnExit()) - WebBrowserPreference.setInternalWebBrowserHistory(null); - } - } - } - } - - public IExternalWebBrowserWorkingCopy createExternalWebBrowser() { - return new ExternalWebBrowserWorkingCopy(); - } - - public List getWebBrowsers() { - if (browsers == null) - loadBrowsers(); - return new ArrayList(browsers); - } - - protected void loadBrowsers() { - Trace.trace(Trace.FINEST, "Loading web browsers"); - - Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); - String xmlString = prefs.getString("browsers"); - if (xmlString != null && xmlString.length() > 0) { - browsers = new ArrayList(); - - try { - ByteArrayInputStream in = new ByteArrayInputStream(xmlString.getBytes()); - Reader reader = new InputStreamReader(in); - IMemento memento = XMLMemento.createReadRoot(reader); - - IMemento child = memento.getChild("internal"); - if (child != null) { - InternalWebBrowser browser = new InternalWebBrowser(); - browser.load(child); - browsers.add(browser); - } - - IMemento[] children = memento.getChildren("external"); - int size = children.length; - for (int i = 0; i < size; i++) { - ExternalWebBrowser browser = new ExternalWebBrowser(); - browser.load(children[i]); - browsers.add(browser); - } - - Integer current = memento.getInteger("current"); - if (current != null) { - currentBrowser = (IWebBrowser) browsers.get(current.intValue()); - } - } catch (Exception e) { - Trace.trace(Trace.WARNING, "Could not load browsers: " + e.getMessage()); - } - addInternalBrowser(browsers); - if (currentBrowser == null && browsers.size() > 0) - currentBrowser = (IWebBrowser) browsers.get(0); - } else { - setupDefaultBrowsers(); - saveBrowsers(); - return; - } - } - - protected void saveBrowsers() { - try { - ignorePreferenceChanges = true; - XMLMemento memento = XMLMemento.createWriteRoot("web-browsers"); - - Iterator iterator = browsers.iterator(); - while (iterator.hasNext()) { - Object obj = iterator.next(); - if (obj instanceof InternalWebBrowser) { - InternalWebBrowser browser = (InternalWebBrowser) obj; - IMemento child = memento.createChild("internal"); - browser.save(child); - } else if (obj instanceof ExternalWebBrowser) { - ExternalWebBrowser browser = (ExternalWebBrowser) obj; - IMemento child = memento.createChild("external"); - browser.save(child); - } - } - - memento.putInteger("current", browsers.indexOf(currentBrowser)); - - StringWriter writer = new StringWriter(); - memento.save(writer); - String xmlString = writer.getBuffer().toString(); - Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); - prefs.setValue("browsers", xmlString); - WebBrowserUIPlugin.getInstance().savePluginPreferences(); - } catch (Exception e) { - Trace.trace(Trace.SEVERE, "Could not save browsers", e); - } - ignorePreferenceChanges = false; - } - - protected void addInternalBrowser(List browserList) { - if (browserList == null) - return; - - Iterator iterator = browserList.iterator(); - while (iterator.hasNext()) { - IWebBrowser browser = (IWebBrowser) iterator.next(); - if (browser instanceof IInternalWebBrowser) - return; - } - - // add the internal browser if we can - WebBrowserUIPlugin.getInstance().getLog().log( - new Status(IStatus.INFO, WebBrowserUIPlugin.PLUGIN_ID, 0, WebBrowserUtil.canUseInternalWebBrowser() + "/" - + WebBrowserUtil.isInternalBrowserOperational(), null)); - if (!WebBrowserUtil.canUseInternalWebBrowser() || !WebBrowserUtil.isInternalBrowserOperational()) - return; - - browserList.add(0, new InternalWebBrowser()); - } - - private void setupDefaultBrowsers() { - browsers = new ArrayList(); - - addInternalBrowser(browsers); - - // handle all the EXTERNAL browsers by criteria and add those too at startup - WebBrowserUtil.addFoundBrowsers(browsers); - - // by default, if internal is there, that is current, else set the first external one - if (!browsers.isEmpty()) - currentBrowser = (IWebBrowser) browsers.get(0); - } - - protected void addBrowser(IExternalWebBrowser browser) { - if (browsers == null) - loadBrowsers(); - if (!browsers.contains(browser)) - browsers.add(browser); - fireWebBrowserEvent(browser, ADD); - saveBrowsers(); - } - - protected void removeWebBrowser(IExternalWebBrowser browser) { - if (browsers == null) - loadBrowsers(); - browsers.remove(browser); - fireWebBrowserEvent(browser, REMOVE); - } - - // Internal Web browser CAN be "edited", just not created or removed - protected void browserChanged(IWebBrowser browser) { - fireWebBrowserEvent(browser, CHANGE); - saveBrowsers(); - } - - /** - * Add Web browser listener. - * - * @param listener - */ - public void addWebBrowserListener(IWebBrowserListener listener) { - browserListeners.add(listener); - } - - /** - * Remove Web browser listener. - * - * @param listener - */ - public void removeWebBrowserListener(IWebBrowserListener listener) { - browserListeners.remove(listener); - } - - /** - * Fire a Web browser event. - * - * @param browser - * @param type - */ - protected void fireWebBrowserEvent(IWebBrowser browser, int type) { - Object[] obj = browserListeners.toArray(); - - int size = obj.length; - for (int i = 0; i < size; i++) { - IWebBrowserListener listener = (IWebBrowserListener) obj[i]; - if (type == ADD) - listener.browserAdded(browser); - else if (type == CHANGE) - listener.browserChanged(browser); - else if (type == REMOVE) - listener.browserRemoved(browser); - } - } - - public IWebBrowser getCurrentWebBrowser() { - if (browsers == null) - loadBrowsers(); - - return currentBrowser; - } - - public void setCurrentWebBrowser(IWebBrowser wb) { - if (browsers.contains(wb)) - currentBrowser = wb; - saveBrowsers(); - } + private static final int ADD = 0; + + private static final int CHANGE = 1; + + private static final int REMOVE = 2; + + protected List browsers; + + protected IWebBrowser currentBrowser; + + protected List browserListeners = new ArrayList(); + + private Preferences.IPropertyChangeListener pcl; + + protected boolean ignorePreferenceChanges = false; + + protected static BrowserManager instance; + + public static BrowserManager getInstance() { + if (instance == null) + instance = new BrowserManager(); + return instance; + } + + private BrowserManager() { + pcl = new Preferences.IPropertyChangeListener() { + public void propertyChange(Preferences.PropertyChangeEvent event) { + if (ignorePreferenceChanges) + return; + String property = event.getProperty(); + if (property.equals("browsers")) { + loadBrowsers(); + } + } + }; + + WebBrowserUIPlugin.getInstance().getPluginPreferences() + .addPropertyChangeListener(pcl); + } + + protected void dispose() { + WebBrowserUIPlugin.getInstance().getPluginPreferences() + .removePropertyChangeListener(pcl); + + // clear the cache + if (browsers != null) { + Iterator iterator = browsers.iterator(); + while (iterator.hasNext()) { + Object obj = iterator.next(); + if (obj instanceof IInternalWebBrowser) { + IInternalWebBrowser wb = (IInternalWebBrowser) obj; + if (wb.getClearHistoryOnExit()) + WebBrowserPreference.setInternalWebBrowserHistory(null); + } + } + } + } + + public IExternalWebBrowserWorkingCopy createExternalWebBrowser() { + return new ExternalWebBrowserWorkingCopy(); + } + + public List getWebBrowsers() { + if (browsers == null) + loadBrowsers(); + return new ArrayList(browsers); + } + + protected void loadBrowsers() { + Trace.trace(Trace.FINEST, "Loading web browsers"); + + Preferences prefs = WebBrowserUIPlugin.getInstance() + .getPluginPreferences(); + String xmlString = prefs.getString("browsers"); + if (xmlString != null && xmlString.length() > 0) { + browsers = new ArrayList(); + + try { + ByteArrayInputStream in = new ByteArrayInputStream(xmlString + .getBytes()); + Reader reader = new InputStreamReader(in); + IMemento memento = XMLMemento.createReadRoot(reader); + + IMemento child = memento.getChild("internal"); + if (child != null) { + InternalWebBrowser browser = new InternalWebBrowser(); + browser.load(child); + browsers.add(browser); + } + + IMemento[] children = memento.getChildren("external"); + int size = children.length; + for (int i = 0; i < size; i++) { + ExternalWebBrowser browser = new ExternalWebBrowser(); + browser.load(children[i]); + browsers.add(browser); + } + + Integer current = memento.getInteger("current"); + if (current != null) { + currentBrowser = (IWebBrowser) browsers.get(current + .intValue()); + } + } catch (Exception e) { + Trace.trace(Trace.WARNING, "Could not load browsers: " + + e.getMessage()); + } + addInternalBrowser(browsers); + if (currentBrowser == null && browsers.size() > 0) + currentBrowser = (IWebBrowser) browsers.get(0); + } else { + setupDefaultBrowsers(); + saveBrowsers(); + return; + } + } + + protected void saveBrowsers() { + try { + ignorePreferenceChanges = true; + XMLMemento memento = XMLMemento.createWriteRoot("web-browsers"); + + Iterator iterator = browsers.iterator(); + while (iterator.hasNext()) { + Object obj = iterator.next(); + if (obj instanceof InternalWebBrowser) { + InternalWebBrowser browser = (InternalWebBrowser) obj; + IMemento child = memento.createChild("internal"); + browser.save(child); + } else if (obj instanceof ExternalWebBrowser) { + ExternalWebBrowser browser = (ExternalWebBrowser) obj; + IMemento child = memento.createChild("external"); + browser.save(child); + } + } + + memento.putInteger("current", browsers.indexOf(currentBrowser)); + + StringWriter writer = new StringWriter(); + memento.save(writer); + String xmlString = writer.getBuffer().toString(); + Preferences prefs = WebBrowserUIPlugin.getInstance() + .getPluginPreferences(); + prefs.setValue("browsers", xmlString); + WebBrowserUIPlugin.getInstance().savePluginPreferences(); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not save browsers", e); + } + ignorePreferenceChanges = false; + } + + protected void addInternalBrowser(List browserList) { + if (browserList == null) + return; + + Iterator iterator = browserList.iterator(); + while (iterator.hasNext()) { + IWebBrowser browser = (IWebBrowser) iterator.next(); + if (browser instanceof IInternalWebBrowser) + return; + } + + // add the internal browser if we can + // WebBrowserUIPlugin.getInstance().getLog().log( + // new Status(IStatus.INFO, WebBrowserUIPlugin.PLUGIN_ID, 0, + // WebBrowserUtil.canUseInternalWebBrowser() + "/" + // + WebBrowserUtil.isInternalBrowserOperational(), null)); + // if (!WebBrowserUtil.canUseInternalWebBrowser() || + // !WebBrowserUtil.isInternalBrowserOperational()) + // return; + WebBrowserUIPlugin.getInstance().getLog().log( + new Status(IStatus.INFO, WebBrowserUIPlugin.PLUGIN_ID, 0, "-" + + WebBrowserUtil.isInternalBrowserOperational(), null)); + if (!WebBrowserUtil.isInternalBrowserOperational()) + return; + browserList.add(0, new InternalWebBrowser()); + } + + private void setupDefaultBrowsers() { + browsers = new ArrayList(); + + addInternalBrowser(browsers); + + // handle all the EXTERNAL browsers by criteria and add those too at + // startup + WebBrowserUtil.addFoundBrowsers(browsers); + + // by default, if internal is there, that is current, else set the first + // external one + if (!browsers.isEmpty()) + currentBrowser = (IWebBrowser) browsers.get(0); + } + + protected void addBrowser(IExternalWebBrowser browser) { + if (browsers == null) + loadBrowsers(); + if (!browsers.contains(browser)) + browsers.add(browser); + fireWebBrowserEvent(browser, ADD); + saveBrowsers(); + } + + protected void removeWebBrowser(IExternalWebBrowser browser) { + if (browsers == null) + loadBrowsers(); + browsers.remove(browser); + fireWebBrowserEvent(browser, REMOVE); + } + + // Internal Web browser CAN be "edited", just not created or removed + protected void browserChanged(IWebBrowser browser) { + fireWebBrowserEvent(browser, CHANGE); + saveBrowsers(); + } + + /** + * Add Web browser listener. + * + * @param listener + */ + public void addWebBrowserListener(IWebBrowserListener listener) { + browserListeners.add(listener); + } + + /** + * Remove Web browser listener. + * + * @param listener + */ + public void removeWebBrowserListener(IWebBrowserListener listener) { + browserListeners.remove(listener); + } + + /** + * Fire a Web browser event. + * + * @param browser + * @param type + */ + protected void fireWebBrowserEvent(IWebBrowser browser, int type) { + Object[] obj = browserListeners.toArray(); + + int size = obj.length; + for (int i = 0; i < size; i++) { + IWebBrowserListener listener = (IWebBrowserListener) obj[i]; + if (type == ADD) + listener.browserAdded(browser); + else if (type == CHANGE) + listener.browserChanged(browser); + else if (type == REMOVE) + listener.browserRemoved(browser); + } + } + + public IWebBrowser getCurrentWebBrowser() { + if (browsers == null) + loadBrowsers(); + + return currentBrowser; + } + + public void setCurrentWebBrowser(IWebBrowser wb) { + if (browsers.contains(wb)) + currentBrowser = wb; + saveBrowsers(); + } } \ No newline at end of file