Skip to content
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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
<type>pom</type>
<scope>import</scope>
</dependency>

<!-- imports -->
<dependency>
<groupId>org.gridsuite</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,61 +6,12 @@
*/
package org.gridsuite.modification.server;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.powsybl.commons.PowsyblException;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.gridsuite.modification.NetworkModificationException;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.HttpStatusCodeException;

import java.util.Objects;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
@Slf4j
public class NetworkModificationServerException extends PowsyblException {
public enum Type {
DUPLICATION_ARGUMENT_INVALID(HttpStatus.BAD_REQUEST, "Invalid argument for duplication");

public final HttpStatus status;
private final String message;

Type(HttpStatus status, String message) {
this.status = status;
this.message = message;
}
}

@Getter
private final Type type;

public NetworkModificationServerException(Type type) {
super(Objects.requireNonNull(type.name()) + ((type.message == null) ? "" : " : " + type.message));
this.type = type;
}

public static NetworkModificationException handleChangeError(HttpStatusCodeException httpException, NetworkModificationException.Type type) {
String responseBody = httpException.getResponseBodyAsString();
if (responseBody.isEmpty()) {
return new NetworkModificationException(type, httpException.getStatusCode().toString());
}

String message = responseBody;
try {
JsonNode node = new ObjectMapper().readTree(responseBody).path("message");
if (!node.isMissingNode()) {
message = node.asText();
}
} catch (JsonProcessingException e) {
// responseBody by default
}

log.error(message, httpException);
public class NetworkModificationServerException extends RuntimeException {

return new NetworkModificationException(type, message);
public NetworkModificationServerException(String message) {
super(message);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public static ModificationEntity fromDTO(ModificationInfos dto) {
Constructor<? extends ModificationEntity> constructor = entityClass.getConstructor(dto.getClass());
return constructor.newInstance(dto);
} catch (Exception e) {
throw new RuntimeException("Failed to map DTO to Entity", e);
throw new RuntimeException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e);
}
} else {
throw new IllegalArgumentException("No entity class registered for DTO class: " + dto.getClass());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public static EquipmentAttributeModificationEntity<?> createAttributeEntity(Equi
Constructor<? extends EquipmentAttributeModificationEntity<?>> constructor = entityClass.getConstructor(EquipmentAttributeModificationInfos.class);
return constructor.newInstance(dto);
} catch (Exception e) {
throw new RuntimeException("Failed to map DTO to Entity", e);
throw new RuntimeException("Failed to map DTO to Entity: " + e.getCause().getMessage(), e);
}
} else {
throw new IllegalArgumentException("No entity class registered for attribute value class: " + attributeValueClass);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.powsybl.iidm.network.*;
import com.powsybl.network.store.client.NetworkStoreService;
import lombok.Getter;
import org.gridsuite.modification.NetworkModificationException;
import org.gridsuite.modification.dto.ModificationInfos;
import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos;
import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos;
Expand All @@ -26,7 +25,6 @@
import java.util.regex.Pattern;
import java.util.stream.Stream;

import static org.gridsuite.modification.NetworkModificationException.Type.MODIFICATION_ERROR;
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypes;
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypesInModification;

Expand Down Expand Up @@ -196,13 +194,8 @@ public void initModificationApplication(UUID groupUuid, ModificationInfos modifi
}

public List<AbstractBaseImpact> flushModificationApplications() {
try {
networkStoreService.flush(network); // At first
flushImpactedEquipments();
} catch (Exception e) {
throw new NetworkModificationException(MODIFICATION_ERROR, e);
}

networkStoreService.flush(network); // At first
flushImpactedEquipments();
return reduceNetworkImpacts();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@
import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity;
import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity;
import org.gridsuite.modification.server.entities.tabular.TabularPropertyEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.server.ResponseStatusException;

import java.util.*;
import java.util.function.Function;
Expand Down Expand Up @@ -141,7 +144,7 @@ public UUID createNetworkCompositeModification(@NonNull List<UUID> modificationU

public void updateCompositeModification(@NonNull UUID compositeUuid, @NonNull List<UUID> modificationUuids) {
ModificationEntity modificationEntity = modificationRepository.findById(compositeUuid)
.orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid)));
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, compositeUuid)));

if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) {
throw new NetworkModificationException(MODIFICATION_ERROR,
Expand Down Expand Up @@ -284,8 +287,8 @@ public List<ModificationInfos> getModifications(UUID groupUuid, boolean onlyMeta
public List<ModificationInfos> getModifications(UUID groupUuid, boolean onlyMetadata, boolean errorOnGroupNotFound, boolean onlyStashed) {
try {
return onlyMetadata ? getModificationsMetadata(groupUuid, onlyStashed) : getModificationsInfos(List.of(groupUuid), onlyStashed);
} catch (NetworkModificationException e) {
if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) {
} catch (ResponseStatusException e) {
if (e.getStatusCode() == HttpStatusCode.valueOf(404) && !errorOnGroupNotFound) {
return List.of();
}
throw e;
Expand Down Expand Up @@ -437,7 +440,7 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) {
public ModificationEntity getModificationEntity(UUID modificationUuid) {
return modificationRepository
.findById(modificationUuid)
.orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, modificationUuid.toString()));
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid)));
}

