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