Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,13 @@ public enum Applicability {
SIDE2,
}

@JsonInclude(JsonInclude.Include.NON_NULL)
List<LimitsProperty> limitsProperties;

public boolean limitsEquals(CurrentLimitsData other) {
return Objects.equals(permanentLimit, other.permanentLimit)
&& Objects.equals(temporaryLimits, other.temporaryLimits);
&& Objects.equals(temporaryLimits, other.temporaryLimits)
&& Objects.equals(limitsProperties, other.limitsProperties);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Copyright (c) 2025, 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.network.map.dto.common;

/**
* @author El Cheikh Bassel <bassel.el-cheikh_externe at rte-france.com>
*/

public record LimitsProperty(String name, String value) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.gridsuite.network.map.dto.common.CurrentLimitsData;
import org.gridsuite.network.map.dto.common.CurrentLimitsData.Applicability;
import org.gridsuite.network.map.dto.common.CurrentLimitsData.CurrentLimitsDataBuilder;
import org.gridsuite.network.map.dto.common.LimitsProperty;
import org.gridsuite.network.map.dto.common.TemporaryLimitData;
import org.gridsuite.network.map.dto.definition.branch.BranchTabInfos;
import org.gridsuite.network.map.dto.definition.branch.BranchTabInfos.BranchTabInfosBuilder;
Expand Down Expand Up @@ -75,11 +76,11 @@ public static ElementInfos toData(@NonNull final Identifiable<?> identifiable,
final Terminal terminal2 = branch.getTerminal2();

branch.getSelectedOperationalLimitsGroup1().ifPresent(limitGrp ->
limitGrp.getCurrentLimits().ifPresent(cl -> builder.selectedOperationalLimitsGroup1(toMapDataCurrentLimits(cl, limitGrp.getId(), null))));
limitGrp.getCurrentLimits().ifPresent(cl -> builder.selectedOperationalLimitsGroup1(toMapDataCurrentLimits(cl, limitGrp.getId()))));
branch.getSelectedOperationalLimitsGroupId1().ifPresent(builder::selectedOperationalLimitsGroup1Name);

branch.getSelectedOperationalLimitsGroup2().ifPresent(limitGrp ->
limitGrp.getCurrentLimits().ifPresent(cl -> builder.selectedOperationalLimitsGroup2(toMapDataCurrentLimits(cl, limitGrp.getId(), null))));
limitGrp.getCurrentLimits().ifPresent(cl -> builder.selectedOperationalLimitsGroup2(toMapDataCurrentLimits(cl, limitGrp.getId()))));
branch.getSelectedOperationalLimitsGroupId2().ifPresent(builder::selectedOperationalLimitsGroup2Name);

if (loadOperationalLimitGroups) {
Expand Down Expand Up @@ -127,13 +128,18 @@ private static BranchTabInfos toTabInfos(@NonNull final Branch<?> branch, @Nulla
return toTabBuilder((BranchTabInfosBuilder<BranchTabInfos, ?>) BranchTabInfos.builder(), branch, dcPowerFactor, loadOperationalLimitGroups).build();
}

private static List<LimitsProperty> getLimitsProperties(OperationalLimitsGroup group) {
return group.getPropertyNames().stream().map(propertyName -> new LimitsProperty(propertyName, group.getProperty(propertyName))).collect(Collectors.toCollection(ArrayList::new));
}

private static Map<String, CurrentLimitsData> buildCurrentLimitsMap(@NonNull final Collection<OperationalLimitsGroup> operationalLimitsGroups) {
if (CollectionUtils.isEmpty(operationalLimitsGroups)) {
return Map.of();
}
Map<String, CurrentLimitsData> res = HashMap.newHashMap(operationalLimitsGroups.size());
operationalLimitsGroups.forEach(operationalLimitsGroup -> operationalLimitsGroup.getCurrentLimits()
.ifPresent(limits -> res.put(operationalLimitsGroup.getId(), toMapDataCurrentLimits(limits, operationalLimitsGroup.getId(), null))));
.ifPresent(limits -> res.put(operationalLimitsGroup.getId(), toMapDataCurrentLimits(limits,
operationalLimitsGroup.getId()))));
return res;
}

