From 76275c5b8f1e0a92da4b1fb01b4707feabf2586e Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Tue, 14 Feb 2017 11:42:04 +0000
Subject: [PATCH] SSDM-4722: Make schema more constrained (add not nulls),
 remove unneeded fromString method from enumerations

SVN: 37739
---
 .../translator/externaldms/ExternalDmsTranslator.java |  2 +-
 .../business/bo/datasetlister/DatasetLister.java      |  2 +-
 .../bo/fetchoptions/datasetlister/DataSetLister.java  |  2 +-
 openbis/source/sql/generic/158/schema-158.sql         |  2 +-
 .../sql/postgresql/migration/migration-157-158.sql    | 11 ++++++++++-
 openbis/sourceTest/sql/postgresql/158/schema-158.sql  |  6 +++---
 6 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
index 30905e2978c..f5fe7d2c10c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
@@ -69,7 +69,7 @@ public class ExternalDmsTranslator extends AbstractCachingTranslator<Long, Exter
         result.setLabel(baseRecord.label);
         result.setUrlTemplate(baseRecord.address);
         result.setAddress(baseRecord.address);
-        result.setAddressType(ExternalDmsAddressType.fromString(baseRecord.addressType));
+        result.setAddressType(ExternalDmsAddressType.valueOf(baseRecord.addressType));
         result.setOpenbis(ExternalDmsAddressType.OPENBIS.equals(result.getAddressType()));
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index 2d14a7ebd36..057b9170286 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -1297,7 +1297,7 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         result.setLabel(edmsRecord.label);
         result.setUrlTemplate(edmsRecord.address);
         result.setAddress(edmsRecord.address);
-        result.setAddressType(ExternalDataManagementSystemType.fromString(edmsRecord.addressType));
+        result.setAddressType(ExternalDataManagementSystemType.valueOf(edmsRecord.addressType));
         result.setOpenBIS(ExternalDataManagementSystemType.OPENBIS.equals(result.getAddressType()));
 
         return result;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
index 549a7c2d912..3eb52556e1a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
@@ -256,7 +256,7 @@ public class DataSetLister implements IDataSetLister
             edms.setUrlTemplate(dataSet.edms_address);
             edms.setAddress(dataSet.edms_address);
             edms.setDatabaseInstance(db);
-            edms.setAddressType(ExternalDataManagementSystemType.fromString(dataSet.edms_address_type));
+            edms.setAddressType(ExternalDataManagementSystemType.valueOf(dataSet.edms_address_type));
             edms.setOpenBIS(ExternalDataManagementSystemType.OPENBIS.equals(edms.getAddressType()));
             initializer.setExternalDataManagementSystem(edms);
         }
diff --git a/openbis/source/sql/generic/158/schema-158.sql b/openbis/source/sql/generic/158/schema-158.sql
index 852115ef3ac..9b7224f038c 100644
--- a/openbis/source/sql/generic/158/schema-158.sql
+++ b/openbis/source/sql/generic/158/schema-158.sql
@@ -64,7 +64,7 @@ CREATE TABLE EXPERIMENT_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_EXPE_ID
 CREATE TABLE SAMPLE_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_SAMP_ID TECH_ID NOT NULL, RELATION_TYPE TEXT_VALUE, EXPE_ID TECH_ID, SAMP_ID TECH_ID, DATA_ID TECH_ID, ENTITY_PERM_ID TEXT_VALUE, PERS_ID_AUTHOR TECH_ID, VALID_FROM_TIMESTAMP TIME_STAMP NOT NULL, VALID_UNTIL_TIMESTAMP TIME_STAMP, SPACE_ID TECH_ID, PROJ_ID TECH_ID);
 CREATE TABLE DATA_SET_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_DATA_ID TECH_ID NOT NULL, RELATION_TYPE TEXT_VALUE, ORDINAL INTEGER, EXPE_ID TECH_ID, SAMP_ID TECH_ID, DATA_ID TECH_ID, ENTITY_PERM_ID TEXT_VALUE, PERS_ID_AUTHOR TECH_ID, VALID_FROM_TIMESTAMP TIME_STAMP NOT NULL, VALID_UNTIL_TIMESTAMP TIME_STAMP);
 
