From 15c2278e6e2f3da61e33f7a01328523dfbcb1c1b Mon Sep 17 00:00:00 2001
From: juanf <juanf@bsse-bs-dock-dhcp-008.ethz.ch>
Date: Wed, 12 Dec 2018 14:54:54 +0100
Subject: [PATCH] SSDM-6975 : Search Store plugin update to have its sample
 type properties follow the new ELN-LIMS master data pattern

---
 .../AdvancedSearchController.js               |   4 +-
 .../1/as/initialize-master-data.py            | 139 ++++++++++--------
 .../1/as/master-data/data-model.xls           | Bin 0 -> 32768 bytes
 .../as/services/search-store/search-store.py  |   8 +-
 4 files changed, 81 insertions(+), 70 deletions(-)
 create mode 100644 openbis_standard_technologies/dist/core-plugins/search-store/1/as/master-data/data-model.xls

diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
index b880f5b85b9..229f60aca3a 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
@@ -433,8 +433,8 @@ function AdvancedSearchController(mainController, forceSearch) {
 	this._sampleToSavedSearch = function(sample) {
 		return {
 			sample: sample,
-			name: sample.properties.NAME,
-			criteria: JSON.parse(sample.properties.CUSTOM_DATA.replace('<xml><![CDATA[', '').replace(']]></xml>', ''))['eln-lims-criteria'],
+			name: sample.properties['$NAME'],
+			criteria: JSON.parse(sample.properties['$SEARCH_QUERY.CUSTOM_DATA'].replace('<xml><![CDATA[', '').replace(']]></xml>', ''))['eln-lims-criteria'],
 		};
 	}
 
diff --git a/openbis_standard_technologies/dist/core-plugins/search-store/1/as/initialize-master-data.py b/openbis_standard_technologies/dist/core-plugins/search-store/1/as/initialize-master-data.py
index 96c96d126ba..bf2f249601c 100644
--- a/openbis_standard_technologies/dist/core-plugins/search-store/1/as/initialize-master-data.py
+++ b/openbis_standard_technologies/dist/core-plugins/search-store/1/as/initialize-master-data.py
@@ -1,71 +1,82 @@
-'''
-@copyright:
-2016 ETH Zuerich, SIS
-    
-@license: 
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-    
-http://www.apache.org/licenses/LICENSE-2.0
- 
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
+#
+# Copyright 2014 ETH Zuerich, Scientific IT Services
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# MasterDataRegistrationTransaction Class
+from ch.ethz.sis.openbis.generic.server.asapi.v3 import ApplicationServerApi
+from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.service.id import CustomASServiceCode
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.service import CustomASServiceExecutionOptions
 
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
+# "======================== Helper Functions ========================"
 
+import os
+import sys
+from collections import deque
+from java.nio.file import Files, Paths
+from java.io import File
+from java.util import HashMap
+from java.util import ArrayList
 
-SAMPLE_TYPE_SEARCH_QUERY = "SEARCH_QUERY"
-# we use XML to store the properties to avoid indexing of the fields
-PROPERTY_TYPES = [
-        {
-            'code': 'NAME',
-            'dataType': DataType.VARCHAR,
-            'label': 'Name',
-            'mandatory': True,
-            'description': 'Human readable name',
-            'shownEdit': True
-        },
-        {
-            'code': 'SEARCH_CRITERIA',
-            'dataType': DataType.XML,
-            'label': 'Search criteria',
-            'mandatory': True,
-            'description': 'V3 API search criteria',
-            'shownEdit': False
-        },
-        {
-            'code': "FETCH_OPTIONS",
-            'dataType': DataType.XML,
-            'label': 'Fetch options',
-            'mandatory': False,
-            'description': 'V3 API fetch options',
-            'shownEdit': False
-        },
-        {
-            'code': "CUSTOM_DATA",
-            'dataType': DataType.XML,
-            'label': 'Custom data',
-            'mandatory': False,
-            'description': 'Additional data in custom format',
-            'shownEdit': False
-        }
-    ]
+TYPES_FOLDER = "%s/master-data/" % [p for p in sys.path if p.find('core-plugins') >= 0][0]
+SCRIPTS = os.path.join(TYPES_FOLDER, 'scripts')
 
 
-tr = service.transaction()
+def get_all_scripts():
+    scripts = HashMap()
+    for rel_path, script in list_all_files(SCRIPTS):
+        scripts.put(rel_path, script)
 
-sample_type = tr.getOrCreateNewSampleType(SAMPLE_TYPE_SEARCH_QUERY)
-sample_type.setGeneratedCodePrefix("Q")
+    return scripts
 
-for propert_type_def in PROPERTY_TYPES:
-    property_type = tr.getOrCreateNewPropertyType(propert_type_def['code'], propert_type_def['dataType'])
-    property_type.setLabel(propert_type_def['label'])
-    property_type.setDescription(propert_type_def['description'])
-    assignment = tr.assignPropertyType(sample_type, property_type)
-    assignment.setMandatory(propert_type_def['mandatory'])
-    assignment.setShownEdit(propert_type_def['shownEdit'])
+
+def list_xls_byte_arrays():
+    xls = ArrayList()
+    for f in os.listdir(TYPES_FOLDER):
+        if f.endswith('.xls') or f.endswith('.xlsx'):
+            excel_file = open(os.path.join(TYPES_FOLDER, f))
+            xls.add(excel_file.read())
+            excel_file.close()
+    return xls
+
+
+def list_all_files(source_root_path):
+    todo = []
+    todo.append(File(source_root_path))
+    while todo:
+        f = todo.pop()
+        if f.isDirectory():
+            new_files = f.listFiles()
+            if new_files is not None:
+                todo.extend(f.listFiles())
+            continue
+        if f.isFile():
+            source_file = f.getAbsolutePath()
+            script_file = open(source_file)
+            script = script_file.read()
+            script_file.close()
+            file_path = source_file.replace(source_root_path, "")
+            if file_path.startswith("/"):
+                file_path = file_path[1:]
+            yield file_path, script
+
+# "======================== Helper Functions ========================"
+
+api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME)
+sessionToken = api.loginAsSystem()
+props = CustomASServiceExecutionOptions().withParameter('xls', list_xls_byte_arrays()).withParameter('scripts', get_all_scripts())
+result = api.executeCustomASService(sessionToken, CustomASServiceCode("xls-import-api"), props);
+print("======================== master-data xls ingestion result ========================")
+print(result)
+print("======================== master-data xls ingestion result ========================")
diff --git a/openbis_standard_technologies/dist/core-plugins/search-store/1/as/master-data/data-model.xls b/openbis_standard_technologies/dist/core-plugins/search-store/1/as/master-data/data-model.xls
new file mode 100644
index 0000000000000000000000000000000000000000..c88a9546574a5d7a0b484a2121c1d234e8d21b08
GIT binary patch
literal 32768
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
E0Z%9t%m4rY

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/dist/core-plugins/search-store/1/as/services/search-store/search-store.py b/openbis_standard_technologies/dist/core-plugins/search-store/1/as/services/search-store/search-store.py
index 6b7556ca932..17886edf9c8 100644
--- a/openbis_standard_technologies/dist/core-plugins/search-store/1/as/services/search-store/search-store.py
+++ b/openbis_standard_technologies/dist/core-plugins/search-store/1/as/services/search-store/search-store.py
@@ -29,10 +29,10 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete import SampleDeletio
 
 
 SAMPLE_TYPE = 'SEARCH_QUERY'
-PROP_NAME = 'NAME'
-PROP_SEARCH_CRITERIA = 'SEARCH_CRITERIA'
-PROP_FETCH_OPTIONS = 'FETCH_OPTIONS'
-PROP_CUSTOM_DATA = 'CUSTOM_DATA'
+PROP_NAME = '$NAME'
+PROP_SEARCH_CRITERIA = '$SEARCH_QUERY.SEARCH_CRITERIA'
+PROP_FETCH_OPTIONS = '$SEARCH_QUERY.FETCH_OPTIONS'
+PROP_CUSTOM_DATA = '$SEARCH_QUERY.CUSTOM_DATA'
 
 PREFIX_XML = '<xml><![CDATA['
 POSTFIX_XML = ']]></xml>'
-- 
GitLab