Skip to content
Snippets Groups Projects
Commit ceb89bf8 authored by felmer's avatar felmer
Browse files

IDataStructure changed

SVN: 2252
parent c2e87a44
No related branches found
No related tags found
No related merge requests found
...@@ -27,33 +27,77 @@ import ch.systemsx.cisd.bds.storage.IStorage; ...@@ -27,33 +27,77 @@ import ch.systemsx.cisd.bds.storage.IStorage;
abstract class AbstractDataStructure implements IDataStructure abstract class AbstractDataStructure implements IDataStructure
{ {
protected final IStorage storage; protected final IStorage storage;
protected final IDirectory root;
protected IDirectory root;
AbstractDataStructure(IStorage storage) AbstractDataStructure(IStorage storage)
{ {
assert storage != null: "Unspecified storage."; assert storage != null: "Unspecified storage.";
this.storage = storage; this.storage = storage;
}
private void mountStorage()
{
storage.mount(); storage.mount();
root = storage.getRoot(); root = storage.getRoot();
} }
/**
* Asserts that this instance is already opened or created otherwise a {@link IllegalStateException} is thrown.
*/
protected void assertOpenOrCreated()
{
if (root == null)
{
throw new IllegalStateException("Data structure should first be opened or created.");
}
}
/**
* Validates this data structure and throws {@link DataStructureException} if invalid.
*/
protected abstract void assertValid();
/**
* Performs opening specific for the concrete data structure. Will be invoked after the common part of
* {@link #open()} but before validation with {@link #assertValid()}.
*/
protected abstract void performOpening();
/**
* Performs closing specific for the concrete data structure. Will be invoked before validation with
* {@link #assertValid()}.
*/
protected abstract void performClosing();
// //
// IDataStructure // IDataStructure
// //
public final void create()
{
mountStorage();
}
public void load() public final void open()
{ {
mountStorage();
performOpening();
Version loadedVersion = Version.loadFrom(root); Version loadedVersion = Version.loadFrom(root);
if (loadedVersion.isBackwardsCompatibleWith(getVersion()) == false) if (loadedVersion.isBackwardsCompatibleWith(getVersion()) == false)
{ {
throw new DataStructureException("Version of loaded data structure is " + loadedVersion throw new DataStructureException("Version of loaded data structure is " + loadedVersion
+ " which is not backward compatible with " + getVersion()); + " which is not backward compatible with " + getVersion());
} }
assertValid();
} }
public void save() public final void close()
{ {
assertOpenOrCreated();
getVersion().saveTo(root); getVersion().saveTo(root);
performClosing();
assertValid();
storage.unmount(); storage.unmount();
} }
} }
...@@ -49,7 +49,9 @@ public class DataStructureLoader ...@@ -49,7 +49,9 @@ public class DataStructureLoader
IStorage storage = createStorage(name); IStorage storage = createStorage(name);
storage.mount(); storage.mount();
Version version = Version.loadFrom(storage.getRoot()); Version version = Version.loadFrom(storage.getRoot());
return DataStructureFactory.createDataStructure(storage, version); IDataStructure dataStructure = DataStructureFactory.createDataStructure(storage, version);
dataStructure.open();
return dataStructure;
} }
private IStorage createStorage(String name) private IStorage createStorage(String name)
......
...@@ -57,6 +57,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -57,6 +57,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
*/ */
public IDirectory getOriginalData() public IDirectory getOriginalData()
{ {
assertOpenOrCreated();
return Utilities.getOrCreateSubDirectory(getDataDirectory(), DIR_ORIGINAL); return Utilities.getOrCreateSubDirectory(getDataDirectory(), DIR_ORIGINAL);
} }
...@@ -68,6 +69,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -68,6 +69,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
*/ */
public IFormattedData getFormatedData() public IFormattedData getFormatedData()
{ {
assertOpenOrCreated();
if (format == null) if (format == null)
{ {
throw new DataStructureException("Couldn't create formated data because of undefined format."); throw new DataStructureException("Couldn't create formated data because of undefined format.");
...@@ -81,6 +83,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -81,6 +83,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
public void setFormat(Format format) public void setFormat(Format format)
{ {
assert format != null : "Unspecified format."; assert format != null : "Unspecified format.";
assertOpenOrCreated();
this.format = format; this.format = format;
} }
...@@ -92,6 +95,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -92,6 +95,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
*/ */
public ExperimentIdentifier getExperimentIdentifier() public ExperimentIdentifier getExperimentIdentifier()
{ {
assertOpenOrCreated();
return ExperimentIdentifier.loadFrom(getMetaDataDirectory()); return ExperimentIdentifier.loadFrom(getMetaDataDirectory());
} }
...@@ -101,6 +105,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -101,6 +105,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
public void setExperimentIdentifier(ExperimentIdentifier id) public void setExperimentIdentifier(ExperimentIdentifier id)
{ {
assert id != null : "Unspecified experiment identifier"; assert id != null : "Unspecified experiment identifier";
assertOpenOrCreated();
id.saveTo(getMetaDataDirectory()); id.saveTo(getMetaDataDirectory());
} }
...@@ -112,6 +117,7 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -112,6 +117,7 @@ public class DataStructureV1_0 extends AbstractDataStructure
*/ */
public ProcessingType getProcessingType() public ProcessingType getProcessingType()
{ {
assertOpenOrCreated();
return ProcessingType.loadFrom(getMetaDataDirectory()); return ProcessingType.loadFrom(getMetaDataDirectory());
} }
...@@ -121,34 +127,21 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -121,34 +127,21 @@ public class DataStructureV1_0 extends AbstractDataStructure
public void setProcessingType(ProcessingType type) public void setProcessingType(ProcessingType type)
{ {
assert type != null : "Unspecified processing type."; assert type != null : "Unspecified processing type.";
assertOpenOrCreated();
type.saveTo(getMetaDataDirectory()); type.saveTo(getMetaDataDirectory());
} }
/**
* Loads the data structure from the storage and sets the format.
*/
@Override
public void load()
{
super.load();
setFormat(Format.loadFrom(getMetaDataDirectory()));
}
@Override @Override
public void save() protected void assertValid()
{ {
if (getOriginalData().iterator().hasNext() == false) if (getOriginalData().iterator().hasNext() == false)
{ {
throw new DataStructureException("Empty original data directory."); throw new DataStructureException("Empty original data directory.");
} }
IDirectory metaDataDirectory = getMetaDataDirectory(); IDirectory metaDataDirectory = getMetaDataDirectory();
if (metaDataDirectory.tryToGetNode(Format.FORMAT_DIR) == null) if (metaDataDirectory.tryToGetNode(Format.FORMAT_DIR) == null && format == null)
{ {
if (format == null) throw new DataStructureException("Unspecified format.");
{
throw new DataStructureException("Unspecified format.");
}
format.saveTo(metaDataDirectory);
} }
if (metaDataDirectory.tryToGetNode(ExperimentIdentifier.FOLDER) == null) if (metaDataDirectory.tryToGetNode(ExperimentIdentifier.FOLDER) == null)
{ {
...@@ -158,7 +151,22 @@ public class DataStructureV1_0 extends AbstractDataStructure ...@@ -158,7 +151,22 @@ public class DataStructureV1_0 extends AbstractDataStructure
{ {
throw new DataStructureException("Unspecified processing type."); throw new DataStructureException("Unspecified processing type.");
} }
super.save(); }
@Override
protected void performOpening()
{
setFormat(Format.loadFrom(getMetaDataDirectory()));
}
@Override
protected void performClosing()
{
IDirectory metaDataDirectory = getMetaDataDirectory();
if (metaDataDirectory.tryToGetNode(Format.FORMAT_DIR) == null && format != null)
{
format.saveTo(metaDataDirectory);
}
} }
private IDirectory getDataDirectory() private IDirectory getDataDirectory()
......
...@@ -18,20 +18,37 @@ package ch.systemsx.cisd.bds; ...@@ -18,20 +18,37 @@ package ch.systemsx.cisd.bds;
/** /**
* Common interface of all data structures. * Common interface of all data structures. Implementations of this interface provide methods to manipulate a data
* structure. These methods are specific for the version of the data structure. For each version there is a concrete
* class implementing this interface.
* <p>
* A data structure must first be created with {@link #create()} or opened with {@link #open()} before any other method
* can be invoked. An {@link IllegalStateException} is thrown otherwise. Finally a data structure has to be closed with
* {@link #close()} in order to commit all changes made since creation or opening.
* *
* @author Franz-Josef Elmer * @author Franz-Josef Elmer
*/ */
public interface IDataStructure extends IHasVersion public interface IDataStructure extends IHasVersion
{ {
/** /**
* Loads the data structure. * Creates a new empty data structure.
*/ */
public void load(); public void create();
/**
* Opens an existing data structure and validates it.
*
* @throws DataStructureException if the data structure is invalid.
*/
public void open();
/** /**
* Saves the data structure. * Closes the data structure. Before the data structure is closed it will be validated.
*
* @throws DataStructureException if the data structure is invalid.
* @throws IllegalStateException if called before the first invocation of either {@link #create()} or
* {@link #open()}.
*/ */
public void save(); public void close();
} }
\ No newline at end of file
...@@ -43,17 +43,18 @@ public class DataStructureLoaderTest ...@@ -43,17 +43,18 @@ public class DataStructureLoaderTest
} }
@Test @Test
public void testLoad() public void testOpen()
{ {
File dir = new File(TEST_DIR, "ds"); File dir = new File(TEST_DIR, "ds");
assert dir.mkdir(); assert dir.mkdir();
DataStructureV1_0 dataStructure = new DataStructureV1_0(new FileStorage(dir)); DataStructureV1_0 dataStructure = new DataStructureV1_0(new FileStorage(dir));
dataStructure.create();
dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.getOriginalData().addKeyValuePair("answer", "42");
dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0); dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0);
ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e"); ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e");
dataStructure.setExperimentIdentifier(experimentIdentifier); dataStructure.setExperimentIdentifier(experimentIdentifier);
dataStructure.setProcessingType(ProcessingType.RAW_DATA); dataStructure.setProcessingType(ProcessingType.RAW_DATA);
dataStructure.save(); dataStructure.close();
IDataStructure ds = new DataStructureLoader(TEST_DIR).load("ds"); IDataStructure ds = new DataStructureLoader(TEST_DIR).load("ds");
assertEquals(DataStructureV1_0.class, ds.getClass()); assertEquals(DataStructureV1_0.class, ds.getClass());
......
...@@ -61,6 +61,7 @@ public class DataStructureV1_0Test ...@@ -61,6 +61,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetOriginalData() public void testGetOriginalData()
{ {
dataStructure.create();
IDirectory dataFolder = dataStructure.getOriginalData(); IDirectory dataFolder = dataStructure.getOriginalData();
assertEquals(DataStructureV1_0.DIR_ORIGINAL, dataFolder.getName()); assertEquals(DataStructureV1_0.DIR_ORIGINAL, dataFolder.getName());
assertEquals(DataStructureV1_0.DIR_DATA, dataFolder.tryToGetParent().getName()); assertEquals(DataStructureV1_0.DIR_DATA, dataFolder.tryToGetParent().getName());
...@@ -69,6 +70,7 @@ public class DataStructureV1_0Test ...@@ -69,6 +70,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetFormatedData() public void testGetFormatedData()
{ {
dataStructure.create();
dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0); dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0);
IFormattedData formatedData = dataStructure.getFormatedData(); IFormattedData formatedData = dataStructure.getFormatedData();
assertTrue(formatedData instanceof NoFormattedData); assertTrue(formatedData instanceof NoFormattedData);
...@@ -78,6 +80,7 @@ public class DataStructureV1_0Test ...@@ -78,6 +80,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetFormatedDataBeforeInvokingSetVersion() public void testGetFormatedDataBeforeInvokingSetVersion()
{ {
dataStructure.create();
try try
{ {
dataStructure.getFormatedData(); dataStructure.getFormatedData();
...@@ -91,6 +94,7 @@ public class DataStructureV1_0Test ...@@ -91,6 +94,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testSetProcessingType() public void testSetProcessingType()
{ {
dataStructure.create();
dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA); dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA);
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA); IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
...@@ -100,6 +104,7 @@ public class DataStructureV1_0Test ...@@ -100,6 +104,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testSetProcessingTypeTwice() public void testSetProcessingTypeTwice()
{ {
dataStructure.create();
dataStructure.setProcessingType(ProcessingType.RAW_DATA); dataStructure.setProcessingType(ProcessingType.RAW_DATA);
dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA); dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA);
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
...@@ -110,6 +115,7 @@ public class DataStructureV1_0Test ...@@ -110,6 +115,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetProcessingType() public void testGetProcessingType()
{ {
dataStructure.create();
dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA); dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA);
assertEquals(ProcessingType.COMPUTED_DATA, dataStructure.getProcessingType()); assertEquals(ProcessingType.COMPUTED_DATA, dataStructure.getProcessingType());
} }
...@@ -117,6 +123,7 @@ public class DataStructureV1_0Test ...@@ -117,6 +123,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetUnknownProcessingType() public void testGetUnknownProcessingType()
{ {
dataStructure.create();
dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA); dataStructure.setProcessingType(ProcessingType.COMPUTED_DATA);
IDirectory s = Utilities.getSubDirectory(storage.getRoot(), DataStructureV1_0.DIR_METADATA); IDirectory s = Utilities.getSubDirectory(storage.getRoot(), DataStructureV1_0.DIR_METADATA);
s.addKeyValuePair(ProcessingType.PROCESSING_TYPE, "blabla"); s.addKeyValuePair(ProcessingType.PROCESSING_TYPE, "blabla");
...@@ -126,6 +133,7 @@ public class DataStructureV1_0Test ...@@ -126,6 +133,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testSetExperimentIdentifier() public void testSetExperimentIdentifier()
{ {
dataStructure.create();
ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e");
dataStructure.setExperimentIdentifier(id); dataStructure.setExperimentIdentifier(id);
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
...@@ -139,6 +147,7 @@ public class DataStructureV1_0Test ...@@ -139,6 +147,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testSetExperimentIdentifierTwice() public void testSetExperimentIdentifierTwice()
{ {
dataStructure.create();
dataStructure.setExperimentIdentifier(new ExperimentIdentifier("a", "b", "c")); dataStructure.setExperimentIdentifier(new ExperimentIdentifier("a", "b", "c"));
ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e");
dataStructure.setExperimentIdentifier(id); dataStructure.setExperimentIdentifier(id);
...@@ -153,6 +162,7 @@ public class DataStructureV1_0Test ...@@ -153,6 +162,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetNonExistingExperimentIdentifier() public void testGetNonExistingExperimentIdentifier()
{ {
dataStructure.create();
try try
{ {
dataStructure.getExperimentIdentifier(); dataStructure.getExperimentIdentifier();
...@@ -166,6 +176,7 @@ public class DataStructureV1_0Test ...@@ -166,6 +176,7 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetExperimentIdentifier() public void testGetExperimentIdentifier()
{ {
dataStructure.create();
ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e");
dataStructure.setExperimentIdentifier(id); dataStructure.setExperimentIdentifier(id);
assertEquals(id, dataStructure.getExperimentIdentifier()); assertEquals(id, dataStructure.getExperimentIdentifier());
...@@ -174,15 +185,17 @@ public class DataStructureV1_0Test ...@@ -174,15 +185,17 @@ public class DataStructureV1_0Test
@Test @Test
public void testGetVersion() public void testGetVersion()
{ {
dataStructure.create();
assertEquals(new Version(1, 0), dataStructure.getVersion()); assertEquals(new Version(1, 0), dataStructure.getVersion());
} }
@Test @Test
public void testSaveForEmptyData() public void testCloseForEmptyData()
{ {
dataStructure.create();
try try
{ {
dataStructure.save(); dataStructure.close();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -191,12 +204,13 @@ public class DataStructureV1_0Test ...@@ -191,12 +204,13 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testSaveIfNoFormat() public void testCloseIfNoFormat()
{ {
dataStructure.create();
dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.getOriginalData().addKeyValuePair("answer", "42");
try try
{ {
dataStructure.save(); dataStructure.close();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -205,13 +219,14 @@ public class DataStructureV1_0Test ...@@ -205,13 +219,14 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testSaveIfNoExperimentID() public void testCloseIfNoExperimentID()
{ {
dataStructure.create();
dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.getOriginalData().addKeyValuePair("answer", "42");
dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0); dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0);
try try
{ {
dataStructure.save(); dataStructure.close();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -220,14 +235,15 @@ public class DataStructureV1_0Test ...@@ -220,14 +235,15 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testSaveIfNoProcessingType() public void testCloseIfNoProcessingType()
{ {
dataStructure.create();
dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.getOriginalData().addKeyValuePair("answer", "42");
dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0); dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0);
dataStructure.setExperimentIdentifier(new ExperimentIdentifier("g", "p", "e")); dataStructure.setExperimentIdentifier(new ExperimentIdentifier("g", "p", "e"));
try try
{ {
dataStructure.save(); dataStructure.close();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -236,8 +252,9 @@ public class DataStructureV1_0Test ...@@ -236,8 +252,9 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testSave() public void testClose()
{ {
dataStructure.create();
dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.getOriginalData().addKeyValuePair("answer", "42");
dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0); dataStructure.setFormat(UnknownFormat1_0.UNKNOWN_1_0);
ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e"); ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e");
...@@ -245,7 +262,7 @@ public class DataStructureV1_0Test ...@@ -245,7 +262,7 @@ public class DataStructureV1_0Test
dataStructure.setProcessingType(ProcessingType.RAW_DATA); dataStructure.setProcessingType(ProcessingType.RAW_DATA);
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
dataStructure.save(); dataStructure.close();
assertEquals(dataStructure.getVersion(), Version.loadFrom(root)); assertEquals(dataStructure.getVersion(), Version.loadFrom(root));
try try
{ {
...@@ -257,7 +274,7 @@ public class DataStructureV1_0Test ...@@ -257,7 +274,7 @@ public class DataStructureV1_0Test
} }
DataStructureV1_0 reloadedDataStructure = new DataStructureV1_0(storage); DataStructureV1_0 reloadedDataStructure = new DataStructureV1_0(storage);
reloadedDataStructure.load(); reloadedDataStructure.open();
assertEquals("42\n", Utilities.getString(reloadedDataStructure.getOriginalData(), "answer")); assertEquals("42\n", Utilities.getString(reloadedDataStructure.getOriginalData(), "answer"));
assertEquals(UnknownFormat1_0.UNKNOWN_1_0, reloadedDataStructure.getFormatedData().getFormat()); assertEquals(UnknownFormat1_0.UNKNOWN_1_0, reloadedDataStructure.getFormatedData().getFormat());
assertEquals(experimentIdentifier, reloadedDataStructure.getExperimentIdentifier()); assertEquals(experimentIdentifier, reloadedDataStructure.getExperimentIdentifier());
...@@ -265,11 +282,16 @@ public class DataStructureV1_0Test ...@@ -265,11 +282,16 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testLoadIfVersionMissing() public void testOpenIfVersionMissing()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot();
root.removeNode(Utilities.getSubDirectory(root, Version.VERSION));
storage.unmount();
try try
{ {
dataStructure.load(); dataStructure.open();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -278,33 +300,34 @@ public class DataStructureV1_0Test ...@@ -278,33 +300,34 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testLoad() public void testOpen()
{ {
IDirectory root = storage.getRoot(); createExampleDataStructure();
new Version(1, 0).saveTo(root); dataStructure.open();
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
UnknownFormat1_0.UNKNOWN_1_0.saveTo(metaData);
dataStructure.load();
} }
@Test @Test
public void testLoadVersion1_1() public void testOpenVersion1_1()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
new Version(1, 1).saveTo(root); new Version(1, 1).saveTo(root);
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA); storage.unmount();
UnknownFormat1_0.UNKNOWN_1_0.saveTo(metaData); dataStructure.open();
dataStructure.load();
} }
@Test @Test
public void testLoadVersion2_0() public void testOpenVersion2_0()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
new Version(2, 0).saveTo(root); new Version(2, 0).saveTo(root);
storage.unmount();
try try
{ {
dataStructure.load(); dataStructure.open();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
{ {
...@@ -314,26 +337,30 @@ public class DataStructureV1_0Test ...@@ -314,26 +337,30 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testLoadWithUnknownFormat1_1() public void testOpenWithUnknownFormat1_1()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
new Version(1, 0).saveTo(root); IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(1, 1)).saveTo(metaData); new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(1, 1)).saveTo(metaData);
dataStructure.load(); storage.unmount();
dataStructure.open();
assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat()); assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat());
} }
@Test @Test
public void testLoadWithUnknownFormat2_0() public void testOpenWithUnknownFormat2_0()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
new Version(1, 0).saveTo(root); IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0)).saveTo(metaData); new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0)).saveTo(metaData);
storage.unmount();
try try
{ {
dataStructure.load(); dataStructure.open();
dataStructure.getFormatedData(); dataStructure.getFormatedData();
fail("DataStructureException expected."); fail("DataStructureException expected.");
} catch (DataStructureException e) } catch (DataStructureException e)
...@@ -343,14 +370,32 @@ public class DataStructureV1_0Test ...@@ -343,14 +370,32 @@ public class DataStructureV1_0Test
} }
@Test @Test
public void testLoadWithAnotherFormat() public void testOpenWithAnotherFormat()
{ {
createExampleDataStructure();
storage.mount();
IDirectory root = storage.getRoot(); IDirectory root = storage.getRoot();
new Version(1, 0).saveTo(root); IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
new Format("another format", new Version(1,1)).saveTo(metaData); new Format("another format", new Version(1,1)).saveTo(metaData);
dataStructure.load(); storage.unmount();
dataStructure.open();
assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat()); assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat());
} }
private void createExampleDataStructure()
{
storage.mount();
IDirectory root = storage.getRoot();
new Version(1, 0).saveTo(root);
IDirectory data = root.makeDirectory(DataStructureV1_0.DIR_DATA);
IDirectory originalDataDir = data.makeDirectory(DataStructureV1_0.DIR_ORIGINAL);
originalDataDir.addKeyValuePair("hello", "world");
IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0)).saveTo(metaData);
new ExperimentIdentifier("g", "p", "e").saveTo(metaData);
ProcessingType.COMPUTED_DATA.saveTo(metaData);
storage.unmount();
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment