KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*******************************************************************************
2  * Copyright (c) 2005 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.util.HashMap JavaDoc;
14 import java.util.Observable JavaDoc;
15 import java.util.Observer JavaDoc;
16
17 import org.eclipse.ui.IWorkbenchWindow;
18 import org.eclipse.ui.PartInitException;
19 import org.eclipse.ui.PlatformUI;
20 import org.eclipse.ui.browser.AbstractWorkbenchBrowserSupport;
21 import org.eclipse.ui.browser.IWebBrowser;
22 import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
23
24 /**
25  * Implementation of the workbench browser support.
26  */

27 public class DefaultBrowserSupport extends AbstractWorkbenchBrowserSupport {
28     static final String JavaDoc SHARED_ID = "org.eclipse.ui.browser"; //$NON-NLS-1$
29

30     protected HashMap JavaDoc browserIdMap = new HashMap JavaDoc();
31
32     protected static DefaultBrowserSupport instance;
33
34     public DefaultBrowserSupport() {
35         // do nothing
36
instance = this;
37         BrowserManager.getInstance().addObserver(new Observer JavaDoc() {
38             public void update(Observable JavaDoc o, Object JavaDoc arg) {
39                 // TODO I am not sure what we should do here
40
// The preferences have changed so maybe we should
41
// close the opened browsers in addition to clearing
42
// the table
43
browserIdMap.clear();
44             }
45         });
46     }
47
48     protected static DefaultBrowserSupport getInstance() {
49         return instance;
50     }
51
52     protected IWebBrowser getExistingWebBrowser(String JavaDoc browserId) {
53         try {
54             Object JavaDoc obj = browserIdMap.get(browserId);
55             IWebBrowser browser = null;
56             if (obj instanceof IWebBrowser)
57                 browser = (IWebBrowser) obj;
58             else if (obj instanceof HashMap JavaDoc) {
59                 HashMap JavaDoc wmap = (HashMap JavaDoc) obj;
60                 IWorkbenchWindow window = PlatformUI.getWorkbench()
61                         .getActiveWorkbenchWindow();
62                 if (window != null) {
63                     browser = (IWebBrowser) wmap.get(getWindowKey(window));
64                 }
65             }
66             if (browser != null)
67                 return browser;
68         } catch (Exception JavaDoc e) {
69             // ignore
70
}
71         return null;
72     }
73
74     private Integer JavaDoc getWindowKey(IWorkbenchWindow window) {
75         return new Integer JavaDoc(window.hashCode());
76     }
77
78     /*
79      * (non-Javadoc)
80      *
81      * @see org.eclipse.ui.browser.IWorkbenchBrowserSupport#createBrowser(int,
82      * java.lang.String, java.lang.String, java.lang.String)
83      */

84     public IWebBrowser createBrowser(int style, String JavaDoc browserId, String JavaDoc name,
85             String JavaDoc tooltip) throws PartInitException {
86         if (browserId == null)
87             browserId = SHARED_ID;
88         IWebBrowser browser = getExistingWebBrowser(browserId);
89         if (browser != null) {
90             if (browser instanceof InternalBrowserInstance) {
91                 InternalBrowserInstance instance2 = (InternalBrowserInstance) browser;
92                 instance2.setName(name);
93                 instance2.setTooltip(tooltip);
94             }
95             return browser;
96         }
97
98         IWebBrowser webBrowser = null;
99
100         // AS_EXTERNAL will force the external browser regardless of the user
101
// preference
102
if ((style & AS_EXTERNAL) != 0
103                 || WebBrowserPreference.getBrowserChoice() != WebBrowserPreference.INTERNAL) {
104             IBrowserDescriptor ewb = BrowserManager.getInstance()
105                     .getCurrentWebBrowser();
106             if (ewb == null)
107                 throw new PartInitException(Messages.errorNoBrowser);
108             
109             if (ewb instanceof SystemBrowserDescriptor)
110                 webBrowser = new SystemBrowserInstance(browserId);
111             else {
112                 IBrowserExt ext = null;
113                 if (ewb != null)
114                     ext = WebBrowserUIPlugin.findBrowsers(ewb.getLocation());
115                 if (ext != null)
116                     webBrowser = ext.createBrowser(browserId,
117                             ewb.getLocation(), ewb.getParameters());
118                 if (webBrowser == null)
119                     webBrowser = new ExternalBrowserInstance(browserId, ewb);
120             }
121         } else {
122             if ((style & IWorkbenchBrowserSupport.AS_VIEW) != 0)
123                 webBrowser = new InternalBrowserViewInstance(browserId, style,
124                         name, tooltip);
125             else
126                 webBrowser = new InternalBrowserEditorInstance(browserId,
127                         style, name, tooltip);
128         }
129
130         if (webBrowser instanceof InternalBrowserInstance) {
131             // we should only share internal browsers within one
132
// workbench window. Each workbench window can have
133
// a shared browser with the same id
134
IWorkbenchWindow window = PlatformUI.getWorkbench()
135                     .getActiveWorkbenchWindow();
136             Integer JavaDoc key = getWindowKey(window);
137             HashMap JavaDoc wmap = (HashMap JavaDoc) browserIdMap.get(browserId);
138             if (wmap == null) {
139                 wmap = new HashMap JavaDoc();
140                 browserIdMap.put(browserId, wmap);
141             }
142             wmap.put(key, webBrowser);
143         } else {
144             // external and system browsers are shared
145
// for the entire workbench
146
browserIdMap.put(browserId, webBrowser);
147         }
148         return webBrowser;
149     }
150
151     /*
152      * (non-Javadoc)
153      *
154      * @see org.eclipse.ui.browser.IWorkbenchBrowserSupport#createBrowser(java.lang.String)
155      */

156     public IWebBrowser createBrowser(String JavaDoc browserId) throws PartInitException {
157         return createBrowser(0, browserId, null, null);
158     }
159
160     /*
161      * (non-Javadoc)
162      *
163      * @see org.eclipse.ui.browser.IWorkbenchBrowserSupport#isInternalWebBrowserAvailable()
164      */

165     public boolean isInternalWebBrowserAvailable() {
166         return WebBrowserUtil.canUseInternalWebBrowser();
167     }
168
169     protected void removeBrowser(IWebBrowser browser) {
170         String JavaDoc baseId = WebBrowserUtil.decodeId(browser.getId());
171         if (browser instanceof InternalBrowserInstance) {
172             // Remove it from the window map and
173
// also remove the window map itself if it is empty.
174
Integer JavaDoc key = ((InternalBrowserInstance) browser).getWindowKey();
175             HashMap JavaDoc wmap = (HashMap JavaDoc) browserIdMap.get(baseId);
176             if (wmap != null) {
177                 wmap.remove(key);
178                 if (wmap.isEmpty())
179                     browserIdMap.remove(baseId);
180             }
181         } else
182             browserIdMap.remove(baseId);
183     }
184 }
Popular Tags