From 59b38547b65766be927839f5976eb43e7f7665d3 Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Wed, 6 Jun 2012 10:50:44 +0000
Subject: [PATCH] SP-73, BIS-21 make setStorageConfirm idempotent operation

SVN: 25577
---
 .../cisd/openbis/generic/server/ETLService.java       | 10 +++++++---
 .../openbis/generic/server/business/bo/DataBO.java    | 11 +++++++++++
 .../openbis/generic/server/business/bo/IDataBO.java   |  8 +++++---
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 1713b8e9667..c8948caff9e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -1748,9 +1748,13 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
 
         final IDataBO dataBO = businessObjectFactory.createDataBO(session);
 
-        dataBO.loadByCode(dataSetCode);
-        dataBO.setStorageConfirmed();
-        daoFactory.getPostRegistrationDAO().addDataSet(dataBO.getData());
+        if (false == dataBO.isStorageConfirmed())
+        {
+            dataBO.loadByCode(dataSetCode);
+
+            dataBO.setStorageConfirmed();
+            daoFactory.getPostRegistrationDAO().addDataSet(dataBO.getData());
+        }
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
index 75b76c3a155..959b4731c2b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
@@ -691,4 +691,15 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
             externalData.setStorageConfirmation(true);
         }
     }
+
+    @Override
+    public boolean isStorageConfirmed()
+    {
+        ExternalDataPE externalData = data.tryAsExternalData();
+        if (null != externalData)
+        {
+            return externalData.isStorageConfirmation();
+        }
+        return true;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataBO.java
index 88b13381402..acd909a81f9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataBO.java
@@ -130,10 +130,12 @@ public interface IDataBO extends IEntityBusinessObject
 
     /**
      * Indicate that the storage of the external data has been confirmed.
-     * 
-     * @throws UserFailureException
-     *             if the this is not external data
      */
     public void setStorageConfirmed();
 
+    /**
+     * @return true if the storage of this dataset has been confirmed or this is not external data
+     */
+    public boolean isStorageConfirmed();
+
 }
-- 
GitLab