From 250f9339b1e9c60dcb5c5e2256645ce14995400d Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Wed, 29 Nov 2023 05:57:19 +0000 Subject: [PATCH] feat: create json mapper Signed-off-by: Otavio Santana --- .../java/expert/os/harperdb/JSONMapper.java | 18 ++++++++++++++++-- .../main/java/expert/os/harperdb/Server.java | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/expert/os/harperdb/JSONMapper.java b/core/src/main/java/expert/os/harperdb/JSONMapper.java index 76e8ed5..f1aaf25 100644 --- a/core/src/main/java/expert/os/harperdb/JSONMapper.java +++ b/core/src/main/java/expert/os/harperdb/JSONMapper.java @@ -1,11 +1,14 @@ package expert.os.harperdb; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.Optional; enum JSONMapper { @@ -26,12 +29,23 @@ byte[] writeValueAsBytes(Object value) { } } - Optional readSingleValue(byte[] bytes, Class valueType) { + Optional readSingleValue(byte[] bytes, Class type) { try { if(bytes == null || bytes.length == 0){ return Optional.empty(); } - return Optional.of(mapper.readValue(bytes, valueType)); + return Optional.of(mapper.readValue(bytes, type)); + } catch (IOException exception) { + throw new HarperDBException("There is an issue to read from json value", exception); + } + } + + List readValue(byte[] bytes, Class type) { + try { + if(bytes == null || bytes.length == 0){ + return Collections.emptyList(); + } + return mapper.readValue(bytes, new TypeReference<>() {}); } catch (IOException exception) { throw new HarperDBException("There is an issue to read from json value", exception); } diff --git a/core/src/main/java/expert/os/harperdb/Server.java b/core/src/main/java/expert/os/harperdb/Server.java index a053082..1923cb9 100644 --- a/core/src/main/java/expert/os/harperdb/Server.java +++ b/core/src/main/java/expert/os/harperdb/Server.java @@ -5,6 +5,8 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.Optional; @@ -105,6 +107,23 @@ Optional singleResult(Operation operation, Class type){ } } + List result(Operation operation, Class type){ + HttpRequest request = createRequest() + .POST(ofByteArray(INSTANCE.writeValueAsBytes(operation))) + .build(); + try { + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); + if(HttpStatus.OK.isEquals(response)){ + byte[] body = response.body(); + return INSTANCE.readValue(body, type); + } else { + return Collections.emptyList(); + } + } catch (IOException| InterruptedException e) { + throw new HarperDBException("There is an issue to execute the operation: " + operation + "message: ", e); + } + } + HttpRequest.Builder createRequest() { return HttpRequest.newBuilder()