diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/StorageProcessor.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/StorageProcessor.java index e0245ac168f5e20acb4697acb70b0a2e206263eb..1c319511cc7e7e8c88e372b4d6e9086fb83e5514 100644 --- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/StorageProcessor.java +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/StorageProcessor.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.cina.dss; import java.io.File; import java.util.Properties; +import ch.systemsx.cisd.cina.dss.info.EntityRegistrationSuccessEmail; import ch.systemsx.cisd.common.mail.IMailClient; import ch.systemsx.cisd.etlserver.AbstractDelegatingStorageProcessor; import ch.systemsx.cisd.etlserver.IStorageProcessor; @@ -58,6 +59,11 @@ public class StorageProcessor extends AbstractDelegatingStorageProcessor final ITypeExtractor typeExtractor, final IMailClient mailClient, final File incomingDataSetDirectory, final File rootDir) { + // Create the email first because the email looks into the directory to determine its + // content. + EntityRegistrationSuccessEmail successEmail = + new EntityRegistrationSuccessEmail(dataSetInformation, incomingDataSetDirectory); + File answer = super.storeData(dataSetInformation, typeExtractor, mailClient, incomingDataSetDirectory, rootDir); @@ -68,9 +74,8 @@ public class StorageProcessor extends AbstractDelegatingStorageProcessor emailAddress = defaultEmailAddress; } - mailClient.sendMessage("[CINA] Registered Experiment", - "Experment was successfully registered. Use the following properties file : experiment.code=" - + dataSetInformation.getExperimentIdentifier(), null, null, emailAddress); + mailClient.sendMessage(successEmail.getSubject(), successEmail.getContent(), null, null, + emailAddress); return answer; } diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractor.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractor.java index 976ff280cec6dd7a7d7c1fb80492d4d54fae9e05..753b7b8ab2eb7420cdade23d02f6882b993d7e8e 100644 --- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractor.java +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractor.java @@ -70,14 +70,14 @@ public class CinaDataSetInfoExtractor implements IDataSetInfoExtractor switch (folderType) { case DATA_SET: - processDataSetFolder(metadata.tryMetadataFile(), dataSetInformation, openbisService); + processDataSetFolder(metadata.tryGetMetadataFile(), dataSetInformation, openbisService); break; case EXPERIMENT: - processExperimentFolder(metadata.tryMetadataFile(), dataSetInformation, + processExperimentFolder(metadata.tryGetMetadataFile(), dataSetInformation, openbisService); break; case SAMPLE: - processSampleFolder(metadata.tryMetadataFile(), dataSetInformation, openbisService); + processSampleFolder(metadata.tryGetMetadataFile(), dataSetInformation, openbisService); break; case UNKNOWN: break; diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/EntityRegistrationSuccessEmail.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/EntityRegistrationSuccessEmail.java new file mode 100644 index 0000000000000000000000000000000000000000..ace867bee77de33f725ac127aa4b5120167f1d57 --- /dev/null +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/EntityRegistrationSuccessEmail.java @@ -0,0 +1,240 @@ +/* + * Copyright 2010 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.cina.dss.info; + +import java.io.File; + +import ch.systemsx.cisd.cina.dss.info.FolderOracle.FolderType; +import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; + +/** + * Create the subject and content for an email that is sent when an experiment or sample is + * registered. + * + * @author Chandrasekhar Ramakrishnan + */ +public class EntityRegistrationSuccessEmail +{ + private final DataSetInformation dataSetInformation; + + private final EntityEmailDetails entityEmailDetails; + + private static final String EMAIL_SUBJECT_PREFIX = "[CINA]"; + + private static final String SAMPLE_CODE_PREFIX = "S"; + + public EntityRegistrationSuccessEmail(DataSetInformation dataSetInformation, + File incomingDataSetDirectory) + { + this.dataSetInformation = dataSetInformation; + + FolderType folderType = new FolderOracle().getTypeForFolder(incomingDataSetDirectory); + switch (folderType) + { + case DATA_SET: + entityEmailDetails = new DatasetEmailDetails(); + break; + case EXPERIMENT: + entityEmailDetails = new ExperimentEmailDetails(); + break; + case SAMPLE: + entityEmailDetails = new SampleEmailDetails(); + break; + case UNKNOWN: + entityEmailDetails = new UnknownEmailDetails(); + break; + default: + entityEmailDetails = new UnknownEmailDetails(); + break; + } + } + + public boolean shouldSendEmail() + { + return entityEmailDetails.shouldSendEmail(); + } + + public String getSubject() + { + StringBuffer subject = new StringBuffer(); + subject.append(EMAIL_SUBJECT_PREFIX); + subject.append(" Registered "); + entityEmailDetails.appendEntityName(subject); + subject.append(" "); + entityEmailDetails.appendSubjectDetails(subject); + return subject.toString(); + } + + public String getContent() + { + StringBuffer content = new StringBuffer(); + entityEmailDetails.appendEntityName(content); + content.append(" was successfully registered. Use the following metadata file to register"); + entityEmailDetails.appendFollowOnEntityName(content); + content.append(":\n"); + content.append("------"); + entityEmailDetails.appendMetadataFileName(content); + content.append("------"); + content.append("\n"); + entityEmailDetails.appendMetadataFileContent(content); + + return content.toString(); + } + + private abstract class EntityEmailDetails + { + boolean shouldSendEmail() + { + return false; + } + + abstract void appendEntityName(StringBuffer sb); + + void appendFollowOnEntityName(StringBuffer sb) + { + } + + void appendSubjectDetails(StringBuffer subject) + { + } + + void appendMetadataFileName(StringBuffer sb) + { + } + + void appendMetadataFileContent(StringBuffer sb) + { + + } + } + + private class ExperimentEmailDetails extends EntityEmailDetails + { + @Override + boolean shouldSendEmail() + { + return true; + } + + @Override + void appendEntityName(StringBuffer sb) + { + sb.append("Experiment"); + } + + @Override + void appendFollowOnEntityName(StringBuffer sb) + { + sb.append("Samples"); + } + + @Override + void appendSubjectDetails(StringBuffer subject) + { + subject.append(dataSetInformation.getExperimentIdentifier()); + } + + @Override + void appendMetadataFileContent(StringBuffer sb) + { + sb.append(SampleMetadataExtractor.EXPERIMENT_IDENTIFIER_KEY); + sb.append("="); + sb.append(dataSetInformation.getExperimentIdentifier()); + sb.append("\n"); + + sb.append(SampleMetadataExtractor.EXPERIMENT_OWNER_EMAIL_KEY); + sb.append("="); + sb.append(dataSetInformation.tryGetUploadingUserEmail()); + sb.append("\n"); + + sb.append(SampleMetadataExtractor.SAMPLE_CODE_PREFIX_KEY); + sb.append("="); + sb.append(SAMPLE_CODE_PREFIX); + sb.append("\n"); + } + + @Override + void appendMetadataFileName(StringBuffer sb) + { + sb.append(FolderOracle.SAMPLE_METADATA_FILENAME); + + } + } + + private class SampleEmailDetails extends EntityEmailDetails + { + @Override + boolean shouldSendEmail() + { + return true; + } + + @Override + void appendEntityName(StringBuffer sb) + { + sb.append("Sample"); + } + + @Override + void appendFollowOnEntityName(StringBuffer sb) + { + sb.append("Data Sets"); + } + + @Override + void appendSubjectDetails(StringBuffer subject) + { + subject.append(dataSetInformation.getSampleIdentifier()); + } + + @Override + void appendMetadataFileContent(StringBuffer sb) + { + } + + @Override + void appendMetadataFileName(StringBuffer sb) + { + sb.append(FolderOracle.DATA_SET_METADATA_FILENAME); + + } + } + + private class DatasetEmailDetails extends EntityEmailDetails + { + @Override + void appendEntityName(StringBuffer sb) + { + sb.append("Data Set"); + } + + @Override + void appendSubjectDetails(StringBuffer subject) + { + subject.append(dataSetInformation.getDataSetCode()); + } + } + + private class UnknownEmailDetails extends EntityEmailDetails + { + @Override + void appendEntityName(StringBuffer sb) + { + sb.append("Unknown"); + } + } +} diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/ExperimentMetadataExtractor.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/ExperimentMetadataExtractor.java index a73ee64970fb24b763bba8b8f6c3970b0791a1c1..003b5bf2b70c86eab89ecd1f37f3b3bba8896d23 100644 --- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/ExperimentMetadataExtractor.java +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/ExperimentMetadataExtractor.java @@ -53,7 +53,7 @@ class ExperimentMetadataExtractor // Internal state used during extraction private String projectCode; - private String experimentCode; + private String experimentCodePrefix; private String emailAddress; @@ -97,7 +97,7 @@ class ExperimentMetadataExtractor private void extractMetadata() { projectCode = experimentMetadata.get(PROJECT_CODE_KEY); - experimentCode = experimentMetadata.get(EXPERIMENT_CODE_KEY); + experimentCodePrefix = experimentMetadata.get(EXPERIMENT_CODE_KEY); emailAddress = experimentMetadata.get(EXPERIMENT_OWNER_EMAIL_KEY); } @@ -107,7 +107,7 @@ class ExperimentMetadataExtractor private ExperimentIdentifier createExperiment() throws EnvironmentFailureException { ExperimentIdentifier identifier = - new ExperimentIdentifier(null, SPACE_CODE, projectCode, experimentCode + "-" + new ExperimentIdentifier(null, SPACE_CODE, projectCode, experimentCodePrefix + "-" + experimentCodeSuffix); // Check that the identifier is unique @@ -136,7 +136,7 @@ class ExperimentMetadataExtractor "A project code must be specified to register an experiment."); } - if (null == experimentCode) + if (null == experimentCodePrefix) { throw new UserFailureException( "An experiment code must be specified to register an experiment."); diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/FolderOracle.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/FolderOracle.java index 9eccab4a2eff50f5a57cff01e0ca6679cb17f2ee..9d66c6abfd6044fd318d6829f84b749b36289ecc 100644 --- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/FolderOracle.java +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/FolderOracle.java @@ -65,7 +65,7 @@ class FolderOracle return type; } - File tryMetadataFile() + File tryGetMetadataFile() { return metadataFileOrNull; } @@ -73,11 +73,11 @@ class FolderOracle // The known conventions for naming metadata files. If a new metadata file is created, cases // should be added to getFilenameFilter() and getFolderMetadataForFile() as well. - private static String EXPERIMENT_METADATA_FILENAME = "experiment.properties"; + static String EXPERIMENT_METADATA_FILENAME = "experiment.properties"; - private static String SAMPLE_METADATA_FILENAME = "sample.properties"; + static String SAMPLE_METADATA_FILENAME = "sample.properties"; - private static String DATA_SET_METADATA_FILENAME = "dataset.properties"; + static String DATA_SET_METADATA_FILENAME = "dataset.properties"; FolderOracle() { diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/SampleMetadataExtractor.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/SampleMetadataExtractor.java index 13bf4fa314fa6ec63c8e7ba7dc37508eba357421..d4fbb1d43430661851dd8a2db796f663220b75cf 100644 --- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/SampleMetadataExtractor.java +++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/info/SampleMetadataExtractor.java @@ -25,47 +25,55 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier; /** * Package-visible helper class to extract information from the XML metadata file and register a new * sample using this data. + * <p> + * This class assumes that the sample type CINA_SAMPLE_TYPE has been registered. * * @author Chandrasekhar Ramakrishnan */ class SampleMetadataExtractor { // Keys expected in metadata properties file - public static final String SAMPLE_CODE_KEY = "sample"; + + public static final String PROJECT_CODE_KEY = ExperimentMetadataExtractor.PROJECT_CODE_KEY; + + public static final String EXPERIMENT_IDENTIFIER_KEY = "experiment.identifier"; + + public static final String EXPERIMENT_OWNER_EMAIL_KEY = + ExperimentMetadataExtractor.EXPERIMENT_OWNER_EMAIL_KEY; + + public static final String SAMPLE_CODE_PREFIX_KEY = "sample.code-prefix"; // Instance state private final DataSetInformation dataSetInformation; private final Map<String, String> sampleMetadata; - private final IEncapsulatedOpenBISService openbisService; + private final String sampleCodeSuffix; - // Internal state used during extraction - private String projectCode; + private final IEncapsulatedOpenBISService openbisService; - private String experimentCode; + private ExperimentIdentifier experimentIdentifier; - private String sampleCode; + private String sampleCodePrefix; private String emailAddress; - static final String SPACE_CODE = "CINA"; - - static final String EXPERIMENT_TYPE_CODE = "CINA_EXP_TYPE"; - - static final String SAMPLE_TYPE_CODE = "CINA_SAMPLE_TYPE"; + private static final String SAMPLE_TYPE_CODE = "CINA_SAMPLE_TYPE"; SampleMetadataExtractor(DataSetInformation dataSetInformation, - Map<String, String> sampleMetadata, IEncapsulatedOpenBISService openbisService) + Map<String, String> sampleMetadata, String sampleCodeSuffix, + IEncapsulatedOpenBISService openbisService) { this.dataSetInformation = dataSetInformation; this.sampleMetadata = sampleMetadata; + this.sampleCodeSuffix = sampleCodeSuffix; this.openbisService = openbisService; } @@ -79,20 +87,26 @@ class SampleMetadataExtractor { extractMetadata(); + // Set the email address as early as possible because it will be used later to notify the + // user. + dataSetInformation.setUploadingUserEmail(emailAddress); + // Check that that the required data was specified in the properties file. verifyRequiredMetadataDataHasBeenProvided(); - this.createSample(); - dataSetInformation.setSampleCode(sampleCode); + SampleIdentifier sampleId = this.createSample(); + dataSetInformation.setExperimentIdentifier(experimentIdentifier); + dataSetInformation.setSampleCode(sampleId.getSampleCode()); dataSetInformation.setUploadingUserEmail(emailAddress); } private void extractMetadata() { - projectCode = sampleMetadata.get(ExperimentMetadataExtractor.PROJECT_CODE_KEY); - experimentCode = sampleMetadata.get(ExperimentMetadataExtractor.EXPERIMENT_CODE_KEY); - sampleCode = sampleMetadata.get(SAMPLE_CODE_KEY); - emailAddress = sampleMetadata.get(ExperimentMetadataExtractor.EXPERIMENT_OWNER_EMAIL_KEY); + experimentIdentifier = + new ExperimentIdentifierFactory(sampleMetadata.get(EXPERIMENT_IDENTIFIER_KEY)) + .createIdentifier(); + sampleCodePrefix = sampleMetadata.get(SAMPLE_CODE_PREFIX_KEY); + emailAddress = sampleMetadata.get(EXPERIMENT_OWNER_EMAIL_KEY); } /** @@ -101,17 +115,15 @@ class SampleMetadataExtractor */ private SampleIdentifier createSample() { - ExperimentIdentifier experimentId = - new ExperimentIdentifier(null, SPACE_CODE, projectCode, experimentCode); - SampleIdentifier sampleId = - new SampleIdentifier(new GroupIdentifier((String) null, SPACE_CODE), sampleCode); + SampleIdentifier.createOwnedBy(new SampleOwnerIdentifier(experimentIdentifier), + sampleCodePrefix + "-" + sampleCodeSuffix); NewSample sample = new NewSample(); SampleType sampleType = new SampleType(); sampleType.setCode(SAMPLE_TYPE_CODE); sample.setSampleType(sampleType); - sample.setExperimentIdentifier(experimentId.toString()); + sample.setExperimentIdentifier(experimentIdentifier.toString()); sample.setIdentifier(sampleId.toString()); Sample dbSample = openbisService.tryGetSampleWithExperiment(sampleId); @@ -128,19 +140,13 @@ class SampleMetadataExtractor */ private void verifyRequiredMetadataDataHasBeenProvided() throws UserFailureException { - if (null == projectCode) - { - throw new UserFailureException( - "A project code must be specified to register an experiment."); - } - - if (null == experimentCode) + if (null == experimentIdentifier) { throw new UserFailureException( "An experiment code must be specified to register an experiment."); } - if (null == sampleCode) + if (null == sampleCodePrefix) { throw new UserFailureException( "An sample code must be specified to register an experiment."); diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractorTest.java b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a223bf275e54c45d8704d5c5f130594ee8bba19f --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/CinaDataSetInfoExtractorTest.java @@ -0,0 +1,125 @@ +/* + * Copyright 2010 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.cina.dss.info; + +import java.io.File; +import java.util.Properties; + +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.testng.AssertJUnit; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; +import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; + +/** + * @author Chandrasekhar Ramakrishnan + */ +public class CinaDataSetInfoExtractorTest extends AssertJUnit +{ + Mockery context; + + IEncapsulatedOpenBISService openbisService; + + CinaDataSetInfoExtractor extractor; + + @BeforeMethod + public void beforeMethod() + { + context = new Mockery(); + openbisService = context.mock(IEncapsulatedOpenBISService.class); + extractor = new CinaDataSetInfoExtractor(new Properties()); + } + + @AfterMethod + public void afterMethod() + { + // To following line of code should also be called at the end of each test method. + // Otherwise one do not known which test failed. + context.assertIsSatisfied(); + } + + @Test + public void testRegisterExperiment() + { + context.checking(new Expectations() + { + { + one(openbisService).tryToGetExperiment(with(any(ExperimentIdentifier.class))); + will(returnValue(null)); + one(openbisService).registerExperiment(with(any(NewExperiment.class))); + } + }); + + File experimentFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/experiment-data-folder"); + DataSetInformation dataSetInformation = + extractor.getDataSetInformation(experimentFolder, openbisService); + + assertTrue("no-one@nowhere.ch".equals(dataSetInformation.tryGetUploadingUserEmail())); + } + + // @Test + // public void testRegisterSample() + // { + // context.checking(new Expectations() + // { + // { + // one(openbisService).tryToGetExperiment(with(any(ExperimentIdentifier.class))); + // will(returnValue(null)); + // one(openbisService).registerExperiment(with(any(NewExperiment.class))); + // } + // }); + // + // File sampleFolder = + // new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/sample-data-folder"); + // DataSetInformation dataSetInformation = + // extractor.getDataSetInformation(sampleFolder, openbisService); + // + // assertTrue("no-one@nowhere.ch".equals(dataSetInformation.tryGetUploadingUserEmail())); + // } + + @Test + public void testRegisterAmbiguousFolder() + { + File ambiguousDataFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder"); + + try + { + extractor.getDataSetInformation(ambiguousDataFolder, openbisService); + fail("An ambiguous data folder should result in a UserFailureException."); + } catch (UserFailureException ex) + { + + } + } + + @Test + public void testRegisterEmptyFolder() + { + File emptyDataFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/empty-data-folder"); + extractor.getDataSetInformation(emptyDataFolder, openbisService); + } +} diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/FolderOracleTest.java b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/FolderOracleTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0288e64fc34c17ed6435285a9b1bb9e83164429f --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/FolderOracleTest.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 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.cina.dss.info; + +import java.io.File; + +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.cina.dss.info.FolderOracle.FolderMetadata; +import ch.systemsx.cisd.cina.dss.info.FolderOracle.FolderType; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + +/** + * @author Chandrasekhar Ramakrishnan + */ +public class FolderOracleTest extends AssertJUnit +{ + + @Test + public void testExperimentFolder() + { + FolderOracle folderOracle = new FolderOracle(); + File experimentFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/experiment-data-folder"); + FolderMetadata metadata = folderOracle.getMetadataForFolder(experimentFolder); + assertTrue(metadata.getType() == FolderType.EXPERIMENT); + assertTrue("experiment.properties".equals(metadata.tryGetMetadataFile().getName())); + } + + @Test + public void testSampleFolder() + { + FolderOracle folderOracle = new FolderOracle(); + File sampleFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/sample-data-folder"); + FolderMetadata metadata = folderOracle.getMetadataForFolder(sampleFolder); + assertTrue(metadata.getType() == FolderType.SAMPLE); + assertTrue("sample.properties".equals(metadata.tryGetMetadataFile().getName())); + } + + @Test + public void testDataSetFolder() + { + FolderOracle folderOracle = new FolderOracle(); + File datasetFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/dataset-data-folder"); + FolderMetadata metadata = folderOracle.getMetadataForFolder(datasetFolder); + assertTrue(metadata.getType() == FolderType.DATA_SET); + assertTrue("dataset.properties".equals(metadata.tryGetMetadataFile().getName())); + } + + @Test + public void testAmbiguousFolder() + { + FolderOracle folderOracle = new FolderOracle(); + File ambiguousFolder = + new File("sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder"); + try + { + folderOracle.getMetadataForFolder(ambiguousFolder); + fail("The method getMetadataForFolder should throw an error on folder ambiguous-data-folder."); + } catch (UserFailureException ex) + { + // This should happen + } + } +} diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/dataset.properties b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/dataset.properties new file mode 100644 index 0000000000000000000000000000000000000000..124fde3eff73f0204d67a17457233ae8d9686afd --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/dataset.properties @@ -0,0 +1,3 @@ +project.code = CINA1 +experiment.code = EXP +experiment.owner-email = no-one@nowhere.ch \ No newline at end of file diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/sample.properties b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/sample.properties new file mode 100644 index 0000000000000000000000000000000000000000..124fde3eff73f0204d67a17457233ae8d9686afd --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/ambiguous-data-folder/sample.properties @@ -0,0 +1,3 @@ +project.code = CINA1 +experiment.code = EXP +experiment.owner-email = no-one@nowhere.ch \ No newline at end of file diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/dataset-data-folder/dataset.properties b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/dataset-data-folder/dataset.properties new file mode 100644 index 0000000000000000000000000000000000000000..124fde3eff73f0204d67a17457233ae8d9686afd --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/dataset-data-folder/dataset.properties @@ -0,0 +1,3 @@ +project.code = CINA1 +experiment.code = EXP +experiment.owner-email = no-one@nowhere.ch \ No newline at end of file diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/empty-data-folder/.gitignore b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/empty-data-folder/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/experiment-data-folder/experiment.properties b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/experiment-data-folder/experiment.properties new file mode 100644 index 0000000000000000000000000000000000000000..124fde3eff73f0204d67a17457233ae8d9686afd --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/experiment-data-folder/experiment.properties @@ -0,0 +1,3 @@ +project.code = CINA1 +experiment.code = EXP +experiment.owner-email = no-one@nowhere.ch \ No newline at end of file diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/sample-data-folder/sample.properties b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/sample-data-folder/sample.properties new file mode 100644 index 0000000000000000000000000000000000000000..124fde3eff73f0204d67a17457233ae8d9686afd --- /dev/null +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/info/sample-data-folder/sample.properties @@ -0,0 +1,3 @@ +project.code = CINA1 +experiment.code = EXP +experiment.owner-email = no-one@nowhere.ch \ No newline at end of file