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);