Skip to content

Commit e9dd08a

Browse files
authored
update reindexed equipment when add/remove/replace property (#687)
* update reindexed equipment when add/remove/replace property --------- Signed-off-by: SOUISSI Maissa (Externe) <[email protected]>
1 parent 8f04275 commit e9dd08a

File tree

5 files changed

+81
-14
lines changed

5 files changed

+81
-14
lines changed

src/main/java/org/gridsuite/modification/server/elasticsearch/EquipmentInfosService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class EquipmentInfosService {
3838
@Value("${spring.data.elasticsearch.partition-size-for-deletion:2048}")
3939
public int partitionSizeForDeletion;
4040

41-
public static final Set<IdentifiableType> TYPES_FOR_INDEXING = Set.of(
41+
private static final Set<IdentifiableType> TYPES_FOR_INDEXING = Set.of(
4242
IdentifiableType.SUBSTATION,
4343
IdentifiableType.VOLTAGE_LEVEL,
4444
IdentifiableType.HVDC_LINE,
@@ -53,6 +53,10 @@ public class EquipmentInfosService {
5353
IdentifiableType.STATIC_VAR_COMPENSATOR,
5454
IdentifiableType.HVDC_CONVERTER_STATION);
5555

56+
public static Set<IdentifiableType> getIndexedEquipmentTypes() {
57+
return TYPES_FOR_INDEXING;
58+
}
59+
5660
public EquipmentInfosService(EquipmentInfosRepository equipmentInfosRepository, TombstonedEquipmentInfosRepository tombstonedEquipmentInfosRepository) {
5761
this.equipmentInfosRepository = equipmentInfosRepository;
5862
this.tombstonedEquipmentInfosRepository = tombstonedEquipmentInfosRepository;

src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.util.stream.Stream;
2929

3030
import static org.gridsuite.modification.NetworkModificationException.Type.MODIFICATION_ERROR;
31-
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.TYPES_FOR_INDEXING;
31+
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypes;
3232

3333
/**
3434
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
@@ -123,22 +123,31 @@ private void addSimpleModificationImpact(Identifiable<?> identifiable) {
123123
@Override
124124
public void onPropertyRemoved(Identifiable identifiable, String attribute, Object oldValue) {
125125
addSimpleModificationImpact(identifiable);
126+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
127+
updateEquipmentIndexation(identifiable, attribute, networkUuid, network.getVariantManager().getWorkingVariantId());
128+
}
126129
}
127130

128131
@Override
129132
public void onPropertyAdded(Identifiable identifiable, String attribute, Object newValue) {
130133
addSimpleModificationImpact(identifiable);
134+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
135+
updateEquipmentIndexation(identifiable, attribute, networkUuid, network.getVariantManager().getWorkingVariantId());
136+
}
131137
}
132138

133139
@Override
134140
public void onPropertyReplaced(Identifiable identifiable, String attribute, Object oldValue, Object newValue) {
135141
addSimpleModificationImpact(identifiable);
142+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
143+
updateEquipmentIndexation(identifiable, attribute, networkUuid, network.getVariantManager().getWorkingVariantId());
144+
}
136145
}
137146

138147
@Override
139148
public void onUpdate(Identifiable identifiable, String attribute, String variantId, Object oldValue, Object newValue) {
140149
addSimpleModificationImpact(identifiable);
141-
if (TYPES_FOR_INDEXING.contains(identifiable.getType())) {
150+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
142151
updateEquipmentIndexation(identifiable, attribute, networkUuid, network.getVariantManager().getWorkingVariantId());
143152
}
144153
}
@@ -181,13 +190,13 @@ private void updateEquipmentsLinkedToSubstation(Substation substation) {
181190

182191
private void updateEquipmentsLinkedToVoltageLevel(VoltageLevel voltageLevel) {
183192
voltageLevel.getConnectableStream()
184-
.filter(connectable -> TYPES_FOR_INDEXING.contains(connectable.getType()))
193+
.filter(connectable -> getIndexedEquipmentTypes().contains(connectable.getType()))
185194
.forEach(c -> updateImpactedEquipment(toEquipmentInfos(c, networkUuid, network.getVariantManager().getWorkingVariantId()), SimpleImpactType.MODIFICATION, true, false));
186195
}
187196

188197
@Override
189198
public void onCreation(Identifiable identifiable) {
190-
if (TYPES_FOR_INDEXING.contains(identifiable.getType())) {
199+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
191200
updateImpactedEquipment(EquipmentInfos.builder()
192201
.networkUuid(networkUuid)
193202
.variantId(network.getVariantManager().getWorkingVariantId())
@@ -210,7 +219,7 @@ public void onCreation(Identifiable identifiable) {
210219

211220
@Override
212221
public void beforeRemoval(Identifiable identifiable) {
213-
if (TYPES_FOR_INDEXING.contains(identifiable.getType())) {
222+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
214223
updateImpactedEquipment(TombstonedEquipmentInfos.builder()
215224
.networkUuid(networkUuid)
216225
.variantId(network.getVariantManager().getWorkingVariantId())
@@ -381,7 +390,7 @@ private List<EquipmentInfos> getAllModifiedEquipmentsToBeIndexed() {
381390
@Override
382391
public void onExtensionCreation(Extension<?> extension) {
383392
Identifiable<?> identifiable = (Identifiable<?>) extension.getExtendable();
384-
if (TYPES_FOR_INDEXING.contains(identifiable.getType())) {
393+
if (getIndexedEquipmentTypes().contains(identifiable.getType())) {
385394
updateImpactedEquipment(toEquipmentInfos(identifiable, networkUuid, network.getVariantManager().getWorkingVariantId()), SimpleImpactType.MODIFICATION);
386395
}
387396
addSimpleModificationImpact(identifiable);

src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE1;
7070
import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.SIDE2;
7171
import static org.gridsuite.modification.server.NetworkModificationServerException.Type.DUPLICATION_ARGUMENT_INVALID;
72-
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.TYPES_FOR_INDEXING;
72+
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.getIndexedEquipmentTypes;
7373
import static org.gridsuite.modification.server.impacts.TestImpactUtils.*;
7474
import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY;
7575
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
@@ -1442,7 +1442,7 @@ private void testMultipleDeletionImpacts(String networkModificationResultAsStrin
14421442
assertNull(network.getIdentifiable(simpleImpact.getElementId()));
14431443

14441444
// Equipment has been added as TombstonedEquipmentInfos in ElasticSearch except for excluded types
1445-
if (TYPES_FOR_INDEXING.contains(simpleImpact.getElementType())) {
1445+
if (getIndexedEquipmentTypes().contains(simpleImpact.getElementType())) {
14461446
assertTrue(existTombstonedEquipmentInfos(simpleImpact.getElementId(), TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID));
14471447
} else {
14481448
assertFalse(existTombstonedEquipmentInfos(simpleImpact.getElementId(), TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID));

src/test/java/org/gridsuite/modification/server/service/EquipmentIndexationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import java.util.UUID;
3333

3434
import static com.powsybl.iidm.network.VariantManagerConstants.INITIAL_VARIANT_ID;
35-
import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.TYPES_FOR_INDEXING;
35+
3636
import static org.junit.jupiter.api.Assertions.assertEquals;
3737
import static org.junit.jupiter.api.Assertions.assertTrue;
3838
import static org.mockito.ArgumentMatchers.eq;
@@ -139,7 +139,7 @@ void testModificationsNotIndexed() throws Exception {
139139
List<EquipmentInfos> equipmentsIndexedAfterVlModif = equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, NEW_VARIANT);
140140
assertEquals(11, equipmentsIndexedAfterVlModif.size());
141141
assertTrue(equipmentsIndexedAfterVlModif.stream()
142-
.allMatch(equipmentInfos -> TYPES_FOR_INDEXING.contains(IdentifiableType.valueOf(equipmentInfos.getType()))));
142+
.allMatch(equipmentInfos -> EquipmentInfosService.getIndexedEquipmentTypes().contains(IdentifiableType.valueOf(equipmentInfos.getType()))));
143143
}
144144

145145
@Test

src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.gridsuite.modification.dto.*;
2020
import org.gridsuite.modification.server.dto.*;
2121
import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos;
22+
import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService;
2223
import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosRepository;
2324
import org.gridsuite.modification.server.entities.ModificationApplicationEntity;
2425
import org.gridsuite.modification.server.entities.ModificationEntity;
@@ -31,13 +32,13 @@
3132
import org.junit.jupiter.api.Tag;
3233
import org.junit.jupiter.api.Test;
3334
import org.mockito.Mock;
35+
import org.mockito.MockedStatic;
36+
import org.mockito.Mockito;
3437
import org.springframework.beans.factory.annotation.Autowired;
3538
import org.springframework.boot.test.context.SpringBootTest;
3639
import org.springframework.boot.test.mock.mockito.MockBean;
3740

38-
import java.util.Collections;
39-
import java.util.List;
40-
import java.util.UUID;
41+
import java.util.*;
4142

4243
import static com.powsybl.iidm.network.VariantManagerConstants.INITIAL_VARIANT_ID;
4344
import static org.assertj.core.api.Assertions.assertThat;
@@ -431,4 +432,57 @@ private LoadCreationInfos createLoadCreationInfos(String loadId) {
431432
.busOrBusbarSectionId("1.1")
432433
.build();
433434
}
435+
436+
@Test
437+
void testUpdateModificationProperties() {
438+
LoadModificationInfos loadModificationInfos = LoadModificationInfos.builder()
439+
.equipmentId("load1")
440+
.properties(List.of(FreePropertyInfos.builder().name("loadPropertyName").value("loadPropertyValue").build()))
441+
.build();
442+
443+
UUID groupUuid = UUID.randomUUID();
444+
List<ModificationEntity> entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos)));
445+
NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos);
446+
assertNotNull(result);
447+
448+
ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst();
449+
ModificationApplicationInfos modificationApplicationInfos = IterableUtils.toList(modificationApplicationInfosRepository.findAll()).getFirst();
450+
451+
assertEquals(entities.getFirst().getId(), modificationApplicationEntity.getModification().getId());
452+
assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getModificationUuid());
453+
assertEquals(groupUuid, modificationApplicationInfos.getGroupUuid());
454+
455+
assertEquals(1, modificationApplicationEntity.getModifiedEquipmentIds().size());
456+
assertEquals(1, modificationApplicationInfos.getModifiedEquipmentIds().size());
457+
458+
Optional<String> anyModifiedEquipmentIdEntity = modificationApplicationEntity.getModifiedEquipmentIds().stream().findAny();
459+
assertTrue(anyModifiedEquipmentIdEntity.isPresent());
460+
assertEquals("load1", anyModifiedEquipmentIdEntity.get());
461+
462+
Optional<String> anyModifiedEquipmentIdInfos = modificationApplicationInfos.getModifiedEquipmentIds().stream().findAny();
463+
assertTrue(anyModifiedEquipmentIdInfos.isPresent());
464+
assertEquals("load1", anyModifiedEquipmentIdEntity.get());
465+
}
466+
467+
@Test
468+
void testUpdateModificationPropertiesWithNotIndexedEquipment() {
469+
try (MockedStatic<EquipmentInfosService> mocked = Mockito.mockStatic(EquipmentInfosService.class)) {
470+
mocked.when(EquipmentInfosService::getIndexedEquipmentTypes)
471+
.thenReturn(Set.of());
472+
473+
SubstationModificationInfos substationModificationInfos = SubstationModificationInfos.builder()
474+
.equipmentId("s1")
475+
.properties(List.of(FreePropertyInfos.builder().name("s1PropertyName").value("s1PropertyValue").build()))
476+
.build();
477+
478+
UUID groupUuid = UUID.randomUUID();
479+
List<ModificationEntity> entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos)));
480+
NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos);
481+
assertNotNull(result);
482+
483+
assertEquals(1, modificationRepository.getModifications(groupUuid, true, true).size());
484+
assertEquals(Collections.emptyList(), modificationApplicationRepository.findAll());
485+
assertEquals(Collections.emptyList(), IterableUtils.toList(modificationApplicationInfosRepository.findAll()));
486+
}
487+
}
434488
}

0 commit comments

Comments
 (0)