Expand Down Expand Up @@ -161,7 +167,13 @@ protected static double computeIntensity(@NonNull final Terminal terminal, @Null
}

protected static CurrentLimitsData toMapDataCurrentLimits(@NonNull final CurrentLimits limits,
@Nullable final String id, @Nullable final Applicability applicability) {
@Nullable final String id) {
return toMapDataCurrentLimits(limits, id, null, null);
}

protected static CurrentLimitsData toMapDataCurrentLimits(@NonNull final CurrentLimits limits,
@Nullable final String id, @Nullable final Applicability applicability,
@Nullable List<LimitsProperty> limitsProperties) {
CurrentLimitsDataBuilder builder = CurrentLimitsData.builder().id(id).applicability(applicability);
boolean empty = true;
if (!Double.isNaN(limits.getPermanentLimit())) {
Expand All @@ -172,6 +184,10 @@ protected static CurrentLimitsData toMapDataCurrentLimits(@NonNull final Current
builder.temporaryLimits(toMapDataTemporaryLimit(limits.getTemporaryLimits()));
empty = false;
}
if (!CollectionUtils.isEmpty(limitsProperties)) {
builder.limitsProperties(limitsProperties);
empty = false;
}
return empty ? null : builder.build();
}

Expand Down Expand Up @@ -224,6 +240,7 @@ protected static List<CurrentLimitsData> mergeCurrentLimits(@NonNull final Colle
.applicability(Applicability.EQUIPMENT)
.temporaryLimits(limitsData.getTemporaryLimits())
.permanentLimit(limitsData.getPermanentLimit())
.limitsProperties(limitsData.getLimitsProperties())
.build());
return;
}
Expand All @@ -244,10 +261,14 @@ protected static List<CurrentLimitsData> mergeCurrentLimits(@NonNull final Colle
@Nullable
static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits(@Nullable final OperationalLimitsGroup operationalLimitsGroup,
@Nullable final Applicability applicability) {
if (operationalLimitsGroup == null || operationalLimitsGroup.getCurrentLimits().isEmpty()) {

if (operationalLimitsGroup == null) {
return null;
}
return toMapDataCurrentLimits(operationalLimitsGroup.getCurrentLimits().get(), operationalLimitsGroup.getId(), applicability);

Optional<CurrentLimits> currentLimits = operationalLimitsGroup.getCurrentLimits();
return currentLimits.map(limits -> toMapDataCurrentLimits(limits, operationalLimitsGroup.getId(), applicability,
getLimitsProperties(operationalLimitsGroup))).orElse(null);
}

private static List<TemporaryLimitData> toMapDataTemporaryLimit(@NonNull final Collection<TemporaryLimit> limits) {
Expand All @@ -256,7 +277,6 @@ private static List<TemporaryLimitData> toMapDataTemporaryLimit(@NonNull final C
.name(l.getName())
.acceptableDuration(l.getAcceptableDuration() == Integer.MAX_VALUE ? null : l.getAcceptableDuration())
.value(l.getValue() == Double.MAX_VALUE ? null : l.getValue())
.build())
.collect(Collectors.toList());
.build()).collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,8 @@ private static LineTooltipInfos toTooltipInfos(Identifiable<?> identifiable, Dou
.b1(line.getB1())
.b2(line.getB2());

line.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
line.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
line.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId()))));
line.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId()))));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ private static TieLineMapInfos toMapInfos(Identifiable<?> identifiable, Double d
.i2(nullIfNan(computeIntensity(terminal2, dcPowerFactor)))
.operatingStatus(ExtensionUtils.toOperatingStatus(tieLine));

tieLine.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
tieLine.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
tieLine.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId()))));
tieLine.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId()))));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,8 @@ private static TwoWindingsTransformerTooltipInfos toTooltipInfos(Identifiable<?>
.x(twoWindingsTransformer.getX())
.b(twoWindingsTransformer.getB());

twoWindingsTransformer.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
twoWindingsTransformer.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId(), null))));
twoWindingsTransformer.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId()))));
twoWindingsTransformer.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId()))));

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Function;

