KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > internal > browser > BrowserManager


1 /*******************************************************************************
2  * Copyright (c) 2003, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - Initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.internal.browser;
12
13 import java.io.ByteArrayInputStream JavaDoc;
14 import java.io.InputStreamReader JavaDoc;
15 import java.io.Reader JavaDoc;
16 import java.io.StringWriter JavaDoc;
17 import java.util.ArrayList JavaDoc;
18 import java.util.Iterator JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Observable JavaDoc;
21
22 import org.eclipse.core.runtime.Preferences;
23 import org.eclipse.ui.IMemento;
24 import org.eclipse.ui.XMLMemento;
25 /**
26  *
27  */

28 public class BrowserManager extends Observable JavaDoc {
29     protected List JavaDoc 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 JavaDoc property = event.getProperty();
47                 if (!ignorePreferenceChanges && property.equals("browsers")) { //$NON-NLS-1$
48
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 JavaDoc getWebBrowsers() {
77         if (browsers == null)
78             loadBrowsers();
79         return new ArrayList JavaDoc(browsers);
80     }
81
82     protected void loadBrowsers() {
83         Trace.trace(Trace.FINEST, "Loading web browsers"); //$NON-NLS-1$
84

85         Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences();
86         String JavaDoc xmlString = prefs.getString("browsers"); //$NON-NLS-1$
87
if (xmlString != null && xmlString.length() > 0) {
88             browsers = new ArrayList JavaDoc();
89             
90             try {
91                 ByteArrayInputStream JavaDoc in = new ByteArrayInputStream JavaDoc(xmlString.getBytes());
92                 Reader JavaDoc reader = new InputStreamReader JavaDoc(in);
93                 IMemento memento = XMLMemento.createReadRoot(reader);
94                 
95                 IMemento system = memento.getChild("system"); //$NON-NLS-1$
96
if (system != null && WebBrowserUtil.canUseSystemBrowser())
97                     browsers.add(new SystemBrowserDescriptor());
98                 
99                 IMemento[] children = memento.getChildren("external"); //$NON-NLS-1$
100
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 JavaDoc current = memento.getInteger("current"); //$NON-NLS-1$
108
if (current != null) {
109                     currentBrowser = (IBrowserDescriptor) browsers.get(current.intValue());
110                 }
111             } catch (Exception JavaDoc e) {
112                 Trace.trace(Trace.WARNING, "Could not load browsers: " + e.getMessage()); //$NON-NLS-1$
113
}
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"); //$NON-NLS-1$
136

137             Iterator JavaDoc iterator = browsers.iterator();
138             while (iterator.hasNext()) {
139                 Object JavaDoc obj = iterator.next();
140                 if (obj instanceof BrowserDescriptor) {
141                     BrowserDescriptor browser = (BrowserDescriptor) obj;
142                     IMemento child = memento.createChild("external"); //$NON-NLS-1$
143
browser.save(child);
144                 } else if (obj instanceof SystemBrowserDescriptor) {
145                     memento.createChild("system"); //$NON-NLS-1$
146
}
147             }
148             
149             memento.putInteger("current", browsers.indexOf(currentBrowser)); //$NON-NLS-1$
150

151             StringWriter JavaDoc writer = new StringWriter JavaDoc();
152             memento.save(writer);
153             String JavaDoc xmlString = writer.getBuffer().toString();
154             Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences();
155             prefs.setValue("browsers", xmlString); //$NON-NLS-1$
156
WebBrowserUIPlugin.getInstance().savePluginPreferences();
157         } catch (Exception JavaDoc e) {
158             Trace.trace(Trace.SEVERE, "Could not save browsers", e); //$NON-NLS-1$
159
}
160         ignorePreferenceChanges = false;
161     }
162
163     protected void setupDefaultBrowsers() {
164         browsers = new ArrayList JavaDoc();
165
166         // add system browser
167
if (WebBrowserUtil.canUseSystemBrowser()) {
168             IBrowserDescriptor system = new SystemBrowserDescriptor();
169             browsers.add(system);
170         }
171         
172         // handle all the EXTERNAL browsers by criteria and add those too at startup
173
WebBrowserUtil.addFoundBrowsers(browsers);
174         
175         // by default, if internal is there, that is current, else set the first external one
176
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 JavaDoc();
216
217         if (browsers.contains(wb))
218             currentBrowser = wb;
219         else
220             throw new IllegalArgumentException JavaDoc();
221         saveBrowsers();
222     }
223 }
224
Popular Tags