diff --git a/pom.xml b/pom.xml index 26aea4c..436ad64 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,9 @@ 37.0.0 powsybl/java-dynawo:2.2.0 org.gridsuite.dynamicsecurityanalysis.server + + + 1.23.0-SNAPSHOT @@ -84,7 +87,12 @@ - + + + com.powsybl + powsybl-ws-commons + ${powsybl-ws-commons.version} + org.gridsuite diff --git a/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/service/ParametersService.java b/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/service/ParametersService.java index 50ad261..cfa73a0 100644 --- a/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/service/ParametersService.java +++ b/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/service/ParametersService.java @@ -16,6 +16,7 @@ import com.powsybl.dynawo.suppliers.dynamicmodels.DynamicModelConfig; import com.powsybl.security.dynamic.DynamicSecurityAnalysisParameters; import com.powsybl.ws.commons.computation.dto.ReportInfos; +import com.powsybl.ws.commons.utils.GZipUtils; import jakarta.transaction.Transactional; import org.gridsuite.dynamicsecurityanalysis.server.DynamicSecurityAnalysisException; import org.gridsuite.dynamicsecurityanalysis.server.dto.parameters.DynamicSecurityAnalysisParametersInfos; @@ -104,7 +105,7 @@ private Path unZipDumpFile(Path dumpDir, byte[] zippedOutputState) { Path dumpFile = dumpDir.resolve("outputState.dmp"); try { // UNZIP output state - Utils.unzip(zippedOutputState, dumpFile); + GZipUtils.unzip(zippedOutputState, dumpFile); } catch (IOException e) { throw new DynamicSecurityAnalysisException(DUMP_FILE_ERROR, String.format("Error occurred while unzip the output state into a dump file in the directory %s", dumpDir.toAbsolutePath())); @@ -115,7 +116,7 @@ private Path unZipDumpFile(Path dumpDir, byte[] zippedOutputState) { public List unZipDynamicModel(byte[] dynamicSimulationZippedDynamicModel, ObjectMapper objectMapper) { try { // unzip dynamic model - List dynamicModel = Utils.unzip(dynamicSimulationZippedDynamicModel, objectMapper, new TypeReference<>() { }); + List dynamicModel = GZipUtils.unzip(dynamicSimulationZippedDynamicModel, objectMapper, new TypeReference<>() { }); Utils.postDeserializerDynamicModel(dynamicModel); return dynamicModel; } catch (IOException e) { @@ -126,7 +127,7 @@ public List unZipDynamicModel(byte[] dynamicSimulationZipped public DynamicSimulationParameters unZipDynamicSimulationParameters(byte[] dynamicSimulationZippedParameters, ObjectMapper objectMapper) { try { // unzip dynamic model - return Utils.unzip(dynamicSimulationZippedParameters, objectMapper, DynamicSimulationParameters.class); + return GZipUtils.unzip(dynamicSimulationZippedParameters, objectMapper, DynamicSimulationParameters.class); } catch (IOException e) { throw new DynamicSecurityAnalysisException(DYNAMIC_SIMULATION_PARAMETERS_ERROR, "Error occurred while unzip the dynamic simulation parameters"); } diff --git a/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/utils/Utils.java b/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/utils/Utils.java index 2927748..3cf5e2b 100644 --- a/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/utils/Utils.java +++ b/src/main/java/org/gridsuite/dynamicsecurityanalysis/server/utils/Utils.java @@ -7,8 +7,6 @@ package org.gridsuite.dynamicsecurityanalysis.server.utils; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.commons.report.ReportNode; import com.powsybl.dynawo.suppliers.Property; import com.powsybl.dynawo.suppliers.dynamicmodels.DynamicModelConfig; @@ -16,13 +14,9 @@ import jakarta.annotation.Nullable; import jakarta.validation.constraints.NotNull; -import java.io.*; -import java.nio.file.Path; import java.util.ArrayDeque; import java.util.Deque; import java.util.List; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; /** * @author Thang PHAM @@ -56,51 +50,6 @@ public static void postDeserializerDynamicModel(List dynamic })); } - public static byte[] zip(InputStream is) throws IOException { - try (ByteArrayOutputStream os = new ByteArrayOutputStream(); - GZIPOutputStream zipOs = new GZIPOutputStream(os)) { - byte[] buffer = new byte[1024]; - int length; - while ((length = is.read(buffer)) > 0) { - zipOs.write(buffer, 0, length); - } - zipOs.finish(); - return os.toByteArray(); - } - } - - private static void unzipToStream(byte[] zippedBytes, OutputStream outputStream) throws IOException { - try (ByteArrayInputStream is = new ByteArrayInputStream(zippedBytes); - GZIPInputStream zipIs = new GZIPInputStream(is); - BufferedOutputStream bufferedOut = new BufferedOutputStream(outputStream)) { - byte[] buffer = new byte[1024]; - int length; - while ((length = zipIs.read(buffer)) > 0) { - bufferedOut.write(buffer, 0, length); - } - } - } - - public static void unzip(byte[] zippedBytes, Path filePath) throws IOException { - try (FileOutputStream fos = new FileOutputStream(new File(filePath.toUri()))) { - unzipToStream(zippedBytes, fos); - } - } - - public static T unzip(byte[] zippedBytes, ObjectMapper objectMapper, TypeReference valueTypeRef) throws IOException { - try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { - unzipToStream(zippedBytes, bos); - return objectMapper.readValue(bos.toByteArray(), valueTypeRef); - } - } - - public static T unzip(byte[] zippedBytes, ObjectMapper objectMapper, Class valueType) throws IOException { - try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { - unzipToStream(zippedBytes, bos); - return objectMapper.readValue(bos.toByteArray(), valueType); - } - } - /** * lookup the first report node in the report hierarchy which is matched a given key and a given message * @param rootNode a given node at whatever level diff --git a/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerIEEE14Test.java b/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerIEEE14Test.java index e73a025..bac50a0 100644 --- a/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerIEEE14Test.java +++ b/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerIEEE14Test.java @@ -15,6 +15,7 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.VariantManagerConstants; import com.powsybl.network.store.client.PreloadingStrategy; +import com.powsybl.ws.commons.utils.GZipUtils; import org.gridsuite.dynamicsecurityanalysis.server.dto.DynamicSecurityAnalysisStatus; import org.gridsuite.dynamicsecurityanalysis.server.dto.contingency.ContingencyInfos; import org.gridsuite.dynamicsecurityanalysis.server.dto.parameters.DynamicSecurityAnalysisParametersInfos; @@ -37,7 +38,6 @@ import static com.powsybl.ws.commons.computation.service.NotificationService.HEADER_USER_ID; import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.dynamicsecurityanalysis.server.utils.Utils.RESOURCE_PATH_DELIMITER; -import static org.gridsuite.dynamicsecurityanalysis.server.utils.Utils.zip; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; @@ -106,7 +106,7 @@ protected void initDynamicSimulationClientMock() { String dynamicModelFilePath = inputDir + RESOURCE_PATH_DELIMITER + DYNAMIC_MODEL_DUMP_FILE; InputStream dynamicModelIS = getClass().getResourceAsStream(dynamicModelFilePath); assert dynamicModelIS != null; - byte[] zippedDynamicModel = zip(dynamicModelIS); + byte[] zippedDynamicModel = GZipUtils.zip(dynamicModelIS); given(dynamicSimulationClient.getDynamicModel(DYNAMIC_SIMULATION_RESULT_UUID)).willReturn(zippedDynamicModel); @@ -114,7 +114,7 @@ protected void initDynamicSimulationClientMock() { String dynamicSimulationParametersFilePath = inputDir + RESOURCE_PATH_DELIMITER + DYNAMIC_SIMULATION_PARAMETERS_DUMP_FILE; InputStream dynamicSimulationParametersIS = getClass().getResourceAsStream(dynamicSimulationParametersFilePath); assert dynamicSimulationParametersIS != null; - byte[] zippedDynamicSimulationParameters = zip(dynamicSimulationParametersIS); + byte[] zippedDynamicSimulationParameters = GZipUtils.zip(dynamicSimulationParametersIS); given(dynamicSimulationClient.getDynamicSimulationParameters(DYNAMIC_SIMULATION_RESULT_UUID)).willReturn(zippedDynamicSimulationParameters); diff --git a/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerTest.java b/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerTest.java index cda3c5e..e378b94 100644 --- a/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerTest.java +++ b/src/test/java/org/gridsuite/dynamicsecurityanalysis/server/controller/DynamicSecurityAnalysisControllerTest.java @@ -20,6 +20,7 @@ import com.powsybl.security.results.PostContingencyResult; import com.powsybl.security.results.PreContingencyResult; import com.powsybl.ws.commons.computation.service.NotificationService; +import com.powsybl.ws.commons.utils.GZipUtils; import org.gridsuite.dynamicsecurityanalysis.server.dto.DynamicSecurityAnalysisStatus; import org.gridsuite.dynamicsecurityanalysis.server.dto.contingency.ContingencyInfos; import org.gridsuite.dynamicsecurityanalysis.server.dto.parameters.DynamicSecurityAnalysisParametersInfos; @@ -47,10 +48,10 @@ import static com.powsybl.network.store.model.NetworkStoreApi.VERSION; import static com.powsybl.ws.commons.computation.service.AbstractResultContext.VARIANT_ID_HEADER; import static com.powsybl.ws.commons.computation.service.NotificationService.*; +import static com.powsybl.ws.commons.utils.GZipUtils.zip; import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.dynamicsecurityanalysis.server.service.DynamicSecurityAnalysisService.COMPUTATION_TYPE; import static org.gridsuite.dynamicsecurityanalysis.server.utils.Utils.RESOURCE_PATH_DELIMITER; -import static org.gridsuite.dynamicsecurityanalysis.server.utils.Utils.zip; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; @@ -112,7 +113,7 @@ protected void initDynamicSimulationClientMock() { String outputStateFilePath = inputDir + RESOURCE_PATH_DELIMITER + OUTPUT_STATE_DUMP_GZIP_FILE; InputStream outputStateIS = getClass().getResourceAsStream(outputStateFilePath); assert outputStateIS != null; - byte[] zippedOutputState = zip(outputStateIS); + byte[] zippedOutputState = GZipUtils.zip(outputStateIS); given(dynamicSimulationClient.getOutputState(DYNAMIC_SIMULATION_RESULT_UUID)).willReturn(zippedOutputState);