1 11 package org.eclipse.ui.internal.browser; 12 13 import java.util.HashMap ; 14 import java.util.Observable ; 15 import java.util.Observer ; 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 27 public class DefaultBrowserSupport extends AbstractWorkbenchBrowserSupport { 28 static final String SHARED_ID = "org.eclipse.ui.browser"; 30 protected HashMap browserIdMap = new HashMap (); 31 32 protected static DefaultBrowserSupport instance; 33 34 public DefaultBrowserSupport() { 35 instance = this; 37 BrowserManager.getInstance().addObserver(new Observer () { 38 public void update(Observable o, Object arg) { 39 browserIdMap.clear(); 44 } 45 }); 46 } 47 48 protected static DefaultBrowserSupport getInstance() { 49 return instance; 50 } 51 52 protected IWebBrowser getExistingWebBrowser(String browserId) { 53 try { 54 Object obj = browserIdMap.get(browserId); 55 IWebBrowser browser = null; 56 if (obj instanceof IWebBrowser) 57 browser = (IWebBrowser) obj; 58 else if (obj instanceof HashMap ) { 59 HashMap wmap = (HashMap ) 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 e) { 69 } 71 return null; 72 } 73 74 private Integer getWindowKey(IWorkbenchWindow window) { 75 return new Integer (window.hashCode()); 76 } 77 78 84 public IWebBrowser createBrowser(int style, String browserId, String name, 85 String 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 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 IWorkbenchWindow window = PlatformUI.getWorkbench() 135 .getActiveWorkbenchWindow(); 136 Integer key = getWindowKey(window); 137 HashMap wmap = (HashMap ) browserIdMap.get(browserId); 138 if (wmap == null) { 139 wmap = new HashMap (); 140 browserIdMap.put(browserId, wmap); 141 } 142 wmap.put(key, webBrowser); 143 } else { 144 browserIdMap.put(browserId, webBrowser); 147 } 148 return webBrowser; 149 } 150 151 156 public IWebBrowser createBrowser(String browserId) throws PartInitException { 157 return createBrowser(0, browserId, null, null); 158 } 159 160 165 public boolean isInternalWebBrowserAvailable() { 166 return WebBrowserUtil.canUseInternalWebBrowser(); 167 } 168 169 protected void removeBrowser(IWebBrowser browser) { 170 String baseId = WebBrowserUtil.decodeId(browser.getId()); 171 if (browser instanceof InternalBrowserInstance) { 172 Integer key = ((InternalBrowserInstance) browser).getWindowKey(); 175 HashMap wmap = (HashMap ) 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 |