Skip to content

Commit 120e19b

Browse files
committed
get only the selected current limits when getCurrentLimits
Signed-off-by: Etienne LESOT <[email protected]>
1 parent 5307d5d commit 120e19b

File tree

9 files changed

+141
-6
lines changed

9 files changed

+141
-6
lines changed

network-store-client/src/main/java/com/powsybl/network/store/client/PreloadingNetworkStoreClient.java

+6
Original file line numberDiff line numberDiff line change
@@ -889,4 +889,10 @@ public Optional<OperationalLimitsGroupAttributes> getOperationalLimitsGroupAttri
889889
delegate.getAllOperationalLimitsGroupAttributesByResourceType(networkUuid, variantNum, resourceType);
890890
return delegate.getOperationalLimitsGroupAttributes(networkUuid, variantNum, resourceType, branchId, operationalLimitGroupId, side);
891891
}
892+
893+
@Override
894+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String branchId, String operationalLimitGroupId, int side) {
895+
delegate.getSelectedCurrentLimitsGroupAttributesByResourceType(networkUuid, variantNum, resourceType);
896+
return delegate.getOperationalLimitsGroupAttributes(networkUuid, variantNum, resourceType, branchId, operationalLimitGroupId, side);
897+
}
892898
}

network-store-client/src/main/java/com/powsybl/network/store/client/RestNetworkStoreClient.java