Expand Down Expand Up @@ -134,6 +135,13 @@ void setUp() {
.withDirection(ConnectablePosition.Direction.BOTTOM).add()
.add();

// add limits properties on operational limits group side 1
Optional<OperationalLimitsGroup> op = l1.getOperationalLimitsGroup1("limit set 1");
if (op.isPresent()) {
op.get().setProperty("prop1", "value1");
op.get().setProperty("prop2", "value2");
}

Line l2 = network.getLine("NHV1_NHV2_2");
l2.newOperationalLimitsGroup1("group1").newCurrentLimits()
.setPermanentLimit(220.0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,10 @@ private CurrentLimitsData testResult(final String id, @Nullable final Double per
}
final CurrentLimitsData result = BranchInfosMapper.operationalLimitsGroupToMapDataCurrentLimits(olgMock, null);
if (id != null) {
Mockito.verify(olgMock, Mockito.times(permanentLimit == null ? 1 : 2)).getCurrentLimits();
Mockito.verify(olgMock, Mockito.times(1)).getCurrentLimits();
if (permanentLimit != null) {
Mockito.verify(olgMock).getId();
Mockito.verify(olgMock, Mockito.times(1)).getPropertyNames();
Mockito.verify(clMock, Mockito.times(Double.isNaN(permanentLimit) ? 1 : 2)).getPermanentLimit();
Mockito.verify(clMock, Mockito.times(ArrayUtils.isEmpty(temporaryLimits) ? 1 : 2)).getTemporaryLimits();
if (ArrayUtils.isNotEmpty(temporaryLimits)) {
Expand Down
12 changes: 7 additions & 5 deletions src/test/java/org/gridsuite/network/map/dto/utils/MockDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.mockito.Mockito;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.Set;
Expand Down Expand Up @@ -152,9 +153,10 @@ public LimitType getLimitType() {
public static class OperationalLimitsGroupDtoTest implements OperationalLimitsGroup {
private String id;
private Optional<CurrentLimits> currentLimits;
private HashMap<String, String>properties;

public OperationalLimitsGroupDtoTest(String id, CurrentLimits currentLimits) {
this(id, Optional.ofNullable(currentLimits));
this(id, Optional.ofNullable(currentLimits), new HashMap<>());
}

@Override
Expand Down Expand Up @@ -229,7 +231,7 @@ public boolean hasProperty(String key) {

@Override
public String getProperty(String key) {
throw new NotImplementedException("Not supported yet.");
return properties.get(key);
}

@Override
Expand All @@ -239,17 +241,17 @@ public String getProperty(String key, String defaultValue) {

@Override
public String setProperty(String key, String value) {
throw new NotImplementedException("Not supported yet.");
return properties.put(key, value);
}

@Override
public boolean removeProperty(String key) {
throw new NotImplementedException("Not supported yet.");
return properties.remove(key) != null;
}

@Override
public Set<String> getPropertyNames() {
throw new NotImplementedException("Not supported yet.");
return properties.keySet();
}

@Override
Expand Down
5 changes: 4 additions & 1 deletion src/test/resources/line-form-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
"id" : "limit set 1",
"permanentLimit":700.4,
"temporaryLimits":[{"name":"IT5","acceptableDuration":300,"value":250.0}],
"applicability": "SIDE1"
"applicability": "SIDE1",
"limitsProperties": [{
"name": "prop1", "value": "value1"
}, {"name": "prop2", "value": "value2"}]
},
{
"id" : "limit set 1",
Expand Down
5 changes: 4 additions & 1 deletion src/test/resources/lines-form-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@
"acceptableDuration": 300
}
],
"applicability": "SIDE1"
"applicability": "SIDE1",
"limitsProperties": [{
"name": "prop1", "value": "value1"
}, {"name": "prop2", "value": "value2"}]
},
{
"id": "limit set 1",
Expand Down