diff --git a/bds/source/java/ch/systemsx/cisd/bds/Constants.java b/bds/source/java/ch/systemsx/cisd/bds/Constants.java index 0e720d6c2c9b940776461897e17a6e354b578fcd..d04d9fbf6641911b6cb4f35497a39477e9e1ad17 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/Constants.java +++ b/bds/source/java/ch/systemsx/cisd/bds/Constants.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.bds; import java.text.SimpleDateFormat; +import java.util.regex.Pattern; import ch.systemsx.cisd.common.utilities.DateFormatThreadLocal; @@ -38,6 +39,11 @@ public final class Constants public static final ThreadLocal<SimpleDateFormat> DATE_FORMAT = new DateFormatThreadLocal(DATE_FORMAT_PATTERN); + /** Regular expression pattern for <i>UUID</i>. */ + public static final Pattern UUID_PATTERN = + Pattern.compile("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + Pattern.CASE_INSENSITIVE); + private Constants() { // Can not be instantiated. diff --git a/bds/source/java/ch/systemsx/cisd/bds/DataSet.java b/bds/source/java/ch/systemsx/cisd/bds/DataSet.java index a85cf46ffb19f1a891d3e67aa8d074ee44726442..29a5ebb65616e42e07c6325ce83e24c62c187330 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/DataSet.java +++ b/bds/source/java/ch/systemsx/cisd/bds/DataSet.java @@ -172,7 +172,7 @@ public final class DataSet implements IStorable final String observableTypeCode = Utilities.getTrimmedString(idFolder, OBSERVABLE_TYPE); final Boolean isMeasured = Utilities.getBoolean(idFolder, IS_MEASURED); final Date productionTimestampOrNull = - Utilities.getDateOrNull(idFolder, PRODUCTION_TIMESTAMP); + Utilities.tryGetDate(idFolder, PRODUCTION_TIMESTAMP); final String producerCode = Utilities.getTrimmedString(idFolder, PRODUCER_CODE); final List<String> parentCodes = Utilities.getStringList(idFolder, PARENT_CODES); final String strIsComplete = Utilities.getTrimmedString(idFolder, IS_COMPLETE); diff --git a/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java index 5fb136cd34f5c5e662e9692b9fc3874e19bb74d8..0a9a55193f4d3886195020be5372471c2dac5eaa 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java +++ b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java @@ -168,7 +168,7 @@ public class DataStructureV1_0 extends AbstractDataStructure implements IDataStr * @throws DataStructureException if the experiment identifier hasn't be loaded nor hasn't be * set by {@link #setExperimentIdentifier(ExperimentIdentifier)}. */ - public final ExperimentIdentifier getExperimentIdentifier() + public ExperimentIdentifier getExperimentIdentifier() { assertOpenOrCreated(); return ExperimentIdentifier.loadFrom(getMetaDataDirectory()); @@ -177,7 +177,7 @@ public class DataStructureV1_0 extends AbstractDataStructure implements IDataStr /** * Sets the experiment identifier. Overwrites an already set or loaded value. */ - public final void setExperimentIdentifier(final ExperimentIdentifier experimentIdentifier) + public void setExperimentIdentifier(final ExperimentIdentifier experimentIdentifier) { assert experimentIdentifier != null : "Unspecified experiment identifier"; assertOpenOrCreated(); @@ -298,7 +298,7 @@ public class DataStructureV1_0 extends AbstractDataStructure implements IDataStr { throw new DataStructureException("Unspecified format."); } - if (metaDataDirectory.tryGetNode(ExperimentIdentifier.EXPERIMENT_IDENTIFIER) == null) + if (metaDataDirectory.tryGetNode(ExperimentIdentifier.FOLDER) == null) { throw new DataStructureException("Unspecified experiment identifier."); } diff --git a/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_1.java b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_1.java index c6952bd48aefe55f300267f267f79f2dd3c8d1c5..e037aad5b9879efc3e926df4ee2a880f0a086918 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_1.java +++ b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_1.java @@ -54,6 +54,26 @@ public final class DataStructureV1_1 extends DataStructureV1_0 return (SampleWithOwner) sample; } + /** + * Returns the experiment identifier with the database instance <i>UUID</i>. + * <p> + * This is only available in version 1.1. Using this method with data structure version 1.0 + * throws an exception. + * </p> + * + * @throws DataStructureException if trying to use this method with data structure of version + * 1.0. + */ + public final ExperimentIdentifierWithUUID getExperimentIdentifierWithUUID() + { + final ExperimentIdentifier experimentIdentifier = getExperimentIdentifier(); + if (experimentIdentifier instanceof ExperimentIdentifierWithUUID == false) + { + throw new DataStructureException("Can not be used in data structure v1.0."); + } + return (ExperimentIdentifierWithUUID) experimentIdentifier; + } + // // DataStructureV1_0 // @@ -104,16 +124,61 @@ public final class DataStructureV1_1 extends DataStructureV1_0 super.setSample(sample); } + /** + * Sets the experiment identifier. Overwrites an already set or loaded value. + * + * @param experimentIdentifier Must be an instance of {@link ExperimentIdentifierWithUUID}. + */ @Override - public final void performClosing() + public final void setExperimentIdentifier(final ExperimentIdentifier experimentIdentifier) + { + assert experimentIdentifier != null : "Unspecified experiment identifier."; + if (experimentIdentifier instanceof ExperimentIdentifierWithUUID == false) + { + throw new DataStructureException("Must be an instance of ExperimentIdentifierWithUUID."); + } + super.setExperimentIdentifier(experimentIdentifier); + } + + /** + * Returns the experiment identifier. + * <p> + * For backward compatibility, loads a {@link ExperimentIdentifier} when no + * <code>ExperimentIdentifierWithUUID.INSTANCE_UUID</code> node could be found in experiment + * identifier directory. + * </p> + * + * @throws DataStructureException if the experiment identifier hasn't be loaded nor hasn't be + * set by {@link #setExperimentIdentifier(ExperimentIdentifier)}. + * @return a {@link Sample} or {@link SampleWithOwner} (if v1.1). + */ + @Override + public final ExperimentIdentifier getExperimentIdentifier() { - if (getSample() instanceof SampleWithOwner) + assertOpenOrCreated(); + final IDirectory metaDataDirectory = getMetaDataDirectory(); + final IDirectory experimentIdentifierDirectory = + metaDataDirectory.tryGetNode(ExperimentIdentifier.FOLDER).tryAsDirectory(); + if (experimentIdentifierDirectory.tryGetNode(ExperimentIdentifierWithUUID.INSTANCE_UUID) == null) { - super.performClosing(); - } else + return ExperimentIdentifier.loadFrom(metaDataDirectory); + } + return ExperimentIdentifierWithUUID.loadFrom(metaDataDirectory); + } + + @Override + public final void performClosing() + { + if (getSample() instanceof SampleWithOwner == false) { throw new DataStructureException( "The owner (group or database instance) has not been set."); } + if (getExperimentIdentifier() instanceof ExperimentIdentifierWithUUID == false) + { + throw new DataStructureException( + "Instance UUID not specified for exeperiment identifier."); + } + super.performClosing(); } } diff --git a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java index ebe4309a1ed3d5cdad0905dbee81fa11a6e4b73b..44dc99374281ba14b6980611b8c98e979929f8b5 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java +++ b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java @@ -16,6 +16,9 @@ package ch.systemsx.cisd.bds; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; + import ch.systemsx.cisd.bds.exception.DataStructureException; import ch.systemsx.cisd.bds.storage.IDirectory; @@ -27,12 +30,10 @@ import ch.systemsx.cisd.bds.storage.IDirectory; */ public class ExperimentIdentifier implements IStorable { - static final String EXPERIMENT_IDENTIFIER = "experiment_identifier"; + static final String FOLDER = "experiment_identifier"; static final String INSTANCE_CODE = "instance_code"; - static final String INSTANCE_UUID = "instance_uuid"; - static final String GROUP_CODE = "group_code"; static final String PROJECT_CODE = "project_code"; @@ -44,9 +45,9 @@ public class ExperimentIdentifier implements IStorable * * @throws DataStructureException if file missing. */ - final static ExperimentIdentifier loadFrom(final IDirectory directory) + static ExperimentIdentifier loadFrom(final IDirectory directory) { - final IDirectory idFolder = Utilities.getSubDirectory(directory, EXPERIMENT_IDENTIFIER); + 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); @@ -63,7 +64,8 @@ public class ExperimentIdentifier implements IStorable private final String experimentCode; /** - * Creates an instance for the specified codes of group, project, and experiment. + * Creates an instance for the specified database instance and 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. @@ -83,8 +85,38 @@ public class ExperimentIdentifier implements IStorable this.experimentCode = experimentCode; } + final ToStringBuilder createToStringBuilder() + { + final ToStringBuilder builder = new ToStringBuilder(); + builder.append(INSTANCE_CODE, instanceCode); + builder.append(GROUP_CODE, groupCode); + builder.append(PROJECT_CODE, projectCode); + builder.append(EXPERIMENT_CODE, experimentCode); + return builder; + } + + final EqualsBuilder createEqualsBuilder(final ExperimentIdentifier experimentIdentifier) + { + final EqualsBuilder builder = new EqualsBuilder(); + builder.append(instanceCode, experimentIdentifier.instanceCode); + builder.append(groupCode, experimentIdentifier.groupCode); + builder.append(projectCode, experimentIdentifier.projectCode); + builder.append(experimentCode, experimentIdentifier.experimentCode); + return builder; + } + + final HashCodeBuilder createHashCodeBuilder() + { + final HashCodeBuilder builder = new HashCodeBuilder(); + builder.append(instanceCode); + builder.append(groupCode); + builder.append(projectCode); + builder.append(experimentCode); + return builder; + } + /** - * Returns the instance code; + * Returns the instance code. */ public final String getInstanceCode() { @@ -92,7 +124,7 @@ public class ExperimentIdentifier implements IStorable } /** - * Returns the group code; + * Returns the group code. */ public final String getGroupCode() { @@ -100,7 +132,7 @@ public class ExperimentIdentifier implements IStorable } /** - * Returns the project code; + * Returns the project code. */ public final String getProjectCode() { @@ -108,7 +140,7 @@ public class ExperimentIdentifier implements IStorable } /** - * Returns the experiment code; + * Returns the experiment code. */ public final String getExperimentCode() { @@ -122,9 +154,9 @@ public class ExperimentIdentifier implements IStorable /** * Saves this instance to the specified directory. */ - public final void saveTo(final IDirectory directory) + public void saveTo(final IDirectory directory) { - final IDirectory folder = directory.makeDirectory(EXPERIMENT_IDENTIFIER); + final IDirectory folder = directory.makeDirectory(FOLDER); folder.addKeyValuePair(INSTANCE_CODE, instanceCode); folder.addKeyValuePair(GROUP_CODE, groupCode); folder.addKeyValuePair(PROJECT_CODE, projectCode); @@ -146,31 +178,19 @@ public class ExperimentIdentifier implements IStorable { return false; } - final ExperimentIdentifier id = (ExperimentIdentifier) obj; - return id.instanceCode.equals(instanceCode) && id.groupCode.equals(groupCode) - && id.projectCode.equals(projectCode) && id.experimentCode.equals(experimentCode); + return createEqualsBuilder((ExperimentIdentifier) obj).isEquals(); } @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(); - return result; + return createHashCodeBuilder().toHashCode(); } @Override public final String toString() { - final ToStringBuilder builder = new ToStringBuilder(); - builder.append(INSTANCE_CODE, instanceCode); - builder.append(GROUP_CODE, groupCode); - builder.append(PROJECT_CODE, projectCode); - builder.append(EXPERIMENT_CODE, experimentCode); - return builder.toString(); + return createToStringBuilder().toString(); } } diff --git a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUID.java b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUID.java new file mode 100644 index 0000000000000000000000000000000000000000..03692c237e6d0d9d948de945d28d74a36ae8d047 --- /dev/null +++ b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUID.java @@ -0,0 +1,109 @@ +/* + * Copyright 2008 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.bds; + +import ch.systemsx.cisd.bds.exception.DataStructureException; +import ch.systemsx.cisd.bds.storage.IDirectory; + +/** + * A small {@link ExperimentIdentifier} extension which adds the reading/writing of database + * instance <i>UUID</i>. + * <p> + * Does not override {@link #equals(Object)} resp. {@link #hashCode()} methods as equality for this + * class is based on the same rules. + * </p> + * + * @author Christian Ribeaud + */ +public final class ExperimentIdentifierWithUUID extends ExperimentIdentifier +{ + static final String INSTANCE_UUID = "instance_uuid"; + + private final String instanceUUID; + + /** + * Creates an instance for the specified {@link ExperimentIdentifier} and given database + * instance <i>UUID</i>. + * + * @param instanceUUID A non-empty string of the instance <i>UUID</i>. + * @param experimentIdentifier A non-<code>null</code> experiment identifier. + */ + public ExperimentIdentifierWithUUID(final ExperimentIdentifier experimentIdentifier, + final String instanceUUID) + { + this(experimentIdentifier.getInstanceCode(), instanceUUID, experimentIdentifier + .getGroupCode(), experimentIdentifier.getProjectCode(), experimentIdentifier + .getExperimentCode()); + } + + /** + * Creates an instance for the specified database instance and codes of group, project and + * experiment. + * + * @param instanceCode A non-empty string of the instance code. + * @param instanceUUID A non-empty string of the instance <i>UUID</i>. + * @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 ExperimentIdentifierWithUUID(final String instanceCode, final String instanceUUID, + final String groupCode, final String projectCode, final String experimentCode) + { + super(instanceCode, groupCode, projectCode, experimentCode); + assert StringUtils.isEmpty(instanceUUID) == false : "Undefined instance UUID"; + this.instanceUUID = instanceUUID; + } + + /** + * Returns the instance <i>UUID</i>. + */ + public final String getInstanceUUID() + { + return instanceUUID; + } + + // + // ExperimentIdentifier + // + + /** + * Loads the experiment identifier from the specified directory. + * + * @throws DataStructureException if file missing. + */ + final static ExperimentIdentifierWithUUID 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); + final String instanceUUID = + Utilities.getTrimmedString(idFolder, ExperimentIdentifierWithUUID.INSTANCE_UUID); + return new ExperimentIdentifierWithUUID(instanceCode, instanceUUID, groupCode, projectCode, + experimentCode); + + } + + @Override + public final void saveTo(final IDirectory directory) + { + super.saveTo(directory); + final IDirectory folder = directory.makeDirectory(FOLDER); + folder.addKeyValuePair(ExperimentIdentifierWithUUID.INSTANCE_UUID, instanceUUID); + } +} diff --git a/bds/source/java/ch/systemsx/cisd/bds/ExperimentRegistrationTimestamp.java b/bds/source/java/ch/systemsx/cisd/bds/ExperimentRegistrationTimestamp.java index 00b5ae18761efe9c4d0b133d11c3ed05ef49c4b4..57631b8a227abb249d912b836ed1ddbc69fa1ba1 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/ExperimentRegistrationTimestamp.java +++ b/bds/source/java/ch/systemsx/cisd/bds/ExperimentRegistrationTimestamp.java @@ -39,7 +39,7 @@ public final class ExperimentRegistrationTimestamp implements IStorable final static ExperimentRegistrationTimestamp loadFrom(final IDirectory directory) { - return new ExperimentRegistrationTimestamp(Utilities.getDateOrNull(directory, + return new ExperimentRegistrationTimestamp(Utilities.tryGetDate(directory, EXPERIMENT_REGISTRATION_TIMESTAMP)); } diff --git a/bds/source/java/ch/systemsx/cisd/bds/SampleWithOwner.java b/bds/source/java/ch/systemsx/cisd/bds/SampleWithOwner.java index 410a2c29f12800ab38f4486156c4bdfbe7547e24..051e25b96a91e99ed73fb53f32c307ea5f5c3371 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/SampleWithOwner.java +++ b/bds/source/java/ch/systemsx/cisd/bds/SampleWithOwner.java @@ -34,7 +34,7 @@ public final class SampleWithOwner extends Sample static final String INSTANCE_CODE = ExperimentIdentifier.INSTANCE_CODE; - static final String INSTANCE_UUID = ExperimentIdentifier.INSTANCE_UUID; + static final String INSTANCE_UUID = ExperimentIdentifierWithUUID.INSTANCE_UUID; private final String groupCode; diff --git a/bds/source/java/ch/systemsx/cisd/bds/Utilities.java b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java index f99601db8498287d7f91e7b6ea9b6edcaeabd886..2bc4f3a28b10d1b92a2083b826f0472fb5ee5c62 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/Utilities.java +++ b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java @@ -196,7 +196,7 @@ public class Utilities * * @return the parsed date or <code>null</code> if the value is empty. */ - public final static Date getDateOrNull(final IDirectory directory, final String name) + public final static Date tryGetDate(final IDirectory directory, final String name) throws DataStructureException { // No assertion here as 'getString(IDirectory, String)' already does it. diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java index aefb7f619be46096907d09339f3e712de4230d85..44e4c9bec41c4a41b27a9fc805a28f6e459a0f3e 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java +++ b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java @@ -200,6 +200,8 @@ public abstract class AbstractChecker private static final String IO_EXCEPTION_WHILE_COMPARING_FILES = "I/O Exception while comparing file '%s' with file '%s': %s"; + public static final String MSG_WRONG_UUID = "Value '%s' found in file '%s' is not a UUID"; + protected static final String path(final String... args) { final String separator = "/"; diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java index 5ccb3ebb6340feecc498872230792d5815baee41..bfb8b4e94ac3df7a6a17fcdff5f4588b0afcd313 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java +++ b/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.bds.check; import java.io.File; +import ch.systemsx.cisd.bds.Constants; import ch.systemsx.cisd.bds.StringUtils; import ch.systemsx.cisd.bds.Utilities; import ch.systemsx.cisd.bds.exception.DataStructureException; @@ -151,7 +152,7 @@ public final class StructureChecker extends AbstractChecker final IDirectory sample = Utilities.getSubDirectory(metadata, AbstractChecker.SAMPLE); checkFileNotEmptyAndTrimmed(sample, AbstractChecker.GROUP_CODE); checkFileNotEmptyAndTrimmed(sample, AbstractChecker.INSTANCE_CODE); - checkFileNotEmptyAndTrimmed(sample, AbstractChecker.INSTANCE_UUID); + checkFileContainsUUID(sample, AbstractChecker.INSTANCE_UUID); checkFileNotEmptyAndTrimmed(sample, AbstractChecker.TYPE_DESCRIPTION); checkFileNotEmptyAndTrimmed(sample, AbstractChecker.TYPE_CODE); checkFileNotEmptyAndTrimmed(sample, AbstractChecker.CODE); @@ -188,6 +189,7 @@ public final class StructureChecker extends AbstractChecker final IDirectory experimentIdentifier = Utilities.getSubDirectory(metadata, AbstractChecker.EXPERIMENT_IDENTIFIER); checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.INSTANCE_CODE); + checkFileContainsUUID(experimentIdentifier, AbstractChecker.INSTANCE_UUID); checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.GROUP_CODE); checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.PROJECT_CODE); checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.EXPERIMENT_CODE); @@ -266,7 +268,7 @@ public final class StructureChecker extends AbstractChecker try { checkTrimmed(problemReport, dataDir, name); - if (Utilities.getDateOrNull(dataDir, name) == null) + if (Utilities.tryGetDate(dataDir, name) == null) { throw new DataStructureException(String.format( AbstractChecker.MSG_DOES_NOT_CONTAIN_TIMESTAMP, name)); @@ -277,7 +279,24 @@ public final class StructureChecker extends AbstractChecker } } - private void checkFileNotEmpty(final IDirectory dataDir, final String name, + private final void checkFileContainsUUID(final IDirectory directory, final String name) + { + try + { + checkTrimmed(problemReport, directory, name); + final String value = Utilities.getTrimmedString(directory, name); + if (Constants.UUID_PATTERN.matcher(value).matches() == false) + { + throw new DataStructureException(String.format(AbstractChecker.MSG_WRONG_UUID, + value, name)); + } + } catch (final Exception e) + { + problemReport.error(e.getMessage()); + } + } + + private final void checkFileNotEmpty(final IDirectory dataDir, final String name, final boolean mustBeTrimmed) { try diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataSetFileSystemTestCase.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataSetFileSystemTestCase.java index d5ae579f6a97747bd3199b4d0d312113c6f82ce6..d50db73393a764266a671b2699bb2c3c9c30dcc2 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataSetFileSystemTestCase.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataSetFileSystemTestCase.java @@ -53,7 +53,7 @@ public final class DataSetFileSystemTestCase extends AbstractFileSystemTestCase assertEquals(0, Utilities.getStringList(folder, DataSet.PARENT_CODES).size()); assertEquals(StringUtils.EMPTY_STRING, Utilities.getTrimmedString(folder, DataSet.PRODUCER_CODE)); - assertNull(Utilities.getDateOrNull(folder, DataSet.PRODUCTION_TIMESTAMP)); + assertNull(Utilities.tryGetDate(folder, DataSet.PRODUCTION_TIMESTAMP)); assertEquals(StringUtils.EMPTY_STRING, Utilities.getTrimmedString(folder, DataSet.PRODUCTION_TIMESTAMP)); } @@ -82,7 +82,7 @@ public final class DataSetFileSystemTestCase extends AbstractFileSystemTestCase checkBasicDataSet(folder, dataSetCode, observableType, Boolean.TRUE); assertEquals(0, Utilities.getStringList(folder, DataSet.PARENT_CODES).size()); assertEquals(producerCode, Utilities.getTrimmedString(folder, DataSet.PRODUCER_CODE)); - assertEquals(productionTimestamp, Utilities.getDateOrNull(folder, + assertEquals(productionTimestamp, Utilities.tryGetDate(folder, DataSet.PRODUCTION_TIMESTAMP)); } @@ -114,7 +114,7 @@ public final class DataSetFileSystemTestCase extends AbstractFileSystemTestCase assertEquals(parentCode, parentList.get(0)); assertEquals(StringUtils.EMPTY_STRING, Utilities.getTrimmedString(folder, DataSet.PRODUCER_CODE)); - assertNull(Utilities.getDateOrNull(folder, DataSet.PRODUCTION_TIMESTAMP)); + assertNull(Utilities.tryGetDate(folder, DataSet.PRODUCTION_TIMESTAMP)); assertEquals(StringUtils.EMPTY_STRING, Utilities.getTrimmedString(folder, DataSet.PRODUCTION_TIMESTAMP)); } diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java index 49cf8be238c5575ff31151ac4fbc4824869a6a84..ee4d83f580fc26176081960fa5d31c6bbd0c2d44 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java @@ -110,8 +110,7 @@ public final class DataStructureV1_0Test extends AbstractFileSystemTestCase 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.EXPERIMENT_IDENTIFIER); + 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)); @@ -127,8 +126,7 @@ public final class DataStructureV1_0Test extends AbstractFileSystemTestCase 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.EXPERIMENT_IDENTIFIER); + 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)); @@ -145,7 +143,7 @@ public final class DataStructureV1_0Test extends AbstractFileSystemTestCase fail("DataStructureException expected."); } catch (final DataStructureException e) { - assertPartOfString(ExperimentIdentifier.EXPERIMENT_IDENTIFIER, e.getMessage()); + assertPartOfString(ExperimentIdentifier.FOLDER, e.getMessage()); } } diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_1Test.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_1Test.java index 61a598b833b2e1d481a44af1af5ce7c714d24362..2ec7debc0b9ea531683f77198f83408b6e3eb2e9 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_1Test.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_1Test.java @@ -40,10 +40,21 @@ public final class DataStructureV1_1Test extends AbstractFileSystemTestCase { private static final Sample SAMPLE = new Sample("a", "CELL_PLATE", "b"); + private static final ExperimentIdentifier EXPERIMENT_IDENTIFIER = + new ExperimentIdentifier(SampleWithOwnerTest.INSTANCE_CODE, + SampleWithOwnerTest.GROUP_CODE, ExperimentIdentifierTest.PROJECT_CODE, + ExperimentIdentifierTest.EXPERMENT_CODE); + private FileStorage storage; private DataStructureV1_1 dataStructure; + private final static SampleWithOwner createSampleWithOwner() + { + return new SampleWithOwner(SAMPLE, SampleWithOwnerTest.INSTANCE_UUID, + SampleWithOwnerTest.INSTANCE_CODE, ""); + } + // // AbstractFileSystemTestCase // @@ -76,17 +87,14 @@ public final class DataStructureV1_1Test extends AbstractFileSystemTestCase { // Nothing to do here. } - dataStructure.setSample(new SampleWithOwner(SAMPLE, - SampleWithOwnerTest.INSTANCE_GLOBAL_CODE, SampleWithOwnerTest.INSTANCE_CODE, "")); + dataStructure.setSample(createSampleWithOwner()); } @Test public final void testGetSample() { dataStructure.create(); - final SampleWithOwner sampleWithOwner = - new SampleWithOwner(SAMPLE, SampleWithOwnerTest.INSTANCE_GLOBAL_CODE, - SampleWithOwnerTest.INSTANCE_CODE, ""); + final SampleWithOwner sampleWithOwner = createSampleWithOwner(); dataStructure.setSample(sampleWithOwner); final Sample sample = dataStructure.getSample(); assertTrue(sample instanceof SampleWithOwner); @@ -96,7 +104,35 @@ public final class DataStructureV1_1Test extends AbstractFileSystemTestCase } @Test - public void testOpenVersionV1_0() + public final void testGetExperimentIdentifier() + { + dataStructure.create(); + final ExperimentIdentifierWithUUID experimentIdentifierWithUUID = + ExperimentIdentifierWithUUIDTest.createExperimentIdentifierWithUUID(); + dataStructure.setExperimentIdentifier(experimentIdentifierWithUUID); + final ExperimentIdentifier experimentIdentifier = dataStructure.getExperimentIdentifier(); + assertTrue(experimentIdentifier instanceof ExperimentIdentifierWithUUID); + assertEquals(SampleWithOwnerTest.INSTANCE_UUID, + ((ExperimentIdentifierWithUUID) experimentIdentifier).getInstanceUUID()); + } + + @Test + public final void testSetExperimentIdentifier() + { + dataStructure.create(); + try + { + dataStructure.setExperimentIdentifier(EXPERIMENT_IDENTIFIER); + fail(); + } catch (final DataStructureException ex) + { + // Nothing to do here. + } + dataStructure.setExperimentIdentifier(ExperimentIdentifierWithUUIDTest.createExperimentIdentifierWithUUID()); + } + + @Test + public final void testOpenVersionV1_0() { DataStructureV1_0Test.createExampleDataStructure(storage, new Version(1, 0)); storage.mount(); @@ -136,10 +172,8 @@ public final class DataStructureV1_1Test extends AbstractFileSystemTestCase { // Nothing to do here. } - final SampleWithOwner sampleWithOwner = - new SampleWithOwner(SAMPLE, SampleWithOwnerTest.INSTANCE_GLOBAL_CODE, - SampleWithOwnerTest.INSTANCE_CODE, ""); - dataStructure.setSample(sampleWithOwner); + dataStructure.setSample(createSampleWithOwner()); + dataStructure.setExperimentIdentifier(ExperimentIdentifierWithUUIDTest.createExperimentIdentifierWithUUID()); dataStructure.close(); } } diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java index e9c27283f176ac6b70830e5e7449e893a314ceb8..e64ceab7faba1657752bca5d0b5a3ac73ec40e82 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierTest.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.bds; +import static org.testng.AssertJUnit.assertFalse; + import org.testng.annotations.Test; import ch.systemsx.cisd.common.test.EqualsHashCodeTestCase; @@ -29,6 +31,35 @@ import ch.systemsx.cisd.common.test.EqualsHashCodeTestCase; public final class ExperimentIdentifierTest extends EqualsHashCodeTestCase<ExperimentIdentifier> { + static final String EXPERMENT_CODE = "EXP1"; + + static final String PROJECT_CODE = "PROJ1"; + + @Test + public final void testConstructor() + { + boolean fail = true; + try + { + new ExperimentIdentifier(SampleWithOwner.INSTANCE_CODE, SampleWithOwner.GROUP_CODE, + null, null); + } catch (final AssertionError ex) + { + fail = false; + } + assertFalse(fail); + fail = true; + try + { + new ExperimentIdentifier(SampleWithOwner.INSTANCE_CODE, SampleWithOwner.GROUP_CODE, + PROJECT_CODE, ""); + } catch (final AssertionError ex) + { + fail = false; + } + assertFalse(fail); + } + // // EqualsHashCodeTestCase // diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUIDTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUIDTest.java new file mode 100644 index 0000000000000000000000000000000000000000..facb3f431dfe48b874c4d56ab27b48595f10afcf --- /dev/null +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/ExperimentIdentifierWithUUIDTest.java @@ -0,0 +1,86 @@ +/* + * Copyright 2008 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.bds; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; + +import org.testng.annotations.Test; + +import ch.systemsx.cisd.bds.storage.IDirectory; +import ch.systemsx.cisd.bds.storage.filesystem.NodeFactory; +import ch.systemsx.cisd.common.filesystem.AbstractFileSystemTestCase; + +/** + * Test cases for corresponding {@link ExperimentIdentifierWithUUID} class. + * + * @author Christian Ribeaud + */ +public final class ExperimentIdentifierWithUUIDTest extends AbstractFileSystemTestCase +{ + final static ExperimentIdentifierWithUUID createExperimentIdentifierWithUUID() + { + return new ExperimentIdentifierWithUUID(SampleWithOwnerTest.INSTANCE_CODE, + SampleWithOwnerTest.INSTANCE_UUID, SampleWithOwnerTest.GROUP_CODE, + ExperimentIdentifierTest.PROJECT_CODE, ExperimentIdentifierTest.EXPERMENT_CODE); + } + + @Test + public final void testConstructor() + { + boolean fail = true; + try + { + new ExperimentIdentifierWithUUID(SampleWithOwner.INSTANCE_CODE, null, + SampleWithOwner.GROUP_CODE, ExperimentIdentifierTest.PROJECT_CODE, + ExperimentIdentifierTest.EXPERMENT_CODE); + } catch (final AssertionError ex) + { + fail = false; + } + assertFalse(fail); + fail = true; + try + { + new ExperimentIdentifierWithUUID(SampleWithOwner.INSTANCE_CODE, "", + SampleWithOwner.GROUP_CODE, ExperimentIdentifierTest.PROJECT_CODE, + ExperimentIdentifierTest.EXPERMENT_CODE); + } catch (final AssertionError ex) + { + fail = false; + } + assertFalse(fail); + new ExperimentIdentifierWithUUID(SampleWithOwner.INSTANCE_CODE, + SampleWithOwner.INSTANCE_UUID, SampleWithOwner.GROUP_CODE, + ExperimentIdentifierTest.PROJECT_CODE, ExperimentIdentifierTest.EXPERMENT_CODE); + } + + @Test + public final void testLoadFrom() + { + final IDirectory directory = NodeFactory.createDirectoryNode(workingDirectory); + final ExperimentIdentifierWithUUID experimentIdentifier = + createExperimentIdentifierWithUUID(); + experimentIdentifier.saveTo(directory); + final ExperimentIdentifierWithUUID loaded = + ExperimentIdentifierWithUUID.loadFrom(directory); + assertEquals(experimentIdentifier, loaded); + assertNotNull(loaded.getInstanceUUID()); + assertEquals(experimentIdentifier.getInstanceUUID(), loaded.getInstanceUUID()); + } +} diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/SampleWithOwnerTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/SampleWithOwnerTest.java index b5c5fa753ed543dccde726577afe5c6ac76e14ce..d5fb6de16ebcc9ea953d0d5a2718bf48ad4ca69d 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/SampleWithOwnerTest.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/SampleWithOwnerTest.java @@ -42,7 +42,7 @@ public final class SampleWithOwnerTest extends AbstractFileSystemTestCase static final String INSTANCE_CODE = "DB1"; - static final String INSTANCE_GLOBAL_CODE = "111-222"; + static final String INSTANCE_UUID = "111-222"; static final String GROUP_CODE = "G1"; @@ -89,8 +89,8 @@ public final class SampleWithOwnerTest extends AbstractFileSystemTestCase { return new Object[][] { - { INSTANCE_GLOBAL_CODE, INSTANCE_CODE, GROUP_CODE }, - { INSTANCE_GLOBAL_CODE, INSTANCE_CODE, "" }, }; + { INSTANCE_UUID, INSTANCE_CODE, GROUP_CODE }, + { INSTANCE_UUID, INSTANCE_CODE, "" }, }; } @Test(dataProvider = "getSampleData") @@ -107,12 +107,12 @@ public final class SampleWithOwnerTest extends AbstractFileSystemTestCase { assertEquals(GROUP_CODE, newSample.getGroupCode()); assertEquals(INSTANCE_CODE, newSample.getInstanceCode()); - assertEquals(INSTANCE_GLOBAL_CODE, newSample.getInstanceUUID()); + assertEquals(INSTANCE_UUID, newSample.getInstanceUUID()); } else { assertEquals("", newSample.getGroupCode()); assertEquals(INSTANCE_CODE, newSample.getInstanceCode()); - assertEquals(INSTANCE_GLOBAL_CODE, newSample.getInstanceUUID()); + assertEquals(INSTANCE_UUID, newSample.getInstanceUUID()); } } } diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java index 91aba071c6fd9905cf2033e8dabb9e2feb55c5bc..63063122f1018b9d4110a58619373662aa4d3c05 100644 --- a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java +++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java @@ -69,16 +69,17 @@ public class StructureCheckerTest extends AbstractCheckerTest @Test public final void testMissingFiles() { - - assertEquals(new StructureChecker(verbose).getStructureConsistencyReport( - new File("testdata/bds_missing_files")).numberOfProblems(), 22); + final ProblemReport report = + new StructureChecker(verbose).getStructureConsistencyReport(new File( + "testdata/bds_missing_files")); + assertEquals(report.numberOfProblems(), 23); } @Test public final void testEmptyFiles() { assertEquals(new StructureChecker(verbose).getStructureConsistencyReport( - new File("testdata/bds_empty_files")).numberOfProblems(), 26); + new File("testdata/bds_empty_files")).numberOfProblems(), 27); } @Test @@ -87,7 +88,7 @@ public class StructureCheckerTest extends AbstractCheckerTest final ProblemReport structureConsistencyReport = new StructureChecker(verbose).getStructureConsistencyReport(new File( "testdata/bds_wrong_values")); - assertEquals(structureConsistencyReport.numberOfProblems(), 10); + assertEquals(structureConsistencyReport.numberOfProblems(), 11); } @Test @@ -96,38 +97,32 @@ public class StructureCheckerTest extends AbstractCheckerTest final File dir = new File("testdata/bds_new_lines"); final String path = dir.getAbsolutePath(); - assertEquals(new StructureChecker(verbose).getStructureConsistencyReport(dir).toString(), - errorFoundNotTrimmed(path, "major", "/version") - + errorFoundNotTrimmed(path, "minor", "/version") - + errorFoundNotTrimmed(path, "code", "/metadata/data_set") - + errorFoundNotTrimmed(path, "production_timestamp", "/metadata/data_set") - + errorFoundNotTrimmed(path, "producer_code", "/metadata/data_set") - + errorFoundNotTrimmed(path, "observable_type", "/metadata/data_set") - + errorFoundNotTrimmed(path, "is_measured", "/metadata/data_set") - + errorFoundNotTrimmed(path, "is_complete", "/metadata/data_set") - + errorFoundNotTrimmed(path, "major", "/metadata/format/version") - + errorFoundNotTrimmed(path, "minor", "/metadata/format/version") - + errorFoundNotTrimmed(path, "code", "/metadata/format") - + errorFoundNotTrimmed(path, "instance_code", - "/metadata/experiment_identifier") - + errorFoundNotTrimmed(path, "group_code", - "/metadata/experiment_identifier") - + errorFoundNotTrimmed(path, "project_code", - "/metadata/experiment_identifier") - + errorFoundNotTrimmed(path, "experiment_code", - "/metadata/experiment_identifier") - + errorFoundNotTrimmed(path, "experiment_registration_timestamp", - "/metadata") - + errorFoundNotTrimmed(path, "first_name", - "/metadata/experiment_registrator") - + errorFoundNotTrimmed(path, "last_name", - "/metadata/experiment_registrator") - + errorFoundNotTrimmed(path, "email", "/metadata/experiment_registrator") - + errorFoundNotTrimmed(path, "group_code", "/metadata/sample") - + errorFoundNotTrimmed(path, "instance_code", "/metadata/sample") - + errorFoundNotTrimmed(path, "instance_uuid", "/metadata/sample") - + errorFoundNotTrimmed(path, "type_description", "/metadata/sample") - + errorFoundNotTrimmed(path, "type_code", "/metadata/sample") - + errorFoundNotTrimmed(path, "code", "/metadata/sample")); + assertEquals(errorFoundNotTrimmed(path, "major", "/version") + + errorFoundNotTrimmed(path, "minor", "/version") + + errorFoundNotTrimmed(path, "code", "/metadata/data_set") + + errorFoundNotTrimmed(path, "production_timestamp", "/metadata/data_set") + + errorFoundNotTrimmed(path, "producer_code", "/metadata/data_set") + + errorFoundNotTrimmed(path, "observable_type", "/metadata/data_set") + + errorFoundNotTrimmed(path, "is_measured", "/metadata/data_set") + + errorFoundNotTrimmed(path, "is_complete", "/metadata/data_set") + + errorFoundNotTrimmed(path, "major", "/metadata/format/version") + + errorFoundNotTrimmed(path, "minor", "/metadata/format/version") + + errorFoundNotTrimmed(path, "code", "/metadata/format") + + errorFoundNotTrimmed(path, "instance_code", "/metadata/experiment_identifier") + + errorFoundNotTrimmed(path, "instance_uuid", "/metadata/experiment_identifier") + + errorFoundNotTrimmed(path, "group_code", "/metadata/experiment_identifier") + + errorFoundNotTrimmed(path, "project_code", "/metadata/experiment_identifier") + + errorFoundNotTrimmed(path, "experiment_code", "/metadata/experiment_identifier") + + errorFoundNotTrimmed(path, "experiment_registration_timestamp", "/metadata") + + errorFoundNotTrimmed(path, "first_name", "/metadata/experiment_registrator") + + errorFoundNotTrimmed(path, "last_name", "/metadata/experiment_registrator") + + errorFoundNotTrimmed(path, "email", "/metadata/experiment_registrator") + + errorFoundNotTrimmed(path, "group_code", "/metadata/sample") + + errorFoundNotTrimmed(path, "instance_code", "/metadata/sample") + + errorFoundNotTrimmed(path, "instance_uuid", "/metadata/sample") + + errorFoundNotTrimmed(path, "type_description", "/metadata/sample") + + errorFoundNotTrimmed(path, "type_code", "/metadata/sample") + + errorFoundNotTrimmed(path, "code", "/metadata/sample"), new StructureChecker( + verbose).getStructureConsistencyReport(dir).toString()); } } diff --git a/bds/testdata/bds_empty_files/metadata/experiment_identifier/instance_uuid b/bds/testdata/bds_empty_files/metadata/experiment_identifier/instance_uuid new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_uuid b/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_uuid new file mode 100644 index 0000000000000000000000000000000000000000..8d3164211f85087e9c63112efd0edf098a9b30c9 --- /dev/null +++ b/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_uuid @@ -0,0 +1,2 @@ + +550E8400-E29B-41E4-A716-446655440000 diff --git a/bds/testdata/bds_new_lines/metadata/sample/instance_uuid b/bds/testdata/bds_new_lines/metadata/sample/instance_uuid index df2eecf1f87a6e653d9687a0c6248ef1341e57a4..8d3164211f85087e9c63112efd0edf098a9b30c9 100644 --- a/bds/testdata/bds_new_lines/metadata/sample/instance_uuid +++ b/bds/testdata/bds_new_lines/metadata/sample/instance_uuid @@ -1,2 +1,2 @@ -3VCP1 +550E8400-E29B-41E4-A716-446655440000 diff --git a/bds/testdata/bds_ok/metadata/experiment_identifier/instance_uuid b/bds/testdata/bds_ok/metadata/experiment_identifier/instance_uuid new file mode 100644 index 0000000000000000000000000000000000000000..f4b5f296ddffcccbdbc8d2b1aeca929e174a38d6 --- /dev/null +++ b/bds/testdata/bds_ok/metadata/experiment_identifier/instance_uuid @@ -0,0 +1 @@ +550E8400-E29B-41E4-A716-446655440000 \ No newline at end of file diff --git a/bds/testdata/bds_ok/metadata/sample/instance_uuid b/bds/testdata/bds_ok/metadata/sample/instance_uuid index d04cb00f615f617e91c77f5faa20858c4f7183e5..f4b5f296ddffcccbdbc8d2b1aeca929e174a38d6 100644 --- a/bds/testdata/bds_ok/metadata/sample/instance_uuid +++ b/bds/testdata/bds_ok/metadata/sample/instance_uuid @@ -1 +1 @@ -3VCP1 \ No newline at end of file +550E8400-E29B-41E4-A716-446655440000 \ No newline at end of file diff --git a/integration-tests/run.sh b/integration-tests/run.sh index f8126a218a7cfae640ab0145e1f391d423c0cc7f..69b072637770575710547214135f1c43eb44ff22 100755 --- a/integration-tests/run.sh +++ b/integration-tests/run.sh @@ -663,6 +663,7 @@ function assert_correct_content_of_plate_3VCP1_in_store { assert_equals_as_in_file CISD $metadata_dir/experiment_identifier/group_code assert_equals_as_in_file NEMO $metadata_dir/experiment_identifier/project_code assert_equals_as_in_file EXP1 $metadata_dir/experiment_identifier/experiment_code + assert_file_exists $metadata_dir/experiment_identifier/instance_uuid # Experiment registration assert_file_exists $metadata_dir/experiment_registration_timestamp assert_file_exists $metadata_dir/experiment_registrator/email