Changed import/export project space behaviour
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/importexport/impl/ExportProjectSpaceController.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/importexport/impl/ExportProjectSpaceController.java
index ea8306f..05d506a 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/importexport/impl/ExportProjectSpaceController.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/importexport/impl/ExportProjectSpaceController.java
@@ -14,6 +14,7 @@
import java.io.File;
import java.io.IOException;
+import org.apache.commons.io.FilenameUtils;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.internal.client.model.util.ResourceHelper;
@@ -109,10 +110,15 @@
copiedProjectSpace.setUsersession(null);
final Project clonedProject = ModelUtil.clone(getProjectSpace().getProject());
- copiedProjectSpace.setProject(clonedProject);
ResourceHelper.putElementIntoNewResourceWithProject(file.getAbsolutePath(), copiedProjectSpace,
copiedProjectSpace.getProject());
+
+ final String projectPath = FilenameUtils.removeExtension(file.getAbsolutePath())
+ + ExportImportDataUnits.Project.getExtension();
+ final File projectFile = new File(projectPath);
+ projectFile.createNewFile();
+ ResourceHelper.putElementIntoNewResource(projectFile.getAbsolutePath(), clonedProject);
}
/**
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/WorkspaceBase.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/WorkspaceBase.java
index db984c0..ead1b55 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/WorkspaceBase.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/WorkspaceBase.java
@@ -12,6 +12,8 @@
package org.eclipse.emf.emfstore.internal.client.model.impl;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -20,11 +22,13 @@
import java.util.Map;
import java.util.Set;
+import org.apache.commons.io.FilenameUtils;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.emfstore.internal.client.importexport.impl.ExportImportDataUnits;
import org.eclipse.emf.emfstore.internal.client.importexport.impl.ExportProjectSpaceController;
import org.eclipse.emf.emfstore.internal.client.importexport.impl.ExportWorkspaceController;
import org.eclipse.emf.emfstore.internal.client.model.AdminBroker;
@@ -264,6 +268,24 @@
final ProjectSpace projectSpace = ResourceHelper
.getElementFromResource(absoluteFileName, ProjectSpace.class, 0);
+ final String parent = FilenameUtils.getFullPath(absoluteFileName);
+ final File parentFolder = new File(parent);
+ final File[] projects = parentFolder.listFiles(new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(ExportImportDataUnits.Project.getExtension());
+ }
+ });
+
+ if (projects.length == 0) {
+ throw new FileNotFoundException("Project was not found.");
+ }
+ if (projects.length > 1) {
+ throw new FileNotFoundException("Cannot find project because multiple files were found.");
+ }
+
+ final Project project = ResourceHelper.getElementFromResource(projects[0].getAbsolutePath(), Project.class, 0);
+ projectSpace.setProject(project);
+
projectSpace.setIdentifier(ModelFactory.eINSTANCE.createProjectSpace().getIdentifier());
projectSpace.initResources(workspaceResourceSet);
diff --git a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ImportExportTest.java b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ImportExportTest.java
index c6a9fad..13b8a14 100644
--- a/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ImportExportTest.java
+++ b/tests/org.eclipse.emf.emfstore.client.test/src/org/eclipse/emf/emfstore/client/test/persistence/ImportExportTest.java
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
@@ -87,7 +88,16 @@
@Test
public void testDuplicateImportOfProjectSpace() throws IOException {
- final File temp = File.createTempFile("projectSpace", ExportImportDataUnits.ProjectSpace.getExtension());
+ final String tmpDir = System.getProperty("java.io.tmpdir") + "ieTest" + System.currentTimeMillis();
+ final File tmpDirFile = new File(tmpDir);
+ final boolean bo = tmpDirFile.mkdir();
+
+ if (!bo) {
+ fail("Could not create temp folder for test");
+ }
+
+ final File temp = File.createTempFile("projectSpace", ExportImportDataUnits.ProjectSpace.getExtension(),
+ tmpDirFile);
new ExportImportControllerExecutor(temp, new NullProgressMonitor())
.execute(ExportImportControllerFactory.Export.getExportProjectSpaceController(getProjectSpace()));
@@ -109,9 +119,18 @@
createTestElement("A");
Assert.assertTrue(getProjectSpace().getOperations().size() > 0);
+ final String tmpDir = System.getProperty("java.io.tmpdir") + "ieTest" + System.currentTimeMillis();
+ final File tmpDirFile = new File(tmpDir);
+ final boolean bo = tmpDirFile.mkdir();
+
+ if (!bo) {
+ fail("Could not create temp folder for test");
+ }
+
// TODO: assert file extension is correct
- final File temp = File.createTempFile("projectSpace", ExportImportDataUnits.ProjectSpace.getExtension());
+ final File temp = File.createTempFile("projectSpace", ExportImportDataUnits.ProjectSpace.getExtension(),
+ tmpDirFile);
new ExportImportControllerExecutor(temp, new NullProgressMonitor())
.execute(ExportImportControllerFactory.Export.getExportProjectSpaceController(getProjectSpace()));