+12
Original file line numberDiff line numberDiff line change
@@ -987,4 +987,16 @@ public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupA
987987
return getOperationalLimitsGroupAttributesNestedMap("/networks/{networkUuid}/{variantNum}/branch/types/{resourceType}/operationalLimitsGroup/",
988988
networkUuid, variantNum, resourceType);
989989
}
990+
991+
@Override
992+
public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType) {
993+
return getOperationalLimitsGroupAttributesNestedMap("/networks/{networkUuid}/{variantNum}/branch/types/{resourceType}/operationalLimitsGroup/currentLimits/",
994+
networkUuid, variantNum, resourceType);
995+
}
996+
997+
@Override
998+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String branchId, String operationalLimitsGroupId, int side) {
999+
return getOperationalLimitsGroupAttributes("/networks/{networkUuid}/{variantNum}/branch/{branchId}/types/{resourceType}/operationalLimitsGroup/currentLimits/{operationalLimitsGroupId}/side/{side}",
1000+
networkUuid, variantNum, branchId, resourceType, operationalLimitsGroupId, side);
1001+
}
9901002
}

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/AbstractBranchImpl.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ public Optional<CurrentLimits> getCurrentLimits(TwoSides side) {
303303

304304
@Override
305305
public CurrentLimits getNullableCurrentLimits1() {
306-
loadOperationalLimitsGroup(TwoSides.ONE);
306+
loadCurrentLimitsGroup(TwoSides.ONE);
307307
var group = getResource().getAttributes().getSelectedOperationalLimitsGroup1();
308308
return group != null && group.getCurrentLimits() != null
309309
? new CurrentLimitsImpl<>(this, TwoSides.ONE, group.getId(), group.getCurrentLimits())
@@ -317,7 +317,7 @@ public Optional<CurrentLimits> getCurrentLimits1() {
317317

318318
@Override
319319
public CurrentLimits getNullableCurrentLimits2() {
320-
loadOperationalLimitsGroup(TwoSides.TWO);
320+
loadCurrentLimitsGroup(TwoSides.TWO);
321321
var group = getResource().getAttributes().getSelectedOperationalLimitsGroup2();
322322
return group != null && group.getCurrentLimits() != null
323323
? new CurrentLimitsImpl<>(this, TwoSides.TWO, group.getId(), group.getCurrentLimits())
@@ -631,4 +631,18 @@ private void loadOperationalLimitsGroup(TwoSides side) {
631631
index.loadOperationalLimitsGroupAttributes(ResourceType.convert(getType()), getId(), groupId, side.getNum());
632632
}
633633
}
634+
635+
private void loadCurrentLimitsGroup(TwoSides side) {
636+
String groupId;
637+
if (side == TwoSides.ONE) {
638+
groupId = getResource().getAttributes().getSelectedOperationalLimitsGroupId1();
639+
} else if (side == TwoSides.TWO) {
640+
groupId = getResource().getAttributes().getSelectedOperationalLimitsGroupId2();
641+
} else {
642+
throw new PowsyblException("can not load limits on branch for a side null");
643+
}
644+
if (groupId != null) {
645+
index.loadCurrentLimitsGroupAttributes(ResourceType.convert(getType()), getId(), groupId, side.getNum());
646+
}
647+
}
634648
}

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/CachedNetworkStoreClient.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -1101,7 +1101,6 @@ public void removeExtensionAttributes(UUID networkUuid, int variantNum, Resource
11011101
}
11021102

11031103
// limits
1104-
11051104
@Override
11061105
public Optional<OperationalLimitsGroupAttributes> getOperationalLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String identifiableId, String operationalLimitGroupName, int side) {
11071106
return getCache(resourceType).getCollection(networkUuid, variantNum).getOperationalLimitsAttributes(networkUuid, variantNum, resourceType, identifiableId, operationalLimitGroupName, side);
@@ -1118,6 +1117,16 @@ public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupA
11181117
return getCache(resourceType).getCollection(networkUuid, variantNum).getAllOperationalLimitsGroupAttributesByResourceType(networkUuid, variantNum, resourceType);
11191118
}
11201119

1120+
@Override
1121+
public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType) {
1122+
return getCache(resourceType).getCollection(networkUuid, variantNum).getSelectedCurrentLimitsGroupAttributesByResourceType(networkUuid, variantNum, resourceType);
1123+
}
1124+
1125+
@Override
1126+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String identifiableId, String operationalLimitGroupName, int side) {
1127+
return getCache(resourceType).getCollection(networkUuid, variantNum).getCurrentLimitsAttributes(networkUuid, variantNum, resourceType, identifiableId, operationalLimitGroupName, side);
1128+
}
1129+
11211130
private NetworkCollectionIndex<? extends CollectionCache<?>> getCache(ResourceType resourceType) {
11221131
return switch (resourceType) {
11231132
case NETWORK -> networksCache;

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/CollectionCache.java

+59-3
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,18 @@ public class CollectionCache<T extends IdentifiableAttributes> {
8484
*/
8585
private boolean isFullyLoadedOperationalLimitsGroup = false;
8686

87+
private boolean isFullyLoadedCurrentLimitsGroup = false;
88+
8789
/**
8890
* Indicates if all the operational limits groups for a specific identifiable has been fully loaded and synchronized with the server.
8991
*/
9092
private final Set<String> fullyLoadedOperationalLimitsGroupsByBranchIds = new HashSet<>();
9193

94+
/**
95+
* Indicates if all the operational limits groups for a specific identifiable has been fully loaded and synchronized with the server.
96+
*/
97+
private final Set<String> fullyLoadedCurrentLimitsGroupsByBranchIds = new HashSet<>();
98+
9299
/**
93100
* Map storing sets of removed operational limits names associated with identifiable IDs.
94101
* The map is organized where:
@@ -383,6 +390,7 @@ public CollectionCache<T> clone(ObjectMapper objectMapper, int newVariantNum, Co
383390
clonedCache.removedOperationalLimitsGroupsAttributes.addAll(removedOperationalLimitsGroupsAttributes);
384391
clonedCache.fullyLoadedOperationalLimitsGroupsByBranchIds.addAll(fullyLoadedOperationalLimitsGroupsByBranchIds);
385392
clonedCache.isFullyLoadedOperationalLimitsGroup = isFullyLoadedOperationalLimitsGroup;
393+
clonedCache.isFullyLoadedCurrentLimitsGroup = isFullyLoadedCurrentLimitsGroup;
386394

387395
clonedCache.containerFullyLoaded.addAll(containerFullyLoaded);
388396
clonedCache.removedResources.addAll(removedResources);
@@ -581,6 +589,10 @@ private boolean isOperationalLimitsGroupAttributesCached(String branchId) {
581589
return (fullyLoadedOperationalLimitsGroupsByBranchIds.contains(branchId) || isFullyLoadedOperationalLimitsGroup) && resources.containsKey(branchId);
582590
}
583591

592+
private boolean isCurrentLimitsGroupAttributesCached(String branchId) {
593+
return (fullyLoadedOperationalLimitsGroupsByBranchIds.contains(branchId) || fullyLoadedCurrentLimitsGroupsByBranchIds.contains(branchId) || isFullyLoadedOperationalLimitsGroup || isFullyLoadedCurrentLimitsGroup) && resources.containsKey(branchId);
594+
}
595+
584596
private boolean isFullyLoadedOperationalLimitsGroup(String branchId) {
585597
return isFullyLoadedOperationalLimitsGroup || fullyLoadedOperationalLimitsGroupsByBranchIds.contains(branchId);
586598
}
@@ -600,6 +612,7 @@ private void addOperationalLimitsGroupAttributesToCache(String branchId, String
600612
getCachedOperationalLimitsGroupAttributes(branchId, side).putIfAbsent(operationalLimitsGroupName, operationalLimitsGroupAttributes);
601613
OperationalLimitsGroupIdentifier identifier = OperationalLimitsGroupIdentifier.of(branchId, operationalLimitsGroupName, side);
602614
removedOperationalLimitsGroupsAttributes.remove(identifier);
615+
fullyLoadedOperationalLimitsGroupsByBranchIds.add(branchId);
603616
}
604617

605618
public void removeOperationalLimitsGroupAttributesByName(String branchId, String operationalLimitsGroupName, int side) {
@@ -628,6 +641,47 @@ public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupA
628641
return Collections.emptyMap();
629642
}
630643

644+
/**
645+
* Get all the operational limits group attributes for all the identifiables with specified resource type in the cache
646+
*/
647+
public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType type) {
648+
if (!isFullyLoadedCurrentLimitsGroup) {
649+
// if collection has not yet been fully loaded we load it from the server
650+
Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> operationalLimitsGroupAttributesMap =
651+
delegate.getSelectedCurrentLimitsGroupAttributesByResourceType(networkUuid, variantNum, type);
652+
653+
// we update the full cache and set it as fully loaded
654+
operationalLimitsGroupAttributesMap.forEach(this::addAllOperationalLimitsGroupAttributesToCache);
655+
isFullyLoadedCurrentLimitsGroup = true;
656+
}
657+
return Collections.emptyMap();
658+
}
659+
660+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsAttributes(UUID networkUuid, int variantNum, ResourceType type,
661+
String branchId, String operationalLimitGroupName, int side) {
662+
Objects.requireNonNull(branchId);
663+
if (isCurrentLimitsGroupAttributesCached(branchId)) {
664+
return Optional.ofNullable(getCachedOperationalLimitsGroupAttributes(branchId, side).get(operationalLimitGroupName));
665+
}
666+
667+
if (!isFullyLoadedOperationalLimitsGroup(branchId) && !isRemovedOperationalLimitsGroupAttributes(branchId, operationalLimitGroupName, side)) {
668+
return delegate.getCurrentLimitsGroupAttributes(networkUuid, variantNum, type, branchId, operationalLimitGroupName, side)
669+
.map(attributes -> {
670+
addCurrentLimitsGroupAttributesToCache(branchId, operationalLimitGroupName, side, attributes);
671+
return attributes;
672+
});
673+
}
674+
return Optional.empty();
675+
}
676+
677+
private void addCurrentLimitsGroupAttributesToCache(String branchId, String operationalLimitsGroupName, int side, OperationalLimitsGroupAttributes operationalLimitsGroupAttributes) {
678+
Objects.requireNonNull(operationalLimitsGroupAttributes);
679+
getCachedOperationalLimitsGroupAttributes(branchId, side).putIfAbsent(operationalLimitsGroupName, operationalLimitsGroupAttributes);
680+
OperationalLimitsGroupIdentifier identifier = OperationalLimitsGroupIdentifier.of(branchId, operationalLimitsGroupName, side);
681+
removedOperationalLimitsGroupsAttributes.remove(identifier);
682+
fullyLoadedCurrentLimitsGroupsByBranchIds.add(branchId);
683+
}
684+
631685
/**
632686
* Add operational limits group attributes to the cache when loading all the operational limits group attributes of an identifiable.<br/>
633687
* This method is only used to get operational limits group attributes from the server so even if it adds some checks and reduces performance by a tiny bit,
@@ -638,9 +692,11 @@ private void addAllOperationalLimitsGroupAttributesToCache(String branchId, Map<
638692
Objects.requireNonNull(operationalLimitsGroupAttributesMap);
639693

640694
operationalLimitsGroupAttributesMap.forEach((identifier, limitsGroup) -> {
641-
getCachedOperationalLimitsGroupAttributes(identifier.getBranchId(), identifier.getSide())
642-
.putIfAbsent(limitsGroup.getId(), limitsGroup);
643-
removedOperationalLimitsGroupsAttributes.remove(identifier);
695+
if (limitsGroup != null) {
696+
getCachedOperationalLimitsGroupAttributes(identifier.getBranchId(), identifier.getSide())
697+
.putIfAbsent(limitsGroup.getId(), limitsGroup);
698+
removedOperationalLimitsGroupsAttributes.remove(identifier);
699+
}
644700
});
645701
fullyLoadedOperationalLimitsGroupsByBranchIds.add(branchId);
646702
}

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/NetworkObjectIndex.java

+4
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,10 @@ public void loadOperationalLimitsGroupAttributes(ResourceType type, String branc
12351235
storeClient.getOperationalLimitsGroupAttributes(network.getUuid(), workingVariantNum, type, branchId, operationalLimitGroupName, side);
12361236
}
12371237

1238+
public void loadCurrentLimitsGroupAttributes(ResourceType type, String branchId, String operationalLimitGroupName, int side) {
1239+
storeClient.getCurrentLimitsGroupAttributes(network.getUuid(), workingVariantNum, type, branchId, operationalLimitGroupName, side);
1240+
}
1241+
12381242
public void removeOperationalLimitsGroupAttributes(ResourceType type, String identifiableId, String operationalLimitGroupName, int side) {
12391243
storeClient.removeOperationalLimitsGroupAttributes(network.getUuid(), workingVariantNum, type, identifiableId, operationalLimitGroupName, side);
12401244
}

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/NetworkStoreClient.java

+14
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,20 @@ public interface NetworkStoreClient {
350350
*/
351351
Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getAllOperationalLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType);
352352

353+
/**
354+
* For one identifiable with a specific identifiable id, retrieves one extension attributes by its extension name.
355+
* @return {@link LimitsAttributes} which is a subset of an identifiable resource. The extension attributes can be put in the
356+
* extensionAttributes map of an {@link IdentifiableAttributes} or used to load an extension.
357+
*/
358+
Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String branchId, String operationalLimitGroupName, int side);
359+
360+
/**
361+
* For all the identifiables of a specific resource type, retrieves all extension attributes of this identifiable.
362+
* Used for preloading collection strategy.
363+
* @return A {@link Map} where keys are identifiable IDs and values are {@link Map}s where keys are extension names and values are {@link ExtensionAttributes}.
364+
*/
365+
Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType);
366+
353367
Optional<Resource<IdentifiableAttributes>> getIdentifiable(UUID networkUuid, int variantNum, String id);
354368

