Skip to content

Commit 8d05daa

Browse files
committed
fix simple out of substation voltage level should not hinder geo data search
1 parent cb27a00 commit 8d05daa

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/main/java/org/gridsuite/geodata/server/GeoDataService.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -385,12 +385,11 @@ private static Map<String, Set<String>> getNeighbours(List<Substation> substatio
385385
for (Substation s : substations) {
386386
for (VoltageLevel vl : s.getVoltageLevels()) {
387387
for (Line line : vl.getConnectables(Line.class)) {
388-
Substation s1 = line.getTerminal1().getVoltageLevel().getSubstation().orElseThrow(); // TODO
389-
Substation s2 = line.getTerminal2().getVoltageLevel().getSubstation().orElseThrow(); // TODO
390-
if (s1 != s) {
391-
neighbours.get(s.getId()).add(s1.getId());
392-
} else if (s2 != s) {
393-
neighbours.get(s.getId()).add(s2.getId());
388+
Substation s1 = line.getTerminal1().getVoltageLevel().getSubstation().orElse(null);
389+
Substation s2 = line.getTerminal2().getVoltageLevel().getSubstation().orElse(null);
390+
Substation otherSide = s1 == s ? s2 : s1;
391+
if (otherSide != null) {
392+
neighbours.get(s.getId()).add(otherSide.getId());
394393
}
395394
}
396395
}
@@ -445,7 +444,8 @@ boolean emptyOrEquals(String emptyable, String s) {
445444
* <p>
446445
* returns null when the substations at the end of the line are missing.
447446
*/
448-
private LineGeoData getLineGeoDataWithEndSubstations(Map<String, LineGeoData> linesGeoDataDb, Map<String, SubstationGeoData> substationGeoDataDb, String lineId, Substation substation1, Substation substation2) {
447+
private LineGeoData getLineGeoDataWithEndSubstations(Map<String, LineGeoData> linesGeoDataDb,
448+
Map<String, SubstationGeoData> substationGeoDataDb, String lineId, Substation substation1, Substation substation2) {
449449
LineGeoData geoData = linesGeoDataDb.get(lineId);
450450
SubstationGeoData substation1GeoData = substationGeoDataDb.get(substation1.getId());
451451
SubstationGeoData substation2GeoData = substationGeoDataDb.get(substation2.getId());
@@ -515,13 +515,21 @@ List<LineGeoData> getLinesByCountries(Network network, Set<Country> countries) {
515515

516516
// we also want the destination substation (so we add the neighbouring country)
517517
Set<Country> countryAndNextTo = mapSubstationsByLine.entrySet().stream().flatMap(entry ->
518-
Stream.of(entry.getValue().getLeft(), entry.getValue().getRight()).map(Substation::getNullableCountry).filter(Objects::nonNull)).collect(Collectors.toSet());
518+
Stream.of(entry.getValue().getLeft(), entry.getValue().getRight())
519+
.filter(Objects::nonNull)
520+
.map(Substation::getNullableCountry)
521+
.filter(Objects::nonNull)).collect(Collectors.toSet());
519522

520523
Map<String, SubstationGeoData> substationGeoDataDb = getSubstationMapByCountries(network, countryAndNextTo);
521524
List<LineGeoData> geoData = new ArrayList<>();
522525

523-
mapSubstationsByLine.forEach((key, value) -> {
524-
LineGeoData geo = getLineGeoDataWithEndSubstations(linesGeoDataDb, substationGeoDataDb, key, value.getLeft(), value.getRight());
526+
mapSubstationsByLine.entrySet().stream()
527+
.filter(entry -> entry.getValue() != null)
528+
.filter(entry -> entry.getValue().getLeft() != null)
529+
.filter(entry -> entry.getValue().getRight() != null)
530+
.forEach(entry -> {
531+
LineGeoData geo = getLineGeoDataWithEndSubstations(linesGeoDataDb, substationGeoDataDb, entry.getKey(),
532+
entry.getValue().getLeft(), entry.getValue().getRight());
525533
if (geo != null) {
526534
geoData.add(geo);
527535
}
@@ -534,8 +542,8 @@ List<LineGeoData> getLinesByCountries(Network network, Set<Country> countries) {
534542

535543
private Pair<Substation, Substation> getSubstations(Identifiable<?> identifiable) {
536544
return switch (identifiable.getType()) {
537-
case LINE -> Pair.of(((Line) identifiable).getTerminal1().getVoltageLevel().getSubstation().orElseThrow(),
538-
((Line) identifiable).getTerminal2().getVoltageLevel().getSubstation().orElseThrow());
545+
case LINE -> Pair.of(((Line) identifiable).getTerminal1().getVoltageLevel().getSubstation().orElse(null),
546+
((Line) identifiable).getTerminal2().getVoltageLevel().getSubstation().orElse(null));
539547
case TIE_LINE ->
540548
Pair.of(((TieLine) identifiable).getDanglingLine1().getTerminal().getVoltageLevel().getSubstation().orElseThrow(),
541549
((TieLine) identifiable).getDanglingLine2().getTerminal().getVoltageLevel().getSubstation().orElseThrow());

0 commit comments

Comments
 (0)