Added partial support for not using extension registry in
org.eclipse.ecf.provider.filetransfer.httpclient4

Change-Id: I6059fbfd3dc2e9bda9f5fd452d1e8602c824fc3c
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/Activator.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/Activator.java
index 9a20381..27066f5 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/Activator.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/Activator.java
@@ -13,6 +13,7 @@
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -24,6 +25,7 @@
 import java.util.StringTokenizer;
 import org.eclipse.core.net.proxy.IProxyService;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.core.runtime.IAdapterManager;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionDelta;
@@ -32,7 +34,10 @@
 import org.eclipse.core.runtime.IRegistryChangeEvent;
 import org.eclipse.core.runtime.IRegistryChangeListener;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.ecf.core.identity.Namespace;
+import org.eclipse.ecf.core.util.ExtensionRegistryRunnable;
 import org.eclipse.ecf.core.util.LogHelper;
 import org.eclipse.ecf.core.util.PlatformHelper;
 import org.eclipse.ecf.filetransfer.service.IRemoteFileSystemBrowser;
@@ -42,7 +47,11 @@
 import org.eclipse.ecf.filetransfer.service.ISendFileTransfer;
 import org.eclipse.ecf.filetransfer.service.ISendFileTransferFactory;
 import org.eclipse.ecf.provider.filetransfer.IFileTransferProtocolToFactoryMapper;
+import org.eclipse.ecf.provider.filetransfer.browse.MultiProtocolFileSystemBrowserAdapterFactory;
+import org.eclipse.ecf.provider.filetransfer.identity.FileTransferNamespace;
+import org.eclipse.ecf.provider.filetransfer.outgoing.MultiProtocolOutgoingAdapterFactory;
 import org.eclipse.ecf.provider.filetransfer.retrieve.MultiProtocolRetrieveAdapter;
+import org.eclipse.ecf.provider.filetransfer.retrieve.MultiProtocolRetrieveAdapterFactory;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
@@ -269,8 +278,30 @@
 		loadProtocolHandlers();
 		// Finally, register this object as a IFileTransferProtocolToFactoryMapper service
 		protocolMapperRegistration = context.registerService(IFileTransferProtocolToFactoryMapper.class.getName(), this, null);
+
+		SafeRunner.run(new ExtensionRegistryRunnable(this.context) {
+			protected void runWithoutRegistry() throws Exception {
+				getContext().registerService(Namespace.class, new FileTransferNamespace(), null);
+				IAdapterManager am = getAdapterManager();
+				if (am != null) {
+					rscAdapterFactories = new ArrayList();
+					IAdapterFactory af = new MultiProtocolRetrieveAdapterFactory();
+					am.registerAdapters(af, org.eclipse.ecf.core.BaseContainer.class);
+					rscAdapterFactories.add(af);
+					af = new MultiProtocolOutgoingAdapterFactory();
+					am.registerAdapters(af, org.eclipse.ecf.core.BaseContainer.class);
+					rscAdapterFactories.add(af);
+					af = new MultiProtocolFileSystemBrowserAdapterFactory();
+					am.registerAdapters(af, org.eclipse.ecf.core.BaseContainer.class);
+					rscAdapterFactories.add(af);
+				}
+			}
+		});
+
 	}
 
+	private List rscAdapterFactories;
+
 	public boolean reinitialize() {
 		try {
 			loadProtocolHandlers();
@@ -327,7 +358,14 @@
 			this.protocolMapperRegistration.unregister();
 			this.protocolMapperRegistration = null;
 		}
-
+		if (rscAdapterFactories != null) {
+			IAdapterManager am = getAdapterManager();
+			if (am != null) {
+				for (Iterator i = rscAdapterFactories.iterator(); i.hasNext();)
+					am.unregisterAdapters((IAdapterFactory) i.next());
+			}
+			rscAdapterFactories = null;
+		}
 		synchronized (this) {
 			this.context = null;
 		}
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/identity/FileTransferNamespace.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/identity/FileTransferNamespace.java
index 5252af1..851227d 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/identity/FileTransferNamespace.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/identity/FileTransferNamespace.java
@@ -28,6 +28,10 @@
 
 	public static final String PROTOCOL = Messages.FileTransferNamespace_Namespace_Protocol;
 
+	public FileTransferNamespace() {
+		super("ecf.provider.filetransfer", "ECF File Transfer Provider Namespace"); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
 	private String getInitFromExternalForm(Object[] args) {
 		if (args == null || args.length < 1 || args[0] == null)
 			return null;
@@ -93,7 +97,7 @@
 	 * @see org.eclipse.ecf.core.identity.Namespace#getSupportedParameterTypesForCreateInstance()
 	 */
 	public Class[][] getSupportedParameterTypes() {
-		return new Class[][] { {URL.class}, {String.class}};
+		return new Class[][] {{URL.class}, {String.class}};
 	}
 
 }