From a50be57b6654a50b1d556fb1b907bb6e780f10cb Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 25 Jul 2022 22:43:32 +0300 Subject: [PATCH] RED-4686 - storage commons update --- search-service-v1/pom.xml | 2 +- .../search-service-server-v1/pom.xml | 13 +++- .../service/search/v1/server/model/Text.java | 2 + .../v1/server/service/TextStorageService.java | 16 +---- .../FileSystemBackedStorageService.java | 68 ++++++++++++++----- 5 files changed, 69 insertions(+), 32 deletions(-) diff --git a/search-service-v1/pom.xml b/search-service-v1/pom.xml index cbcd685..8fc68bf 100644 --- a/search-service-v1/pom.xml +++ b/search-service-v1/pom.xml @@ -28,7 +28,7 @@ com.iqser.red platform-commons-dependency - 1.11.0 + 1.17.0 import pom diff --git a/search-service-v1/search-service-server-v1/pom.xml b/search-service-v1/search-service-server-v1/pom.xml index 401168e..31a2ef2 100644 --- a/search-service-v1/search-service-server-v1/pom.xml +++ b/search-service-v1/search-service-server-v1/pom.xml @@ -12,7 +12,7 @@ search-service-server-v1 - 1.187.0 + 1.254.0 @@ -95,6 +95,17 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + lombok.launch.AnnotationProcessorHider$AnnotationProcessor + com.dslplatform.json.processor.CompiledJsonAnnotationProcessor + + + + pl.project13.maven diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/model/Text.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/model/Text.java index 2fb76ac..e6831da 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/model/Text.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/model/Text.java @@ -1,5 +1,6 @@ package com.iqser.red.service.search.v1.server.model; +import com.dslplatform.json.CompiledJson; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,6 +9,7 @@ import java.util.ArrayList; import java.util.List; @Data +@CompiledJson @NoArgsConstructor @AllArgsConstructor public class Text { diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java index 8585ea8..5447455 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java @@ -1,41 +1,29 @@ package com.iqser.red.service.search.v1.server.service; -import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.search.v1.server.model.Text; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; - import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; -import java.io.IOException; - @Slf4j @Service @RequiredArgsConstructor public class TextStorageService { private final StorageService storageService; - private final ObjectMapper objectMapper; - @Timed("redactmanager_getText-search") public Text getText(String dossierId, String fileId) { - InputStreamResource inputStreamResource; try { - inputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT)); + return storageService.readJSONObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class); } catch (StorageObjectDoesNotExist e) { throw new RuntimeException("Text is not available", e); - } - - try { - return objectMapper.readValue(inputStreamResource.getInputStream(), Text.class); - } catch (IOException e) { + } catch (Exception e) { throw new RuntimeException("Could not convert Text", e); } } diff --git a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/FileSystemBackedStorageService.java b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/FileSystemBackedStorageService.java index 79a2522..8d92730 100644 --- a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/FileSystemBackedStorageService.java +++ b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/FileSystemBackedStorageService.java @@ -1,20 +1,23 @@ package com.iqser.red.service.search.v1.server.service; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; +import com.iqser.red.storage.commons.service.StorageService; +import lombok.SneakyThrows; +import org.apache.commons.io.IOUtils; +import org.springframework.core.io.InputStreamResource; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; - -import com.iqser.red.storage.commons.service.StorageService; -import org.apache.commons.io.IOUtils; -import org.springframework.core.io.InputStreamResource; - -import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; -import com.iqser.red.storage.commons.service.S3StorageService; - -import lombok.SneakyThrows; +import java.util.stream.Collectors; public class FileSystemBackedStorageService implements StorageService { @@ -50,20 +53,53 @@ public class FileSystemBackedStorageService implements StorageService { } - @SneakyThrows @Override - public void storeObject(String objectId, byte[] data) { + @SneakyThrows + public void storeJSONObject(String objectId, T any) { + File tempFile = File.createTempFile("test", ".tmp"); + getMapper().writeValue(new FileOutputStream(tempFile), any); + dataMap.put(objectId, tempFile); + } + + private ObjectMapper getMapper() { + var objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.findAndRegisterModules(); + return objectMapper; + } + + @Override + @SneakyThrows + public T readJSONObject(String objectId, Class clazz) { + if (dataMap.get(objectId) == null || !dataMap.get(objectId).exists()) { + throw new StorageObjectDoesNotExist("Stored object not found"); + } + return getMapper().readValue(new FileInputStream(dataMap.get(objectId)), clazz); + } + + public List listPaths() { + return new ArrayList<>(dataMap.keySet()); + } + + + public List listFilePaths() { + return dataMap.values().stream().map(File::getAbsolutePath).collect(Collectors.toList()); + } + + + @Override + @SneakyThrows + public void storeObject(String objectId, InputStream stream) { File tempFile = File.createTempFile("test", ".tmp"); - IOUtils.write(data, new FileOutputStream(tempFile)); + try (var fileOutputStream = new FileOutputStream(tempFile)) { + IOUtils.copy(stream, fileOutputStream); + } dataMap.put(objectId, tempFile); } - @Override - public void storeObject(String objectId, InputStream stream) { - - } public void clearStorage() { this.dataMap.forEach((k, v) -> {