diff options
Diffstat (limited to 'bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/platform/perspective/TransportProviderRegistry.java')
-rw-r--r-- | bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/platform/perspective/TransportProviderRegistry.java | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/platform/perspective/TransportProviderRegistry.java b/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/platform/perspective/TransportProviderRegistry.java deleted file mode 100644 index 73b98d8a4..000000000 --- a/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/platform/perspective/TransportProviderRegistry.java +++ /dev/null @@ -1,183 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * yyyymmdd bug Email and other contact information - * -------- -------- ----------------------------------------------------------- - * 20070413 176493 makandre@ca.ibm.com - Andrew Mak, WSE: Make message/transport stack pluggable - *******************************************************************************/ -package org.eclipse.wst.ws.internal.explorer.platform.perspective; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Preferences; -import org.eclipse.wst.ws.internal.explorer.plugin.ExplorerPlugin; -import org.eclipse.wst.ws.internal.explorer.transport.ISOAPTransportProvider; - -/** - * This class is responsible for loading the Web Services Explorer's transport provider - * extensions and instantiating them when needed. - */ -public class TransportProviderRegistry { - - private static final String PREF_TRANSPORT_PROVIDERS = "TRANSPORT_PROVIDERS"; - private static final String EXTENSION_NAME = "wseTransportProvider"; - private static final String SOAP_TRANSPORT_PROVIDER = "soapTransportProvider"; - private static final String NAMESPACE_URI = "namespaceURI"; - private static final String TRANSPORT_URI = "transportURI"; - - private static TransportProviderRegistry instance = null; - - private List preferredIDs = null; - private Map soapProviderElements = null; - private Map soapProviderCache = null; - - /** - * Returns a singleton instance of this TransportProviderRegistry. - * - * @return An instance of this class. - */ - public synchronized static TransportProviderRegistry getInstance() { - if (instance == null) - instance = new TransportProviderRegistry(); - return instance; - } - - /* - * Constructor. - */ - private TransportProviderRegistry() { - - // get the preference value - Preferences preferences = ExplorerPlugin.getInstance().getPluginPreferences(); - String transportProviders = preferences.getString(PREF_TRANSPORT_PROVIDERS).replaceAll("\\s", ""); - - // split it into a list of preferred transport provider IDs - if (transportProviders.length() == 0) - preferredIDs = new ArrayList(); - else - preferredIDs = Arrays.asList(transportProviders.split(",")); - - // now find all extenders - IExtensionRegistry registry = Platform.getExtensionRegistry(); - IConfigurationElement[] configs = - registry.getConfigurationElementsFor(ExplorerPlugin.ID, EXTENSION_NAME); - - // currently we only have one type of providers: SOAP transport providers - soapProviderElements = new Hashtable(); - for (int i = 0; i < configs.length; i++) { - if (SOAP_TRANSPORT_PROVIDER.equals(configs[i].getName())) { - String id = configs[i].getAttribute("id"); - soapProviderElements.put(id, configs[i]); - } - } - - soapProviderCache = new Hashtable(); - } - - /* - * Determine if the URIs match. - */ - private boolean uriMatch(String required, String supported) { - - // not specified mean support everything - if (supported == null) - return true; - - if (!required.endsWith("/")) required += "/"; - if (!supported.endsWith("/")) supported += "/"; - - return required.equals(supported); - } - - /* - * Create the extension for the given key, but only if it supports the binding namespace and transport - */ - private ISOAPTransportProvider createExtension(Object key, String namespaceURI, String transportURI) { - - IConfigurationElement element = (IConfigurationElement) soapProviderElements.get(key); - if (element == null) - return null; - - boolean supportsNamespace = uriMatch(namespaceURI, element.getAttribute(NAMESPACE_URI)); - boolean supportsTransport = uriMatch(transportURI, element.getAttribute(TRANSPORT_URI)); - - if (supportsNamespace && supportsTransport) { - - String providerClassID = element.getAttribute("class"); - Object obj = null; - - try { - // check if we already have the transport provider cached, - // if not, then create one - synchronized (soapProviderCache) { - obj = soapProviderCache.get(providerClassID); - if (obj == null) { - obj = element.createExecutableExtension("class"); - soapProviderCache.put(providerClassID, obj); - } - } - return (ISOAPTransportProvider) obj; - } - catch (CoreException e) {} - } - - return null; - } - - /** - * Get an ISOAPTransportProvider that supports the binding namespace and transport. This method will - * first look for preferred IDs defined using the TRANSPORT_PROVIDERS preference key. If a suitable - * provider is not found, it will then look at all other extenders in non-deterministic order. - * - * @param namespaceURI The binding namespace URI - * @param transportURI The binding transport URI - * - * @return Returns a suitable ISOAPTranportProvider for the given binding information, or null - * if there's no match. - */ - public ISOAPTransportProvider getSOAPTransportProvider(String namespaceURI, String transportURI) { - - ISOAPTransportProvider provider = null; - - Iterator iter = preferredIDs.iterator(); - - // check preferred IDs first - while (iter.hasNext()) { - provider = createExtension(iter.next(), namespaceURI, transportURI); - if (provider != null) - return provider; - } - - iter = soapProviderElements.keySet().iterator(); - - // check rest of the providers - while (iter.hasNext()) { - Object key = iter.next(); - - // already checked the preferred IDs - if (preferredIDs.contains(key)) - continue; - - provider = createExtension(key, namespaceURI, transportURI); - if (provider != null) - return provider; - } - - return null; - } -} |