1 11 package org.eclipse.ui.internal.browser; 12 13 import java.io.ByteArrayInputStream ; 14 import java.io.InputStreamReader ; 15 import java.io.Reader ; 16 import java.io.StringWriter ; 17 import java.util.ArrayList ; 18 import java.util.Iterator ; 19 import java.util.List ; 20 import java.util.Observable ; 21 22 import org.eclipse.core.runtime.Preferences; 23 import org.eclipse.ui.IMemento; 24 import org.eclipse.ui.XMLMemento; 25 28 public class BrowserManager extends Observable { 29 protected List browsers; 30 protected IBrowserDescriptor currentBrowser; 31 32 private Preferences.IPropertyChangeListener pcl; 33 protected boolean ignorePreferenceChanges = false; 34 35 protected static BrowserManager instance; 36 37 public static BrowserManager getInstance() { 38 if (instance == null) 39 instance = new BrowserManager(); 40 return instance; 41 } 42 43 private BrowserManager() { 44 pcl = new Preferences.IPropertyChangeListener() { 45 public void propertyChange(Preferences.PropertyChangeEvent event) { 46 String property = event.getProperty(); 47 if (!ignorePreferenceChanges && property.equals("browsers")) { loadBrowsers(); 49 } 50 if (!property.equals(WebBrowserPreference.PREF_INTERNAL_WEB_BROWSER_HISTORY)) { 51 setChanged(); 52 notifyObservers(); 53 } 54 } 55 }; 56 57 WebBrowserUIPlugin.getInstance().getPluginPreferences().addPropertyChangeListener(pcl); 58 } 59 60 protected static void safeDispose() { 61 if (instance == null) 62 return; 63 instance.dispose(); 64 } 65 66 protected void dispose() { 67 Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); 68 if (prefs != null) 69 prefs.removePropertyChangeListener(pcl); 70 } 71 72 public IBrowserDescriptorWorkingCopy createExternalWebBrowser() { 73 return new BrowserDescriptorWorkingCopy(); 74 } 75 76 public List getWebBrowsers() { 77 if (browsers == null) 78 loadBrowsers(); 79 return new ArrayList (browsers); 80 } 81 82 protected void loadBrowsers() { 83 Trace.trace(Trace.FINEST, "Loading web browsers"); 85 Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); 86 String xmlString = prefs.getString("browsers"); if (xmlString != null && xmlString.length() > 0) { 88 browsers = new ArrayList (); 89 90 try { 91 ByteArrayInputStream in = new ByteArrayInputStream (xmlString.getBytes()); 92 Reader reader = new InputStreamReader (in); 93 IMemento memento = XMLMemento.createReadRoot(reader); 94 95 IMemento system = memento.getChild("system"); if (system != null && WebBrowserUtil.canUseSystemBrowser()) 97 browsers.add(new SystemBrowserDescriptor()); 98 99 IMemento[] children = memento.getChildren("external"); int size = children.length; 101 for (int i = 0; i < size; i++) { 102 BrowserDescriptor browser = new BrowserDescriptor(); 103 browser.load(children[i]); 104 browsers.add(browser); 105 } 106 107 Integer current = memento.getInteger("current"); if (current != null) { 109 currentBrowser = (IBrowserDescriptor) browsers.get(current.intValue()); 110 } 111 } catch (Exception e) { 112 Trace.trace(Trace.WARNING, "Could not load browsers: " + e.getMessage()); } 114 115 IBrowserDescriptor system = new SystemBrowserDescriptor(); 116 if (WebBrowserUtil.canUseSystemBrowser() && !browsers.contains(system)) { 117 browsers.add(0, system); 118 currentBrowser = system; 119 saveBrowsers(); 120 } 121 } else { 122 setupDefaultBrowsers(); 123 saveBrowsers(); 124 } 125 126 if (currentBrowser == null && browsers.size() > 0) 127 currentBrowser = (IBrowserDescriptor) browsers.get(0); 128 setChanged(); 129 notifyObservers(); 130 } 131 132 protected void saveBrowsers() { 133 try { 134 ignorePreferenceChanges = true; 135 XMLMemento memento = XMLMemento.createWriteRoot("web-browsers"); 137 Iterator iterator = browsers.iterator(); 138 while (iterator.hasNext()) { 139 Object obj = iterator.next(); 140 if (obj instanceof BrowserDescriptor) { 141 BrowserDescriptor browser = (BrowserDescriptor) obj; 142 IMemento child = memento.createChild("external"); browser.save(child); 144 } else if (obj instanceof SystemBrowserDescriptor) { 145 memento.createChild("system"); } 147 } 148 149 memento.putInteger("current", browsers.indexOf(currentBrowser)); 151 StringWriter writer = new StringWriter (); 152 memento.save(writer); 153 String xmlString = writer.getBuffer().toString(); 154 Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); 155 prefs.setValue("browsers", xmlString); WebBrowserUIPlugin.getInstance().savePluginPreferences(); 157 } catch (Exception e) { 158 Trace.trace(Trace.SEVERE, "Could not save browsers", e); } 160 ignorePreferenceChanges = false; 161 } 162 163 protected void setupDefaultBrowsers() { 164 browsers = new ArrayList (); 165 166 if (WebBrowserUtil.canUseSystemBrowser()) { 168 IBrowserDescriptor system = new SystemBrowserDescriptor(); 169 browsers.add(system); 170 } 171 172 WebBrowserUtil.addFoundBrowsers(browsers); 174 175 if (!browsers.isEmpty() && currentBrowser == null) 177 currentBrowser = (IBrowserDescriptor) browsers.get(0); 178 } 179 180 protected void addBrowser(IBrowserDescriptor browser) { 181 if (browsers == null) 182 loadBrowsers(); 183 if (!browsers.contains(browser)) 184 browsers.add(browser); 185 if (browsers.size() == 1) 186 setCurrentWebBrowser(browser); 187 188 saveBrowsers(); 189 } 190 191 protected void removeWebBrowser(IBrowserDescriptor browser) { 192 if (browsers == null) 193 loadBrowsers(); 194 browsers.remove(browser); 195 196 if (currentBrowser == null || currentBrowser.equals(browser)) { 197 currentBrowser = null; 198 if (browsers.size() > 0) 199 currentBrowser = (IBrowserDescriptor) browsers.get(0); 200 } 201 } 202 203 public IBrowserDescriptor getCurrentWebBrowser() { 204 if (browsers == null) 205 loadBrowsers(); 206 207 if (currentBrowser == null && browsers.size() > 0) 208 return (IBrowserDescriptor) browsers.get(0); 209 210 return currentBrowser; 211 } 212 213 public void setCurrentWebBrowser(IBrowserDescriptor wb) { 214 if (wb == null) 215 throw new IllegalArgumentException (); 216 217 if (browsers.contains(wb)) 218 currentBrowser = wb; 219 else 220 throw new IllegalArgumentException (); 221 saveBrowsers(); 222 } 223 } 224 | Popular Tags |