From 51b1d2a1b2bdff742cd2d19b57797da9d3c2d561 Mon Sep 17 00:00:00 2001 From: juanf <juanf@ethz.ch> Date: Thu, 30 May 2024 14:27:34 +0200 Subject: [PATCH] BIS-1059: Fix master data scripts --- .../1/as/initialize-master-data.py | 2 +- .../1/as/initialize-master-data.py | 2 +- .../1/as/initialize-master-data.py | 2 +- .../imaging/1/as/initialize-master-data.py | 2 +- .../1/as/initialize-master-data.py | 2 +- .../v1/impl/MasterDataRegistrationHelper.java | 164 +----------------- .../eln-lims/1/as/initialize-master-data.py | 8 +- 7 files changed, 12 insertions(+), 170 deletions(-) diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims-template-types/1/as/initialize-master-data.py b/core-plugin-openbis/dist/core-plugins/eln-lims-template-types/1/as/initialize-master-data.py index 131266e99d7..24d8775c589 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims-template-types/1/as/initialize-master-data.py +++ b/core-plugin-openbis/dist/core-plugins/eln-lims-template-types/1/as/initialize-master-data.py @@ -29,7 +29,7 @@ api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi sessionToken = api.loginAsSystem() sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "eln-types-template.xlsx", "scripts/date_range_validation.py") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) diff --git a/core-plugin-openbis/dist/core-plugins/imaging-nanonis/1/as/initialize-master-data.py b/core-plugin-openbis/dist/core-plugins/imaging-nanonis/1/as/initialize-master-data.py index 1971099332f..4abb942824b 100644 --- a/core-plugin-openbis/dist/core-plugins/imaging-nanonis/1/as/initialize-master-data.py +++ b/core-plugin-openbis/dist/core-plugins/imaging-nanonis/1/as/initialize-master-data.py @@ -28,7 +28,7 @@ helper = MasterDataRegistrationHelper(sys.path) api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME) sessionToken = api.loginAsSystem() sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "imaging-test-data-model.xls") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) diff --git a/core-plugin-openbis/dist/core-plugins/imaging-test/1/as/initialize-master-data.py b/core-plugin-openbis/dist/core-plugins/imaging-test/1/as/initialize-master-data.py index 48e14efcc1b..90a68543be6 100644 --- a/core-plugin-openbis/dist/core-plugins/imaging-test/1/as/initialize-master-data.py +++ b/core-plugin-openbis/dist/core-plugins/imaging-test/1/as/initialize-master-data.py @@ -26,7 +26,7 @@ helper = MasterDataRegistrationHelper(sys.path) api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME) sessionToken = api.loginAsSystem() sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "imaging-test-data-model.xls") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) diff --git a/core-plugin-openbis/dist/core-plugins/imaging/1/as/initialize-master-data.py b/core-plugin-openbis/dist/core-plugins/imaging/1/as/initialize-master-data.py index 06b1dbec36b..0a9255c46be 100644 --- a/core-plugin-openbis/dist/core-plugins/imaging/1/as/initialize-master-data.py +++ b/core-plugin-openbis/dist/core-plugins/imaging/1/as/initialize-master-data.py @@ -27,7 +27,7 @@ helper = MasterDataRegistrationHelper(sys.path) api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME) sessionToken = api.loginAsSystem() sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "imaging-data-model.xls") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) diff --git a/core-plugin-openbis/dist/core-plugins/search-store/1/as/initialize-master-data.py b/core-plugin-openbis/dist/core-plugins/search-store/1/as/initialize-master-data.py index b616903f2c8..27db57e9218 100644 --- a/core-plugin-openbis/dist/core-plugins/search-store/1/as/initialize-master-data.py +++ b/core-plugin-openbis/dist/core-plugins/search-store/1/as/initialize-master-data.py @@ -27,7 +27,7 @@ helper = MasterDataRegistrationHelper(sys.path) api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME) sessionToken = api.loginAsSystem() sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "data-model.xls") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) api.logout(sessionToken) diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/jython/api/v1/impl/MasterDataRegistrationHelper.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/jython/api/v1/impl/MasterDataRegistrationHelper.java index ab757129794..3edec2bea6f 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/jython/api/v1/impl/MasterDataRegistrationHelper.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/jython/api/v1/impl/MasterDataRegistrationHelper.java @@ -74,177 +74,19 @@ public class MasterDataRegistrationHelper { throw new IllegalArgumentException("Does not contain path to the core plugin: " + systemPaths); } - public List<byte[]> listXlsByteArrays() { - List<byte[]> result = new ArrayList<>(); - for (File file : masterDataFolder.listFiles()) { - String name = file.getName(); - if (name.endsWith(".xls") || name.endsWith(".xlsx")) { - operationLog.info("load master data " + file.getName()); - result.add(FileUtilities.loadToByteArray(file)); - } - } - return result; - } - - public Map<String, InputStream> getXlsInputStreamMap() - { - return Arrays.stream(masterDataFolder.listFiles()).filter(file -> file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx")) - .collect(Collectors.toMap(File::getName, file1 -> - { - try - { - return new FileInputStream(file1); - } catch (final FileNotFoundException e) - { - throw new RuntimeException(e); - } - })); - } - - private static String[] getFilePaths(final String... fileNames) - { - return Arrays.stream(fileNames).map(fileName -> MasterDataRegistrationHelper.class.getResource("master-data/" + fileName).getPath()) - .toArray(String[]::new); - } - public String[] uploadToAsSessionWorkspace(final String sessionToken, final String... relativeFilePaths) throws IOException { - final String[] canonicalFilePaths = getFilePaths(relativeFilePaths); final ISessionWorkspaceProvider sessionWorkspaceProvider = CommonServiceProvider.getSessionWorkspaceProvider(); final String uploadId = UUID.randomUUID().toString(); - final String[] destinations = new String[canonicalFilePaths.length]; + final String[] destinations = new String[relativeFilePaths.length]; - for (int i = 0; i < canonicalFilePaths.length; i++) + for (int i = 0; i < relativeFilePaths.length; i++) { destinations[i] = uploadId + "/" + relativeFilePaths[i]; - sessionWorkspaceProvider.write(sessionToken, destinations[i], new FileInputStream(canonicalFilePaths[i])); + sessionWorkspaceProvider.write(sessionToken, destinations[i], new FileInputStream(masterDataFolder.getCanonicalPath() + "/" + relativeFilePaths[i])); } return destinations; } - public List<byte[]> getByteArray(String findName) { - for (File file : masterDataFolder.listFiles()) { - String name = file.getName(); - if (name.equals(findName)) { - operationLog.info("load master data " + file.getName()); - return Arrays.asList(FileUtilities.loadToByteArray(file)); - } - } - return null; - } - - public List<byte[]> listCsvByteArrays() throws IOException { - List<byte[]> result = new ArrayList<>(); - for (File file : masterDataFolder.listFiles()) { - String name = file.getName(); - if (name.endsWith(".csv")) { - operationLog.info("load master data " + file.getName()); - result.add(Files.readAllBytes(file.toPath())); - } - } - return result; - } - - public Map<String, String> getAllScripts() { - Map<String, String> result = new TreeMap<>(); - File scriptsFolder = new File(masterDataFolder, "scripts"); - if (scriptsFolder.isDirectory()) { - gatherScripts(result, scriptsFolder, scriptsFolder); - } - return result; - } - - private static void gatherScripts(Map<String, String> scripts, File rootFolder, File file) { - if (file.isFile()) { - String scriptPath = FileUtilities.getRelativeFilePath(rootFolder, file); - scripts.put(scriptPath, FileUtilities.loadToString(file)); - operationLog.info("Script " + scriptPath + " loaded"); - } - if (file.isDirectory()) { - File[] files = file.listFiles(); - for (File child : files) { - gatherScripts(scripts, rootFolder, child); - } - } - } - - public static Map<String, String> getAllScripts(Path path) { - Map<String, String> result = new TreeMap<>(); - File scriptsFolder = new File(path.toFile(), "scripts"); - if (scriptsFolder.isDirectory()) { - gatherScripts(result, scriptsFolder, scriptsFolder); - } - return result; - } - - public static Map<String, String> getAllLargeValues(Path path) - { - final Map<String, String> result = new TreeMap<>(); - final File valuesFolder = new File(path.toFile(), "data"); - if (valuesFolder.isDirectory()) - { - gatherFileValues(result, valuesFolder, valuesFolder); - } - return result; - } - - private static void gatherFileValues(final Map<String, String> values, final File rootFolder, final File file) { - if (file.isFile()) - { - final String filePath = FileUtilities.getRelativeFilePath(rootFolder, file); - values.put(filePath, FileUtilities.loadToString(file)); - operationLog.info("File " + filePath + " loaded"); - } - if (file.isDirectory()) - { - final File[] files = file.listFiles(); - for (final File child : files) - { - gatherScripts(values, rootFolder, child); - } - } - } - - public static List<byte[]> getByteArrays(Path path, String findName) { - List<byte[]> byteArrays = new ArrayList<>(); - for (File file : path.toFile().listFiles()) { - String name = file.getName(); - if (name.contains(findName)) { - operationLog.info("load master data " + file.getName()); - byteArrays.add(FileUtilities.loadToByteArray(file)); - } - } - return byteArrays; - } - - public static void extractToDestination(byte[] zip, String tempPathAsString) throws IOException - { - // Write temp file - Path tempZipPath = Paths.get(tempPathAsString, "temp.zip"); - Files.write(tempZipPath, zip); - - try (ZipFile zipFile = new ZipFile(tempZipPath.toFile())) { - Enumeration<? extends ZipEntry> entries = zipFile.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - File entryDestination = new File(tempPathAsString, entry.getName()); - if (entry.isDirectory()) - { - entryDestination.mkdirs(); - } else - { - entryDestination.getParentFile().mkdirs(); - try (InputStream in = zipFile.getInputStream(entry)) - { - Files.copy(in, entryDestination.toPath(), StandardCopyOption.REPLACE_EXISTING); - } - } - } - } - - // Delete temp file leaving on the folder only the uncompressed content - Files.delete(tempZipPath); - } - } diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py index fe4c3ad61d5..ea4e9d19dad 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py @@ -38,19 +38,19 @@ if ELNFixes.isELNInstalled(): helper = MasterDataRegistrationHelper(sys.path) sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "common-data-model.xls", "scripts/date_range_validation.py", "scripts/storage_position_validation.py") -importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) +importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) if not ELNFixes.isMultiGroup(): sessionWorkspaceFiles = helper.uploadToAsSessionWorkspace(sessionToken, "single-group-data-model.xls", "scripts/date_range_validation.py", - "storage_position_validation.py") - importData = ImportData(ImportFormat.EXCEL, sessionWorkspaceFiles[0]) + "scripts/storage_position_validation.py") + importData = ImportData(ImportFormat.EXCEL, [sessionWorkspaceFiles[0]]) importOptions = ImportOptions(ImportMode.UPDATE_IF_EXISTS) importResult = api.executeImport(sessionToken, importData, importOptions) ELNCollectionTypeMigration.afterUpgrade() api.logout(sessionToken) print("======================== master-data xls ingestion result ========================") -print(result) +print(importResult.getObjectIds()) print("======================== master-data xls ingestion result ========================") -- GitLab