Skip to content

Commit

Permalink
Merge branch 'main' into java21
Browse files Browse the repository at this point in the history
  • Loading branch information
jonenst authored Feb 13, 2025
2 parents 9a3d45b + eb7e9ea commit 8d4f066
Show file tree
Hide file tree
Showing 23 changed files with 797 additions and 164 deletions.
27 changes: 3 additions & 24 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

<groupId>org.gridsuite</groupId>
<artifactId>gridsuite-network-modification-server</artifactId>
<version>2.13.0-SNAPSHOT</version>
<version>2.14.0-SNAPSHOT</version>

<packaging>jar</packaging>
<name>Network modification server</name>
Expand All @@ -44,15 +44,12 @@
</developers>

<properties>
<gridsuite-dependencies.version>36.1.0</gridsuite-dependencies.version>
<gridsuite-dependencies.version>37.0.0</gridsuite-dependencies.version>
<db-util.version>1.0.5</db-util.version>
<mockwebserver3.version>5.0.0-alpha.14</mockwebserver3.version>
<liquibase-hibernate-package>org.gridsuite.modification.server</liquibase-hibernate-package>
<!-- FIXME: powsybl-network-store modules'version is overloaded in the dependencies section.The overloads and this property below have to be removed at next powsybl-ws-dependencies.version upgra
e -->
<powsybl-network-store.version>1.21.1</powsybl-network-store.version>
<sonar.coverage.exclusions>**/migration/**/*</sonar.coverage.exclusions>
<network-modification.version>0.6.1</network-modification.version>
<network-modification.version>0.7.0</network-modification.version>
</properties>

<build>
Expand Down Expand Up @@ -95,24 +92,6 @@ e -->
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-network-store-client</artifactId>
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
<version>${powsybl-network-store.version}</version>
</dependency>
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-network-store-iidm-impl</artifactId>
<version>${powsybl-network-store.version}</version>
</dependency>
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-network-store-model</artifactId>
<version>${powsybl-network-store.version}</version>
</dependency>

