diff --git a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java index 21d9891ede79c5978590c29befaaa92f3299bcd2..ceba29c4e851041479af3dbb9c7b3a15c37533f5 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java +++ b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java @@ -28,6 +28,8 @@ import ch.systemsx.cisd.bds.storage.IDirectory; public class ExperimentIdentifier implements IStorable { static final String FOLDER = "experiment_identifier"; + + static final String INSTANCE_CODE = "instance_code"; static final String GROUP_CODE = "group_code"; @@ -43,12 +45,15 @@ public class ExperimentIdentifier implements IStorable final static ExperimentIdentifier loadFrom(final IDirectory directory) { final IDirectory idFolder = Utilities.getSubDirectory(directory, FOLDER); + final String instanceCode = Utilities.getTrimmedString(idFolder, INSTANCE_CODE); final String groupCode = Utilities.getTrimmedString(idFolder, GROUP_CODE); final String projectCode = Utilities.getTrimmedString(idFolder, PROJECT_CODE); final String experimentCode = Utilities.getTrimmedString(idFolder, EXPERIMENT_CODE); - return new ExperimentIdentifier(groupCode, projectCode, experimentCode); + return new ExperimentIdentifier(instanceCode, groupCode, projectCode, experimentCode); } + private final String instanceCode; + private final String groupCode; private final String projectCode; @@ -58,13 +63,16 @@ public class ExperimentIdentifier implements IStorable /** * Creates an instance for the specified codes of group, project, and experiment. * + * @param instanceCode A non-empty string of the instance code. * @param groupCode A non-empty string of the group code. * @param projectCode A non-empty string of the project code. * @param experimentCode A non-empty string of the experiment code. */ - public ExperimentIdentifier(final String groupCode, final String projectCode, + public ExperimentIdentifier(final String instanceCode, final String groupCode, final String projectCode, final String experimentCode) { + assert StringUtils.isEmpty(instanceCode) == false : "Undefined instance code"; + this.instanceCode = instanceCode; assert StringUtils.isEmpty(groupCode) == false : "Undefined group code"; this.groupCode = groupCode; assert StringUtils.isEmpty(projectCode) == false : "Undefined project code"; @@ -73,6 +81,14 @@ public class ExperimentIdentifier implements IStorable this.experimentCode = experimentCode; } + /** + * Returns the instance code; + */ + public final String getInstanceCode() + { + return instanceCode; + } + /** * Returns the group code; */ @@ -107,6 +123,7 @@ public class ExperimentIdentifier implements IStorable public final void saveTo(final IDirectory directory) { final IDirectory folder = directory.makeDirectory(FOLDER); + folder.addKeyValuePair(INSTANCE_CODE, instanceCode); folder.addKeyValuePair(GROUP_CODE, groupCode); folder.addKeyValuePair(PROJECT_CODE, projectCode); folder.addKeyValuePair(EXPERIMENT_CODE, experimentCode); @@ -128,14 +145,15 @@ public class ExperimentIdentifier implements IStorable return false; } final ExperimentIdentifier id = (ExperimentIdentifier) obj; - return id.groupCode.equals(groupCode) && id.projectCode.equals(projectCode) - && id.experimentCode.equals(experimentCode); + return id.instanceCode.equals(instanceCode) && id.groupCode.equals(groupCode) + && id.projectCode.equals(projectCode) && id.experimentCode.equals(experimentCode); } @Override public final int hashCode() { int result = 17; + result = 37 * result + instanceCode.hashCode(); result = 37 * result + groupCode.hashCode(); result = 37 * result + projectCode.hashCode(); result = 37 * result + experimentCode.hashCode(); @@ -145,8 +163,8 @@ public class ExperimentIdentifier implements IStorable @Override public final String toString() { - return "[group:" + groupCode + ",project:" + projectCode + ",experiment:" + experimentCode - + "]"; + return "[instance:" + instanceCode + ",group:" + groupCode + ",project:" + projectCode + + ",experiment:" + experimentCode + "]"; } } diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureLoaderTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureLoaderTest.java index ba55003bd89f77f91fdde5dad67ddd708b331992..76d668be6320e4f707f2a20d3c3b541a2b6d49e4 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureLoaderTest.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureLoaderTest.java @@ -45,7 +45,7 @@ public final class DataStructureLoaderTest extends AbstractFileSystemTestCase dataStructure.create(); dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.setFormat(UnknownFormatV1_0.UNKNOWN_1_0); - final ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e"); + final ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("i", "g", "p", "e"); dataStructure.setExperimentIdentifier(experimentIdentifier); final ExperimentRegistrator experimentRegistrator = new ExperimentRegistrator("john", "doe", "j@doe"); diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureTestV1_0.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureTestV1_0.java index fe21f45bfeb575fcccaa3f61e641e5aa99ca50b3..7476aa9148602cd63f4fe927e8d8991efa9ca097 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureTestV1_0.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureTestV1_0.java @@ -106,11 +106,12 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase public void testSetExperimentIdentifier() { dataStructure.create(); - final ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); + final ExperimentIdentifier id = new ExperimentIdentifier("i", "g", "p", "e"); dataStructure.setExperimentIdentifier(id); final IDirectory root = storage.getRoot(); final IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA); final IDirectory idDir = Utilities.getSubDirectory(metaData, ExperimentIdentifier.FOLDER); + assertEquals("i\n", Utilities.getString(idDir, ExperimentIdentifier.INSTANCE_CODE)); assertEquals("g\n", Utilities.getString(idDir, ExperimentIdentifier.GROUP_CODE)); assertEquals("p\n", Utilities.getString(idDir, ExperimentIdentifier.PROJECT_CODE)); assertEquals("e\n", Utilities.getString(idDir, ExperimentIdentifier.EXPERIMENT_CODE)); @@ -120,12 +121,13 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase public void testSetExperimentIdentifierTwice() { dataStructure.create(); - dataStructure.setExperimentIdentifier(new ExperimentIdentifier("a", "b", "c")); - final ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); + dataStructure.setExperimentIdentifier(new ExperimentIdentifier("0", "a", "b", "c")); + final ExperimentIdentifier id = new ExperimentIdentifier("i", "g", "p", "e"); dataStructure.setExperimentIdentifier(id); final IDirectory root = storage.getRoot(); final IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA); final IDirectory idDir = Utilities.getSubDirectory(metaData, ExperimentIdentifier.FOLDER); + assertEquals("i\n", Utilities.getString(idDir, ExperimentIdentifier.INSTANCE_CODE)); assertEquals("g\n", Utilities.getString(idDir, ExperimentIdentifier.GROUP_CODE)); assertEquals("p\n", Utilities.getString(idDir, ExperimentIdentifier.PROJECT_CODE)); assertEquals("e\n", Utilities.getString(idDir, ExperimentIdentifier.EXPERIMENT_CODE)); @@ -149,7 +151,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase public void testGetExperimentIdentifier() { dataStructure.create(); - final ExperimentIdentifier id = new ExperimentIdentifier("g", "p", "e"); + final ExperimentIdentifier id = new ExperimentIdentifier("i", "g", "p", "e"); dataStructure.setExperimentIdentifier(id); assertEquals(id, dataStructure.getExperimentIdentifier()); } @@ -240,7 +242,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase dataStructure.create(); dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.setFormat(UnknownFormatV1_0.UNKNOWN_1_0); - dataStructure.setExperimentIdentifier(new ExperimentIdentifier("g", "p", "e")); + dataStructure.setExperimentIdentifier(new ExperimentIdentifier("i", "g", "p", "e")); dataStructure.setExperimentRegistrationTimestamp(new ExperimentRegistrationTimestamp( new Date(0))); try @@ -259,7 +261,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase dataStructure.create(); dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.setFormat(UnknownFormatV1_0.UNKNOWN_1_0); - dataStructure.setExperimentIdentifier(new ExperimentIdentifier("g", "p", "e")); + dataStructure.setExperimentIdentifier(new ExperimentIdentifier("i", "g", "p", "e")); dataStructure.setExperimentRegistrator(new ExperimentRegistrator("g", "p", "g@p")); try { @@ -277,7 +279,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase dataStructure.create(); dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.setFormat(UnknownFormatV1_0.UNKNOWN_1_0); - dataStructure.setExperimentIdentifier(new ExperimentIdentifier("g", "p", "e")); + dataStructure.setExperimentIdentifier(new ExperimentIdentifier("i", "g", "p", "e")); dataStructure.setExperimentRegistrator(new ExperimentRegistrator("g", "p", "g@p")); dataStructure.setExperimentRegistrationTimestamp(new ExperimentRegistrationTimestamp( new Date(0))); @@ -297,7 +299,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase dataStructure.create(); dataStructure.getOriginalData().addKeyValuePair("answer", "42"); dataStructure.setFormat(UnknownFormatV1_0.UNKNOWN_1_0); - final ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("g", "p", "e"); + final ExperimentIdentifier experimentIdentifier = new ExperimentIdentifier("i", "g", "p", "e"); dataStructure.setExperimentIdentifier(experimentIdentifier); final ExperimentRegistrationTimestamp experimentRegistratorDate = new ExperimentRegistrationTimestamp(new Date(4711L * 4711000L)); @@ -486,7 +488,7 @@ public final class DataStructureTestV1_0 extends AbstractFileSystemTestCase final IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA); new Format(UnknownFormatV1_0.UNKNOWN_1_0.getCode(), new Version(2, 0), null) .saveTo(metaData); - new ExperimentIdentifier("g", "p", "e").saveTo(metaData); + new ExperimentIdentifier("i", "g", "p", "e").saveTo(metaData); new ExperimentRegistrationTimestamp(new Date(0)).saveTo(metaData); new ExperimentRegistrator("john", "doe", "j@doe").saveTo(metaData); new Sample("a", "CELL_PLATE", "b").saveTo(metaData); diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java index 4de2c95582b2faf973693c79d1d18dbf13aa5770..8189071b9b78b3d2bc67e106a75eafbb99fea25c 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java @@ -33,12 +33,12 @@ public final class ExperimentIdentifierTest extends EqualsHashCodeTestCase<Exper @Override protected final ExperimentIdentifier createInstance() throws Exception { - return new ExperimentIdentifier("group", "project", "experiment1"); + return new ExperimentIdentifier("instance", "group", "project", "experiment1"); } @Override protected final ExperimentIdentifier createNotEqualInstance() throws Exception { - return new ExperimentIdentifier("group", "project", "experiment2"); + return new ExperimentIdentifier("instance", "group", "project", "experiment2"); } }