From c18a57b2387752eea789a51ab59e9ce487665bb1 Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Thu, 20 Oct 2011 06:48:30 +0000
Subject: [PATCH] move the default staging directory under a corresponding
 incoming share. The new default is "[store-root]/[shareId]/staging"

SVN: 23359
---
 .../DataSetRegistrationService.java           | 29 ++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
index c39a52eb4aa..f7c1095bd54 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.base.exceptions.InterruptedExceptionUnchecked;
@@ -103,10 +104,12 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
 
         Properties properties =
                 registratorContext.getGlobalState().getThreadParameters().getThreadProperties();
+
         String stagingDirString = PropertyUtils.getProperty(properties, STAGING_DIR);
+
         if (null == stagingDirString)
         {
-            stagingDirectory = registratorContext.getGlobalState().getStoreRootDir();
+            stagingDirectory = getDefaultStagingDirectory(registratorContext.getGlobalState());
         } else
         {
             stagingDirectory = new File(stagingDirString);
@@ -115,6 +118,30 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
         transactions = new ArrayList<DataSetRegistrationTransaction<T>>();
     }
 
+    /**
+     * Tries to create and return a staging directory in the corresponding incoming share. The
+     * default result is "[store-root]/[shareId]/staging". Returns "[store-root]", if no existing
+     * incoming directory can be detected.
+     */
+    private File getDefaultStagingDirectory(TopLevelDataSetRegistratorGlobalState globalState)
+    {
+        File storeRoot = globalState.getStoreRootDir();
+        if (false == StringUtils.isBlank(globalState.getShareId()))
+        {
+            File shareRoot = new File(storeRoot, globalState.getShareId());
+            if (shareRoot.isDirectory())
+            {
+                File stagingDir = new File(shareRoot, "staging");
+                stagingDir.mkdir();
+                if (stagingDir.isDirectory())
+                {
+                    return stagingDir;
+                }
+            }
+        }
+        return storeRoot;
+    }
+
     public OmniscientTopLevelDataSetRegistratorState getRegistratorContext()
     {
         return registratorContext;
-- 
GitLab