@Transactional // To have the 2 delete in the same transaction (atomic)
Expand All @@ -451,8 +454,8 @@ public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound
deleteModifications(modifications.stream().filter(Objects::nonNull).toList());
}
modificationGroupRepository.delete(groupEntity);
} catch (NetworkModificationException e) {
if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) {
} catch (ResponseStatusException e) {
if (e.getStatusCode() == HttpStatusCode.valueOf(404) && !errorOnGroupNotFound) {
return;
}
throw e;
Expand Down Expand Up @@ -486,7 +489,7 @@ public int deleteModifications(UUID groupUuid, List<UUID> uuids) {
}

private ModificationGroupEntity getModificationGroup(UUID groupUuid) {
return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, groupUuid.toString()));
return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Modification group not found " + groupUuid));
}

private ModificationGroupEntity getOrCreateModificationGroup(UUID groupUuid) {
Expand Down Expand Up @@ -564,7 +567,7 @@ public void stashNetworkModifications(@NonNull List<UUID> modificationUuids, int
for (UUID modificationUuid : modificationUuids) {
ModificationEntity modificationEntity = this.modificationRepository
.findById(modificationUuid)
.orElseThrow(() -> new NetworkModificationException(MODIFICATION_NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid)));
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, String.format(MODIFICATION_NOT_FOUND_MESSAGE, modificationUuid)));
modificationEntity.setStashed(true);
modificationEntity.setModificationsOrder(stashModificationOrder);
modificationEntities.add(modificationEntity);
Expand Down Expand Up @@ -593,7 +596,7 @@ public void restoreNetworkModifications(@NonNull List<UUID> modificationUuids, i
int modificationOrder = unstashedSize;
List<ModificationEntity> modifications = modificationRepository.findAllByIdInReverse(modificationUuids);
if (modifications.size() != modificationUuids.size()) {
throw new NetworkModificationException(MODIFICATION_NOT_FOUND);
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Modification not found");
}
for (ModificationEntity modification : modifications) {
modification.setStashed(false);
Expand Down Expand Up @@ -646,8 +649,8 @@ public void deleteStashedModificationInGroup(UUID groupUuid, boolean errorOnGrou
groupEntity.getModifications().removeAll(modifications); // No need to remove the group from the modification as we're going to delete it
deleteModifications(modifications);
}
} catch (NetworkModificationException e) {
if (e.getType() == MODIFICATION_GROUP_NOT_FOUND && !errorOnGroupNotFound) {
} catch (ResponseStatusException e) {
if (e.getStatusCode() == HttpStatusCode.valueOf(404) && !errorOnGroupNotFound) {
return;
}
throw e;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

Expand All @@ -28,9 +27,6 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.gridsuite.modification.NetworkModificationException.Type.FILTERS_NOT_FOUND;
import static org.gridsuite.modification.server.NetworkModificationServerException.handleChangeError;

/**
* @author bendaamerahm <ahmed.bendaamer at rte-france.com>
*/
Expand Down Expand Up @@ -60,11 +56,7 @@ public List<AbstractFilter> getFilters(List<UUID> filtersUuids) {
String path = UriComponentsBuilder.fromPath(DELIMITER + FILTER_SERVER_API_VERSION + "/filters/metadata" + ids)
.buildAndExpand()
.toUriString();
try {
return restTemplate.exchange(filterServerBaseUri + path, HttpMethod.GET, null, new ParameterizedTypeReference<List<AbstractFilter>>() { }).getBody();
} catch (HttpStatusCodeException e) {
throw handleChangeError(e, FILTERS_NOT_FOUND);
}
return restTemplate.exchange(filterServerBaseUri + path, HttpMethod.GET, null, new ParameterizedTypeReference<List<AbstractFilter>>() { }).getBody();
}

public Stream<org.gridsuite.filter.identifierlistfilter.FilterEquipments> exportFilters(List<UUID> filtersUuids, Network network) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import lombok.extern.slf4j.Slf4j;
import org.gridsuite.modification.ILoadFlowService;
import org.gridsuite.modification.NetworkModificationException;
import org.gridsuite.modification.dto.LoadFlowParametersInfos;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
Expand All @@ -19,7 +18,6 @@

import java.util.UUID;

import static org.gridsuite.modification.server.NetworkModificationServerException.handleChangeError;

/**
* @author Achour BERRAHMA <achour.berrahma at rte-france.com>
Expand Down Expand Up @@ -50,7 +48,7 @@ public LoadFlowParametersInfos getLoadFlowParametersInfos(UUID uuid) {
log.error("Load flow parameters with UUID {} not found", uuid);
return null;
} else {
throw handleChangeError(e, NetworkModificationException.Type.LOAD_FLOW_PARAMETERS_FETCH_ERROR);
throw e;
}
}
}
Expand Down
Loading
Loading