Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,10 @@ public ResponseEntity<UUID> createNetworkCompositeModification(@Parameter(descri
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The reference left in place of the composite modification")})
public ResponseEntity<ModificationReferenceData> extractCompositeModificationToShare(
@PathVariable("uuid") UUID compositeModificationUuid,
@Parameter(description = "Group the composite modification belongs to", required = true) @RequestParam("groupUuid") UUID groupUuid,
@Parameter(description = "New name of the shared composite modification") @RequestParam(value = "name", required = false) String name) {
return ResponseEntity.ok().body(networkModificationService.extractCompositeModificationToShare(groupUuid, compositeModificationUuid, name));
@Parameter(description = "Group owning the composite modification", required = true) @RequestParam("groupUuid") UUID groupUuid,
@Parameter(description = "New name of the shared composite modification") @RequestParam(value = "name", required = false) String name,
@Parameter(description = "New name of the shared composite modification") @RequestParam(value = "description", required = false) String description) {
return ResponseEntity.ok().body(networkModificationService.extractCompositeModificationToShare(groupUuid, compositeModificationUuid, name, description));
}

@GetMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE)
Expand Down Expand Up @@ -125,8 +126,9 @@ public ResponseEntity<Map<UUID, UUID>> duplicateCompositeModifications(@Paramete
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The composite modification has been updated")})
public ResponseEntity<Void> updateNetworkCompositeModification(
@PathVariable("uuid") UUID compositeModificationUuid,
@Parameter(description = "New composite name") @RequestParam(value = "name", required = false) String name) {
networkModificationService.updateCompositeModification(compositeModificationUuid, name);
@Parameter(description = "New composite name") @RequestParam(value = "name", required = false) String name,
@Parameter(description = "New composite description") @RequestParam(value = "description", required = false) String description) {
networkModificationService.updateCompositeModification(compositeModificationUuid, name, description);
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.gridsuite.modification.dto.ModificationInfos;
import org.gridsuite.modification.dto.ModificationReferenceInfos;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.server.dto.*;
import org.gridsuite.modification.server.dto.catalog.LineTypeInfos;
Expand Down Expand Up @@ -327,8 +328,13 @@ public ResponseEntity<Boolean> hasModificationReferences(
@ApiResponse(responseCode = "200", description = "The metadata of the network modifications has been successfully updated")
public ResponseEntity<Void> updateNetworkModificationMetadata(
@Parameter(description = "Network modifications UUIDs") @RequestParam("uuids") List<UUID> networkModificationUuids,
@Parameter(description = "User id") @RequestParam("userId") String userId,
@RequestBody ModificationInfos metadata) {
networkModificationService.updateNetworkModificationMetadata(networkModificationUuids, metadata);
if (metadata instanceof ModificationReferenceInfos modificationReferenceInfos) {
networkModificationService.updateModificationReferencedMetadata(networkModificationUuids, modificationReferenceInfos, userId);
} else {
networkModificationService.updateNetworkModificationMetadata(networkModificationUuids, metadata);
}
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
Copyright (c) 2026, 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.modification.server.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* @author Mathieu Deharbe <mathieu.deharbe at rte-france.com>
*/
@Getter
@AllArgsConstructor
public class ElementAttributes {
private String elementName;
private String description;

public static ElementAttributes createElementAttributes(String elementName, String description) {
return new ElementAttributes(elementName, description);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ default void renameCompositeModification(CompositeModificationEntity compositeEn
compositeEntity.setMessageValues(MAPPER.writeValueAsString(compositeEntity.toModificationInfos().getMapMessageValues()));
}

@SneakyThrows
default void changeDescriptionOfCompositeModification(CompositeModificationEntity compositeEntity, String description) {
compositeEntity.setDescription(description);
}

@SneakyThrows
default void generateModificationMessage(ModificationInfos modificationInfos) {
if (modificationInfos.getMessageType() == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@
import org.gridsuite.modification.dto.tabular.TabularCreationInfos;
import org.gridsuite.modification.dto.tabular.TabularModificationInfos;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.server.dto.CompositeInfos;
import org.gridsuite.modification.server.dto.ModificationContainerInfos;
import org.gridsuite.modification.server.dto.ModificationMetadata;
import org.gridsuite.modification.server.dto.ModificationReferenceData;
import org.gridsuite.modification.server.dto.*;
import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService;
import org.gridsuite.modification.server.entities.*;
import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity;
Expand Down Expand Up @@ -191,12 +188,15 @@ public void replaceCompositeModification(@NonNull UUID compositeUuid, @NonNull S
compositeModificationRepository.renameCompositeModification(compositeEntity, name);
}

public void updateCompositeModification(@NonNull UUID compositeUuid, String name) {
public void updateCompositeModification(@NonNull UUID compositeUuid, String name, String description) {
CompositeModificationEntity compositeEntity = compositeModificationRepository.findById(compositeUuid)
.orElseThrow(() -> getModificationNotFoundException(compositeUuid.toString()));
if (name != null) {
compositeModificationRepository.renameCompositeModification(compositeEntity, name);
}
if (description != null) {
compositeModificationRepository.changeDescriptionOfCompositeModification(compositeEntity, description);
}
}

private List<ModificationEntity> saveModificationsNonTransactional(@NonNull UUID groupUuid, List<ModificationEntity> modifications) {
Expand Down Expand Up @@ -552,7 +552,7 @@ private ModificationInfos loadModificationReference(ModificationEntity modificat
.date(modificationEntity.getDate())
.stashed(modificationEntity.getStashed())
.activated(modificationEntity.getActivated())
.description(modificationEntity.getDescription())
.description(referencedEntity.getDescription())
.messageType(referencedEntity.getMessageType())
.messageValues(referencedEntity.getMessageValues())
.referencedId(referencedEntity.getId())
Expand Down Expand Up @@ -1022,6 +1022,31 @@ public void updateNetworkModificationMetadata(@NonNull List<UUID> modificationUu
}
}

@Transactional
public Map<UUID, ElementAttributes> updateModificationReferencedMetadata(@NonNull List<UUID> modificationUuids, @NonNull ModificationReferenceInfos metadata) {
Map<UUID, ElementAttributes> modificationToBeUpdatedInDirectory = new HashMap<>();
for (UUID modificationUuid : modificationUuids) {
ModificationEntity modificationEntity = this.modificationRepository
.findById(modificationUuid)
.orElseThrow(() -> getModificationNotFoundException(modificationUuid.toString()));
if (metadata.getDescription() != null) {
// we need to update the referenced modification contained in the modificationEntity
assert modificationEntity instanceof ModificationReferenceEntity;
ModificationReferenceEntity modificationReferenceEntity = (ModificationReferenceEntity) modificationEntity;
ModificationEntity referencedModificationEntity = this.modificationRepository
.findById(modificationReferenceEntity.getReferencedId())
.orElseThrow(() -> getModificationNotFoundException(modificationUuid.toString()));
referencedModificationEntity.setDescription(metadata.getDescription());
modificationToBeUpdatedInDirectory.put(referencedModificationEntity.getId(),
new ElementAttributes(null, metadata.getDescription()));
}
if (metadata.getActivated() != null) {
updateActivated(modificationEntity, metadata.getActivated());
}
}
return modificationToBeUpdatedInDirectory;
}

// TODO remove when activation for a sub modification (composite) is implemented : no need optimized load
private void updateActivated(ModificationEntity entity, boolean activated) {
entity.setActivated(activated);
Expand Down Expand Up @@ -1348,7 +1373,7 @@ public List<ModificationInfos> insertCompositeModifications(
* @return the reference left in place of the composite modification
*/
@Transactional
public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name) {
public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name, String description) {
getModificationGroup(groupUuid); // check if group exists
ModificationEntity modificationEntity = getModificationEntity(modificationUuid);
if (!(modificationEntity instanceof CompositeModificationEntity compositeEntity)) {
Expand Down Expand Up @@ -1376,6 +1401,9 @@ public ModificationReferenceData extractCompositeModificationToShare(@NonNull UU
if (name != null) {
compositeModificationRepository.renameCompositeModification(compositeEntity, name);
}
if (description != null) {
compositeModificationRepository.changeDescriptionOfCompositeModification(compositeEntity, description);
}
return new ModificationReferenceData(referenceEntity.getId(), modificationUuid,
containerEntity.isComposite() ? containerEntity.getId() : null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import org.gridsuite.modification.server.dto.ElementAttributes;
import org.gridsuite.modification.server.dto.ReferenceAttributes;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
Expand All @@ -23,6 +24,7 @@
*/
@Service
public class DirectoryService {

private static final String DIRECTORY_API_VERSION = "v1";
private static final String DELIMITER = "/";
public static final String HEADER_USER_ID = "userId";
Expand All @@ -33,11 +35,26 @@ public class DirectoryService {
private final RestClient restClient;

public DirectoryService(@Value("${gridsuite.services.directory-server.base-uri:http://directory-server/}") String directoryServerBaseUri,
RestClient restClient) {
RestClient restClient) {
setDirectoryServerBaseUri(directoryServerBaseUri);
this.restClient = restClient;
}

public void updateElement(@NonNull UUID elementUuid, @NonNull ElementAttributes elementAttributes, String userId) {
var path = UriComponentsBuilder.fromPath(
DELIMITER + DIRECTORY_API_VERSION + DELIMITER + "elements/{elementUuid}")
.buildAndExpand(elementUuid)
.toUriString();

restClient.put()
.uri(getDirectoryServerBaseUri() + path)
.contentType(MediaType.APPLICATION_JSON)
.header(HEADER_USER_ID, userId)
.body(elementAttributes)
.retrieve()
.toBodilessEntity();
}

/**
* updates a reference from a shared modification in directory server so it points to a new container.
* the row to update is identified by elementUuid (the referenced shared element) and referenceUuid (the modification-reference itself)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@
import org.apache.commons.lang3.StringUtils;
import org.gridsuite.filter.AbstractFilter;
import org.gridsuite.modification.ModificationType;
import org.gridsuite.modification.dto.CompositeModificationInfos;
import org.gridsuite.modification.dto.EquipmentModificationInfos;
import org.gridsuite.modification.dto.GenerationDispatchInfos;
import org.gridsuite.modification.dto.ModificationInfos;
import org.gridsuite.modification.dto.*;
import org.gridsuite.modification.error.NetworkModificationException;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.server.dto.*;
Expand Down Expand Up @@ -81,6 +78,8 @@ public class NetworkModificationService {

private final FilterService filterService;

private final DirectoryService directoryService;

static final String NETWORK_UUID = "networkUuid.keyword";
static final String CREATED_EQUIPMENT_IDS = "createdEquipmentIds.fullascii";
static final String MODIFIED_EQUIPMENT_IDS = "modifiedEquipmentIds.fullascii";
Expand All @@ -97,7 +96,8 @@ public NetworkModificationService(NetworkStoreService networkStoreService,
ModificationApplicationInfosService applicationInfosService,
ElasticsearchOperations elasticsearchOperations,
ModificationRepository modificationRepository,
FilterService filterService) {
FilterService filterService,
DirectoryService directoryService) {
this.networkStoreService = networkStoreService;
this.networkModificationRepository = networkModificationRepository;
this.equipmentInfosService = equipmentInfosService;
Expand All @@ -108,6 +108,7 @@ public NetworkModificationService(NetworkStoreService networkStoreService,
this.elasticsearchOperations = elasticsearchOperations;
this.modificationRepository = modificationRepository;
this.filterService = filterService;
this.directoryService = directoryService;
}

public List<UUID> getModificationGroups() {
Expand Down Expand Up @@ -281,6 +282,16 @@ public void updateNetworkModificationMetadata(@NonNull List<UUID> modificationUu
networkModificationRepository.updateNetworkModificationMetadata(modificationUuids, metadata);
}

@Transactional
public void updateModificationReferencedMetadata(@NonNull List<UUID> modificationUuids, @NonNull ModificationReferenceInfos metadata, String userId) {
Map<UUID, ElementAttributes> test = networkModificationRepository.updateModificationReferencedMetadata(modificationUuids, metadata);
if (!test.isEmpty()) {
test.forEach((elementUuid, elementAttributes) ->
directoryService.updateElement(elementUuid, elementAttributes, userId));
}

}

@Transactional
public void updateRootNetworkApplicability(@NonNull List<UUID> modificationUuids, @NonNull String rootNetworkTag, boolean applicable) {
assertRootNetworkTagFits(rootNetworkTag);
Expand Down Expand Up @@ -568,17 +579,17 @@ public UUID createNetworkCompositeModification(@NonNull List<UUID> modificationU
}

@Transactional
public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name) {
return networkModificationRepository.extractCompositeModificationToShare(groupUuid, modificationUuid, name);
public ModificationReferenceData extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, String name, String description) {
return networkModificationRepository.extractCompositeModificationToShare(groupUuid, modificationUuid, name, description);
}

public Map<UUID, UUID> duplicateCompositeModifications(List<UUID> sourceModificationUuids) {
return networkModificationRepository.duplicateCompositeModifications(sourceModificationUuids);
}

@Transactional
public void updateCompositeModification(@NonNull UUID compositeUuid, String name) {
networkModificationRepository.updateCompositeModification(compositeUuid, name);
public void updateCompositeModification(@NonNull UUID compositeUuid, String name, String description) {
networkModificationRepository.updateCompositeModification(compositeUuid, name, description);
}

@Transactional
Expand Down
Loading
Loading