-CREATE TABLE EXTERNAL_DATA_MANAGEMENT_SYSTEMS (ID TECH_ID, CODE CODE, LABEL TEXT_VALUE, ADDRESS TEXT_VALUE, ADDRESS_TYPE EDMS_ADDRESS_TYPE);
+CREATE TABLE EXTERNAL_DATA_MANAGEMENT_SYSTEMS (ID TECH_ID, CODE CODE NOT NULL, LABEL TEXT_VALUE, ADDRESS TEXT_VALUE NOT NULL, ADDRESS_TYPE EDMS_ADDRESS_TYPE NOT NULL);
 CREATE TABLE LINK_DATA (DATA_ID TECH_ID NOT NULL, EDMS_ID TECH_ID NOT NULL, EXTERNAL_CODE TEXT_VALUE NOT NULL);
 
 CREATE TABLE METAPROJECTS (ID TECH_ID NOT NULL, NAME CODE NOT NULL, DESCRIPTION DESCRIPTION_2000, OWNER TECH_ID NOT NULL, PRIVATE BOOLEAN_CHAR NOT NULL DEFAULT TRUE, CREATION_DATE TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP);
diff --git a/openbis/source/sql/postgresql/migration/migration-157-158.sql b/openbis/source/sql/postgresql/migration/migration-157-158.sql
index cb42aa46e64..a3fc17166c3 100644
--- a/openbis/source/sql/postgresql/migration/migration-157-158.sql
+++ b/openbis/source/sql/postgresql/migration/migration-157-158.sql
@@ -1,6 +1,15 @@
 CREATE DOMAIN EDMS_ADDRESS_TYPE AS TEXT CHECK (VALUE IN ('OPENBIS', 'URL', 'FILE_SYSTEM'));
+
 ALTER TABLE external_data_management_systems ADD COLUMN address_type EDMS_ADDRESS_TYPE;
 UPDATE external_data_management_systems SET address_type='OPENBIS' WHERE is_openbis = true;
 UPDATE external_data_management_systems SET address_type='URL' WHERE is_openbis = false;
+ALTER TABLE external_data_management_systems ALTER COLUMN address_type SET NOT NULL;
+
+ALTER TABLE external_data_management_systems RENAME COLUMN url_template TO address;
+UPDATE external_data_management_systems SET address='UNKNOWN' WHERE address IS NULL;
+ALTER TABLE external_data_management_systems ALTER COLUMN address SET NOT NULL;
+
 ALTER TABLE external_data_management_systems DROP COLUMN is_openbis;
-ALTER TABLE external_data_management_systems RENAME COLUMN url_template TO address;
\ No newline at end of file
+
+UPDATE external_data_management_systems SET code = (SELECT coalesce(code, '') FROM external_data_management_systems order by coalesce(length(code), '0') desc limit 1) || id WHERE code IS NULL;
+ALTER TABLE external_data_management_systems ALTER COLUMN code SET NOT NULL;
\ No newline at end of file
diff --git a/openbis/sourceTest/sql/postgresql/158/schema-158.sql b/openbis/sourceTest/sql/postgresql/158/schema-158.sql
index abad9f21d89..853083f848b 100644
--- a/openbis/sourceTest/sql/postgresql/158/schema-158.sql
+++ b/openbis/sourceTest/sql/postgresql/158/schema-158.sql
@@ -1061,10 +1061,10 @@ CREATE SEQUENCE external_data_management_system_id_seq
     CACHE 1;
 CREATE TABLE external_data_management_systems (
     id tech_id NOT NULL,
-    code code,
+    code code NOT NULL,
     label text_value,
-    address text_value,
-    address_type edms_address_type
+    address text_value NOT NULL,
+    address_type edms_address_type NOT NULL
 );
 CREATE SEQUENCE file_format_type_id_seq
     START WITH 1
-- 
GitLab