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