From 0a3bd6d87690c36440e64770e934be3de54af60d Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Mon, 30 May 2011 13:24:23 +0000 Subject: [PATCH] LMS-2264 Support for specifying data set code SVN: 21506 --- .../v1/IDataSetRegistrationTransaction.java | 7 ++- .../api/v1/impl/AbstractTransactionState.java | 25 +++++++- .../impl/DataSetRegistrationTransaction.java | 5 ++ .../DataSetRegistrationTransactionTest.java | 59 +++++++++++++++++-- 4 files changed, 89 insertions(+), 7 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java index 3957ca09d83..6d5a2c885e6 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java @@ -39,10 +39,15 @@ public interface IDataSetRegistrationTransaction IDataSet createNewDataSet(); /** - * Create a new data set with the specified code. + * Create a new data set with the specified type. */ IDataSet createNewDataSet(String dataSetType); + /** + * Create a new data set with the specified type and code. + */ + IDataSet createNewDataSet(String dataSetType, String dataSetCode); + /** * Get a sample from the openBIS AS. Returns null if the sample does not exist. * diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java index 56bf8f96f49..c572f792f8d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java @@ -151,15 +151,36 @@ abstract class AbstractTransactionState<T extends DataSetInformation> return createNewDataSet(registrationDetails); } + public IDataSet createNewDataSet(String dataSetType, String dataSetCode) + { + // Create registration details for the new data set + DataSetRegistrationDetails<T> registrationDetails = + registrationDetailsFactory.createDataSetRegistrationDetails(); + registrationDetails.setDataSetType(dataSetType); + + return createNewDataSet(registrationDetails, dataSetCode); + } + public IDataSet createNewDataSet(DataSetRegistrationDetails<T> registrationDetails) { // Request a code, so we can keep the staging file name and the data set code in sync - String dataSetCode = registrationDetails.getDataSetInformation().getDataSetCode(); - if (null == dataSetCode) + return createNewDataSet(registrationDetails, registrationDetails + .getDataSetInformation().getDataSetCode()); + } + + public IDataSet createNewDataSet(DataSetRegistrationDetails<T> registrationDetails, + String specifiedCode) + { + final String dataSetCode; + if (null == specifiedCode) { dataSetCode = generateDataSetCode(registrationDetails); registrationDetails.getDataSetInformation().setDataSetCode(dataSetCode); + } else + { + dataSetCode = specifiedCode.toUpperCase(); } + registrationDetails.getDataSetInformation().setDataSetCode(dataSetCode); // Create a directory for the data set File stagingFolder = new File(stagingDirectory, dataSetCode); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java index e4506c519ac..e31481806c8 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java @@ -192,6 +192,11 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem return getStateAsLiveState().createNewDataSet(dataSetType); } + public IDataSet createNewDataSet(String dataSetType, String dataSetCode) + { + return getStateAsLiveState().createNewDataSet(dataSetType, dataSetCode); + } + public IDataSet createNewDataSet(DataSetRegistrationDetails<T> registrationDetails) { return getStateAsLiveState().createNewDataSet(registrationDetails); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java index 30281aecaad..b5e052a7079 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java @@ -69,7 +69,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa { private static final String EXPERIMENT_IDENTIFIER = "/SPACE/PROJECT/EXP-CODE"; - private static final String DATA_SET_CODE = "data-set-code"; + private static final String DATA_SET_CODE = "data-set-code".toUpperCase(); private static final String DATABASE_INSTANCE_UUID = "db-uuid"; @@ -164,6 +164,42 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa context.assertIsSatisfied(); } + @Test + public void testCommitSpecifyingDataSetCode() + { + setUpOpenBisExpectations(true, false); + setUpDataSetValidatorExpectations("my-data-set-code"); + createTransaction(); + + IDataSet newDataSet = tr.createNewDataSet("UNKNOWN", "my-data-set-code"); + String dst = tr.moveFile(srcFile.getAbsolutePath(), newDataSet); + IExperimentImmutable experiment = tr.getExperiment(EXPERIMENT_IDENTIFIER); + newDataSet.setExperiment(experiment); + newDataSet.setDataSetType(DATA_SET_TYPE.getCode()); + + checkContentsOfFile(new File(dst)); + + File[] rollbackQueueFiles = listRollbackQueueFiles(); + assertEquals(2, rollbackQueueFiles.length); + + tr.commit(); + + System.out.println(logAppender.getLogContent()); + + assertTrue(logAppender.getLogContent().length() > 0); + // Skip this for the moment + // new LogMatcher(logAppender, + // "Identified that database knows experiment '/SPACE/PROJECT/EXP-CODE'.*", + // "Start storing data set for experiment '/SPACE/PROJECT/EXP-CODE'.*", + // "Finished storing data set for experiment '/SPACE/PROJECT/EXP-CODE', took .*", + // "Successfully registered data set: .+").assertMatches(); + + rollbackQueueFiles = listRollbackQueueFiles(); + assertEquals(0, rollbackQueueFiles.length); + + context.assertIsSatisfied(); + } + @Test public void testCommitContainerDataSet() { @@ -404,13 +440,22 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa } private void setUpOpenBisExpectations(final boolean willRegister) + { + setUpOpenBisExpectations(willRegister, true); + } + + private void setUpOpenBisExpectations(final boolean willRegister, + final boolean createDataSetCode) { setUpHomeDataBaseExpectations(); context.checking(new Expectations() { { - oneOf(openBisService).createDataSetCode(); - will(returnValue(DATA_SET_CODE + 1)); + if (createDataSetCode) + { + oneOf(openBisService).createDataSetCode(); + will(returnValue(DATA_SET_CODE + 1)); + } if (willRegister) { @@ -446,7 +491,13 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa private void setUpDataSetValidatorExpectations() { - File dataSetDir = new File(stagingDirectory, DATA_SET_CODE + "1"); + setUpDataSetValidatorExpectations(DATA_SET_CODE + "1"); + + } + + private void setUpDataSetValidatorExpectations(String dataSetCode) + { + File dataSetDir = new File(stagingDirectory, dataSetCode.toUpperCase()); final File dataSetFile = new File(dataSetDir, srcFile.getName()); context.checking(new Expectations() { -- GitLab