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
6 changes: 5 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,11 @@
<artifactId>powsybl-config-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-commons-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

package org.gridsuite.modification.server;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.gridsuite.modification.server.json.ModificationInfosJsonModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
@Configuration
public class RestTemplateConfig {
private ObjectMapper createObjectMapper() {
var objectMapper = Jackson2ObjectMapperBuilder.json().build();
objectMapper.registerModule(new ModificationInfosJsonModule());
return objectMapper;
}

@Bean
public ObjectMapper objectMapper() {
return createObjectMapper();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.gridsuite.modification.server.entities.equipment.deletion.AbstractEquipmentDeletionEntity;
import org.gridsuite.modification.server.entities.equipment.deletion.HvdcLccDeletionEntity;
import org.gridsuite.modification.server.entities.equipment.deletion.ShuntCompensatorSelectionEmbeddable;

import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -27,6 +28,8 @@ public class HvdcLccDeletionInfos extends AbstractEquipmentDeletionInfos {

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class ShuntCompensatorInfos {
private String id;
private boolean connectedToHvdc;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@
@ToString
@Schema(description = "Modification attributes")
public class ModificationInfos {
public static final String VERSION = "1.0";

@Schema(description = "Modification id")
private UUID uuid;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
package org.gridsuite.modification.server.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import lombok.*;
import org.gridsuite.modification.server.impacts.SimpleElementImpact;

import java.util.List;
Expand All @@ -20,7 +19,10 @@
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
@Builder
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "Network modification result")
public class NetworkModificationResult {
public enum ApplicationStatus {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonParser;
import org.gridsuite.modification.server.dto.BasicEquipmentModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractBasicEquipmentModificationInfosDeserializer<T extends BasicEquipmentModificationInfos> extends AbstractEquipmentModificationInfosDeserializer<T> {

protected transient AttributeModificationInfosDeserializer attributeModificationInfosDeserializer = new AttributeModificationInfosDeserializer();

protected AbstractBasicEquipmentModificationInfosDeserializer(final Class<T> t) {
super(t);
}

protected void deserializeAttribute(BasicEquipmentModificationInfos modificationInfos, JsonParser parser) throws IOException {
switch (parser.getCurrentName()) {
case "equipmentName":
modificationInfos.setEquipmentName(attributeModificationInfosDeserializer.deserialize(parser, String.class));
break;

default:
super.deserializeAttribute(modificationInfos, parser);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.gridsuite.modification.server.dto.BasicEquipmentModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractBasicEquipmentModificationInfosSerializer<T extends BasicEquipmentModificationInfos> extends AbstractEquipmentModificationInfosSerializer<T> {
protected final transient AttributeModificationInfosSerializer attributeSerializer = new AttributeModificationInfosSerializer();

protected AbstractBasicEquipmentModificationInfosSerializer(final Class<T> t) {
super(t);
}

@Override
public void serialize(T modification, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
super.serialize(modification, jsonGenerator, serializerProvider);
attributeSerializer.serialize("equipmentName", modification.getEquipmentName(), jsonGenerator);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonParser;
import org.gridsuite.modification.server.dto.EquipmentModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractEquipmentModificationInfosDeserializer<T extends EquipmentModificationInfos> extends AbstractModificationInfosDeserializer<T> {
protected AbstractEquipmentModificationInfosDeserializer(final Class<T> t) {
super(t);
}

protected void deserializeAttribute(EquipmentModificationInfos modificationInfos, JsonParser parser) throws IOException {
switch (parser.getCurrentName()) {
case "equipmentId":
parser.nextToken();
modificationInfos.setEquipmentId(parser.getValueAsString());
break;

default:
super.deserializeAttribute(modificationInfos, parser);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.gridsuite.modification.server.dto.EquipmentModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractEquipmentModificationInfosSerializer<T extends EquipmentModificationInfos> extends AbstractModificationInfosSerializer<T> {
AbstractEquipmentModificationInfosSerializer(final Class<T> t) {
super(t);
}

@Override
public void serialize(T modification, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
super.serialize(modification, jsonGenerator, serializerProvider);
jsonGenerator.writeStringField("equipmentId", modification.getEquipmentId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonParser;
import org.gridsuite.modification.server.dto.InjectionModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractInjectionModificationInfosDeserializer<T extends InjectionModificationInfos> extends AbstractBasicEquipmentModificationInfosDeserializer<T> {
protected AbstractInjectionModificationInfosDeserializer(final Class<T> t) {
super(t);
}

protected void deserializeAttribute(InjectionModificationInfos modificationInfos, JsonParser parser) throws IOException {
switch (parser.getCurrentName()) {
case "voltageLevelId":
modificationInfos.setVoltageLevelId(attributeModificationInfosDeserializer.deserialize(parser, String.class));
break;

case "busOrBusbarSectionId":
modificationInfos.setBusOrBusbarSectionId(attributeModificationInfosDeserializer.deserialize(parser, String.class));
break;

default:
super.deserializeAttribute(modificationInfos, parser);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.gridsuite.modification.server.dto.InjectionModificationInfos;

import java.io.IOException;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractInjectionModificationInfosSerializer<T extends InjectionModificationInfos> extends AbstractBasicEquipmentModificationInfosSerializer<T> {
protected AbstractInjectionModificationInfosSerializer(final Class<T> t) {
super(t);
}

@Override
public void serialize(T modification, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
super.serialize(modification, jsonGenerator, serializerProvider);
attributeSerializer.serialize("voltageLevelId", modification.getVoltageLevelId(), jsonGenerator);
attributeSerializer.serialize("busOrBusbarSectionId", modification.getBusOrBusbarSectionId(), jsonGenerator);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import org.gridsuite.modification.server.dto.ModificationInfos;

import java.io.IOException;

import static org.gridsuite.modification.server.modifications.ModificationUtils.toDateIfNotNull;
import static org.gridsuite.modification.server.modifications.ModificationUtils.toUuidIfNotNull;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractModificationInfosDeserializer<T extends ModificationInfos> extends StdDeserializer<T> {
protected AbstractModificationInfosDeserializer(final Class<T> t) {
super(t);
}

protected void deserializeAttribute(ModificationInfos modificationInfos, JsonParser parser) throws IOException {
switch (parser.getCurrentName()) {
case "version", "type":
break;
case "uuid":
parser.nextToken();
modificationInfos.setUuid(toUuidIfNotNull(parser.getValueAsString()));
break;
case "date":
parser.nextToken();
modificationInfos.setDate(toDateIfNotNull(parser.getValueAsString()));
break;
case "stashed":
parser.nextToken();
modificationInfos.setStashed(parser.getValueAsBoolean());
break;
case "messageType":
parser.nextToken();
modificationInfos.setMessageType(parser.getValueAsString());
break;
case "messageValues":
parser.nextToken();
modificationInfos.setMessageValues(parser.getValueAsString());
break;
default:
throw new IllegalStateException("Unexpected field: " + parser.getCurrentName());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.modification.server.json;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.gridsuite.modification.server.dto.ModificationInfos;

import java.io.IOException;

import static com.fasterxml.jackson.core.JsonToken.START_OBJECT;
import static org.gridsuite.modification.server.modifications.ModificationUtils.toStringIfNotNull;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public abstract class AbstractModificationInfosSerializer<T extends ModificationInfos> extends StdSerializer<T> {

protected AbstractModificationInfosSerializer(final Class<T> t) {
super(t);
}

@Override
public void serialize(final T modification, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStringField("version", ModificationInfos.VERSION);
jsonGenerator.writeStringField("type", modification.getType().name());
jsonGenerator.writeStringField("uuid", toStringIfNotNull(modification.getUuid()));
jsonGenerator.writeStringField("date", modification.getDate() == null ? null : modification.getDate().toString());
jsonGenerator.writeBooleanField("stashed", modification.getStashed());
if (modification.getMessageType() != null) {
jsonGenerator.writeStringField("messageType", modification.getMessageType());
}
if (modification.getMessageValues() != null) {
jsonGenerator.writeStringField("messageValues", modification.getMessageValues());
}
}

@Override
public void serializeWithType(T modification, JsonGenerator gen,
SerializerProvider provider, TypeSerializer typeSer) throws IOException {
WritableTypeId typeId = typeSer.typeId(modification, START_OBJECT);
typeSer.writeTypePrefix(gen, typeId);
serialize(modification, gen, provider);
typeSer.writeTypeSuffix(gen, typeId);
}
}
Loading