From f075e763dcdf042a9545c1ee64273459c2ebac84 Mon Sep 17 00:00:00 2001 From: Matthew Dickie Date: Mon, 23 May 2016 15:51:27 +0100 Subject: [PATCH] [DAQ-105] create parent dir for nexus file if it doesn't exist Signed-off-by: Matthew Dickie --- .../impl/DefaultNexusFileBuilderTest.java | 21 +++++++++++++++++++ .../builder/impl/DefaultNexusFileBuilder.java | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/org.eclipse.dawnsci.nexus.test/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilderTest.java b/org.eclipse.dawnsci.nexus.test/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilderTest.java index 34d9f440..7531fb97 100644 --- a/org.eclipse.dawnsci.nexus.test/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilderTest.java +++ b/org.eclipse.dawnsci.nexus.test/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilderTest.java @@ -33,6 +33,8 @@ public class DefaultNexusFileBuilderTest { private static String filePath; + private static String fileInSubDirPath; + private NexusFileBuilder nexusFileBuilder; @BeforeClass @@ -41,6 +43,7 @@ public static void setUpBeforeClass() throws Exception { DefaultNexusFileBuilderTest.class.getSimpleName()); TestUtils.makeScratchDirectory(testScratchDirectoryName); filePath = testScratchDirectoryName + fileName; + fileInSubDirPath = testScratchDirectoryName + "subdir/" + filePath; } @Before @@ -65,6 +68,24 @@ public void testCreateAndOpenFile() throws NexusException { assertThat(entry.getTitleScalar(), equalTo("test")); } + @Test + public void testCreateAndOpenFileInSubDir() throws NexusException { + ServiceHolder.setNexusFileFactory(new NexusFileFactoryHDF5()); + NexusFileBuilder nexusSubdirFileBuilder = new DefaultNexusFileBuilder(fileInSubDirPath); + NexusEntryBuilder nexusEntryBuilder = nexusSubdirFileBuilder.newEntry(); + + nexusEntryBuilder.getNXentry().setTitleScalar("test"); + nexusSubdirFileBuilder.createFile(); + + TreeFile nexusFile = NexusTestUtils.loadNexusFile(fileInSubDirPath, true); + assertThat(nexusFile, notNullValue()); + NXroot root = (NXroot) nexusFile.getGroupNode(); + assertThat(nexusFile.getGroupNode(), notNullValue()); + NXentry entry = root.getEntry(); + assertThat(entry, notNullValue()); + assertThat(entry.getTitleScalar(), equalTo("test")); + } + @Test public void testGetNexusTree() { TreeFile nexusFile = nexusFileBuilder.getNexusTree(); diff --git a/org.eclipse.dawnsci.nexus/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilder.java b/org.eclipse.dawnsci.nexus/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilder.java index 97affd3c..6c0247ec 100644 --- a/org.eclipse.dawnsci.nexus/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilder.java +++ b/org.eclipse.dawnsci.nexus/src/org/eclipse/dawnsci/nexus/builder/impl/DefaultNexusFileBuilder.java @@ -12,6 +12,7 @@ package org.eclipse.dawnsci.nexus.builder.impl; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -127,6 +128,12 @@ public NexusScanFile createFile() throws NexusException { final String filename = treeFile.getFilename(); + // create the parent dir if it doesn't exist + File parentDir = new File(filename).getParentFile(); + if (!parentDir.exists()) { + parentDir.mkdirs(); + } + // create and open the nexus file final INexusFileFactory nexusFileFactory = ServiceHolder.getNexusFileFactory(); try (NexusFile nexusFile = nexusFileFactory.newNexusFile(filename, true)) {