<!-- imports -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public class EquipmentInfosService {
@Value("${spring.data.elasticsearch.partition-size:10000}")
private int partitionSize;

@Value("${spring.data.elasticsearch.partition-size-for-deletion:2048}")
public int partitionSizeForDeletion;

public static final Set<String> EXCLUDED_TYPES_FOR_INDEXING = Set.of(IdentifiableType.SWITCH.name());

public EquipmentInfosService(EquipmentInfosRepository equipmentInfosRepository, TombstonedEquipmentInfosRepository tombstonedEquipmentInfosRepository) {
Expand All @@ -59,7 +62,8 @@ public void addAllTombstonedEquipmentInfos(@NonNull final List<TombstonedEquipme
}

public void deleteEquipmentInfosList(@NonNull List<String> equipmentIds, @NonNull UUID networkUuid, @NonNull String variantId) {
equipmentInfosRepository.deleteByIdInAndNetworkUuidAndVariantId(equipmentIds, networkUuid, variantId);
Lists.partition(equipmentIds, partitionSizeForDeletion)
.forEach(ids -> equipmentInfosRepository.deleteByIdInAndNetworkUuidAndVariantId(ids, networkUuid, variantId));
}

public void deleteVariants(@NonNull UUID networkUuid, List<String> variantIds) {
Expand Down Expand Up @@ -88,10 +92,6 @@ public void cloneVariantModifications(@NonNull UUID networkUuid, @NonNull String
);
}

public List<EquipmentInfos> findEquipmentInfosList(List<String> equipmentIds, UUID networkUuid, String variantId) {
return equipmentInfosRepository.findByIdInAndNetworkUuidAndVariantId(equipmentIds, networkUuid, variantId);
}

public void deleteAll() {
equipmentInfosRepository.deleteAll();
tombstonedEquipmentInfosRepository.deleteAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
import org.gridsuite.modification.dto.ModificationInfos;

import jakarta.persistence.*;
import org.gridsuite.modification.dto.OperationalLimitsGroupInfos;

import java.util.ArrayList;
import java.util.List;

/**
* @author Sylvain Bouzols <sylvain.bouzols at rte-france.com>
Expand Down Expand Up @@ -64,21 +68,25 @@ public class BranchCreationEntity extends EquipmentCreationEntity {
@Column(name = "connected2", columnDefinition = "boolean default true")
private boolean connected2;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "current_limits_id1",
referencedColumnName = "id",
foreignKey = @ForeignKey(
name = "current_limits_id1_fk"
), nullable = true)
private CurrentLimitsEntity currentLimits1;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "current_limits_id2",
referencedColumnName = "id",
foreignKey = @ForeignKey(
name = "current_limits_id2_fk"
), nullable = true)
private CurrentLimitsEntity currentLimits2;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(
joinColumns = @JoinColumn(name = "branch_id"), foreignKey = @ForeignKey(name = "branch_id_fk"),
inverseJoinColumns = @JoinColumn(name = "operational_limits_groups_id"), inverseForeignKey = @ForeignKey(name = "operational_limits_groups_id1_fk"))
@OrderColumn(name = "pos_operationalLimitsGroups")
private List<OperationalLimitsGroupEntity> operationalLimitsGroups1;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(
joinColumns = @JoinColumn(name = "branch_id"), foreignKey = @ForeignKey(name = "branch_id_fk"),
inverseJoinColumns = @JoinColumn(name = "operational_limits_groups_id"), inverseForeignKey = @ForeignKey(name = "operational_limits_groups_id2_fk"))
@OrderColumn(name = "pos_operationalLimitsGroups")
private List<OperationalLimitsGroupEntity> operationalLimitsGroups2;

@Column(name = "selectedOperationalLimitsGroupId1")
private String selectedOperationalLimitsGroupId1;

@Column(name = "selectedOperationalLimitsGroupId2")
private String selectedOperationalLimitsGroupId2;

protected BranchCreationEntity(BranchCreationInfos branchCreationInfos) {
super(branchCreationInfos);
Expand All @@ -99,23 +107,37 @@ private void assignAttributes(BranchCreationInfos branchCreationInfos) {
voltageLevelId2 = branchCreationInfos.getVoltageLevelId2();
busOrBusbarSectionId1 = branchCreationInfos.getBusOrBusbarSectionId1();
busOrBusbarSectionId2 = branchCreationInfos.getBusOrBusbarSectionId2();
if (branchCreationInfos.getCurrentLimits1() != null) {
currentLimits1 = new CurrentLimitsEntity(branchCreationInfos.getCurrentLimits1());
} else {
currentLimits1 = null;
}
if (branchCreationInfos.getCurrentLimits2() != null) {
currentLimits2 = new CurrentLimitsEntity(branchCreationInfos.getCurrentLimits2());
} else {
currentLimits2 = null;
}
operationalLimitsGroups1 = assignOperationalLimitsGroups(branchCreationInfos.getOperationalLimitsGroups1(), operationalLimitsGroups1);
operationalLimitsGroups2 = assignOperationalLimitsGroups(branchCreationInfos.getOperationalLimitsGroups2(), operationalLimitsGroups2);
connectionDirection1 = branchCreationInfos.getConnectionDirection1();
connectionName1 = branchCreationInfos.getConnectionName1();
connectionDirection2 = branchCreationInfos.getConnectionDirection2();
connectionName2 = branchCreationInfos.getConnectionName2();
selectedOperationalLimitsGroupId1 = branchCreationInfos.getSelectedOperationalLimitsGroup1();
selectedOperationalLimitsGroupId2 = branchCreationInfos.getSelectedOperationalLimitsGroup2();
connectionPosition1 = branchCreationInfos.getConnectionPosition1();
connectionPosition2 = branchCreationInfos.getConnectionPosition2();
connected1 = branchCreationInfos.isConnected1();
connected2 = branchCreationInfos.isConnected2();
}

/**
* the point of this function is to avoid dereferencing operationalLimitsGroups if it already exists,
* in order to prevent Hibernate from losing the reference during cascade cleaning
*/
private List<OperationalLimitsGroupEntity> assignOperationalLimitsGroups(
List<OperationalLimitsGroupInfos> operationalLimitsGroupInfos,
List<OperationalLimitsGroupEntity> operationalLimitsGroups
) {
List<OperationalLimitsGroupEntity> updatedLimitsGroups = operationalLimitsGroups;
if (operationalLimitsGroups == null) {
updatedLimitsGroups = new ArrayList<>();
} else {
updatedLimitsGroups.clear();
}
if (operationalLimitsGroupInfos != null) {
updatedLimitsGroups.addAll(OperationalLimitsGroupEntity.toOperationalLimitsGroupsEntities(operationalLimitsGroupInfos));
}
return updatedLimitsGroups;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ public LineCreationInfos toModificationInfos() {
.busOrBusbarSectionId2(getBusOrBusbarSectionId2())
.connectionName1(getConnectionName1())
.connectionName2(getConnectionName2())
.selectedOperationalLimitsGroup1(getSelectedOperationalLimitsGroupId1())
.selectedOperationalLimitsGroup2(getSelectedOperationalLimitsGroupId2())
.connectionDirection1(getConnectionDirection1())
.connectionDirection2(getConnectionDirection2())
.connectionPosition1(getConnectionPosition1())
Expand All @@ -94,14 +96,10 @@ public LineCreationInfos toModificationInfos() {
.properties(CollectionUtils.isEmpty(getProperties()) ? null :
getProperties().stream()
.map(FreePropertyEntity::toInfos)
.toList());
.toList())
.operationalLimitsGroups1(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups1()))
.operationalLimitsGroups2(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups2()));

if (getCurrentLimits1() != null) {
builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos());
}
if (getCurrentLimits2() != null) {
builder.currentLimits2(getCurrentLimits2().toCurrentLimitsInfos());
}
return builder;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
Copyright (c) 2025, 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.entities.equipment.creation;

import jakarta.persistence.*;
import lombok.*;
import org.gridsuite.modification.dto.OperationalLimitsGroupInfos;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;

/**
* @author Mathieu Deharbe <mathieu.deharbe_externe at rte-france.com>
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "operational_limits_group")
public class OperationalLimitsGroupEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "uuid")
private UUID uuid;

@Column(name = "id")
private String id;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "current_limits_id",
referencedColumnName = "id",
foreignKey = @ForeignKey(
name = "current_limits_id_fk"
))
private CurrentLimitsEntity currentLimits;

public static List<OperationalLimitsGroupEntity> toOperationalLimitsGroupsEntities(@NonNull List<OperationalLimitsGroupInfos> limitsGroups) {
return limitsGroups.stream()
.filter(Objects::nonNull)
.map(limitsGroup ->
new OperationalLimitsGroupEntity(
null,
limitsGroup.getId(),
new CurrentLimitsEntity(limitsGroup.getCurrentLimits())
)
)
.toList();
}

public static List<OperationalLimitsGroupInfos> fromOperationalLimitsGroupsEntities(List<OperationalLimitsGroupEntity> limitsGroupsEntities) {
return CollectionUtils.isEmpty(limitsGroupsEntities) ? null :
limitsGroupsEntities.stream()
.map(limitsGroupEntity ->
OperationalLimitsGroupInfos.builder()
.id(limitsGroupEntity.getId())
.currentLimits(limitsGroupEntity.getCurrentLimits().toCurrentLimitsInfos())
.build()
)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ public TwoWindingsTransformerCreationInfos toModificationInfos() {
.busOrBusbarSectionId2(getBusOrBusbarSectionId2())
.connectionName1(getConnectionName1())
.connectionName2(getConnectionName2())
.selectedOperationalLimitsGroup1(getSelectedOperationalLimitsGroupId1())
.selectedOperationalLimitsGroup2(getSelectedOperationalLimitsGroupId2())
.connectionDirection1(getConnectionDirection1())
.connectionDirection2(getConnectionDirection2())
.connectionPosition1(getConnectionPosition1())
Expand All @@ -208,14 +210,9 @@ public TwoWindingsTransformerCreationInfos toModificationInfos() {
.properties(CollectionUtils.isEmpty(getProperties()) ? null :
getProperties().stream()
.map(FreePropertyEntity::toInfos)
.toList());

if (getCurrentLimits1() != null) {
builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos());
}
if (getCurrentLimits2() != null) {
builder.currentLimits2(getCurrentLimits2().toCurrentLimitsInfos());
}
.toList())
.operationalLimitsGroups1(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups1()))
.operationalLimitsGroups2(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups2()));

if (!ratioTapChangerSteps.isEmpty()) {
List<TapChangerStepCreationInfos> ratioTapChangerStepCreationInfos = ratioTapChangerSteps.stream().map(TapChangerStepCreationEmbeddable::toModificationInfos).collect(Collectors.toList());
Expand Down
Loading

0 comments on commit 8d4f066

Please sign in to comment.