355369
List<String> getIdentifiablesIds(UUID networkUuid, int variantNum);

network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/OfflineNetworkStoreClient.java

+10
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,16 @@ public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupA
646646
return Map.of();
647647
}
648648

649+
@Override
650+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String branchId, String operationalLimitGroupName, int side) {
651+
return Optional.empty();
652+
}
653+
654+
@Override
655+
public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType) {
656+
return Map.of();
657+
}
658+
649659
@Override
650660
public List<Resource<GroundAttributes>> getVoltageLevelGrounds(UUID networkUuid, int variantNum,
651661
String voltageLevelId) {

network-store-iidm-impl/src/test/java/com/powsybl/network/store/iidm/impl/MockNetworkStoreClient.java

+10
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupA
112112
return Map.of();
113113
}
114114

115+
@Override
116+
public Optional<OperationalLimitsGroupAttributes> getCurrentLimitsGroupAttributes(UUID networkUuid, int variantNum, ResourceType resourceType, String branchId, String operationalLimitGroupName, int side) {
117+
return Optional.empty();
118+
}
119+
120+
@Override
121+
public Map<String, Map<OperationalLimitsGroupIdentifier, OperationalLimitsGroupAttributes>> getSelectedCurrentLimitsGroupAttributesByResourceType(UUID networkUuid, int variantNum, ResourceType resourceType) {
122+
return Map.of();
123+
}
124+
115125
@Override
116126
public List<NetworkInfos> getNetworksInfos() {
117127
throw new UnsupportedOperationException("Unimplemented method");

0 commit comments

Comments
 (0)