Skip to content

[DS and DSA] Move GZipUtils to powsybl-ws-commons #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
<gridsuite-dependencies.version>37.0.0</gridsuite-dependencies.version>
<jib.from.image>powsybl/java-dynawo:2.2.0</jib.from.image>
<liquibase-hibernate-package>org.gridsuite.dynamicsecurityanalysis.server</liquibase-hibernate-package>

<!-- FIXME: powsybl-ws-commons module's version is overloaded in the dependencies section. The overloads and this property below have to be removed at next gridsuite-dependencies.version upgrade -->
<powsybl-ws-commons.version>1.23.0-SNAPSHOT</powsybl-ws-commons.version>
</properties>

<build>
Expand Down Expand Up @@ -84,7 +87,12 @@
<dependencyManagement>
<dependencies>
<!-- overrides of imports -->

<!-- FIXME: to be removed at next gridsuite-dependencies upgrade -->
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-ws-commons</artifactId>
<version>${powsybl-ws-commons.version}</version>
</dependency>
<!-- imports -->
<dependency>
<groupId>org.gridsuite</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
Expand All @@ -115,7 +116,7 @@ private Path unZipDumpFile(Path dumpDir, byte[] zippedOutputState) {
public List<DynamicModelConfig> unZipDynamicModel(byte[] dynamicSimulationZippedDynamicModel, ObjectMapper objectMapper) {
try {
// unzip dynamic model
List<DynamicModelConfig> dynamicModel = Utils.unzip(dynamicSimulationZippedDynamicModel, objectMapper, new TypeReference<>() { });
List<DynamicModelConfig> dynamicModel = GZipUtils.unzip(dynamicSimulationZippedDynamicModel, objectMapper, new TypeReference<>() { });
Utils.postDeserializerDynamicModel(dynamicModel);
return dynamicModel;
} catch (IOException e) {
Expand All @@ -126,7 +127,7 @@ public List<DynamicModelConfig> 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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,16 @@

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;
import com.powsybl.iidm.network.TwoSides;
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 <quyet-thang.pham at rte-france.com>
Expand Down Expand Up @@ -56,51 +50,6 @@ public static void postDeserializerDynamicModel(List<DynamicModelConfig> 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> T unzip(byte[] zippedBytes, ObjectMapper objectMapper, TypeReference<T> valueTypeRef) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
unzipToStream(zippedBytes, bos);
return objectMapper.readValue(bos.toByteArray(), valueTypeRef);
}
}

public static <T> T unzip(byte[] zippedBytes, ObjectMapper objectMapper, Class<T> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -106,15 +106,15 @@ 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);

// load dynamicSimulationParameters.dmp
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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.*;
Expand Down Expand Up @@ -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);

Expand Down
Loading