Bug 493068 - workspaces in emfstore cannot be explicitly released when
sessions end

Change-Id: I30271a66446ebe6b22d5fb83b424f38b73733577
Signed-off-by: neil <neilswebmail@yahoo.co.uk>
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java
index 6d74285..8fe2bc6 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java
@@ -211,6 +211,20 @@
 	}
 
 	/**
+	 * removes a workspace that is no longer needed, this also removes the
+	 * threadlocal reference to the workspace from the calling thread.
+	 *
+	 * @param token
+	 */
+	public static void removeInstance(String token) {
+		if (WorkspaceLocator.hasId(token)) {
+			WorkspaceLocator.removeWorkspaceProviderFor(token);
+		}
+		WS_THREAD_LOCAL.remove();
+
+	}
+
+	/**
 	 * Initialize the Workspace Manager.
 	 */
 	public static synchronized void init() {
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/WorkspaceLocator.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/WorkspaceLocator.java
index 0c3a4c3..e113d90 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/WorkspaceLocator.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/WorkspaceLocator.java
@@ -42,6 +42,16 @@
 	}
 
 	/**
+	 * Removes a workspace which is no longer needed.
+	 *
+	 * @param token
+	 */
+	public static void removeWorkspaceProviderFor(String workspaceProviderId) {
+		// TODO Auto-generated method stub
+		WORKSPACE_PROVIDER_MAP.remove(workspaceProviderId);
+	}
+
+	/**
 	 * Creates a workspace with a particular ID.
 	 *
 	 * @param workspaceProviderId
@@ -98,4 +108,5 @@
 
 		return createWorkspaceProviderFor(workspaceProviderId);
 	}
+
 }