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) -> {