From 6a4b4e3f44b947e6d44fe318ed9cbf05341ffc5e Mon Sep 17 00:00:00 2001
From: juanf <>
Date: Tue, 22 Sep 2020 14:28:32 +0200
Subject: [PATCH] SSDM-10222 : Set storage default validation value when
 missing

---
 .../generic/server/hotfix/ELNFixes.java       | 53 +++++++++++++++++++
 .../eln-lims/1/as/initialize-master-data.py   |  2 +
 2 files changed, 55 insertions(+)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/server/hotfix/ELNFixes.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/hotfix/ELNFixes.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/hotfix/ELNFixes.java
new file mode 100644
index 00000000000..fb44178759f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/hotfix/ELNFixes.java
@@ -0,0 +1,53 @@
+package ch.systemsx.cisd.openbis.generic.server.hotfix;
+
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleUpdate;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.IApplicationServerInternalApi;
+import ch.systemsx.cisd.common.logging.LogCategory;
+import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.CommonServiceProvider;
+import org.apache.log4j.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ELNFixes {
+
+    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, ELNAnnotationsMigration.class);
+
+    public static void beforeUpgrade() throws Exception {
+        operationLog.info("ELNFixes beforeUpgrade START");
+        IApplicationServerInternalApi api = CommonServiceProvider.getApplicationServerApi();
+        String sessionToken = api.loginAsSystem();
+        storageValidationLevelFix(sessionToken, api);
+    }
+
+    private static final String STORAGE_VALIDATION_LEVEL_PROPERTY_CODE = "$STORAGE.STORAGE_VALIDATION_LEVEL";
+    private static final String STORAGE_VALIDATION_LEVEL_DEFAULT_VALUE = "RACK";
+
+    private static void storageValidationLevelFix(String sessionToken, IApplicationServerInternalApi api) {
+        SampleSearchCriteria criteria = new SampleSearchCriteria();
+        criteria.withType().withCode().thatEquals("STORAGE");
+
+        SampleFetchOptions options = new SampleFetchOptions();
+        options.withProperties();
+
+        SearchResult<Sample> storages = api.searchSamples(sessionToken, criteria, options);
+
+        List<SampleUpdate> storageUpdates = new ArrayList<>();
+        for (Sample storage:storages.getObjects()) {
+            if(storage.getProperty(STORAGE_VALIDATION_LEVEL_PROPERTY_CODE) == null ||
+                    storage.getProperty(STORAGE_VALIDATION_LEVEL_PROPERTY_CODE).isEmpty()) {
+                SampleUpdate storageUpdate = new SampleUpdate();
+                storageUpdate.setSampleId(storage.getPermId());
+                storageUpdate.setProperty(STORAGE_VALIDATION_LEVEL_PROPERTY_CODE, STORAGE_VALIDATION_LEVEL_DEFAULT_VALUE);
+                storageUpdates.add(storageUpdate);
+            }
+        }
+
+        api.updateSamples(sessionToken, storageUpdates);
+    }
+}
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/initialize-master-data.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/initialize-master-data.py
index 39d933e24da..80c537e82f6 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/initialize-master-data.py
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/initialize-master-data.py
@@ -21,9 +21,11 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.service import CustomASServiceExec
 from ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl import MasterDataRegistrationHelper
 import sys
 
+from ch.systemsx.cisd.openbis.generic.server.hotfix import ELNFixes
 from ch.systemsx.cisd.openbis.generic.server.hotfix import ELNAnnotationsMigration
 from ch.systemsx.cisd.openbis.generic.server.hotfix import ELNCollectionTypeMigration
 
+ELNFixes.beforeUpgrade()
 ELNAnnotationsMigration.beforeUpgrade()
 ELNCollectionTypeMigration.beforeUpgrade()
 
-- 
GitLab