Skip to content

Commit a87f11e

Browse files
performance: use PreloadingStrategy.NONE with low numbers of substations
Signed-off-by: Joris Mancini <[email protected]>
1 parent 968ea04 commit a87f11e

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

src/main/java/org/gridsuite/network/map/services/NetworkMapService.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import java.util.*;
2727
import java.util.stream.Collectors;
2828
import java.util.stream.Stream;
29+
import java.util.stream.StreamSupport;
30+
31+
import static org.gridsuite.network.map.dto.InfoTypeParameters.QUERY_PARAM_LOAD_NETWORK_COMPONENTS;
2932

3033
/**
3134
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
@@ -62,7 +65,16 @@ private List<String> getSubstationsIds(UUID networkUuid, String variantId, List<
6265
}
6366

6467
public AllElementsInfos getAllElementsInfos(UUID networkUuid, String variantId, @NonNull List<String> substationsId, Map<String, Map<String, String>> additionalParametersByType) {
65-
Network network = getNetwork(networkUuid, PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW, variantId);
68+
// With network components we have to traverse almost all the network to recompute so we can switch to
69+
// ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW directly
70+
boolean shouldLoadNetworkComponents = Optional.ofNullable(additionalParametersByType.get(ElementType.BUS.toString()))
71+
.map(map -> map.get(QUERY_PARAM_LOAD_NETWORK_COMPONENTS))
72+
.map(Boolean::valueOf)
73+
.orElse(false);
74+
PreloadingStrategy preloadingStrategy = shouldLoadNetworkComponents || substationsId.size() >= 5 ?
75+
PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW :
76+
PreloadingStrategy.NONE;
77+
Network network = getNetwork(networkUuid, preloadingStrategy, variantId);
6678
return AllElementsInfos.builder()
6779
.substations(getSubstationsInfos(network, substationsId, getInfoTypeParameters(additionalParametersByType, ElementType.SUBSTATION), null))
6880
.voltageLevels(getVoltageLevelsInfos(network, substationsId, getInfoTypeParameters(additionalParametersByType, ElementType.VOLTAGE_LEVEL), null))
@@ -253,10 +265,11 @@ private List<ElementInfos> getTieLinesInfos(Network network, @NonNull List<Strin
253265

254266
private List<ElementInfos> getBusesInfos(Network network, @NonNull List<String> substationsId, InfoTypeParameters infoTypeParameters) {
255267
Stream<Bus> buses = substationsId.isEmpty() ? network.getBusView().getBusStream() :
256-
network.getBusView().getBusStream()
257-
.filter(Objects::nonNull)
258-
.filter(bus -> bus.getVoltageLevel().getSubstation().stream().anyMatch(substation -> substationsId.contains(substation.getId())))
259-
.distinct();
268+
substationsId
269+
.stream()
270+
.flatMap(id -> network.getSubstation(id).getVoltageLevelStream())
271+
.flatMap(vl -> StreamSupport.stream(vl.getBusView().getBuses().spliterator(), false));
272+
260273
return buses
261274
.map(c -> ElementType.BUS.getInfosGetter().apply(c, infoTypeParameters))
262275
.distinct()

0 commit comments

Comments
 (0)