ResourceHelper.deleteProjectState(Version, ProjectId) loads ProjectState
in order to delete it

* Use fresh resource for deletion

Change-Id: I989a65c158d8fb9d160fe0c80293ffea694e92a0
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
index d2f9302..6aadb28 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
@@ -831,7 +831,7 @@
 		boolean checkConstraints)
 		throws IOException {
 
-		final ResourceSet resourceSet = getResourceSetForURI(resourceURI);
+		final ResourceSet resourceSet = createResourceSetForURI(resourceURI);
 
 		Resource resource;
 
@@ -882,9 +882,15 @@
 		return (T) eObject;
 	}
 
-	private static ResourceSet getResourceSetForURI(URI resourceURI) {
+	/**
+	 * Creates and returns a new ResourceSet which may be used to load the given URI.
+	 *
+	 * @param resourceURI the resource URI
+	 * @return the newly created resourceset
+	 */
+	public static ResourceSet createResourceSetForURI(URI resourceURI) {
 		ResourceSet resourceSet = null;
-		if (resourceURI != null && resourceURI.scheme().equals("emfstore")) { //$NON-NLS-1$
+		if (resourceURI != null && resourceURI.scheme() != null && resourceURI.scheme().equals("emfstore")) { //$NON-NLS-1$
 			ESExtensionPoint extensionPoint = null;
 			if (resourceURI.authority().equals("workspaces")) { //$NON-NLS-1$
 				extensionPoint = new ESExtensionPoint(CLIENT_RESOURCE_SET_PROVIDER_EXT_POINT_ID,
@@ -904,7 +910,8 @@
 				resourceSet = resourceSetProvider.getResourceSet();
 			}
 
-		} else {
+		}
+		if (resourceSet == null) {
 			resourceSet = new ResourceSetImpl();
 		}
 		return resourceSet;
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/core/helper/ResourceHelper.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/core/helper/ResourceHelper.java
index 7a008eb..87c588c 100644
--- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/core/helper/ResourceHelper.java
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/core/helper/ResourceHelper.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.xmi.XMIResource;
 import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
 import org.eclipse.emf.emfstore.internal.common.model.Project;
@@ -130,7 +131,16 @@
 	 */
 	public void deleteProjectState(Version version, ProjectId projectId) {
 		try {
-			version.getProjectState().eResource().delete(null);
+			/*
+			 * the project state of the version may not have been loaded yet. calling the getter however will load it,
+			 * just to delete if afterwards. it is more performant to create a new unloaded resource for the purpose of
+			 * deletion.
+			 */
+			final URI projectStateURI = ESServerURIUtil.createProjectStateURI(version.eResource().getURI());
+			final ResourceSet resourceSet = ModelUtil.createResourceSetForURI(projectStateURI);
+			final Resource deleteResource = resourceSet.createResource(projectStateURI);
+			deleteResource.delete(null);
+			version.setProjectStateResource(null);
 		} catch (final IOException e) {
 			ModelUtil.logWarning("Could not delete project state with id " + projectId.getId() + " and version "
 				+ version.getPrimarySpec().getIdentifier() + ".", e);