diff --git a/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java b/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java index 2c8d67a1..262a42ef 100644 --- a/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java +++ b/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java @@ -110,13 +110,25 @@ public ResponseEntity deleteSet(@PathVariable("modelName") } @GetMapping(value = "/") - @Operation(summary = "Get models names") + @Operation(summary = "Get simple infos of all models") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "names of all models")}) + @ApiResponse(responseCode = "200", description = "simple infos of all models")}) public ResponseEntity> getModels() { return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getModels()); } + @GetMapping(value = "/names") + @Operation(summary = "Get all model names") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "list of all model names")}) + public ResponseEntity> getModelNames() { + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_JSON) + .body(modelService.getModels().stream() + .map(SimpleModel::getName) + .toList()); + } + @DeleteMapping(value = "/") @Operation(summary = "Delete a list of models") @ApiResponses(value = { diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/Model.java b/src/main/java/org/gridsuite/mapping/server/dto/models/Model.java index 4c1bc3bb..6271379b 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/Model.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/Model.java @@ -14,6 +14,7 @@ import org.gridsuite.mapping.server.utils.ParameterOrigin; import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @@ -25,6 +26,8 @@ @NoArgsConstructor public class Model { + private UUID id; + private String modelName; private EquipmentType equipmentType; @@ -40,6 +43,7 @@ public class Model { private List variablesSets; public Model(ModelEntity modelEntity) { + id = modelEntity.getId(); modelName = modelEntity.getModelName(); equipmentType = modelEntity.getEquipmentType(); defaultModel = modelEntity.isDefaultModel(); diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameter.java b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameter.java index 398487ed..a8ffa4e9 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameter.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameter.java @@ -11,6 +11,8 @@ import lombok.NoArgsConstructor; import org.gridsuite.mapping.server.model.ModelParameterEntity; +import java.util.UUID; + /** * @author Mathieu Scalbert */ @@ -18,11 +20,13 @@ @AllArgsConstructor @NoArgsConstructor public class ModelParameter { + private UUID id; private String name; private String value; public ModelParameter(ModelParameterEntity modelParameterEntity) { - name = modelParameterEntity.getName(); - value = modelParameterEntity.getValue(); + this.id = modelParameterEntity.getId(); + this.name = modelParameterEntity.getName(); + this.value = modelParameterEntity.getValue(); } } diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameterDefinition.java b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameterDefinition.java index 257f5b15..8b1ff69f 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameterDefinition.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameterDefinition.java @@ -13,6 +13,8 @@ import org.gridsuite.mapping.server.utils.ParameterOrigin; import org.gridsuite.mapping.server.utils.ParameterType; +import java.util.UUID; + /** * @author Mathieu Scalbert */ @@ -21,6 +23,8 @@ @AllArgsConstructor public class ModelParameterDefinition { + private UUID id; + private String name; private ParameterType type; @@ -32,6 +36,7 @@ public class ModelParameterDefinition { private String fixedValue; public ModelParameterDefinition(ModelParameterDefinitionEntity modelParameterDefinitionEntity, ParameterOrigin origin, String originName) { + this.id = modelParameterDefinitionEntity.getId(); this.name = modelParameterDefinitionEntity.getName(); this.type = modelParameterDefinitionEntity.getType(); this.origin = origin; diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelVariableDefinition.java b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelVariableDefinition.java index e453a6e9..d7fcaa65 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/ModelVariableDefinition.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/ModelVariableDefinition.java @@ -13,6 +13,8 @@ import org.gridsuite.mapping.server.model.ModelVariableDefinitionEntity; import org.gridsuite.mapping.server.utils.VariableType; +import java.util.UUID; + /** * @author Thang PHAM */ @@ -21,6 +23,8 @@ @NoArgsConstructor public class ModelVariableDefinition { + private UUID id; + private String name; private VariableType type; @@ -30,6 +34,7 @@ public class ModelVariableDefinition { private Double factor; public ModelVariableDefinition(ModelVariableDefinitionEntity modelVariableDefinitionEntity) { + this.id = modelVariableDefinitionEntity.getId(); this.name = modelVariableDefinitionEntity.getName(); this.type = modelVariableDefinitionEntity.getType(); this.unit = modelVariableDefinitionEntity.getUnit(); diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSet.java b/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSet.java index df846b04..1fb51d64 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSet.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSet.java @@ -13,6 +13,7 @@ import java.util.Date; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -21,20 +22,17 @@ @Data @NoArgsConstructor public class ParametersSet { + private UUID id; private String name; private List parameters; @JsonIgnore private Date lastModifiedDate; public ParametersSet(ModelParameterSetEntity modelParameterSetEntity) { + id = modelParameterSetEntity.getId(); name = modelParameterSetEntity.getName(); parameters = modelParameterSetEntity.getParameters().stream().map(ModelParameter::new).collect(Collectors.toList()); lastModifiedDate = modelParameterSetEntity.getLastModifiedDate(); } - public ParametersSet(String name, List parameters) { - this.name = name; - this.parameters = parameters; - lastModifiedDate = new Date(); - } } diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSetsGroup.java b/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSetsGroup.java index 2ccfe0f8..2fb0f2fc 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSetsGroup.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/ParametersSetsGroup.java @@ -13,6 +13,7 @@ import org.gridsuite.mapping.server.utils.SetGroupType; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -23,6 +24,8 @@ @NoArgsConstructor public class ParametersSetsGroup { + private UUID id; + private String name; private SetGroupType type; @@ -32,9 +35,10 @@ public class ParametersSetsGroup { private String modelName; public ParametersSetsGroup(ModelSetsGroupEntity setsGroupEntity) { + id = setsGroupEntity.getId(); name = setsGroupEntity.getName(); type = setsGroupEntity.getType(); sets = setsGroupEntity.getSets().stream().map(ParametersSet::new).collect(Collectors.toList()); - modelName = setsGroupEntity.getModelName(); + modelName = setsGroupEntity.getModel().getModelName(); } } diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleGroup.java b/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleGroup.java index e9761f81..a3305a0b 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleGroup.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleGroup.java @@ -1,15 +1,21 @@ package org.gridsuite.mapping.server.dto.models; import lombok.Getter; +import lombok.NoArgsConstructor; import org.gridsuite.mapping.server.utils.SetGroupType; +import java.util.UUID; + +@NoArgsConstructor @Getter public class SimpleGroup { - private final String name; - private final SetGroupType type; - private final int setsNumber; + private UUID id; + private String name; + private SetGroupType type; + private int setsNumber; SimpleGroup(ParametersSetsGroup group) { + id = group.getId(); name = group.getName(); type = group.getType(); setsNumber = group.getSets().size(); diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleModel.java b/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleModel.java index 13f55732..316088f5 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleModel.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/SimpleModel.java @@ -1,18 +1,23 @@ package org.gridsuite.mapping.server.dto.models; import lombok.Getter; +import lombok.NoArgsConstructor; import org.gridsuite.mapping.server.utils.EquipmentType; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; +@NoArgsConstructor @Getter public class SimpleModel { - private final String name; - private final EquipmentType type; - private final List groups; + private UUID id; + private String name; + private EquipmentType type; + private List groups; public SimpleModel(Model model) { + id = model.getId(); name = model.getModelName(); type = model.getEquipmentType(); groups = model.getSetsGroups().stream().map(SimpleGroup::new).collect(Collectors.toList()); diff --git a/src/main/java/org/gridsuite/mapping/server/dto/models/VariablesSet.java b/src/main/java/org/gridsuite/mapping/server/dto/models/VariablesSet.java index b61fc6d7..c66829d6 100644 --- a/src/main/java/org/gridsuite/mapping/server/dto/models/VariablesSet.java +++ b/src/main/java/org/gridsuite/mapping/server/dto/models/VariablesSet.java @@ -13,6 +13,7 @@ import org.gridsuite.mapping.server.model.ModelVariableSetEntity; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -22,10 +23,12 @@ @AllArgsConstructor @NoArgsConstructor public class VariablesSet { + private UUID id; private String name; private List variableDefinitions; public VariablesSet(ModelVariableSetEntity variableSetEntity) { + this.id = variableSetEntity.getId(); this.name = variableSetEntity.getName(); this.variableDefinitions = variableSetEntity.getVariableDefinitions().stream().map(ModelVariableDefinition::new).collect(Collectors.toList()); } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java index 50760320..fb3e3add 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java @@ -6,6 +6,7 @@ */ package org.gridsuite.mapping.server.model; +import jakarta.persistence.*; import lombok.*; import org.gridsuite.mapping.server.dto.models.Model; import org.gridsuite.mapping.server.utils.EquipmentType; @@ -13,7 +14,6 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import jakarta.persistence.*; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; @@ -23,22 +23,23 @@ /** * @author Mathieu Scalbert */ -@EqualsAndHashCode(onlyExplicitlyIncluded = true) @Builder @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "models") +@Table(name = "model", indexes = {@Index(name = "model_name_index", columnList = "name")}) public class ModelEntity implements Serializable { - // Could be replaced with UUID, but we lose the ease of use of names @Id - @EqualsAndHashCode.Include - @Column(name = "model_name") + @Column(name = "id") + private UUID id; + + @Column(name = "name", nullable = false) private String modelName; + @Enumerated(EnumType.STRING) @Column(name = "equipment_type") private EquipmentType equipmentType; @@ -54,9 +55,11 @@ public class ModelEntity implements Serializable { // must exclude CascadeType.REMOVE to avoid unexpected cascade on delete a ModelVariableDefinitionEntity @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) @JoinTable( - name = "models_model_variable_definitions", - joinColumns = {@JoinColumn(name = "model_name")}, - inverseJoinColumns = {@JoinColumn(name = "variable_definition_name")} + name = "model_model_variable_definition", + joinColumns = {@JoinColumn(name = "model_id", referencedColumnName = "id", + foreignKey = @ForeignKey(name = "model_model_variable_definition_model_id_fk"))}, + inverseJoinColumns = {@JoinColumn(name = "variable_definition_id", referencedColumnName = "id", + foreignKey = @ForeignKey(name = "model_model_variable_definition_variable_definition_id_fk"))} ) private Set variableDefinitions = LinkedHashSet.newLinkedHashSet(0); @@ -64,6 +67,7 @@ public class ModelEntity implements Serializable { private Set variableSets = LinkedHashSet.newLinkedHashSet(0); public ModelEntity(Model modelToConvert) { + id = modelToConvert.getId() == null ? UUID.randomUUID() : modelToConvert.getId(); modelName = modelToConvert.getModelName(); equipmentType = modelToConvert.getEquipmentType(); defaultModel = modelToConvert.isDefaultModel(); diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionEntity.java index 9c24206d..ece6a0a1 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionEntity.java @@ -1,34 +1,36 @@ package org.gridsuite.mapping.server.model; -import lombok.*; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.gridsuite.mapping.server.utils.ParameterOrigin; -import jakarta.persistence.*; import java.io.Serializable; -@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "models_model_parameter_definitions") +@Table(name = "model_model_parameter_definition") public class ModelModelParameterDefinitionEntity implements Serializable { @EmbeddedId private ModelModelParameterDefinitionId id; - @EqualsAndHashCode.Include @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "model_name") - @MapsId("modelName") + @JoinColumn(name = "model_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_model_parameter_definition_model_id_fk")) + @MapsId("modelId") private ModelEntity model; - @EqualsAndHashCode.Include @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) - @JoinColumn(name = "parameter_definition_name") - @MapsId("parameterDefinitionName") + @JoinColumn(name = "parameter_definition_id", referencedColumnName = "id", + foreignKey = @ForeignKey(name = "model_model_parameter_definition_parameter_definition_id_fk")) + @MapsId("parameterDefinitionId") private ModelParameterDefinitionEntity parameterDefinition; + @Enumerated(EnumType.STRING) @Column(name = "origin") private ParameterOrigin origin; @@ -40,7 +42,7 @@ public ModelModelParameterDefinitionEntity(ModelEntity model, ModelParameterDefi this.parameterDefinition = parameterDefinition; this.origin = origin; this.originName = originName; - this.id = new ModelModelParameterDefinitionId(model.getModelName(), parameterDefinition.getName()); + this.id = new ModelModelParameterDefinitionId(model.getId(), parameterDefinition.getId()); } } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionId.java b/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionId.java index 43030089..952dd62f 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionId.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelModelParameterDefinitionId.java @@ -1,21 +1,20 @@ package org.gridsuite.mapping.server.model; +import jakarta.persistence.Embeddable; import lombok.*; -import jakarta.persistence.Embeddable; import java.io.Serializable; +import java.util.UUID; -@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Embeddable public class ModelModelParameterDefinitionId implements Serializable { - @EqualsAndHashCode.Include - private String modelName; + private UUID modelId; - @EqualsAndHashCode.Include - private String parameterDefinitionName; + private UUID parameterDefinitionId; } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionEntity.java index 9b5eee20..07139606 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionEntity.java @@ -6,37 +6,44 @@ */ package org.gridsuite.mapping.server.model; -import lombok.*; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition; import org.gridsuite.mapping.server.utils.ParameterType; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import jakarta.persistence.*; import java.io.Serializable; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; import static jakarta.persistence.TemporalType.TIMESTAMP; /** * @author Mathieu Scalbert */ -@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_parameter_definitions") +@Table(name = "model_parameter_definition") public class ModelParameterDefinitionEntity implements Serializable { @Id - @EqualsAndHashCode.Include - @Column(name = "name") + @Column(name = "id") + private UUID id; + + @Column(name = "name", nullable = false) private String name; + @Enumerated(EnumType.STRING) @Column(name = "type") - @Enumerated private ParameterType type; @Column(name = "fixed_value") @@ -46,7 +53,8 @@ public class ModelParameterDefinitionEntity implements Serializable { private List models = new ArrayList<>(); public ModelParameterDefinitionEntity(ModelParameterDefinition parameterDefinition) { - this(parameterDefinition.getName(), parameterDefinition.getType(), parameterDefinition.getFixedValue(), new ArrayList<>(), null, null); + this(parameterDefinition.getId() == null ? UUID.randomUUID() : parameterDefinition.getId(), + parameterDefinition.getName(), parameterDefinition.getType(), parameterDefinition.getFixedValue(), new ArrayList<>(), null, null); } @CreatedDate diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterEntity.java index 9d76ecfd..acc3319f 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterEntity.java @@ -6,68 +6,45 @@ */ package org.gridsuite.mapping.server.model; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.gridsuite.mapping.server.dto.models.ModelParameter; -import org.gridsuite.mapping.server.utils.SetGroupType; -import jakarta.persistence.*; import java.io.Serializable; +import java.util.UUID; /** * @author Mathieu Scalbert */ -@Inheritance @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_parameters", indexes = {@Index(name = "model_parameter_set_index", columnList = "set_name")}) -@IdClass(ModelParameterId.class) +@Table(name = "model_parameter", indexes = {@Index(name = "model_parameter_name_index", columnList = "name")}) public class ModelParameterEntity implements Serializable { @Id - @Column(name = "name") - private String name; - - @Id - @Column(name = "model_name") - private String modelName; + @Column(name = "id") + private UUID id; - @Id - @Column(name = "group_name") - private String groupName; - - @Id - @Column(name = "group_type") - private SetGroupType groupType; - - @Id - @Column(name = "set_name") - private String setName; + @Column(name = "name", nullable = false) + private String name; @Column(name = "value_") private String value; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumns(foreignKey = @ForeignKey(name = "parameter_set_fk"), value = { - @JoinColumn(name = "set_name", referencedColumnName = "name", insertable = false, updatable = false), - @JoinColumn(name = "group_name", referencedColumnName = "group_name", insertable = false, updatable = false), - @JoinColumn(name = "model_name", referencedColumnName = "model_name", insertable = false, updatable = false), - @JoinColumn(name = "group_type", referencedColumnName = "group_type", insertable = false, updatable = false) - }) + @JoinColumn(name = "set_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_parameter_set_id_fk")) private ModelParameterSetEntity set; public ModelParameterEntity(ModelParameterSetEntity set, ModelParameter parameter) { + this.id = parameter.getId() == null ? UUID.randomUUID() : parameter.getId(); this.set = set; - name = parameter.getName(); - groupName = set.getGroup().getName(); - groupType = set.getGroup().getType(); - modelName = set.getGroup().getModelName(); - setName = set.getName(); - value = parameter.getValue(); + this.name = parameter.getName(); + this.value = parameter.getValue(); } } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterId.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterId.java deleted file mode 100644 index 58537434..00000000 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterId.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (c) 2021, 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.mapping.server.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.gridsuite.mapping.server.utils.SetGroupType; - -import jakarta.persistence.Embeddable; -import java.io.Serializable; -import java.util.Objects; - -/** - * @author Mathieu Scalbert - */ -@NoArgsConstructor -@AllArgsConstructor -@Embeddable -@Getter -@Setter -public class ModelParameterId implements Serializable { - - private String name; - - private String modelName; - - private String setName; - - private String groupName; - - private SetGroupType groupType; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ModelParameterId modelParameterIdClass = (ModelParameterId) o; - return name.equals(modelParameterIdClass.name) && - modelName.equals(modelParameterIdClass.modelName) && - setName.equals(modelParameterIdClass.setName) && - groupName.equals(modelParameterIdClass.groupName) && - groupType.equals(modelParameterIdClass.groupType); - } - - @Override - public int hashCode() { - return Objects.hash(name, modelName, setName, groupName, groupType); - } - -} diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java index 9c089b2f..16c86587 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java @@ -6,68 +6,51 @@ */ package org.gridsuite.mapping.server.model; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.gridsuite.mapping.server.dto.models.ParametersSet; -import org.gridsuite.mapping.server.utils.SetGroupType; -import jakarta.persistence.*; import java.io.Serializable; import java.util.Date; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** * @author Mathieu Scalbert */ -@Inheritance @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_parameter_sets", indexes = {@Index(name = "model_parameter_sets_group_name_index", columnList = "group_name")}) -@IdClass(ModelParameterSetId.class) +@Table(name = "model_parameter_set", indexes = {@Index(name = "model_parameter_set_name_index", columnList = "name")}) public class ModelParameterSetEntity implements Serializable { @Id - @Column(name = "name") - private String name; - - @Id - @Column(name = "group_name") - private String groupName; + @Column(name = "id") + private UUID id; - @Id - @Column(name = "model_name") - private String modelName; - - @Id - @Column(name = "group_type") - private SetGroupType groupType; + @Column(name = "name", nullable = false) + private String name; - @OneToMany(fetch = FetchType.LAZY, mappedBy = "set", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "set", cascade = CascadeType.ALL, orphanRemoval = true) private List parameters; @Column(name = "last_modified_date") private Date lastModifiedDate; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumns(foreignKey = @ForeignKey(name = "model_parameter_sets_fk"), value = { - @JoinColumn(name = "model_name", referencedColumnName = "model_name", insertable = false, updatable = false), - @JoinColumn(name = "group_name", referencedColumnName = "name", insertable = false, updatable = false), - @JoinColumn(name = "group_type", referencedColumnName = "type", insertable = false, updatable = false) - }) + @JoinColumn(name = "group_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_parameter_set_group_id_fk")) private ModelSetsGroupEntity group; public ModelParameterSetEntity(ModelSetsGroupEntity group, ParametersSet set) { + this.id = set.getId() == null ? UUID.randomUUID() : set.getId(); this.group = group; this.name = set.getName(); - this.groupName = group.getName(); - this.groupType = group.getType(); - this.modelName = group.getModelName(); this.parameters = set.getParameters().stream().map(parameter -> new ModelParameterEntity(this, parameter)).collect(Collectors.toList()); this.lastModifiedDate = set.getLastModifiedDate(); } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetId.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetId.java deleted file mode 100644 index 8fd0a2bb..00000000 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetId.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) 2021, 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.mapping.server.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.gridsuite.mapping.server.utils.SetGroupType; - -import jakarta.persistence.Embeddable; -import java.io.Serializable; -import java.util.Objects; - -/** - * @author Mathieu Scalbert - */ -@NoArgsConstructor -@AllArgsConstructor -@Embeddable -@Getter -@Setter -public class ModelParameterSetId implements Serializable { - - private String name; - - private String groupName; - - private String modelName; - - private SetGroupType groupType; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ModelParameterSetId modelParameterSetIdClass = (ModelParameterSetId) o; - return name.equals(modelParameterSetIdClass.name) && - groupName.equals(modelParameterSetIdClass.groupName) && - modelName.equals(modelParameterSetIdClass.modelName) && - groupType.equals(modelParameterSetIdClass.groupType); - } - - @Override - public int hashCode() { - return Objects.hash(name, groupName, modelName, groupType); - } - -} diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java index 464de5b8..56413d0b 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java @@ -6,56 +6,51 @@ */ package org.gridsuite.mapping.server.model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import jakarta.persistence.*; +import lombok.*; import org.gridsuite.mapping.server.dto.models.ParametersSetsGroup; import org.gridsuite.mapping.server.utils.SetGroupType; -import jakarta.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** * @author Mathieu Scalbert */ -@Inheritance @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_sets_group", indexes = {@Index(name = "model_sets_group_model_name_index", columnList = "model_name")}) -@IdClass(ModelSetsGroupId.class) +@Table(name = "model_sets_group", indexes = {@Index(name = "model_sets_group_name_index", columnList = "name")}) public class ModelSetsGroupEntity implements Serializable { + @EqualsAndHashCode.Include @Id - @Column(name = "name") - private String name; + @Column(name = "id") + private UUID id; - @Id - @Column(name = "model_name") - private String modelName; + @Column(name = "name", nullable = false) + private String name; - @OneToMany(fetch = FetchType.LAZY, mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true) private List sets = new ArrayList<>(0); - @Id + @Enumerated(EnumType.STRING) @Column(name = "type") private SetGroupType type; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "model_name", foreignKey = @ForeignKey(name = "model_sets_groups_fk")) - @MapsId("modelName") + @JoinColumn(name = "model_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_sets_group_model_id_fk")) private ModelEntity model; public ModelSetsGroupEntity(ModelEntity model, ParametersSetsGroup group) { + this.id = group.getId() == null ? UUID.randomUUID() : group.getId(); this.model = model; this.name = group.getName(); - this.modelName = model.getModelName(); this.type = group.getType(); this.sets = group.getSets().stream().map(set -> new ModelParameterSetEntity(this, set)).collect(Collectors.toList()); } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupId.java b/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupId.java deleted file mode 100644 index 0eab1ff8..00000000 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupId.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2021, 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.mapping.server.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.gridsuite.mapping.server.utils.SetGroupType; - -import jakarta.persistence.Embeddable; -import java.io.Serializable; -import java.util.Objects; - -/** - * @author Mathieu Scalbert - */ -@NoArgsConstructor -@AllArgsConstructor -@Embeddable -@Getter -@Setter -public class ModelSetsGroupId implements Serializable { - - private String name; - - private String modelName; - - private SetGroupType type; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ModelSetsGroupId modelSetsGroupIdClass = (ModelSetsGroupId) o; - return name.equals(modelSetsGroupIdClass.name) && - modelName.equals(modelSetsGroupIdClass.modelName) && - type.equals(modelSetsGroupIdClass.type); - } - - @Override - public int hashCode() { - return Objects.hash(name, modelName, type); - } - -} diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java index 854b1377..6586cbce 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java @@ -7,13 +7,16 @@ package org.gridsuite.mapping.server.model; -import lombok.*; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.gridsuite.mapping.server.dto.models.ModelVariableDefinition; import org.gridsuite.mapping.server.utils.VariableType; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import jakarta.persistence.*; import java.io.Serializable; import java.util.*; @@ -22,21 +25,23 @@ /** * @author Thang PHAM */ -@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_variable_definitions") +@Table(name = "model_variable_definition") public class ModelVariableDefinitionEntity implements Serializable { + @Id - @EqualsAndHashCode.Include - @Column(name = "variable_definition_name") + @Column(name = "id") + private UUID id; + + @Column(name = "name", nullable = false) private String name; + @Enumerated(EnumType.STRING) @Column(name = "type") - @Enumerated private VariableType type; @Column(name = "unit") @@ -57,9 +62,9 @@ public class ModelVariableDefinitionEntity implements Serializable { private Set variablesSets; public ModelVariableDefinitionEntity(ModelEntity model, ModelVariableSetEntity variablesSet, ModelVariableDefinition variableDefinition) { - this(variableDefinition.getName(), variableDefinition.getType(), variableDefinition.getUnit(), variableDefinition.getFactor(), - model != null ? new LinkedHashSet<>(Arrays.asList(model)) : new LinkedHashSet<>(), - new LinkedHashSet<>(Arrays.asList(variablesSet)), null, null); + this(variableDefinition.getId() == null ? UUID.randomUUID() : variableDefinition.getId(), variableDefinition.getName(), variableDefinition.getType(), variableDefinition.getUnit(), variableDefinition.getFactor(), + model != null ? new LinkedHashSet<>(List.of(model)) : new LinkedHashSet<>(), + variablesSet != null ? new LinkedHashSet<>(List.of(variablesSet)) : new LinkedHashSet<>(), null, null); } @CreatedDate diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java index 6a76de37..58b1827b 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java @@ -7,12 +7,15 @@ package org.gridsuite.mapping.server.model; -import lombok.*; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.gridsuite.mapping.server.dto.models.VariablesSet; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import jakarta.persistence.*; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; @@ -22,31 +25,33 @@ /** * @author Thang PHAM */ -@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_variable_sets") +@Table(name = "model_variable_set") public class ModelVariableSetEntity implements Serializable { + @Id - @EqualsAndHashCode.Include - @Column(name = "variable_set_name") + @Column(name = "id") + private UUID id; + + @Column(name = "name", nullable = false) private String name; @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) - @JoinTable(name = "model_variable_sets_model_variable_definitions", - joinColumns = {@JoinColumn(name = "variable_set_name")}, - inverseJoinColumns = {@JoinColumn(name = "variable_definition_name")} + @JoinTable(name = "model_variable_set_model_variable_definition", + joinColumns = {@JoinColumn(name = "variable_set_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_variable_set_model_variable_definition_variable_set_id_fk"))}, + inverseJoinColumns = {@JoinColumn(name = "variable_definition_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_variable_set_model_variable_definition_variable_definition_id_fk"))} ) private Set variableDefinitions = new LinkedHashSet<>(0); @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) @JoinTable( - name = "models_model_variable_sets", - joinColumns = {@JoinColumn(name = "variable_set_name")}, - inverseJoinColumns = {@JoinColumn(name = "model_name")} + name = "model_model_variable_set", + joinColumns = {@JoinColumn(name = "variable_set_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_model_variable_set_variable_set_id_fk"))}, + inverseJoinColumns = {@JoinColumn(name = "model_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "model_model_variable_set_model_id_fk"))} ) private Set models; @@ -61,7 +66,8 @@ public class ModelVariableSetEntity implements Serializable { private Date updatedDate; public ModelVariableSetEntity(ModelEntity model, VariablesSet variablesSet) { - this.models = model != null ? new LinkedHashSet<>(Arrays.asList(model)) : new LinkedHashSet<>(); + this.id = variablesSet.getId() == null ? UUID.randomUUID() : variablesSet.getId(); + this.models = model != null ? new LinkedHashSet<>(List.of(model)) : new LinkedHashSet<>(); this.name = variablesSet.getName(); this.variableDefinitions = variablesSet.getVariableDefinitions().stream().map(variableDefinition -> new ModelVariableDefinitionEntity(model, this, variableDefinition)).collect(Collectors.toSet()); } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java index 72b8c0a0..dd9f9143 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java @@ -4,6 +4,13 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Collection; +import java.util.List; +import java.util.UUID; + @Repository -public interface ModelParameterDefinitionRepository extends JpaRepository { +public interface ModelParameterDefinitionRepository extends JpaRepository { + List findAllByNameIn(Collection names); + + void deleteAllByNameIn(Collection names); } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterRepository.java index 6647ad96..2beccbda 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterRepository.java @@ -8,13 +8,14 @@ package org.gridsuite.mapping.server.repository; import org.gridsuite.mapping.server.model.ModelParameterEntity; -import org.gridsuite.mapping.server.model.ModelParameterId; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + /** * @author Thang PHAM */ @Repository -public interface ModelParameterRepository extends JpaRepository { +public interface ModelParameterRepository extends JpaRepository { } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterSetRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterSetRepository.java index d0277bb6..ee90b829 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterSetRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterSetRepository.java @@ -8,13 +8,14 @@ package org.gridsuite.mapping.server.repository; import org.gridsuite.mapping.server.model.ModelParameterSetEntity; -import org.gridsuite.mapping.server.model.ModelParameterSetId; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + /** * @author Thang PHAM */ @Repository -public interface ModelParameterSetRepository extends JpaRepository { +public interface ModelParameterSetRepository extends JpaRepository { } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelRepository.java index e20a7d47..2dc0a450 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelRepository.java @@ -10,12 +10,21 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Collection; import java.util.List; +import java.util.Optional; +import java.util.UUID; /** * @author Mathieu Scalbert */ @Repository -public interface ModelRepository extends JpaRepository { +public interface ModelRepository extends JpaRepository { List findAllByDefaultModelTrue(); + + Optional findByModelName(String modelName); + + List findAllByModelNameIn(Collection modelNames); + + void deleteAllByModelNameIn(Collection modelNames); } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelSetsGroupRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelSetsGroupRepository.java index 806f4ac8..cc040105 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelSetsGroupRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelSetsGroupRepository.java @@ -8,13 +8,14 @@ package org.gridsuite.mapping.server.repository; import org.gridsuite.mapping.server.model.ModelSetsGroupEntity; -import org.gridsuite.mapping.server.model.ModelSetsGroupId; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + /** * @author Thang PHAM */ @Repository -public interface ModelSetsGroupRepository extends JpaRepository { +public interface ModelSetsGroupRepository extends JpaRepository { } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelVariableRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelVariableRepository.java index 4c70c399..9ceb0dc3 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelVariableRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelVariableRepository.java @@ -11,9 +11,16 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Collection; +import java.util.List; +import java.util.UUID; + /** * @author Thang PHAM */ @Repository -public interface ModelVariableRepository extends JpaRepository { +public interface ModelVariableRepository extends JpaRepository { + List findAllByNameIn(Collection names); + + void deleteAllByNameIn(Collection names); } diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelVariablesSetRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelVariablesSetRepository.java index 9b7bdc18..5bd89d31 100644 --- a/src/main/java/org/gridsuite/mapping/server/repository/ModelVariablesSetRepository.java +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelVariablesSetRepository.java @@ -10,8 +10,18 @@ import org.gridsuite.mapping.server.model.ModelVariableSetEntity; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + /** * @author Thang PHAM */ -public interface ModelVariablesSetRepository extends JpaRepository { +public interface ModelVariablesSetRepository extends JpaRepository { + List findAllByNameIn(Collection names); + + Optional findByName(String name); + + void deleteAllByNameIn(Collection names); } diff --git a/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java b/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java index 300f0e61..1703c8c7 100644 --- a/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java +++ b/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java @@ -279,7 +279,7 @@ public List getMappedModelsList(String mappingName) { .collect(Collectors.toSet()); // get model by name from db, concat to default models and convert to dtos - return Stream.concat(modelRepository.findAllById(mappedModelNames).stream(), + return Stream.concat(modelRepository.findAllByModelNameIn(mappedModelNames).stream(), modelRepository.findAllByDefaultModelTrue().stream()) .map(Model::new).toList(); } diff --git a/src/main/java/org/gridsuite/mapping/server/service/implementation/ModelServiceImpl.java b/src/main/java/org/gridsuite/mapping/server/service/implementation/ModelServiceImpl.java index 48dbe1e1..95a669ec 100644 --- a/src/main/java/org/gridsuite/mapping/server/service/implementation/ModelServiceImpl.java +++ b/src/main/java/org/gridsuite/mapping/server/service/implementation/ModelServiceImpl.java @@ -37,6 +37,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -198,7 +199,7 @@ public List getParametersSets() { @Override @Transactional(readOnly = true) public List getSetsFromGroup(String modelName, String groupName, SetGroupType groupType) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); @@ -213,7 +214,7 @@ public List getSetsFromGroup(String modelName, String groupName, @Override @Transactional public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersSetsGroup setsGroup, Boolean strict) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -225,12 +226,24 @@ public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersS if (previousGroup == null) { savedGroups.add(groupToAdd); } else { - // If additional checks are required here, ensure that set erasure cannot happen here with sets merging. - groupToAdd.getSets().forEach(previousGroup::addParameterSet); + // merge sets by name + groupToAdd.getSets().forEach(setToAdd -> + // if set's name is existing in the group, consider the setToAdd as an update version by setting the same id + previousGroup.getSets().stream() + .filter(set -> set.getName().equals(setToAdd.getName())) + .findAny() + .ifPresent(existingSet -> { + setToAdd.setId(existingSet.getId()); + // replace the whole old set by the new set + previousGroup.removeParameterSet(existingSet); + previousGroup.addParameterSet(setToAdd); + }) + ); } if (new Model(modelToUpdate).isParameterSetGroupValid(setsGroup.getName(), strict)) { modelRepository.save(modelToUpdate); + setsGroup.setId(groupToAdd.getId()); // round-trip id return setsGroup; } else { throw new HttpClientErrorException(HttpStatus.BAD_REQUEST); @@ -240,15 +253,213 @@ public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersS @Override @Transactional public Model saveModel(Model model) { - modelRepository.save(new ModelEntity(model)); + ModelEntity modelEntity = new ModelEntity(model); + + // --- Process reusable entities --- // + // *** parameter definitions at model level *** // + processParameterDefinitions(modelEntity); + + // *** variable definitions *** // + // A map to store managed/loaded variables which can be shared with other models or within the model + Map sharedVariables = new HashMap<>(); + + // variables at the model level + processModelLevelVariableDefinitions(modelEntity, sharedVariables); + // variables at the variable-set level + processVariableSetLevelDefinitions(modelEntity, sharedVariables); + + // rely on Hibernate to save + modelRepository.save(modelEntity); return model; } + /** + * Process and merge parameter definitions at the model level with existing definitions in the database. + * Reuses existing parameter definitions where possible to maintain referential integrity. + */ + private void processParameterDefinitions(ModelEntity modelEntity) { + List parameterDefinitionsInModel = modelEntity.getParameterDefinitions(); + if (CollectionUtils.isEmpty(parameterDefinitionsInModel)) { + return; + } + + List parameterNames = parameterDefinitionsInModel.stream() + .map(ModelModelParameterDefinitionEntity::getParameterDefinition) + .map(ModelParameterDefinitionEntity::getName) + .toList(); + List existingParameterDefinitions = + modelParameterDefinitionRepository.findAllByNameIn(parameterNames); + + if (CollectionUtils.isEmpty(existingParameterDefinitions)) { + return; + } + + // indexing by parameter's name + Map existingParameterDefinitionsMap = existingParameterDefinitions.stream() + .collect(Collectors.toMap(ModelParameterDefinitionEntity::getName, Function.identity())); + + // perform merge + for (ModelModelParameterDefinitionEntity parameterDefinitionLink : parameterDefinitionsInModel) { + String parameterName = parameterDefinitionLink.getParameterDefinition().getName(); + if (existingParameterDefinitionsMap.containsKey(parameterName)) { + parameterDefinitionLink.setParameterDefinition(existingParameterDefinitionsMap.get(parameterName)); + } + } + } + + /** + * Process and merge variable definitions at the model level with existing definitions in the database. + * Populates the sharedVariables map with managed/loaded variables that can be shared. + */ + private void processModelLevelVariableDefinitions(ModelEntity modelEntity, + Map sharedVariables) { + Set variableDefinitionsInModel = modelEntity.getVariableDefinitions(); + if (CollectionUtils.isEmpty(variableDefinitionsInModel)) { + return; + } + + List variableNames = variableDefinitionsInModel.stream() + .map(ModelVariableDefinitionEntity::getName) + .toList(); + List existingVariables = + modelVariableRepository.findAllByNameIn(variableNames); + + // init the shared variables map with loaded variables + existingVariables.forEach(variable -> sharedVariables.put(variable.getName(), variable)); + + Set mergedVariables = new LinkedHashSet<>(); + // perform merge + for (ModelVariableDefinitionEntity variable : variableDefinitionsInModel) { + if (sharedVariables.containsKey(variable.getName())) { + mergedVariables.add(sharedVariables.get(variable.getName())); + } else { + mergedVariables.add(variable); + sharedVariables.put(variable.getName(), variable); + } + } + modelEntity.setVariableDefinitions(mergedVariables); + } + + /** + * Process and merge variable sets and their variable definitions with existing entities in the database. + * Uses the sharedVariables map to ensure variable definitions are properly reused across sets. + */ + private void processVariableSetLevelDefinitions(ModelEntity modelEntity, + Map sharedVariables) { + Set variableSets = modelEntity.getVariableSets(); + if (CollectionUtils.isEmpty(variableSets)) { + return; + } + + List variableSetNames = variableSets.stream() + .map(ModelVariableSetEntity::getName) + .toList(); + List existingVariableSets = + modelVariablesSetRepository.findAllByNameIn(variableSetNames); + + // indexing by variable set's name + Map existingVariableSetMap = existingVariableSets.stream() + .collect(Collectors.toMap(ModelVariableSetEntity::getName, Function.identity())); + + // Load variables not yet in the shared variables map + loadReferencedVariablesBySetIntoSharedMap(variableSets, sharedVariables); + + // Merge variable sets and variables simultaneously + Set mergedVariableSets = mergeVariableSets( + variableSets, existingVariableSetMap, sharedVariables, modelEntity); + + modelEntity.setVariableSets(mergedVariableSets); + } + + /** + * Load variable definitions that are referenced in variable sets but not yet in the shared variables map. + */ + private void loadReferencedVariablesBySetIntoSharedMap(Set variableSets, + Map sharedVariables) { + // Collect all variable names that are in variable sets + List allVariableNamesInSets = variableSets.stream() + .flatMap(variableSet -> variableSet.getVariableDefinitions().stream()) + .map(ModelVariableDefinitionEntity::getName) + .toList(); + + // load variables which not yet in the shared variables map + List variableNamesToLoad = allVariableNamesInSets.stream() + .filter(name -> !sharedVariables.containsKey(name)) + .toList(); + + if (CollectionUtils.isEmpty(variableNamesToLoad)) { + return; + } + + List existingVariablesInSet = + modelVariableRepository.findAllByNameIn(variableNamesToLoad); + // add new loaded variables to shared variables map + existingVariablesInSet.forEach(variable -> sharedVariables.put(variable.getName(), variable)); + } + + /** + * Merge variable sets with existing entities, reusing existing sets and variables where possible. + */ + private Set mergeVariableSets(Set variableSets, + Map existingVariableSetMap, + Map sharedVariables, + ModelEntity modelEntity) { + Set mergedVariableSets = new LinkedHashSet<>(); + + for (ModelVariableSetEntity variableSet : variableSets) { + ModelVariableSetEntity setToMerge = variableSet; + + if (existingVariableSetMap.containsKey(variableSet.getName())) { + // Reuse the existing variable set with existing variables in the set + setToMerge = existingVariableSetMap.get(variableSet.getName()); + if (setToMerge.getModels() == null) { + setToMerge.setModels(new LinkedHashSet<>()); + } + setToMerge.getModels().add(modelEntity); + } else { + // For a new set, must merge with managed variables + Set mergedVariableInSet = + mergeVariablesInSet(setToMerge, sharedVariables); + setToMerge.setVariableDefinitions(mergedVariableInSet); + } + + mergedVariableSets.add(setToMerge); + } + + return mergedVariableSets; + } + + /** + * Merge variable definitions within a variable set, reusing existing variables from the shared map. + */ + private Set mergeVariablesInSet(ModelVariableSetEntity variableSet, + Map sharedVariables) { + Set mergedVariableInSet = new LinkedHashSet<>(); + + for (ModelVariableDefinitionEntity variable : variableSet.getVariableDefinitions()) { + ModelVariableDefinitionEntity variableToMerge = variable; + + if (sharedVariables.containsKey(variable.getName())) { + variableToMerge = sharedVariables.get(variable.getName()); + if (variableToMerge.getVariablesSets() == null) { + variableToMerge.setVariablesSets(new LinkedHashSet<>()); + } + variableToMerge.getVariablesSets().add(variableSet); + } else { + sharedVariables.put(variable.getName(), variable); + } + + mergedVariableInSet.add(variableToMerge); + } + + return mergedVariableInSet; + } + @Override @Transactional public List deleteModels(List modelNames) { if (!CollectionUtils.isEmpty(modelNames)) { - List modelEntities = modelRepository.findAllById(modelNames); + List modelEntities = modelRepository.findAllByModelNameIn(modelNames); List allParameterDefinitions = new ArrayList<>(); Set allVariableDefinitions = new HashSet<>(); Set allVariableSets = new HashSet<>(); @@ -267,29 +478,28 @@ public List deleteModels(List modelNames) { List variableSets = modelEntity.getVariableSets().stream().toList(); modelEntity.removeAllVariablesSet(variableSets); allVariableSets.addAll(variableSets); - - variableSets.forEach(variableSetEntity -> { - List variableDefinitionsInSet = variableSetEntity.getVariableDefinitions().stream().toList(); - variableSetEntity.removeAllVariableDefinition(variableDefinitionsInSet); - allVariableDefinitions.addAll(variableDefinitionsInSet); - }); }); // --- Perform delete cascade manually --- // // delete model first - modelRepository.deleteAllById(modelNames); + modelRepository.deleteAllByModelNameIn(modelNames); // delete all parameter definitions which are not referenced by any model List toDeleteParameterDefinitions = allParameterDefinitions.stream().filter(elem -> elem.getModels().isEmpty()).toList(); if (!CollectionUtils.isEmpty(toDeleteParameterDefinitions)) { - modelParameterDefinitionRepository.deleteAllById(toDeleteParameterDefinitions.stream() + modelParameterDefinitionRepository.deleteAllByNameIn(toDeleteParameterDefinitions.stream() .map(ModelParameterDefinitionEntity::getName).toList()); } // delete all variable sets which are not referenced by any model List toDeleteVariableSets = allVariableSets.stream().filter(elem -> elem.getModels().isEmpty()).toList(); if (!CollectionUtils.isEmpty(toDeleteVariableSets)) { - modelVariablesSetRepository.deleteAllById(toDeleteVariableSets.stream() + toDeleteVariableSets.forEach(variableSetEntity -> { + List variableDefinitionsInSet = variableSetEntity.getVariableDefinitions().stream().toList(); + variableSetEntity.removeAllVariableDefinition(variableDefinitionsInSet); + allVariableDefinitions.addAll(variableDefinitionsInSet); + }); + modelVariablesSetRepository.deleteAllByNameIn(toDeleteVariableSets.stream() .map(ModelVariableSetEntity::getName).toList()); } @@ -297,7 +507,7 @@ public List deleteModels(List modelNames) { List toDeleteVariableDefinitions = allVariableDefinitions.stream() .filter(elem -> elem.getModels().isEmpty() && elem.getVariablesSets().isEmpty()).toList(); if (!CollectionUtils.isEmpty(toDeleteVariableDefinitions)) { - modelVariableRepository.deleteAllById(toDeleteVariableDefinitions.stream() + modelVariableRepository.deleteAllByNameIn(toDeleteVariableDefinitions.stream() .map(ModelVariableDefinitionEntity::getName).toList()); } } @@ -308,7 +518,7 @@ public List deleteModels(List modelNames) { @Override @Transactional public ParametersSetsGroup deleteSet(String modelName, String groupName, SetGroupType groupType, String setName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -340,14 +550,14 @@ public List getParameterDefinitionNames() { @Override @Transactional(readOnly = true) public List getParameterDefinitions(List parameterDefinitionNames) { - return modelParameterDefinitionRepository.findAllById(parameterDefinitionNames).stream() + return modelParameterDefinitionRepository.findAllByNameIn(parameterDefinitionNames).stream() .map(parameterDefinitionEntity -> new ModelParameterDefinition(parameterDefinitionEntity, null, null)).toList(); } @Override @Transactional(readOnly = true) public List getParameterDefinitionsFromModel(String modelName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); @@ -358,7 +568,7 @@ public List getParameterDefinitionsFromModel(String mo @Override @Transactional public Model addNewParameterDefinitionsToModel(String modelName, List parameterDefinitions) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -377,14 +587,14 @@ public Model addNewParameterDefinitionsToModel(String modelName, List parameterDefinitionNames, ParameterOrigin origin, String originName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of parameter definitions if (!CollectionUtils.isEmpty(parameterDefinitionNames)) { // find existing parameter definitions - List foundParameterDefinitionEntities = modelParameterDefinitionRepository.findAllById(parameterDefinitionNames); + List foundParameterDefinitionEntities = modelParameterDefinitionRepository.findAllByNameIn(parameterDefinitionNames); // check whether found all, fail fast if (foundParameterDefinitionEntities.size() != parameterDefinitionNames.size()) { @@ -408,14 +618,14 @@ public Model addExistingParameterDefinitionsToModel(String modelName, List parameterDefinitionNames) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do remove in the list of parameter definitions if (!CollectionUtils.isEmpty(parameterDefinitionNames)) { // find existing variable definitions - List foundParameterDefinitionEntities = modelParameterDefinitionRepository.findAllById(parameterDefinitionNames); + List foundParameterDefinitionEntities = modelParameterDefinitionRepository.findAllByNameIn(parameterDefinitionNames); // remove in existing list modelToUpdate.removeAllParameterDefinition(foundParameterDefinitionEntities); @@ -431,7 +641,7 @@ public Model removeExistingParameterDefinitionsFromModel(String modelName, List< @Override @Transactional public Model removeAllParameterDefinitionsOnModel(String modelName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -463,7 +673,7 @@ public List saveNewParameterDefinitions(List deleteParameterDefinitions(List parameterDefinitionNames) { if (!CollectionUtils.isEmpty(parameterDefinitionNames)) { - modelParameterDefinitionRepository.deleteAllById(parameterDefinitionNames); + modelParameterDefinitionRepository.deleteAllByNameIn(parameterDefinitionNames); } return parameterDefinitionNames; } @@ -474,7 +684,7 @@ public List deleteParameterDefinitions(List parameterDefinitionN @Override @Transactional(readOnly = true) public List getVariableDefinitionsFromModel(String modelName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); @@ -491,13 +701,13 @@ public List getVariableDefinitionNames() { @Transactional(readOnly = true) @Override public List getVariableDefinitions(List variableNames) { - return modelVariableRepository.findAllById(variableNames).stream().map(ModelVariableDefinition::new).toList(); + return modelVariableRepository.findAllByNameIn(variableNames).stream().map(ModelVariableDefinition::new).toList(); } @Override @Transactional public Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitions) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -519,14 +729,14 @@ public Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitionNames) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variable definitions if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions - List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); + List foundVariableDefinitionEntities = modelVariableRepository.findAllByNameIn(variableDefinitionNames); // check whether found all, fail fast if (foundVariableDefinitionEntities.size() != variableDefinitionNames.size()) { @@ -549,14 +759,14 @@ public Model addExistingVariableDefinitionsToModel(String modelName, List variableDefinitionNames) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do remove in the list of variable definitions if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions - List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); + List foundVariableDefinitionEntities = modelVariableRepository.findAllByNameIn(variableDefinitionNames); // remove in existing list modelToUpdate.removeAllVariableDefinition(foundVariableDefinitionEntities); @@ -584,7 +794,7 @@ public List saveNewVariableDefinitions(List foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -606,13 +816,13 @@ public List getVariablesSetNames() { @Override @Transactional(readOnly = true) public List getVariablesSets(List variablesSetNames) { - return modelVariablesSetRepository.findAllById(variablesSetNames).stream().map(VariablesSet::new).toList(); + return modelVariablesSetRepository.findAllByNameIn(variablesSetNames).stream().map(VariablesSet::new).toList(); } @Override @Transactional(readOnly = true) public List getVariablesSetsFromModel(String modelName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); @@ -624,6 +834,34 @@ public List getVariablesSetsFromModel(String modelName) { @Transactional public VariablesSet saveNewVariablesSet(VariablesSet variableSet) { ModelVariableSetEntity variableSetEntity = new ModelVariableSetEntity(null, variableSet); + + // process reusable entities + Set variableDefinitions = variableSetEntity.getVariableDefinitions(); + if (!CollectionUtils.isEmpty(variableDefinitions)) { + List variableNamesInSet = variableDefinitions.stream().map(ModelVariableDefinitionEntity::getName).toList(); + List existingVariables = modelVariableRepository.findAllByNameIn(variableNamesInSet); + + // Indexing by variable's name + Map existingVariablesMap = existingVariables.stream() + .collect(Collectors.toMap(ModelVariableDefinitionEntity::getName, Function.identity())); + Set mergedVariables = new LinkedHashSet<>(); + // perform merge with existing entities + for (ModelVariableDefinitionEntity variable : variableDefinitions) { + ModelVariableDefinitionEntity mergedVariable = variable; + if (existingVariablesMap.get(variable.getName()) != null) { + mergedVariable = existingVariablesMap.get(variable.getName()); + if (mergedVariable.getVariablesSets() != null) { + mergedVariable.setVariablesSets(new LinkedHashSet<>()); + } + mergedVariable.getVariablesSets().add(variableSetEntity); + } + mergedVariables.add(mergedVariable); + } + // use merged result + variableSetEntity.setVariableDefinitions(mergedVariables); + } + + // rely on Hibernate to save ModelVariableSetEntity savedVariableSetEntity = modelVariablesSetRepository.save(variableSetEntity); return new VariablesSet(savedVariableSetEntity); } @@ -631,7 +869,7 @@ public VariablesSet saveNewVariablesSet(VariablesSet variableSet) { @Override @Transactional(readOnly = true) public List getVariableDefinitionsFromVariablesSet(String variableSetName) { - Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findByName(variableSetName); ModelVariableSetEntity variableSetEntity = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); @@ -642,7 +880,7 @@ public List getVariableDefinitionsFromVariablesSet(Stri @Override @Transactional public VariablesSet addNewVariableDefinitionToVariablesSet(String variableSetName, List variableDefinitions) { - Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findByName(variableSetName); ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); @@ -662,13 +900,13 @@ public VariablesSet addNewVariableDefinitionToVariablesSet(String variableSetNam @Override @Transactional public VariablesSet removeExistingVariableDefinitionFromVariablesSet(String variableSetName, List variableDefinitionNames) { - Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findByName(variableSetName); ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions - List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); + List foundVariableDefinitionEntities = modelVariableRepository.findAllByNameIn(variableDefinitionNames); // remove in existing list variableSetToUpdate.removeAllVariableDefinition(foundVariableDefinitionEntities); @@ -683,7 +921,7 @@ public VariablesSet removeExistingVariableDefinitionFromVariablesSet(String vari @Override @Transactional public VariablesSet removeAllVariableDefinitionOnVariablesSet(String variableSetName) { - Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findByName(variableSetName); ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); @@ -698,7 +936,7 @@ public VariablesSet removeAllVariableDefinitionOnVariablesSet(String variableSet @Override @Transactional public Model addNewVariablesSetsToModel(String modelName, List variableSets) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -719,14 +957,14 @@ public Model addNewVariablesSetsToModel(String modelName, List var @Override @Transactional public Model addExistingVariablesSetsToModel(String modelName, List variablesSetNames) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variables set if (!CollectionUtils.isEmpty(variablesSetNames)) { // do merge with existing list - List foundVariablesSetEntities = modelVariablesSetRepository.findAllById(variablesSetNames); + List foundVariablesSetEntities = modelVariablesSetRepository.findAllByNameIn(variablesSetNames); // check whether found all if (foundVariablesSetEntities.size() != variablesSetNames.size()) { @@ -746,14 +984,14 @@ public Model addExistingVariablesSetsToModel(String modelName, List vari @Override @Transactional public Model removeExistingVariablesSetsFromModel(String modelName, List variablesSetNames) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variables set if (!CollectionUtils.isEmpty(variablesSetNames)) { // remove from existing list - List foundVariablesSetEntities = modelVariablesSetRepository.findAllById(variablesSetNames); + List foundVariablesSetEntities = modelVariablesSetRepository.findAllByNameIn(variablesSetNames); modelToUpdate.removeAllVariablesSet(foundVariablesSetEntities); // save modified existing model entity @@ -766,7 +1004,7 @@ public Model removeExistingVariablesSetsFromModel(String modelName, List @Override @Transactional public Model removeAllExistingVariablesSetsFromModel(String modelName) { - Optional foundModelOpt = modelRepository.findById(modelName); + Optional foundModelOpt = modelRepository.findByModelName(modelName); ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); @@ -782,7 +1020,7 @@ public Model removeAllExistingVariablesSetsFromModel(String modelName) { @Transactional public List deleteVariableDefinitions(List variableDefinitionNames) { if (!CollectionUtils.isEmpty(variableDefinitionNames)) { - modelVariableRepository.deleteAllById(variableDefinitionNames); + modelVariableRepository.deleteAllByNameIn(variableDefinitionNames); } return variableDefinitionNames; @@ -792,7 +1030,7 @@ public List deleteVariableDefinitions(List variableDefinitionNam @Transactional public List deleteVariablesSets(List variablesSetNames) { if (!CollectionUtils.isEmpty(variablesSetNames)) { - modelVariablesSetRepository.deleteAllById(variablesSetNames); + modelVariablesSetRepository.deleteAllByNameIn(variablesSetNames); } return variablesSetNames; diff --git a/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java b/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java index 76f66313..662524c8 100644 --- a/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java +++ b/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java @@ -84,7 +84,7 @@ public ParameterFile exportParameters(String mappingName) { } private List getEnrichedSetsFromInstanceModel(String modelName, String groupName) { - Optional model = modelRepository.findById(modelName); + Optional model = modelRepository.findByModelName(modelName); if (model.isPresent()) { ParametersSetsGroup correspondingGroup = new ParametersSetsGroup(model.get().getSetsGroups().stream() .filter(group -> group.getName().equals(groupName)) diff --git a/src/main/java/org/gridsuite/mapping/server/utils/Methods.java b/src/main/java/org/gridsuite/mapping/server/utils/Methods.java index 531f4445..48b53e14 100644 --- a/src/main/java/org/gridsuite/mapping/server/utils/Methods.java +++ b/src/main/java/org/gridsuite/mapping/server/utils/Methods.java @@ -55,7 +55,7 @@ public static String convertNumberListToString(List array) { } public static ParametersSetsGroup getSetsGroupFromModel(String modelName, String setGroupName, ModelRepository modelRepository) { - Optional foundModel = modelRepository.findById(modelName); + Optional foundModel = modelRepository.findByModelName(modelName); if (foundModel.isPresent()) { return new ParametersSetsGroup(foundModel.get().getSetsGroups().stream().filter(setGroup -> setGroup.getName().equals(setGroupName)) .findAny().orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "No sets group associated to the model " + diff --git a/src/main/java/org/gridsuite/mapping/server/utils/Operands.java b/src/main/java/org/gridsuite/mapping/server/utils/Operands.java deleted file mode 100644 index 9c31b037..00000000 --- a/src/main/java/org/gridsuite/mapping/server/utils/Operands.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2021, 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.mapping.server.utils; - -/** - * @author Mathieu Scalbert - */ -public enum Operands { - // Common - EQUALS, - NOT_EQUALS, - // Number - LOWER, - LOWER_OR_EQUALS, - HIGHER_OR_EQUALS, - HIGHER, - // String - INCLUDES, - STARTS_WITH, - ENDS_WITH, - // Enum - IN, - NOT_IN -} diff --git a/src/main/java/org/gridsuite/mapping/server/utils/PropertyUtils.java b/src/main/java/org/gridsuite/mapping/server/utils/PropertyUtils.java index 8dc68a9e..f7f8958f 100644 --- a/src/main/java/org/gridsuite/mapping/server/utils/PropertyUtils.java +++ b/src/main/java/org/gridsuite/mapping/server/utils/PropertyUtils.java @@ -16,7 +16,7 @@ import java.util.Arrays; /** - * This class is must be identical to one on study-server + * This class must be identical to one on study-server * @author Jacques Borsenberger beanSource.getPropertyValue(name) == null) - .filter(name -> Arrays.stream(authorizedNullProperties).noneMatch(n -> name.equals(n))) + .filter(name -> Arrays.stream(authorizedNullProperties).noneMatch(name::equals)) .toArray(String[]::new); } } diff --git a/src/main/resources/db/changelog/changesets/changelog_20251120T230357Z.xml b/src/main/resources/db/changelog/changesets/changelog_20251120T230357Z.xml new file mode 100644 index 00000000..adb56b14 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20251120T230357Z.xml @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index ca9185ac..203b80cf 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -43,3 +43,7 @@ databaseChangeLog: - include: file: changesets/changelog_20240506T172219Z.xml relativeToChangelogFile: true + + - include: + file: changesets/changelog_20251120T230357Z.xml + relativeToChangelogFile: true diff --git a/src/main/resources/models/DefaultBus.json b/src/main/resources/models/DefaultBus.json new file mode 100644 index 00000000..67179c81 --- /dev/null +++ b/src/main/resources/models/DefaultBus.json @@ -0,0 +1,21 @@ +{ + "modelName": "DefaultBus", + "equipmentType": "BUS", + "variableDefinitions": [ + { + "name": "U_value", + "type": "DOUBLE", + "unit": "kV" + }, + { + "name": "Upu_value", + "type": "DOUBLE" + }, + { + "name": "phi_value", + "type": "DOUBLE", + "unit": "°" + } + ], + "defaultModel": "true" +} diff --git a/src/main/resources/models/GeneratorPQ.json b/src/main/resources/models/GeneratorPQ.json new file mode 100644 index 00000000..3f65034d --- /dev/null +++ b/src/main/resources/models/GeneratorPQ.json @@ -0,0 +1,73 @@ +{ + "modelName": "GeneratorPQ", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_AlphaPuPNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PMax", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMax" + }, + { + "name": "generator_PMin", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMin" + }, + { + "name": "generator_PNom", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMax" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + } + ], + "setsGroups": [ + { + "name": "GPQ", + "type": "FIXED", + "modelName": "GeneratorPQ", + "sets": [ + { + "name": "GPQ", + "parameters": [ + { + "name": "generator_AlphaPuPNom", + "value": "25" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/GeneratorPV.json b/src/main/resources/models/GeneratorPV.json new file mode 100644 index 00000000..c065e43f --- /dev/null +++ b/src/main/resources/models/GeneratorPV.json @@ -0,0 +1,106 @@ +{ + "modelName": "GeneratorPV", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_AlphaPuPNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_LambdaPuSNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PMax", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMax" + }, + { + "name": "generator_PMin", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMin" + }, + { + "name": "generator_PNom", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "pMax" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_QMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_QMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SNom", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "sNom" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + } + ], + "setsGroups": [ + { + "name": "GPV", + "type": "FIXED", + "modelName": "GeneratorPV", + "sets": [ + { + "name": "GPV", + "parameters": [ + { + "name": "generator_AlphaPuPNom", + "value": "20" + }, + { + "name": "generator_LambdaPuSNom", + "value": "0.01" + }, + { + "name": "generator_QMax", + "value": "35.1" + }, + { + "name": "generator_QMin", + "value": "-41" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/GeneratorSynchronousFourWindings.json b/src/main/resources/models/GeneratorSynchronousFourWindings.json new file mode 100644 index 00000000..9d6ce956 --- /dev/null +++ b/src/main/resources/models/GeneratorSynchronousFourWindings.json @@ -0,0 +1,334 @@ +{ + "modelName": "GeneratorSynchronousFourWindings", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_DPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_ExcitationPu", + "type": "INT", + "origin": "USER" + }, + { + "name": "generator_H", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_MdPuEfd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PNomAlt", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_PNomTurb", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_RTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_RaPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SnTfo", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UBaseHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UBaseLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "generator_UseApproximation", + "type": "BOOL", + "origin": "USER" + }, + { + "name": "generator_XTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XlPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_md", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_mq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nq", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "GSFW", + "type": "FIXED", + "modelName": "GeneratorSynchronousFourWindings", + "sets": [ + { + "name": "GSFW", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1090" + }, + { + "name": "generator_PNomTurb", + "value": "1090" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.002796" + }, + { + "name": "generator_SNom", + "value": "1211" + }, + { + "name": "generator_SnTfo", + "value": "1211" + }, + { + "name": "generator_Tpd0", + "value": "8.094" + }, + { + "name": "generator_Tppd0", + "value": "0.08" + }, + { + "name": "generator_Tppq0", + "value": "0.084" + }, + { + "name": "generator_Tpq0", + "value": "1.572" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.22" + }, + { + "name": "generator_XlPu", + "value": "0.202" + }, + { + "name": "generator_XpdPu", + "value": "0.384" + }, + { + "name": "generator_XppdPu", + "value": "0.264" + }, + { + "name": "generator_XppqPu", + "value": "0.262" + }, + { + "name": "generator_XpqPu", + "value": "0.393" + }, + { + "name": "generator_XqPu", + "value": "2.22" + }, + { + "name": "generator_md", + "value": "0.215" + }, + { + "name": "generator_mq", + "value": "0.215" + }, + { + "name": "generator_nd", + "value": "6.995" + }, + { + "name": "generator_nq", + "value": "6.995" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/GeneratorSynchronousFourWindingsProportionalRegulations.json b/src/main/resources/models/GeneratorSynchronousFourWindingsProportionalRegulations.json new file mode 100644 index 00000000..91e1ff21 --- /dev/null +++ b/src/main/resources/models/GeneratorSynchronousFourWindingsProportionalRegulations.json @@ -0,0 +1,2217 @@ +{ + "modelName": "GeneratorSynchronousFourWindingsProportionalRegulations", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_DPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_ExcitationPu", + "type": "INT", + "origin": "USER" + }, + { + "name": "generator_H", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_MdPuEfd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PNomAlt", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_PNomTurb", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_RTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_RaPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SnTfo", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UBaseHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UBaseLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "generator_UseApproximation", + "type": "BOOL", + "origin": "USER" + }, + { + "name": "generator_XTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XlPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_md", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_mq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_KGover", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_EfdMinPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_Gain", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_LagEfdMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_LagEfdMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "GSFWPR", + "type": "FIXED", + "modelName": "GeneratorSynchronousFourWindingsProportionalRegulations", + "sets": [ + { + "name": "GSFWPR", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1090" + }, + { + "name": "generator_PNomTurb", + "value": "1090" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.002796" + }, + { + "name": "generator_SNom", + "value": "1211" + }, + { + "name": "generator_SnTfo", + "value": "1211" + }, + { + "name": "generator_Tpd0", + "value": "8.094" + }, + { + "name": "generator_Tppd0", + "value": "0.08" + }, + { + "name": "generator_Tppq0", + "value": "0.084" + }, + { + "name": "generator_Tpq0", + "value": "1.572" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.22" + }, + { + "name": "generator_XlPu", + "value": "0.202" + }, + { + "name": "generator_XpdPu", + "value": "0.384" + }, + { + "name": "generator_XppdPu", + "value": "0.264" + }, + { + "name": "generator_XppqPu", + "value": "0.262" + }, + { + "name": "generator_XpqPu", + "value": "0.393" + }, + { + "name": "generator_XqPu", + "value": "2.22" + }, + { + "name": "generator_md", + "value": "0.215" + }, + { + "name": "generator_mq", + "value": "0.215" + }, + { + "name": "generator_nd", + "value": "6.995" + }, + { + "name": "generator_nq", + "value": "6.995" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1090" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1090" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + } + ] + }, + { + "name": "IEEE14", + "type": "PREFIX", + "modelName": "GeneratorSynchronousFourWindingsProportionalRegulations", + "sets": [ + { + "name": "IEEE14_GEN____1_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1090" + }, + { + "name": "generator_PNomTurb", + "value": "1090" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.002796" + }, + { + "name": "generator_SNom", + "value": "1211" + }, + { + "name": "generator_SnTfo", + "value": "1211" + }, + { + "name": "generator_Tpd0", + "value": "8.094" + }, + { + "name": "generator_Tppd0", + "value": "0.08" + }, + { + "name": "generator_Tppq0", + "value": "0.084" + }, + { + "name": "generator_Tpq0", + "value": "1.572" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.22" + }, + { + "name": "generator_XlPu", + "value": "0.202" + }, + { + "name": "generator_XpdPu", + "value": "0.384" + }, + { + "name": "generator_XppdPu", + "value": "0.264" + }, + { + "name": "generator_XppqPu", + "value": "0.262" + }, + { + "name": "generator_XpqPu", + "value": "0.393" + }, + { + "name": "generator_XqPu", + "value": "2.22" + }, + { + "name": "generator_md", + "value": "0.215" + }, + { + "name": "generator_mq", + "value": "0.215" + }, + { + "name": "generator_nd", + "value": "6.995" + }, + { + "name": "generator_nq", + "value": "6.995" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1090" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1090" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE14_GEN____2_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "6.3" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1008" + }, + { + "name": "generator_PNomTurb", + "value": "1008" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.00357" + }, + { + "name": "generator_SNom", + "value": "1120" + }, + { + "name": "generator_SnTfo", + "value": "1120" + }, + { + "name": "generator_Tpd0", + "value": "9.651" + }, + { + "name": "generator_Tppd0", + "value": "0.058" + }, + { + "name": "generator_Tppq0", + "value": "0.06" + }, + { + "name": "generator_Tpq0", + "value": "1.009" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.57" + }, + { + "name": "generator_XlPu", + "value": "0.219" + }, + { + "name": "generator_XpdPu", + "value": "0.407" + }, + { + "name": "generator_XppdPu", + "value": "0.3" + }, + { + "name": "generator_XppqPu", + "value": "0.301" + }, + { + "name": "generator_XpqPu", + "value": "0.454" + }, + { + "name": "generator_XqPu", + "value": "2.57" + }, + { + "name": "generator_md", + "value": "0.084" + }, + { + "name": "generator_mq", + "value": "0.084" + }, + { + "name": "generator_nd", + "value": "5.57" + }, + { + "name": "generator_nq", + "value": "5.57" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1008" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1008" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE14_GEN____3_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.625" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1485" + }, + { + "name": "generator_PNomTurb", + "value": "1485" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.00316" + }, + { + "name": "generator_SNom", + "value": "1650" + }, + { + "name": "generator_SnTfo", + "value": "1650" + }, + { + "name": "generator_Tpd0", + "value": "10.041" + }, + { + "name": "generator_Tppd0", + "value": "0.065" + }, + { + "name": "generator_Tppq0", + "value": "0.094" + }, + { + "name": "generator_Tpq0", + "value": "1.22" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "20" + }, + { + "name": "generator_UNom", + "value": "20" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "20" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.81" + }, + { + "name": "generator_XlPu", + "value": "0.256" + }, + { + "name": "generator_XpdPu", + "value": "0.509" + }, + { + "name": "generator_XppdPu", + "value": "0.354" + }, + { + "name": "generator_XppqPu", + "value": "0.377" + }, + { + "name": "generator_XpqPu", + "value": "0.601" + }, + { + "name": "generator_XqPu", + "value": "2.62" + }, + { + "name": "generator_md", + "value": "0.05" + }, + { + "name": "generator_mq", + "value": "0.05" + }, + { + "name": "generator_nd", + "value": "9.285" + }, + { + "name": "generator_nq", + "value": "9.285" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1485" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1485" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + } + ] + }, + { + "name": "IEEE57", + "type": "PREFIX", + "modelName": "GeneratorSynchronousFourWindingsProportionalRegulations", + "sets": [ + { + "name": "IEEE57_GEN____6_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4000000000000004" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1008" + }, + { + "name": "generator_PNomTurb", + "value": "1008" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.00357" + }, + { + "name": "generator_SNom", + "value": "1120" + }, + { + "name": "generator_SnTfo", + "value": "1120" + }, + { + "name": "generator_Tpd0", + "value": "9.651" + }, + { + "name": "generator_Tppd0", + "value": "0.058" + }, + { + "name": "generator_Tppq0", + "value": "0.06" + }, + { + "name": "generator_Tpq0", + "value": "1.0009" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.57" + }, + { + "name": "generator_XlPu", + "value": "0.219" + }, + { + "name": "generator_XpdPu", + "value": "0.407" + }, + { + "name": "generator_XppdPu", + "value": "0.3" + }, + { + "name": "generator_XppqPu", + "value": "0.301" + }, + { + "name": "generator_XpqPu", + "value": "0.454" + }, + { + "name": "generator_XqPu", + "value": "2.57" + }, + { + "name": "generator_md", + "value": "0.084" + }, + { + "name": "generator_mq", + "value": "0.084" + }, + { + "name": "generator_nd", + "value": "5.57" + }, + { + "name": "generator_nq", + "value": "5.57" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1008" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1008" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____9_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.625" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1485" + }, + { + "name": "generator_PNomTurb", + "value": "1485" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.00316" + }, + { + "name": "generator_SNom", + "value": "1650" + }, + { + "name": "generator_SnTfo", + "value": "1650" + }, + { + "name": "generator_Tpd0", + "value": "10.041" + }, + { + "name": "generator_Tppd0", + "value": "0.065" + }, + { + "name": "generator_Tppq0", + "value": "0.094" + }, + { + "name": "generator_Tpq0", + "value": "1.21" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "20" + }, + { + "name": "generator_UNom", + "value": "20" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "20" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.81" + }, + { + "name": "generator_XlPu", + "value": "0.256" + }, + { + "name": "generator_XpdPu", + "value": "0.509" + }, + { + "name": "generator_XppdPu", + "value": "0.354" + }, + { + "name": "generator_XppqPu", + "value": "0.377" + }, + { + "name": "generator_XpqPu", + "value": "0.601" + }, + { + "name": "generator_XqPu", + "value": "2.62" + }, + { + "name": "generator_md", + "value": "0.05" + }, + { + "name": "generator_mq", + "value": "0.05" + }, + { + "name": "generator_nd", + "value": "9.285" + }, + { + "name": "generator_nq", + "value": "9.285" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1008" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1008" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____1_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.112" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1539" + }, + { + "name": "generator_PNomTurb", + "value": "1539" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.003275" + }, + { + "name": "generator_SNom", + "value": "1710" + }, + { + "name": "generator_SnTfo", + "value": "1710" + }, + { + "name": "generator_Tpd0", + "value": "10.041" + }, + { + "name": "generator_Tppd0", + "value": "0.065" + }, + { + "name": "generator_Tppq0", + "value": "0.094" + }, + { + "name": "generator_Tpq0", + "value": "1.22" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "20" + }, + { + "name": "generator_UNom", + "value": "20" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "20" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.91" + }, + { + "name": "generator_XlPu", + "value": "0.265" + }, + { + "name": "generator_XpdPu", + "value": "0.527" + }, + { + "name": "generator_XppdPu", + "value": "0.367" + }, + { + "name": "generator_XppqPu", + "value": "0.391" + }, + { + "name": "generator_XpqPu", + "value": "0.623" + }, + { + "name": "generator_XqPu", + "value": "2.72" + }, + { + "name": "generator_md", + "value": "0.05" + }, + { + "name": "generator_mq", + "value": "0.05" + }, + { + "name": "generator_nd", + "value": "9.285" + }, + { + "name": "generator_nq", + "value": "9.285" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1539" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1539" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____12_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.112" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1539" + }, + { + "name": "generator_PNomTurb", + "value": "1539" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.003275" + }, + { + "name": "generator_SNom", + "value": "1710" + }, + { + "name": "generator_SnTfo", + "value": "1710" + }, + { + "name": "generator_Tpd0", + "value": "10.041" + }, + { + "name": "generator_Tppd0", + "value": "0.065" + }, + { + "name": "generator_Tppq0", + "value": "0.094" + }, + { + "name": "generator_Tpq0", + "value": "1.22" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "20" + }, + { + "name": "generator_UNom", + "value": "20" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "20" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.91" + }, + { + "name": "generator_XlPu", + "value": "0.265" + }, + { + "name": "generator_XpdPu", + "value": "0.527" + }, + { + "name": "generator_XppdPu", + "value": "0.367" + }, + { + "name": "generator_XppqPu", + "value": "0.391" + }, + { + "name": "generator_XpqPu", + "value": "0.623" + }, + { + "name": "generator_XqPu", + "value": "2.72" + }, + { + "name": "generator_md", + "value": "0.05" + }, + { + "name": "generator_mq", + "value": "0.05" + }, + { + "name": "generator_nd", + "value": "9.285" + }, + { + "name": "generator_nq", + "value": "9.285" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1539" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1539" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____3_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1090" + }, + { + "name": "generator_PNomTurb", + "value": "1090" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.002796" + }, + { + "name": "generator_SNom", + "value": "1211" + }, + { + "name": "generator_SnTfo", + "value": "1211" + }, + { + "name": "generator_Tpd0", + "value": "8.094" + }, + { + "name": "generator_Tppd0", + "value": "0.08" + }, + { + "name": "generator_Tppq0", + "value": "0.084" + }, + { + "name": "generator_Tpq0", + "value": "1.572" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.22" + }, + { + "name": "generator_XlPu", + "value": "0.202" + }, + { + "name": "generator_XpdPu", + "value": "0.384" + }, + { + "name": "generator_XppdPu", + "value": "0.264" + }, + { + "name": "generator_XppqPu", + "value": "0.26" + }, + { + "name": "generator_XpqPu", + "value": "0.262" + }, + { + "name": "generator_XqPu", + "value": "2.22" + }, + { + "name": "generator_md", + "value": "0.215" + }, + { + "name": "generator_mq", + "value": "0.215" + }, + { + "name": "generator_nd", + "value": "6.995" + }, + { + "name": "generator_nq", + "value": "6.995" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1090" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1090" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____8_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.4" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1090" + }, + { + "name": "generator_PNomTurb", + "value": "1090" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.002796" + }, + { + "name": "generator_SNom", + "value": "1211" + }, + { + "name": "generator_SnTfo", + "value": "1211" + }, + { + "name": "generator_Tpd0", + "value": "8.094" + }, + { + "name": "generator_Tppd0", + "value": "0.08" + }, + { + "name": "generator_Tppq0", + "value": "0.084" + }, + { + "name": "generator_Tpq0", + "value": "1.572" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "24" + }, + { + "name": "generator_UNom", + "value": "24" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "24" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.22" + }, + { + "name": "generator_XlPu", + "value": "0.202" + }, + { + "name": "generator_XpdPu", + "value": "0.384" + }, + { + "name": "generator_XppdPu", + "value": "0.264" + }, + { + "name": "generator_XppqPu", + "value": "0.26" + }, + { + "name": "generator_XpqPu", + "value": "0.262" + }, + { + "name": "generator_XqPu", + "value": "2.22" + }, + { + "name": "generator_md", + "value": "0.215" + }, + { + "name": "generator_mq", + "value": "0.215" + }, + { + "name": "generator_nd", + "value": "6.995" + }, + { + "name": "generator_nq", + "value": "6.995" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1090" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1090" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE57_GEN____2_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "5.625" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "1485" + }, + { + "name": "generator_PNomTurb", + "value": "1485" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.00316" + }, + { + "name": "generator_SNom", + "value": "1650" + }, + { + "name": "generator_SnTfo", + "value": "1650" + }, + { + "name": "generator_Tpd0", + "value": "10.041" + }, + { + "name": "generator_Tppd0", + "value": "0.065" + }, + { + "name": "generator_Tppq0", + "value": "0.094" + }, + { + "name": "generator_Tpq0", + "value": "1.21" + }, + { + "name": "generator_UBaseHV", + "value": "69" + }, + { + "name": "generator_UBaseLV", + "value": "20" + }, + { + "name": "generator_UNom", + "value": "20" + }, + { + "name": "generator_UNomHV", + "value": "69" + }, + { + "name": "generator_UNomLV", + "value": "20" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "2.81" + }, + { + "name": "generator_XlPu", + "value": "0.256" + }, + { + "name": "generator_XpdPu", + "value": "0.509" + }, + { + "name": "generator_XppdPu", + "value": "0.354" + }, + { + "name": "generator_XppqPu", + "value": "0.377" + }, + { + "name": "generator_XpqPu", + "value": "0.601" + }, + { + "name": "generator_XqPu", + "value": "2.62" + }, + { + "name": "generator_md", + "value": "0.05" + }, + { + "name": "generator_mq", + "value": "0.05" + }, + { + "name": "generator_nd", + "value": "9.285" + }, + { + "name": "generator_nq", + "value": "9.285" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "1485" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "1485" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.5" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/GeneratorSynchronousThreeWindings.json b/src/main/resources/models/GeneratorSynchronousThreeWindings.json new file mode 100644 index 00000000..8c5d88e1 --- /dev/null +++ b/src/main/resources/models/GeneratorSynchronousThreeWindings.json @@ -0,0 +1,316 @@ +{ + "modelName": "GeneratorSynchronousThreeWindings", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_DPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_ExcitationPu", + "type": "INT", + "origin": "USER" + }, + { + "name": "generator_H", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_MdPuEfd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PNomAlt", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_PNomTurb", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_RTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_RaPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SnTfo", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UBaseHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UBaseLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "generator_UseApproximation", + "type": "BOOL", + "origin": "USER" + }, + { + "name": "generator_XTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XlPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_md", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_mq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nq", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "GSTW", + "type": "FIXED", + "modelName": "GeneratorSynchronousThreeWindings", + "sets": [ + { + "name": "GSTW", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "4.975" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "74.4" + }, + { + "name": "generator_PNomTurb", + "value": "74.4" + }, + { + "name": "generator_RTfPu", + "value": "0" + }, + { + "name": "generator_RaPu", + "value": "0.004" + }, + { + "name": "generator_SNom", + "value": "80" + }, + { + "name": "generator_SnTfo", + "value": "80" + }, + { + "name": "generator_Tpd0", + "value": "3" + }, + { + "name": "generator_Tppd0", + "value": "0.04" + }, + { + "name": "generator_Tppq0", + "value": "0.04" + }, + { + "name": "generator_UBaseHV", + "value": "15" + }, + { + "name": "generator_UBaseLV", + "value": "15" + }, + { + "name": "generator_UNom", + "value": "15" + }, + { + "name": "generator_UNomHV", + "value": "15" + }, + { + "name": "generator_UNomLV", + "value": "15" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0" + }, + { + "name": "generator_XdPu", + "value": "0.75" + }, + { + "name": "generator_XlPu", + "value": "0.102" + }, + { + "name": "generator_XpdPu", + "value": "0.225" + }, + { + "name": "generator_XppdPu", + "value": "0.154" + }, + { + "name": "generator_XppqPu", + "value": "0.2" + }, + { + "name": "generator_XqPu", + "value": "0.45" + }, + { + "name": "generator_md", + "value": "0.16" + }, + { + "name": "generator_mq", + "value": "0.16" + }, + { + "name": "generator_nd", + "value": "5.7" + }, + { + "name": "generator_nq", + "value": "5.7" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/GeneratorSynchronousThreeWindingsProportionalRegulations.json b/src/main/resources/models/GeneratorSynchronousThreeWindingsProportionalRegulations.json new file mode 100644 index 00000000..030adb94 --- /dev/null +++ b/src/main/resources/models/GeneratorSynchronousThreeWindingsProportionalRegulations.json @@ -0,0 +1,760 @@ +{ + "modelName": "GeneratorSynchronousThreeWindingsProportionalRegulations", + "equipmentType": "GENERATOR", + "parameterDefinitions": [ + { + "name": "generator_DPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_ExcitationPu", + "type": "INT", + "origin": "USER" + }, + { + "name": "generator_H", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_MdPuEfd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "generator_PNomAlt", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_PNomTurb", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "generator_RTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_RaPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_SnTfo", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tpd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppd0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_Tppq0", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "generator_UBaseHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UBaseLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomHV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UNomLV", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "generator_UseApproximation", + "type": "BOOL", + "origin": "USER" + }, + { + "name": "generator_XTfPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XlPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XpdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppdPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XppqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_XqPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_md", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_mq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nd", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "generator_nq", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_KGover", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "governor_PNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_EfdMinPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_Gain", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_LagEfdMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_LagEfdMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "GSTWPR", + "type": "FIXED", + "modelName": "GeneratorSynchronousThreeWindingsProportionalRegulations", + "sets": [ + { + "name": "GSTWPR", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "4.975" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "74.4" + }, + { + "name": "generator_PNomTurb", + "value": "74.4" + }, + { + "name": "generator_RTfPu", + "value": "0" + }, + { + "name": "generator_RaPu", + "value": "0.004" + }, + { + "name": "generator_SNom", + "value": "80" + }, + { + "name": "generator_SnTfo", + "value": "80" + }, + { + "name": "generator_Tpd0", + "value": "3" + }, + { + "name": "generator_Tppd0", + "value": "0.04" + }, + { + "name": "generator_Tppq0", + "value": "0.04" + }, + { + "name": "generator_UBaseHV", + "value": "15" + }, + { + "name": "generator_UBaseLV", + "value": "15" + }, + { + "name": "generator_UNom", + "value": "15" + }, + { + "name": "generator_UNomHV", + "value": "15" + }, + { + "name": "generator_UNomLV", + "value": "15" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0" + }, + { + "name": "generator_XdPu", + "value": "0.75" + }, + { + "name": "generator_XlPu", + "value": "0.102" + }, + { + "name": "generator_XpdPu", + "value": "0.225" + }, + { + "name": "generator_XppdPu", + "value": "0.154" + }, + { + "name": "generator_XppqPu", + "value": "0.2" + }, + { + "name": "generator_XqPu", + "value": "0.45" + }, + { + "name": "generator_md", + "value": "0.16" + }, + { + "name": "generator_mq", + "value": "0.16" + }, + { + "name": "generator_nd", + "value": "5.7" + }, + { + "name": "generator_nq", + "value": "5.7" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "74.4" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "74.4" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + } + ] + }, + { + "name": "IEEE14", + "type": "PREFIX", + "modelName": "GeneratorSynchronousThreeWindingsProportionalRegulations", + "sets": [ + { + "name": "IEEE14_GEN____6_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "4.975" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "74.4" + }, + { + "name": "generator_PNomTurb", + "value": "74.4" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.004" + }, + { + "name": "generator_SNom", + "value": "80" + }, + { + "name": "generator_SnTfo", + "value": "80" + }, + { + "name": "generator_Tpd0", + "value": "3" + }, + { + "name": "generator_Tppd0", + "value": "0.04" + }, + { + "name": "generator_Tppq0", + "value": "0.04" + }, + { + "name": "generator_UBaseHV", + "value": "15" + }, + { + "name": "generator_UBaseLV", + "value": "15" + }, + { + "name": "generator_UNom", + "value": "15" + }, + { + "name": "generator_UNomHV", + "value": "15" + }, + { + "name": "generator_UNomLV", + "value": "15" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.0" + }, + { + "name": "generator_XdPu", + "value": "0.75" + }, + { + "name": "generator_XlPu", + "value": "0.102" + }, + { + "name": "generator_XpdPu", + "value": "0.225" + }, + { + "name": "generator_XppdPu", + "value": "0.154" + }, + { + "name": "generator_XppqPu", + "value": "0.2" + }, + { + "name": "generator_XqPu", + "value": "0.45" + }, + { + "name": "generator_md", + "value": "0.16" + }, + { + "name": "generator_mq", + "value": "0.16" + }, + { + "name": "generator_nd", + "value": "5.7" + }, + { + "name": "generator_nq", + "value": "5.7" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "74.4" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "74.4" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + }, + { + "name": "IEEE14_GEN____8_SM", + "parameters": [ + { + "name": "generator_DPu", + "value": "0" + }, + { + "name": "generator_ExcitationPu", + "value": "1" + }, + { + "name": "generator_H", + "value": "2.748" + }, + { + "name": "generator_MdPuEfd", + "value": "0" + }, + { + "name": "generator_PNomAlt", + "value": "228" + }, + { + "name": "generator_PNomTurb", + "value": "228" + }, + { + "name": "generator_RTfPu", + "value": "0.0" + }, + { + "name": "generator_RaPu", + "value": "0.004" + }, + { + "name": "generator_SNom", + "value": "250" + }, + { + "name": "generator_SnTfo", + "value": "250" + }, + { + "name": "generator_Tpd0", + "value": "8.4" + }, + { + "name": "generator_Tppd0", + "value": "0.096" + }, + { + "name": "generator_Tppq0", + "value": "0.56" + }, + { + "name": "generator_UBaseHV", + "value": "13.8" + }, + { + "name": "generator_UBaseLV", + "value": "18" + }, + { + "name": "generator_UNom", + "value": "18" + }, + { + "name": "generator_UNomHV", + "value": "13.8" + }, + { + "name": "generator_UNomLV", + "value": "18" + }, + { + "name": "generator_UseApproximation", + "value": "true" + }, + { + "name": "generator_XTfPu", + "value": "0.1" + }, + { + "name": "generator_XdPu", + "value": "1.53" + }, + { + "name": "generator_XlPu", + "value": "0.11" + }, + { + "name": "generator_XpdPu", + "value": "0.31" + }, + { + "name": "generator_XppdPu", + "value": "0.275" + }, + { + "name": "generator_XppqPu", + "value": "0.58" + }, + { + "name": "generator_XqPu", + "value": "0.99" + }, + { + "name": "generator_md", + "value": "0" + }, + { + "name": "generator_mq", + "value": "0" + }, + { + "name": "generator_nd", + "value": "0" + }, + { + "name": "generator_nq", + "value": "0" + }, + { + "name": "governor_KGover", + "value": "5" + }, + { + "name": "governor_PMax", + "value": "228" + }, + { + "name": "governor_PMin", + "value": "0" + }, + { + "name": "governor_PNom", + "value": "228" + }, + { + "name": "voltageRegulator_EfdMaxPu", + "value": "5" + }, + { + "name": "voltageRegulator_EfdMinPu", + "value": "-5" + }, + { + "name": "voltageRegulator_Gain", + "value": "20" + }, + { + "name": "voltageRegulator_LagEfdMax", + "value": "0" + }, + { + "name": "voltageRegulator_LagEfdMin", + "value": "0" + }, + { + "name": "voltageRegulator_UsRefMaxPu", + "value": "1.2" + }, + { + "name": "voltageRegulator_UsRefMinPu", + "value": "0.8" + } + ] + } + ] + } + ], + "variableDefinitions": [], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/LoadAlphaBeta.json b/src/main/resources/models/LoadAlphaBeta.json new file mode 100644 index 00000000..6c2c128c --- /dev/null +++ b/src/main/resources/models/LoadAlphaBeta.json @@ -0,0 +1,93 @@ +{ + "modelName": "LoadAlphaBeta", + "equipmentType": "LOAD", + "parameterDefinitions": [ + { + "name": "load_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "load_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "load_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "load_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "load_alpha", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "load_beta", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "LAB", + "type": "FIXED", + "modelName": "LoadAlphaBeta", + "sets": [ + { + "name": "LAB", + "parameters": [ + { + "name": "load_alpha", + "value": "1." + }, + { + "name": "load_beta", + "value": "2." + } + ] + } + ] + } + ], + "variableDefinitions": [ + { + "name": "load_running_value", + "type": "BOOL" + }, + { + "name": "load_PPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + }, + { + "name": "load_PRefPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + }, + { + "name": "load_QPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + }, + { + "name": "load_QRefPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + } + ], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/LoadPQ.json b/src/main/resources/models/LoadPQ.json new file mode 100644 index 00000000..26ce9796 --- /dev/null +++ b/src/main/resources/models/LoadPQ.json @@ -0,0 +1,62 @@ +{ + "modelName": "LoadPQ", + "equipmentType": "LOAD", + "parameterDefinitions": [ + { + "name": "load_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "load_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "load_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "load_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + } + ], + "setsGroups": [], + "variableDefinitions": [ + { + "name": "load_running_value", + "type": "BOOL" + }, + { + "name": "load_PPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + }, + { + "name": "load_PRefPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + }, + { + "name": "load_QPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + }, + { + "name": "load_QRefPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + } + ], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/OverloadManagementSystem.json b/src/main/resources/models/OverloadManagementSystem.json new file mode 100644 index 00000000..0357ef19 --- /dev/null +++ b/src/main/resources/models/OverloadManagementSystem.json @@ -0,0 +1,130 @@ +{ + "modelName": "OverloadManagementSystem", + "equipmentType": "OVERLOAD_MANAGEMENT", + "parameterDefinitions": [ + { + "name": "currentLimitAutomaton_IMax", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "currentLimitAutomaton_OrderToEmit", + "type": "INT", + "origin": "USER" + }, + { + "name": "currentLimitAutomaton_Running", + "type": "BOOL", + "origin": "USER" + }, + { + "name": "currentLimitAutomaton_tLagBeforeActing", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "CLA", + "type": "FIXED", + "modelName": "OverloadManagementSystem", + "sets": [ + { + "name": "CLA", + "parameters": [ + { + "name": "currentLimitAutomaton_IMax", + "value": "1000" + }, + { + "name": "currentLimitAutomaton_OrderToEmit", + "value": "3" + }, + { + "name": "currentLimitAutomaton_Running", + "value": "true" + }, + { + "name": "currentLimitAutomaton_tLagBeforeActing", + "value": "10" + } + ] + } + ] + }, + { + "name": "CLA_2_4", + "type": "FIXED", + "modelName": "OverloadManagementSystem", + "sets": [ + { + "name": "CLA_2_4", + "parameters": [ + { + "name": "currentLimitAutomaton_IMax", + "value": "1000" + }, + { + "name": "currentLimitAutomaton_OrderToEmit", + "value": "3" + }, + { + "name": "currentLimitAutomaton_Running", + "value": "true" + }, + { + "name": "currentLimitAutomaton_tLagBeforeActing", + "value": "10" + } + ] + } + ] + }, + { + "name": "CLA_2_5", + "type": "FIXED", + "modelName": "OverloadManagementSystem", + "sets": [ + { + "name": "CLA_2_5", + "parameters": [ + { + "name": "currentLimitAutomaton_IMax", + "value": "600" + }, + { + "name": "currentLimitAutomaton_OrderToEmit", + "value": "1" + }, + { + "name": "currentLimitAutomaton_Running", + "value": "true" + }, + { + "name": "currentLimitAutomaton_tLagBeforeActing", + "value": "5" + } + ] + } + ] + } + ], + "variableDefinitions": [ + { + "name": "currentLimitAutomaton_IMonitored_value", + "type": "DOUBLE", + "unit": "kA" + }, + { + "name": "currentLimitAutomaton_tThresholdReached", + "type": "DOUBLE", + "unit": "s" + }, + { + "name": "currentLimitAutomaton_tOrder", + "type": "DOUBLE", + "unit": "s" + } + ], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/StaticVarCompensator.json b/src/main/resources/models/StaticVarCompensator.json new file mode 100644 index 00000000..4e240430 --- /dev/null +++ b/src/main/resources/models/StaticVarCompensator.json @@ -0,0 +1,253 @@ +{ + "modelName": "StaticVarCompensator", + "equipmentType": "STATIC_VAR_COMPENSATOR", + "parameterDefinitions": [ + { + "name": "SVarC_BMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_BMinPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_BShuntPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_IMaxPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_IMinPu", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_KCurrentLimiter", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_Kp", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_Lambda", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_Mode0", + "type": "INT", + "origin": "NETWORK", + "originName": "regulatingMode" + }, + { + "name": "SVarC_P0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "p_pu" + }, + { + "name": "SVarC_Q0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "q_pu" + }, + { + "name": "SVarC_SNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_Ti", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_U0Pu", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "v_pu" + }, + { + "name": "SVarC_UBlock", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UNom", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UPhase0", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + }, + { + "name": "SVarC_URefDown", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_URefUp", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UThresholdDown", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UThresholdUp", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UUnblockDown", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_UUnblockUp", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_tThresholdDown", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "SVarC_tThresholdUp", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "SVarC", + "type": "FIXED", + "modelName": "StaticVarCompensator", + "sets": [ + { + "name": "SVarC", + "parameters": [ + { + "name": "SVarC_BMaxPu", + "value": "1.0678" + }, + { + "name": "SVarC_BMinPu", + "value": "-1.0466" + }, + { + "name": "SVarC_BShuntPu", + "value": "0" + }, + { + "name": "SVarC_IMaxPu", + "value": "1" + }, + { + "name": "SVarC_IMinPu", + "value": "-1" + }, + { + "name": "SVarC_KCurrentLimiter", + "value": "8" + }, + { + "name": "SVarC_Kp", + "value": "1.75" + }, + { + "name": "SVarC_Lambda", + "value": "0.01" + }, + { + "name": "SVarC_SNom", + "value": "250" + }, + { + "name": "SVarC_Ti", + "value": "0.003428" + }, + { + "name": "SVarC_UBlock", + "value": "5" + }, + { + "name": "SVarC_UNom", + "value": "225" + }, + { + "name": "SVarC_URefDown", + "value": "220" + }, + { + "name": "SVarC_URefUp", + "value": "230" + }, + { + "name": "SVarC_UThresholdDown", + "value": "218" + }, + { + "name": "SVarC_UThresholdUp", + "value": "240" + }, + { + "name": "SVarC_UUnblockDown", + "value": "180" + }, + { + "name": "SVarC_UUnblockUp", + "value": "270" + }, + { + "name": "SVarC_tThresholdDown", + "value": "0" + }, + { + "name": "SVarC_tThresholdUp", + "value": "60" + } + ] + } + ] + } + ], + "variableDefinitions": [ + { + "name": "SVarC_injector_UPu", + "type": "DOUBLE" + }, + { + "name": "SVarC_injector_PInjPu", + "type": "DOUBLE" + }, + { + "name": "SVarC_injector_QInjPu", + "type": "DOUBLE" + }, + { + "name": "SVarC_injector_BPu", + "type": "DOUBLE" + }, + { + "name": "SVarC_modeHandling_mode_value", + "type": "INT" + } + ], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/TapChangerBlockingAutomaton.json b/src/main/resources/models/TapChangerBlockingAutomaton.json new file mode 100644 index 00000000..d737f2ec --- /dev/null +++ b/src/main/resources/models/TapChangerBlockingAutomaton.json @@ -0,0 +1,103 @@ +{ + "modelName": "TapChangerBlockingAutomaton", + "equipmentType": "VOLTAGE", + "parameterDefinitions": [ + { + "name": "tapChangerBlocking_UMin", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "tapChangerBlocking_tLagBeforeBlocked", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedD", + "type": "DOUBLE", + "origin": "USER" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedT", + "type": "DOUBLE", + "origin": "USER" + } + ], + "setsGroups": [ + { + "name": "IEEE14_TCB_1", + "type": "FIXED", + "modelName": "TapChangerBlockingAutomaton", + "sets": [ + { + "name": "IEEE14_TCB_1", + "parameters": [ + { + "name": "tapChangerBlocking_UMin", + "value": "5" + }, + { + "name": "tapChangerBlocking_tLagBeforeBlocked", + "value": "0" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedD", + "value": "0" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedT", + "value": "0" + } + ] + } + ] + }, + { + "name": "IEEE14_TCB_2", + "type": "FIXED", + "modelName": "TapChangerBlockingAutomaton", + "sets": [ + { + "name": "IEEE14_TCB_2", + "parameters": [ + { + "name": "tapChangerBlocking_UMin", + "value": "50" + }, + { + "name": "tapChangerBlocking_tLagBeforeBlocked", + "value": "0" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedD", + "value": "0" + }, + { + "name": "tapChangerBlocking_tLagTransBlockedT", + "value": "0" + } + ] + } + ] + } ], + "variableDefinitions": [ + { + "name": "tapChangerBlocking_UMonitored_value", + "type": "DOUBLE", + "unit": "kV" + }, + { + "name": "tapChangerBlocking_state", + "type": "INT" + }, + { + "name": "tapChangerBlocking_blockedD", + "type": "BOOL" + }, + { + "name": "tapChangerBlocking_blockedT", + "type": "BOOL" + } + ], + "variablesSets": [] +} \ No newline at end of file diff --git a/src/main/resources/models/bearer.sh b/src/main/resources/models/bearer.sh new file mode 100644 index 00000000..cb535e57 --- /dev/null +++ b/src/main/resources/models/bearer.sh @@ -0,0 +1,2 @@ +#!/bin/bash +bearer= \ No newline at end of file diff --git a/src/main/resources/models/post_public.sh b/src/main/resources/models/post_public.sh new file mode 100755 index 00000000..9facabdc --- /dev/null +++ b/src/main/resources/models/post_public.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +source bearer.sh + +url="http://localhost:5036/models" + +for json in `ls -l *.json | awk '{print $(NF)}'`; do + curl -X 'POST' \ + "${url}/" \ + -H "authorization: Bearer ${bearer}" \ + -H 'Content-Type: application/json' \ + -d @${json} +done + +for json in `ls -l variables/*.json | awk '{print $(NF)}'`; do + curl -X 'POST' \ + "${url}/variables-sets" \ + -H "authorization: Bearer ${bearer}" \ + -H 'Content-Type: application/json' \ + -d @${json} +done diff --git a/src/main/resources/models/post_variables_public.sh b/src/main/resources/models/post_variables_public.sh new file mode 100755 index 00000000..bcb20ec8 --- /dev/null +++ b/src/main/resources/models/post_variables_public.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +source bearer.sh + +url="http://localhost:5036/models" + +curl -X 'PATCH' "${url}/GeneratorSynchronousThreeWindings/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["SynchronousGenerator"]' +curl -X 'PATCH' "${url}/GeneratorSynchronousFourWindings/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["SynchronousGenerator"]' +curl -X 'PATCH' "${url}/GeneratorSynchronousThreeWindingsProportionalRegulations/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["SynchronousGenerator", "VoltageRegulatorProportional"]' +curl -X 'PATCH' "${url}/GeneratorSynchronousFourWindingsProportionalRegulations/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["SynchronousGenerator", "VoltageRegulatorProportional"]' +curl -X 'PATCH' "${url}/GeneratorPQ/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["GeneratorPQ"]' +curl -X 'PATCH' "${url}/GeneratorPV/variables-sets/add" -H "authorization: Bearer ${bearer}" -H 'Content-Type: application/json' -d '["GeneratorPV"]' \ No newline at end of file diff --git a/src/main/resources/models/variables/GeneratorPQ.json b/src/main/resources/models/variables/GeneratorPQ.json new file mode 100644 index 00000000..b5794289 --- /dev/null +++ b/src/main/resources/models/variables/GeneratorPQ.json @@ -0,0 +1,21 @@ +{ + "name": "GeneratorPQ", + "variableDefinitions": [ + { + "name": "generator_running_value", + "type": "BOOL" + }, + { + "name": "generator_QGenPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + }, + { + "name": "generator_PGenPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/models/variables/GeneratorPV.json b/src/main/resources/models/variables/GeneratorPV.json new file mode 100644 index 00000000..9ded3b74 --- /dev/null +++ b/src/main/resources/models/variables/GeneratorPV.json @@ -0,0 +1,21 @@ +{ + "name": "GeneratorPV", + "variableDefinitions": [ + { + "name": "generator_running_value", + "type": "BOOL" + }, + { + "name": "generator_QGenPu", + "type": "DOUBLE", + "unit": "Mvar", + "factor": "100" + }, + { + "name": "generator_PGenPu", + "type": "DOUBLE", + "unit": "MW", + "factor": "100" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/models/variables/SynchronousGenerator.json b/src/main/resources/models/variables/SynchronousGenerator.json new file mode 100644 index 00000000..99caea2e --- /dev/null +++ b/src/main/resources/models/variables/SynchronousGenerator.json @@ -0,0 +1,60 @@ +{ + "name": "SynchronousGenerator", + "variableDefinitions": [ + { + "name": "generator_omegaPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_PGen", + "type": "DOUBLE", + "unit": "MW" + }, + { + "name": "generator_QGen", + "type": "DOUBLE", + "unit": "Mvar" + }, + { + "name": "generator_UStatorPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_QStatorPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_IRotorPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_thetaInternal_value", + "type": "DOUBLE", + "unit": "rad" + }, + { + "name": "generator_PmPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_efdPu_value", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_PePu", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "generator_theta", + "type": "DOUBLE", + "unit": "rad" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/models/variables/VoltageRegulatorProportional.json b/src/main/resources/models/variables/VoltageRegulatorProportional.json new file mode 100644 index 00000000..a60c7aa7 --- /dev/null +++ b/src/main/resources/models/variables/VoltageRegulatorProportional.json @@ -0,0 +1,117 @@ +{ + "name": "VoltageRegulatorProportional", + "variableDefinitions": [ + { + "name": "voltageRegulator_EfdPu", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "voltageRegulator_UsPu", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "voltageRegulator_UsRefPu", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "voltageRegulator_UsRefTotal_u1", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_UsRefTotal_u2", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_UsRefTotal_y", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_deltaUsRefPu", + "type": "DOUBLE", + "unit": "pu" + }, + { + "name": "voltageRegulator_feedback_u1", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_feedback_u2", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_feedback_y", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_gain_u", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_gain_y", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limUsRef_simplifiedExpr", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limUsRef_u", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limUsRef_y", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limitationDown_value", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limitationEfdMax", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limitationEfdMin", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limitationUp_value", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limitationUsRefMax", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limitationUsRefMin", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limiterWithLag_initSaturatedMax", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limiterWithLag_initSaturatedMin", + "type": "BOOL" + }, + { + "name": "voltageRegulator_limiterWithLag_tUMaxReached", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limiterWithLag_tUMinReached", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limiterWithLag_u", + "type": "DOUBLE" + }, + { + "name": "voltageRegulator_limiterWithLag_y", + "type": "DOUBLE" + } + ] +} \ No newline at end of file diff --git a/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java b/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java index 7b197fde..c7dd521e 100644 --- a/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java +++ b/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java @@ -20,6 +20,7 @@ import org.gridsuite.mapping.server.utils.ParameterOrigin; import org.gridsuite.mapping.server.utils.ParameterType; import org.gridsuite.mapping.server.utils.SetGroupType; +import org.gridsuite.mapping.server.utils.assertions.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,11 +39,8 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; -import java.util.stream.Collectors; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.http.MediaType.APPLICATION_JSON; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; @@ -58,7 +56,7 @@ @TestPropertySource(properties = {"ex-resources.automaton = src/test/resources/data/ex-automaton"}) public class ModelControllerTest { - public static Logger LOGGER = LoggerFactory.getLogger(ModelControllerTest.class); + public static final Logger LOGGER = LoggerFactory.getLogger(ModelControllerTest.class); @Autowired private ModelRepository modelRepository; @@ -86,7 +84,7 @@ public void cleanDB() { } private ModelParameterDefinitionEntity createDefinitionEntity(String name, ParameterType type) { - return new ModelParameterDefinitionEntity(new ModelParameterDefinition(name, type, null, null, null)); + return new ModelParameterDefinitionEntity(new ModelParameterDefinition(UUID.randomUUID(), name, type, null, null, null)); } @Before @@ -94,7 +92,7 @@ public void setUp() { cleanDB(); // prepare token model - ModelEntity modelToSave = new ModelEntity("LoadAlphaBeta", EquipmentType.LOAD, false, + ModelEntity modelToSave = new ModelEntity(UUID.randomUUID(), "LoadAlphaBeta", EquipmentType.LOAD, false, new ArrayList<>(), new ArrayList<>(), Set.of(), Set.of(), null, null); List definitions = new ArrayList<>(); @@ -124,12 +122,12 @@ public void testGetAutomatonDefinitions() throws Exception { String automatonsJsonResult = mvcResult.getResponse().getContentAsString(); - LOGGER.info("Automatons result in Json array = \n" + automatonsJsonResult); + LOGGER.info("Automatons result in Json array = \n {}", automatonsJsonResult); // Check result JsonNode jsonNode = objectMapper.readTree(automatonsJsonResult); - assertEquals(true, jsonNode.isArray()); - assertEquals(3, jsonNode.size()); + Assertions.assertThat(jsonNode.isArray()).isTrue(); + Assertions.assertThat(jsonNode.size()).isEqualTo(3); } @Test @@ -172,17 +170,25 @@ public void test() throws Exception { .contentType(APPLICATION_JSON)) .andExpect(status().isOk()); - mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") + MvcResult mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json("[" + set + "]", true)); + .andReturn(); + + String setJson = mvcResult.getResponse().getContentAsString(); + List resultSetList = objectMapper.readValue(setJson, new TypeReference<>() { }); + ParametersSet expectedSet = objectMapper.readValue(set, ParametersSet.class); + + Assertions.assertThat(resultSetList.getFirst()).recursivelyEquals(expectedSet); mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "PREFIX") .contentType(APPLICATION_JSON)) .andExpect(status().isNotFound()); - Date setCreationDate = modelRepository.findById(modelName).get().getSetsGroups().get(0).getSets().get(0).getLastModifiedDate(); + Date setCreationDate = modelRepository.findByModelName(modelName).get() + .getSetsGroups().getFirst() + .getSets().getFirst().getLastModifiedDate(); // Update data mvc.perform(post("/models/" + modelName + "/parameters/sets/strict") @@ -190,20 +196,18 @@ public void test() throws Exception { .contentType(APPLICATION_JSON)) .andExpect(status().isOk()); - Date setUpdateDate = modelRepository.findById(modelName).get().getSetsGroups().get(0).getSets().get(0).getLastModifiedDate(); + Date setUpdateDate = modelRepository.findByModelName(modelName).get() + .getSetsGroups().getFirst() + .getSets().getFirst().getLastModifiedDate(); - assertThat(setCreationDate.compareTo(setUpdateDate) < 0); + Assertions.assertThat(setCreationDate.compareTo(setUpdateDate) < 0).isTrue(); } @Test public void definitionTest() throws Exception { String modelName = "LoadAlphaBeta"; - mvc.perform(get("/models/" + modelName + "/parameters/definitions") - .contentType(APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json(""" + String expectedParamaterDefinitionsJson = """ [ {"name": "load_alpha", "type": "DOUBLE", "origin": "USER", "originName": null, "fixedValue": null}, {"name": "load_beta", "type": "DOUBLE", "origin": "USER", "originName": null, "fixedValue": null}, @@ -212,10 +216,24 @@ public void definitionTest() throws Exception { {"name": "load_U0Pu", "type": "DOUBLE", "origin": "NETWORK", "originName": "v_pu", "fixedValue": null}, {"name": "load_UPhase0", "type": "DOUBLE", "origin": "NETWORK", "originName": "angle_pu", "fixedValue": null} ] - """, false)); + """; + MvcResult mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/definitions") + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) + .andReturn(); + + String resultParameterDefinitionsJson = objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(objectMapper.readTree(mvcResult.getResponse().getContentAsString())); + LOGGER.info("Result parameter definitions in json array \n {}", resultParameterDefinitionsJson); + LOGGER.info("Expected parameter definitions in json array \n {}", expectedParamaterDefinitionsJson); + + List actual = objectMapper.readValue(resultParameterDefinitionsJson, new TypeReference<>() { }); + List expected = objectMapper.readValue(expectedParamaterDefinitionsJson, new TypeReference<>() { }); + Assertions.assertThatDtoList(actual).recursivelyContainAll(expected); // --- GET all names of parameter definitions in the database --- // - MvcResult mvcResult = mvc.perform(get("/models/parameter-definitions/names") + mvcResult = mvc.perform(get("/models/parameter-definitions/names") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn(); @@ -223,21 +241,21 @@ public void definitionTest() throws Exception { // check result // must contain 6 names of parameter definitions in the database List foundParameterDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), - new TypeReference>() { }); - assertEquals(6, foundParameterDefinitionNames.size()); + new TypeReference<>() { }); + assertThat(foundParameterDefinitionNames).hasSize(6); // --- GET all parameter definitions in the database --- // mvcResult = mvc.perform(get("/models/parameter-definitions") .contentType(APPLICATION_JSON) - .param("parameterDefinitionNames", foundParameterDefinitionNames.stream().collect(Collectors.joining(",")))) + .param("parameterDefinitionNames", String.join(",", foundParameterDefinitionNames))) .andExpect(status().isOk()) .andReturn(); // check result // must contain 6 parameter definitions in the database List foundParameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), - new TypeReference>() { }); - assertEquals(6, foundParameterDefinitions.size()); + new TypeReference<>() { }); + assertThat(foundParameterDefinitions).hasSize(6); } @Test @@ -282,17 +300,14 @@ public void invalidTest() throws Exception { public void getTest() throws Exception { // Prepare models - ModelEntity loadModel = modelRepository.findById("LoadAlphaBeta").get(); + ModelEntity loadModel = modelRepository.findByModelName("LoadAlphaBeta").get(); List loadGroups = loadModel.getSetsGroups(); - ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", loadModel.getModelName(), null, SetGroupType.FIXED, loadModel); + ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity(UUID.randomUUID(), "LAB", null, SetGroupType.FIXED, loadModel); ArrayList groupSets = new ArrayList<>(); - ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", loadGroup.getName(), loadModel.getModelName(), loadGroup.getType(), - null, - new Date(), - loadGroup); + ModelParameterSetEntity setToSave = new ModelParameterSetEntity(UUID.randomUUID(), "LAB", null, new Date(), loadGroup); ArrayList setParameters = new ArrayList<>(); - setParameters.add(new ModelParameterEntity("load_alpha", loadGroup.getModelName(), loadGroup.getName(), loadGroup.getType(), setToSave.getName(), "1.5", setToSave)); - setParameters.add(new ModelParameterEntity("load_beta", loadGroup.getModelName(), loadGroup.getName(), loadGroup.getType(), setToSave.getName(), "2.5", setToSave)); + setParameters.add(new ModelParameterEntity(UUID.randomUUID(), "load_alpha", "1.5", setToSave)); + setParameters.add(new ModelParameterEntity(UUID.randomUUID(), "load_beta", "2.5", setToSave)); setToSave.setParameters(setParameters); groupSets.add(setToSave); loadGroup.setSets(groupSets); @@ -300,17 +315,13 @@ public void getTest() throws Exception { loadModel.setSetsGroups(loadGroups); modelRepository.save(loadModel); - ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, false, List.of(), null, Set.of(), Set.of(), null, null); + ModelEntity generatorThreeModel = new ModelEntity(UUID.randomUUID(), "GeneratorThreeWindings", EquipmentType.GENERATOR, false, List.of(), null, Set.of(), Set.of(), null, null); ArrayList generatorThreeGroups = new ArrayList<>(); - generatorThreeGroups.add(new ModelSetsGroupEntity("GSTWPR", generatorThreeModel.getModelName(), new ArrayList<>(), SetGroupType.PREFIX, generatorThreeModel)); + generatorThreeGroups.add(new ModelSetsGroupEntity(UUID.randomUUID(), "GSTWPR", new ArrayList<>(), SetGroupType.PREFIX, generatorThreeModel)); generatorThreeModel.setSetsGroups(generatorThreeGroups); modelRepository.save(generatorThreeModel); - mvc.perform(get("/models/") - .contentType(APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json(""" + String expectedModelsJson = """ [ { "name": "LoadAlphaBeta", @@ -327,10 +338,33 @@ public void getTest() throws Exception { ] } ] - """, true)); + """; + MvcResult mvcResult = mvc.perform(get("/models/") + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) + .andReturn(); + + String resultModelsJson = objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(objectMapper.readTree(mvcResult.getResponse().getContentAsString())); + LOGGER.info("Result models in json array = \n {}", resultModelsJson); + LOGGER.info("Expected models in json array = \n {}", expectedModelsJson); + List resultModels = objectMapper.readValue(resultModelsJson, new TypeReference<>() { }); + List expectedModels = objectMapper.readValue(expectedModelsJson, new TypeReference<>() { }); + Assertions.assertThatDtoList(resultModels).recursivelyContainAll(expectedModels); + + // --- GET all names of models in the database --- // + mvcResult = mvc.perform(get("/models/names") + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) + .andReturn(); + + List resultModelNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + Assertions.assertThat(resultModelNames).containsExactlyInAnyOrder("LoadAlphaBeta", "GeneratorThreeWindings"); // --- GET parameter set groups in the database --- // - MvcResult mvcResult = mvc.perform(get("/models/parameters-sets-groups") + mvcResult = mvc.perform(get("/models/parameters-sets-groups") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) @@ -338,8 +372,8 @@ public void getTest() throws Exception { // check result // must contain 2 parameter set groups, i.e. "LAB" and "GSTWPR" - List foundParametersSetsGroups = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, foundParametersSetsGroups.size()); + List foundParametersSetsGroups = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundParametersSetsGroups).hasSize(2); // --- GET parameter sets in the database --- // mvcResult = mvc.perform(get("/models/parameters-sets") @@ -350,8 +384,8 @@ public void getTest() throws Exception { // check result // must contain only 1 parameter set, i.e. "LAB" - List foundParametersSets = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(1, foundParametersSets.size()); + List foundParametersSets = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundParametersSets).hasSize(1); // --- GET parameters in the database --- // mvcResult = mvc.perform(get("/models/parameters") @@ -362,8 +396,8 @@ public void getTest() throws Exception { // check result // must contain 2 parameter, i.e. "load_alpha", "load_beta" - List foundParameters = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, foundParameters.size()); + List foundParameters = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundParameters).hasSize(2); } public static String readFileAsString(String file) throws Exception { @@ -385,13 +419,13 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { // Get initial parameter definitions List parameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); - assertEquals(6, parameterDefinitions.size()); + assertThat(parameterDefinitions).hasSize(6); // --- Get initial parameter definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/definitions")) .andExpect(status().isOk()).andReturn(); - List parameterDefinitions1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(6, parameterDefinitions1.size()); + List parameterDefinitions1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(parameterDefinitions1).hasSize(6); // --- Try to get parameter definitions from unknown model --- // mvc.perform(get("/models/" + modelName + "_unknown" + "/parameters/definitions")) @@ -405,13 +439,13 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { // Get current parameter definitions List parameterDefinitions2 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); - LOGGER.info("Initial parameter definitions = " + parameterDefinitions); - LOGGER.info("Updated parameter definitions = " + parameterDefinitions2); + LOGGER.info("Initial parameter definitions = {}", parameterDefinitions); + LOGGER.info("Updated parameter definitions = {}", parameterDefinitions2); // check result // final model's parameter definitions must contain all ones of initial model - assertEquals(1, parameterDefinitions2.size() - parameterDefinitions.size()); - assertTrue(parameterDefinitions2.containsAll(parameterDefinitions)); + assertThat(parameterDefinitions2.size() - parameterDefinitions.size()).isOne(); + Assertions.assertThatDtoList(parameterDefinitions2).recursivelyContainAll(parameterDefinitions); // --- Remove an existing variable definition --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/remove") @@ -421,13 +455,13 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { // Get current parameter definitions List parameterDefinitions3 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); - LOGGER.info("Updated parameter definitions = " + parameterDefinitions2); - LOGGER.info("Removed parameter definitions = " + parameterDefinitions3); + LOGGER.info("Updated parameter definitions = {}", parameterDefinitions2); + LOGGER.info("Removed parameter definitions = {}", parameterDefinitions3); // check result // final model's parameter definitions must contain all ones of model - assertEquals(1, parameterDefinitions2.size() - parameterDefinitions3.size()); - assertTrue(parameterDefinitions2.containsAll(parameterDefinitions3)); + assertThat(parameterDefinitions2.size() - parameterDefinitions3.size()).isOne(); + Assertions.assertThatDtoList(parameterDefinitions2).recursivelyContainAll(parameterDefinitions3); // --- Remove all parameter definitions --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/remove-all") @@ -435,24 +469,24 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { .andExpect(status().isOk()).andReturn(); List parameterDefinitions4 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); - LOGGER.info("Unset parameter definitions = " + parameterDefinitions4); + LOGGER.info("Unset parameter definitions = {}", parameterDefinitions4); // check result // must have no parameter definition - assertEquals(0, parameterDefinitions4.size()); + assertThat(parameterDefinitions4).isEmpty(); // --- Save new parameter definition --- // - List parameterDefinitionList = objectMapper.readValue(newParameterDefinitionsJson, new TypeReference>() { }); - parameterDefinitionList.get(0).setName("load_UPhase0_3"); + List parameterDefinitionList = objectMapper.readValue(newParameterDefinitionsJson, new TypeReference<>() { }); + parameterDefinitionList.getFirst().setName("load_UPhase0_3"); mvcResult = mvc.perform(post("/models/parameters/definitions") .content(objectMapper.writeValueAsString(parameterDefinitionList)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List savedParameterDefinitionList = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); + List savedParameterDefinitionList = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // check result // must have the same number of input variable definitions - assertEquals(parameterDefinitionList.size(), savedParameterDefinitionList.size()); + assertThat(savedParameterDefinitionList).hasSameSizeAs(parameterDefinitionList); // --- Add existing parameter definition to model --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/add?origin=USER") @@ -462,9 +496,9 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { // Get current parameter definitions in the model List parameterDefinitions6 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); - LOGGER.info("Updated parameter definitions = " + parameterDefinitions6); + LOGGER.info("Updated parameter definitions = {}", parameterDefinitions6); // must have the same number of above input parameter definitions - assertEquals(savedParameterDefinitionList.size(), parameterDefinitions6.size()); + assertThat(parameterDefinitions6).hasSameSizeAs(savedParameterDefinitionList); // --- Add unknown existing parameter definition to model => must fail fast --- // mvc.perform(patch("/models/" + modelName + "/parameters/definitions/add") @@ -477,12 +511,12 @@ public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { .content(objectMapper.writeValueAsString(List.of(parameterDefinitions.get(4).getName()))) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List deletedParameterDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - LOGGER.info("Deleted parameter definitions = " + deletedParameterDefinitionNames); + List deletedParameterDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + LOGGER.info("Deleted parameter definitions = {}", deletedParameterDefinitionNames); // Check result - assertEquals(1, deletedParameterDefinitionNames.size()); - assertEquals(parameterDefinitions.get(4).getName(), deletedParameterDefinitionNames.get(0)); + assertThat(deletedParameterDefinitionNames).hasSize(1); + assertThat(deletedParameterDefinitionNames.getFirst()).isEqualTo(parameterDefinitions.get(4).getName()); } @Test @@ -502,13 +536,13 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { // Get initial variable definitions List variableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); - assertEquals(5, variableDefinitions.size()); + assertThat(variableDefinitions).hasSize(5); // --- Get initial variable definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + modelName + "/variables")) .andExpect(status().isOk()).andReturn(); - List variableDefinitions1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(5, variableDefinitions1.size()); + List variableDefinitions1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(variableDefinitions1).hasSize(5); // --- Try to get variable definitions from unknown model --- // mvc.perform(get("/models/" + modelName + "_unknown" + "/variables")) @@ -522,13 +556,14 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { // Get current variable definitions List variableDefinitions2 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); - LOGGER.info("Initial variable definitions = " + variableDefinitions); - LOGGER.info("Updated variable definitions = " + variableDefinitions2); + LOGGER.info("Initial variable definitions = {}", variableDefinitions); + LOGGER.info("Updated variable definitions = {}", variableDefinitions2); // check result - // final model's variable definition must contains all ones of initial model - assertEquals(1, variableDefinitions2.size() - variableDefinitions.size()); - assertTrue(variableDefinitions2.containsAll(variableDefinitions)); + // final model's variable definition must contain all ones of the initial model + assertThat(variableDefinitions2.size() - variableDefinitions.size()).isOne(); + Assertions.assertThatDtoList(variableDefinitions2) + .recursivelyContainAll(variableDefinitions); // --- Remove an existing variable definition --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/remove") @@ -538,13 +573,13 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { // Get current variable definitions List variableDefinitions3 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); - LOGGER.info("Updated variable definitions = " + variableDefinitions2); - LOGGER.info("Removed variable definitions = " + variableDefinitions3); + LOGGER.info("Updated variable definitions = {}", variableDefinitions2); + LOGGER.info("Removed variable definitions = {}", variableDefinitions3); // check result // final model's variable definition must contain all ones of model - assertEquals(1, variableDefinitions2.size() - variableDefinitions3.size()); - assertTrue(variableDefinitions2.containsAll(variableDefinitions3)); + assertThat(variableDefinitions2.size() - variableDefinitions3.size()).isOne(); + Assertions.assertThatDtoList(variableDefinitions2).recursivelyContainAll(variableDefinitions3); // --- Remove all variable definitions --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/remove-all") @@ -552,24 +587,24 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { .andExpect(status().isOk()).andReturn(); List variableDefinitions4 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); - LOGGER.info("Unset variable definitions = " + variableDefinitions4); + LOGGER.info("Unset variable definitions = {}", variableDefinitions4); // check result // must have no variable definition - assertEquals(0, variableDefinitions4.size()); + assertThat(variableDefinitions4).isEmpty(); // --- Save new variable definition --- // - List variableDefinitionList = objectMapper.readValue(newVariableDefinitionsJson, new TypeReference>() { }); - variableDefinitionList.get(0).setName("load_running_value_3"); + List variableDefinitionList = objectMapper.readValue(newVariableDefinitionsJson, new TypeReference<>() { }); + variableDefinitionList.getFirst().setName("load_running_value_3"); mvcResult = mvc.perform(post("/models/variables") .content(objectMapper.writeValueAsString(variableDefinitionList)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List savedVariableDefinitionList = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); + List savedVariableDefinitionList = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // check result // must have the same number of input variable definitions - assertEquals(variableDefinitionList.size(), savedVariableDefinitionList.size()); + assertThat(savedVariableDefinitionList).hasSameSizeAs(variableDefinitionList); // --- Add existing variable definition to model --- // mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/add") @@ -579,9 +614,9 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { // Get current variable definitions in the model List variableDefinitions6 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); - LOGGER.info("Updated variable definitions = " + variableDefinitions6); - // must have the same number of above input variable definitions - assertEquals(variableDefinitionList.size(), variableDefinitions6.size()); + LOGGER.info("Updated variable definitions = {}", variableDefinitions6); + // must have the same number of the above input variable definitions + assertThat(variableDefinitions6).hasSameSizeAs(variableDefinitionList); // --- add unknown existing variable definition to model => must fail fast --- // mvc.perform(patch("/models/" + modelName + "/variables/add") @@ -594,12 +629,12 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { .content(objectMapper.writeValueAsString(List.of(variableDefinitions.get(4).getName()))) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List deletedVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - LOGGER.info("Deleted variable definitions = " + deletedVariableDefinitionNames); + List deletedVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + LOGGER.info("Deleted variable definitions = {}", deletedVariableDefinitionNames); // Check result - assertEquals(1, deletedVariableDefinitionNames.size()); - assertEquals(variableDefinitions.get(4).getName(), deletedVariableDefinitionNames.get(0)); + assertThat(deletedVariableDefinitionNames).hasSize(1); + assertThat(deletedVariableDefinitionNames.getFirst()).isEqualTo(variableDefinitions.get(4).getName()); } @@ -621,7 +656,7 @@ public void testSaveNewVariablesSetThenModifyVariableDefinitions() throws Except List variableDefinitions = variablesSet.getVariableDefinitions(); // Check result - assertEquals(2, variableDefinitions.size()); + assertThat(variableDefinitions).hasSize(2); // --- Put second time which add only a variable definition --- // mvcResult = mvc.perform(post("/models/variables-sets/" + variablesSet.getName() + "/variables") @@ -632,28 +667,28 @@ public void testSaveNewVariablesSetThenModifyVariableDefinitions() throws Except // Get variable definitions after adding VariablesSet variablesSet2 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); List variableDefinitions2 = variablesSet2.getVariableDefinitions(); - LOGGER.info("Initial variable definitions = " + variableDefinitions); - LOGGER.info("Updated variable definitions = " + variableDefinitions2); + LOGGER.info("Initial variable definitions = {}", variableDefinitions); + LOGGER.info("Updated variable definitions = {}", variableDefinitions2); // Check result - assertEquals(4, variableDefinitions2.size()); + assertThat(variableDefinitions2).hasSize(4); // must contains all initial variable definitions - assertTrue(variableDefinitions2.containsAll(variableDefinitions)); + Assertions.assertThatDtoList(variableDefinitions2).recursivelyContainAll(variableDefinitions); // check in the database, must be 4 variable definitions, 2 in the initial set and 2 added later mvcResult = mvc.perform(get("/models/variable-definitions/names") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List foundVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(4, foundVariableDefinitionNames.size()); + List foundVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundVariableDefinitionNames).hasSize(4); mvcResult = mvc.perform(get("/models/variable-definitions") - .param("variableDefinitionNames", foundVariableDefinitionNames.stream().collect(Collectors.joining(","))) + .param("variableDefinitionNames", String.join(",", foundVariableDefinitionNames)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); List foundVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(4, foundVariableDefinitions.size()); + assertThat(foundVariableDefinitions).hasSize(4); // --- Remove an existing variable definition --- // mvcResult = mvc.perform(patch("/models/variables-sets/" + variablesSet.getName() + "/variables/remove") @@ -664,13 +699,13 @@ public void testSaveNewVariablesSetThenModifyVariableDefinitions() throws Except // Get current variable definitions VariablesSet variablesSet3 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); List variableDefinitions3 = variablesSet3.getVariableDefinitions(); - LOGGER.info("Updated variable definitions = " + variableDefinitions2); - LOGGER.info("Removed variable definitions = " + variableDefinitions3); + LOGGER.info("Updated variable definitions = {}", variableDefinitions2); + LOGGER.info("Removed variable definitions = {}", variableDefinitions3); // Check result - assertEquals(3, variableDefinitions3.size()); + assertThat(variableDefinitions3).hasSize(3); // must contains all variable definitions after removing - assertTrue(variableDefinitions2.containsAll(variableDefinitions3)); + Assertions.assertThatDtoList(variableDefinitions2).recursivelyContainAll(variableDefinitions3); // --- Remove all existing variable definition --- // mvcResult = mvc.perform(patch("/models/variables-sets/" + variablesSet.getName() + "/variables/remove-all") @@ -680,10 +715,10 @@ public void testSaveNewVariablesSetThenModifyVariableDefinitions() throws Except // Get current variable definitions after remove all VariablesSet variablesSet4 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); List variableDefinitions4 = variablesSet4.getVariableDefinitions(); - LOGGER.info("All removed variable definitions = " + variableDefinitions4); + LOGGER.info("All removed variable definitions = {}", variableDefinitions4); // Check result - assertEquals(0, variableDefinitions4.size()); + assertThat(variableDefinitions4).isEmpty(); } @@ -715,8 +750,8 @@ public void testSaveNewVariablesSetsWhichShareVariableDefinitions() throws Excep // --- Get initial variable definition from GET endpoint --- // mvcResult = mvc.perform(get("/models/variables-sets/" + threeWindingVariablesSet.getName() + "/variables")) .andExpect(status().isOk()).andReturn(); - List threeWindingVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, threeWindingVariableDefinitions.size()); + List threeWindingVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(threeWindingVariableDefinitions).hasSize(2); // --- Try to get variable definition from unknown variables set --- // mvc.perform(get("/models/variables-sets/" + "variable_set_unknown" + "/variables")) @@ -726,28 +761,28 @@ public void testSaveNewVariablesSetsWhichShareVariableDefinitions() throws Excep mvcResult = mvc.perform(get("/models/variables-sets/" + fourWindingVariablesSet.getName() + "/variables")) .andExpect(status().isOk()).andReturn(); - List fourWindingVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(3, fourWindingVariableDefinitions.size()); + List fourWindingVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(fourWindingVariableDefinitions).hasSize(3); // cross-check between two variables set Sets.SetView intersectionVariableDefinitions = Sets.intersection(new HashSet<>(fourWindingVariableDefinitions), new HashSet<>(threeWindingVariableDefinitions)); - assertEquals(2, intersectionVariableDefinitions.size()); + assertThat(intersectionVariableDefinitions).hasSize(2); // check in the database, must be 3 variable definitions, i.e. 2 shared variable definitions // and 1 in FourWindingsSynchronousGenerator mvcResult = mvc.perform(get("/models/variable-definitions/names") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List foundVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(3, foundVariableDefinitionNames.size()); + List foundVariableDefinitionNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundVariableDefinitionNames).hasSize(3); mvcResult = mvc.perform(get("/models/variable-definitions") - .param("variableDefinitionNames", foundVariableDefinitionNames.stream().collect(Collectors.joining(","))) + .param("variableDefinitionNames", String.join(",", foundVariableDefinitionNames)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List foundVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(3, foundVariableDefinitions.size()); + List foundVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundVariableDefinitions).hasSize(3); } @@ -779,48 +814,48 @@ public void testSaveNewLoadModelsWhichShareParameterDefinitionsAndVariableDefini // --- Get variable definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + loadAlphaBetaModelName + "/variables")) .andExpect(status().isOk()).andReturn(); - List loadAlphaBetaVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(5, loadAlphaBetaVariableDefinitions.size()); + List loadAlphaBetaVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(loadAlphaBetaVariableDefinitions).hasSize(5); // --- Get initial parameter definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + loadAlphaBetaModelName + "/parameters/definitions")) .andExpect(status().isOk()).andReturn(); - List loadAlphaBetaParameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(6, loadAlphaBetaParameterDefinitions.size()); + List loadAlphaBetaParameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(loadAlphaBetaParameterDefinitions).hasSize(6); // --- Get variable definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + loadPQModelName + "/variables")) .andExpect(status().isOk()).andReturn(); - List loadPQVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(3, loadPQVariableDefinitions.size()); + List loadPQVariableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(loadPQVariableDefinitions).hasSize(3); // --- Get initial parameter definitions from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + loadPQModelName + "/parameters/definitions")) .andExpect(status().isOk()).andReturn(); - List loadPQParameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(4, loadPQParameterDefinitions.size()); + List loadPQParameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(loadPQParameterDefinitions).hasSize(4); // cross-check variable definitions between two models Sets.SetView intersectionVariableDefinitions = Sets.intersection(new HashSet<>(loadAlphaBetaVariableDefinitions), new HashSet<>(loadPQVariableDefinitions)); - assertEquals(3, intersectionVariableDefinitions.size()); + assertThat(intersectionVariableDefinitions).hasSize(3); // cross-check parameter definitions between two models Sets.SetView intersectionParameterDefinitions = Sets.intersection(new HashSet<>(loadAlphaBetaParameterDefinitions), new HashSet<>(loadPQParameterDefinitions)); - assertEquals(3, intersectionParameterDefinitions.size()); + assertThat(intersectionParameterDefinitions).hasSize(3); // the last parameter definition of load alpha beta model must be NETWORK ModelParameterDefinition lastParameterDefinitionInLoadAlphaBetaModel = loadAlphaBetaParameterDefinitions.stream().reduce((first, second) -> second).get(); - assertEquals(ParameterOrigin.NETWORK, lastParameterDefinitionInLoadAlphaBetaModel.getOrigin()); + assertThat(lastParameterDefinitionInLoadAlphaBetaModel.getOrigin()).isEqualTo(ParameterOrigin.NETWORK); // the last parameter definition of load PQ model must be USER ModelParameterDefinition lastParameterDefinitionInLoadPQModel = loadPQParameterDefinitions.stream().reduce((first, second) -> second).get(); - assertEquals(ParameterOrigin.USER, lastParameterDefinitionInLoadPQModel.getOrigin()); + assertThat(lastParameterDefinitionInLoadPQModel.getOrigin()).isEqualTo(ParameterOrigin.USER); // two last parameter definitions in two models must be the same name, type, originName and fixedValue - assertEquals(lastParameterDefinitionInLoadAlphaBetaModel.getName(), lastParameterDefinitionInLoadPQModel.getName()); - assertEquals(lastParameterDefinitionInLoadAlphaBetaModel.getType(), lastParameterDefinitionInLoadPQModel.getType()); - assertEquals(lastParameterDefinitionInLoadAlphaBetaModel.getOriginName(), lastParameterDefinitionInLoadPQModel.getOriginName()); - assertEquals(lastParameterDefinitionInLoadAlphaBetaModel.getFixedValue(), lastParameterDefinitionInLoadPQModel.getFixedValue()); + assertThat(lastParameterDefinitionInLoadPQModel.getName()).isEqualTo(lastParameterDefinitionInLoadAlphaBetaModel.getName()); + assertThat(lastParameterDefinitionInLoadPQModel.getType()).isEqualTo(lastParameterDefinitionInLoadAlphaBetaModel.getType()); + assertThat(lastParameterDefinitionInLoadPQModel.getOriginName()).isEqualTo(lastParameterDefinitionInLoadAlphaBetaModel.getOriginName()); + assertThat(lastParameterDefinitionInLoadPQModel.getFixedValue()).isEqualTo(lastParameterDefinitionInLoadAlphaBetaModel.getFixedValue()); } @@ -837,14 +872,14 @@ public void testSaveGeneratorModel() throws Exception { .andExpect(status().isOk()); // Get Data - ModelEntity savedModel = modelRepository.findById(modelName).orElseThrow(); + ModelEntity savedModel = modelRepository.findByModelName(modelName).orElseThrow(); // sanity check - assertEquals(modelName, savedModel.getModelName()); - assertEquals(EquipmentType.GENERATOR, savedModel.getEquipmentType()); + assertThat(savedModel.getModelName()).isEqualTo(modelName); + assertThat(savedModel.getEquipmentType()).isEqualTo(EquipmentType.GENERATOR); // check variables sets - assertEquals(2, savedModel.getVariableSets().size()); + assertThat(savedModel.getVariableSets()).hasSize(2); } @Test @@ -868,15 +903,15 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { List variableDefinitionsOfVoltageRegulatorSet = variablesSet.stream().filter(set -> "VoltageRegulator".equals(set.getName())).findFirst().orElseThrow().getVariableDefinitions(); // Check result - assertEquals(2, variablesSet.size()); - assertEquals(4, variableDefinitionsOfGeneratorSet.size()); - assertEquals(1, variableDefinitionsOfVoltageRegulatorSet.size()); + assertThat(variablesSet).hasSize(2); + assertThat(variableDefinitionsOfGeneratorSet).hasSize(4); + assertThat(variableDefinitionsOfVoltageRegulatorSet.size()).isOne(); // --- Get initial variable sets from GET endpoint --- // mvcResult = mvc.perform(get("/models/" + model.getModelName() + "/variables-sets")) .andExpect(status().isOk()).andReturn(); - List variablesSet1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, variablesSet1.size()); + List variablesSet1 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(variablesSet1).hasSize(2); // --- Try to get variable sets from unknown model --- // mvc.perform(get("/models/" + model.getModelName() + "_unknown" + "/variables")) @@ -897,10 +932,10 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { List variableDefinitionsOfRegulator2Set = variablesSet2.stream().filter(set -> "Generator2".equals(set.getName())).findFirst().orElseThrow().getVariableDefinitions(); // Check result - assertEquals(3, variablesSet2.size()); - assertEquals(4, variableDefinitionsOfGeneratorSet.size()); - assertEquals(1, variableDefinitionsOfVoltageRegulatorSet.size()); - assertEquals(2, variableDefinitionsOfRegulator2Set.size()); + assertThat(variablesSet2).hasSize(3); + assertThat(variableDefinitionsOfGeneratorSet).hasSize(4); + assertThat(variableDefinitionsOfVoltageRegulatorSet.size()).isOne(); + assertThat(variableDefinitionsOfRegulator2Set).hasSize(2); // --- Remove an existing variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/remove") @@ -913,9 +948,9 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { List variablesSet3 = model3.getVariablesSets(); // Check result - assertEquals(2, variablesSet3.size()); + assertThat(variablesSet3).hasSize(2); // must contains all variables sets after removing - assertTrue(variablesSet2.containsAll(variablesSet3)); + Assertions.assertThatDtoList(variablesSet2).recursivelyContainAll(variablesSet3); // --- Remove all variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/remove-all") @@ -927,7 +962,7 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { List variablesSet4 = model4.getVariablesSets(); // Check result - assertEquals(0, variablesSet4.size()); + assertThat(variablesSet4).isEmpty(); // --- Add an existing variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/add") @@ -940,7 +975,7 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { List variablesSet5 = model5.getVariablesSets(); // Check result - assertEquals(1, variablesSet5.size()); + assertThat(variablesSet5.size()).isOne(); // --- Add an unknown existing variables set => must fail fast --- // mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/add") @@ -953,26 +988,26 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { .content(objectMapper.writeValueAsString(List.of(variablesSet2.get(2).getName()))) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List deletedVariablesSetNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); + List deletedVariablesSetNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); // Check result - assertEquals(1, deletedVariablesSetNames.size()); - assertEquals(variablesSet2.get(2).getName(), deletedVariablesSetNames.get(0)); + assertThat(deletedVariablesSetNames.size()).isOne(); + assertThat(deletedVariablesSetNames.getFirst()).isEqualTo(variablesSet2.get(2).getName()); // -- there is 2 variables set in database, i.e. two initial, one added, one deleted => remain 2 -- // mvcResult = mvc.perform(get("/models/variables-sets/names") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List foundVariableSetNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, foundVariableSetNames.size()); + List foundVariableSetNames = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundVariableSetNames).hasSize(2); mvcResult = mvc.perform(get("/models/variables-sets") - .param("variablesSetNames", foundVariableSetNames.stream().collect(Collectors.joining(","))) + .param("variablesSetNames", String.join(",", foundVariableSetNames)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List foundVariableSets = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference>() { }); - assertEquals(2, foundVariableSets.size()); + List foundVariableSets = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertThat(foundVariableSets).hasSize(2); } @Test @@ -1015,11 +1050,17 @@ public void deleteTest() throws Exception { .contentType(APPLICATION_JSON)) .andExpect(status().isOk()); - mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") + MvcResult mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json("[" + set + "]", true)); + .andReturn(); + + String setJson = mvcResult.getResponse().getContentAsString(); + List resultSetList = objectMapper.readValue(setJson, new TypeReference<>() { }); + ParametersSet expectedSet = objectMapper.readValue(set, ParametersSet.class); + + Assertions.assertThat(resultSetList.getFirst()).recursivelyEquals(expectedSet); // Trying to delete from a non-existing model will throw mvc.perform(delete("/models/" + "unknownModel" + "/parameters/sets/" + name + "/" + "FIXED" + "/" + name)) @@ -1035,11 +1076,15 @@ public void deleteTest() throws Exception { .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) .andExpect(content().json(setGroup)); - mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") + mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json("[" + set + "]", true)); + .andReturn(); + + setJson = mvcResult.getResponse().getContentAsString(); + resultSetList = objectMapper.readValue(setJson, new TypeReference<>() { }); + Assertions.assertThat(resultSetList.getFirst()).recursivelyEquals(expectedSet); // Delete the set mvc.perform(delete("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED" + "/" + name)) @@ -1054,11 +1099,13 @@ public void deleteTest() throws Exception { } """ .formatted(name, modelName))); - mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") + mvcResult = mvc.perform(get("/models/" + modelName + "/parameters/sets/" + name + "/" + "FIXED") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json("[]", true)); + .andReturn(); + List resultSets = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + Assertions.assertThat(resultSets).isEmpty(); } @Test @@ -1096,22 +1143,22 @@ public void testDeleteLoadModelsWhichShareParameterDefinitionsAndVariableDefinit // --- Check result --- // // model LOAD ALPHA BETA must be not exist in db - Optional foundNoneExistingModelOpt = modelRepository.findById(loadAlphaBetaModelName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + Optional foundNoneExistingModelOpt = modelRepository.findByModelName(loadAlphaBetaModelName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); // must delete only 2 parameter definitions which are only used by load alpha beta // the rest 4 shared parameter definitions must be always present in db - List foundNoneExistingParameterDefinitions = modelParameterDefinitionRepository.findAllById(List.of("load_alpha", "load_beta")); - assertEquals(0, foundNoneExistingParameterDefinitions.size()); - List foundExistingParameterDefinitions = modelParameterDefinitionRepository.findAllById(List.of("load_P0Pu", "load_Q0Pu", "load_U0Pu", "load_UPhase0")); - assertEquals(4, foundExistingParameterDefinitions.size()); + List foundNoneExistingParameterDefinitions = modelParameterDefinitionRepository.findAllByNameIn(List.of("load_alpha", "load_beta")); + assertThat(foundNoneExistingParameterDefinitions).isEmpty(); + List foundExistingParameterDefinitions = modelParameterDefinitionRepository.findAllByNameIn(List.of("load_P0Pu", "load_Q0Pu", "load_U0Pu", "load_UPhase0")); + assertThat(foundExistingParameterDefinitions).hasSize(4); // must delete only 2 variable definitions which are only used by load alpha beta // the rest 3 shared variable definitions must be always present in db - List foundNoneExistingVariableDefinitions = modelVariableRepository.findAllById(List.of("load_PRefPu", "load_running_value")); - assertEquals(0, foundNoneExistingVariableDefinitions.size()); - List foundExistingVariableDefinitions = modelVariableRepository.findAllById(List.of("load_PPu", "load_QPu", "load_QRefPu")); - assertEquals(3, foundExistingVariableDefinitions.size()); + List foundNoneExistingVariableDefinitions = modelVariableRepository.findAllByNameIn(List.of("load_PRefPu", "load_running_value")); + assertThat(foundNoneExistingVariableDefinitions).isEmpty(); + List foundExistingVariableDefinitions = modelVariableRepository.findAllByNameIn(List.of("load_PPu", "load_QPu", "load_QRefPu")); + assertThat(foundExistingVariableDefinitions).hasSize(3); // --- Delete LOAD PQ --- // mvc.perform(delete("/models/") @@ -1121,13 +1168,13 @@ public void testDeleteLoadModelsWhichShareParameterDefinitionsAndVariableDefinit // --- Check result --- // // model LOAD PQ must be not exist in db - foundNoneExistingModelOpt = modelRepository.findById(loadPQModelName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + foundNoneExistingModelOpt = modelRepository.findByModelName(loadPQModelName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); // db must not contain any parameter definition - assertEquals(0, modelParameterDefinitionRepository.findAll().size()); + assertThat(modelParameterDefinitionRepository.findAll()).isEmpty(); // db must not contain any variable definition - assertEquals(0, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).isEmpty(); } @@ -1146,10 +1193,10 @@ public void testDeleteGeneratorModelsWithVariableSets() throws Exception { // --- Check result --- // // This model has two variable sets => must be present in the db - List variableSets = modelVariablesSetRepository.findAllById(List.of("Generator", "VoltageRegulator")); - assertEquals(2, variableSets.size()); + List variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("Generator", "VoltageRegulator")); + assertThat(variableSets).hasSize(2); // Variable set Generator contains 4 variable definitions and VoltageRegulator contains 1 variable definition => total = 5 - assertEquals(5, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).hasSize(5); // --- Delete model generator --- // mvc.perform(delete("/models/") @@ -1159,13 +1206,13 @@ public void testDeleteGeneratorModelsWithVariableSets() throws Exception { // --- Check result --- // // model generator model must be not exist in db - Optional foundNoneExistingModelOpt = modelRepository.findById(generatorModelName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + Optional foundNoneExistingModelOpt = modelRepository.findByModelName(generatorModelName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); // db must not contain any variable set - assertEquals(0, modelVariablesSetRepository.findAll().size()); + assertThat(modelVariablesSetRepository.findAll()).isEmpty(); // db must not contain any variable definition - assertEquals(0, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).isEmpty(); } @Test @@ -1191,10 +1238,10 @@ public void testDeleteGeneratorModelsWhichShareVariableSets() throws Exception { // --- Check result --- // // These models have two shared variable sets => must be present in the db - List variableSets = modelVariablesSetRepository.findAllById(List.of("Generator", "VoltageRegulator")); - assertEquals(2, variableSets.size()); + List variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("Generator", "VoltageRegulator")); + assertThat(variableSets).hasSize(2); // Variable set Generator contains 4 variable definitions and VoltageRegulator contains 1 variable definition => total = 5 - assertEquals(5, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).hasSize(5); // --- Delete model Three Windings Generator --- // mvc.perform(delete("/models/") @@ -1204,14 +1251,14 @@ public void testDeleteGeneratorModelsWhichShareVariableSets() throws Exception { // --- Check result --- // // model Three Windings Generator must be not exist in db - Optional foundNoneExistingModelOpt = modelRepository.findById(generatorModelThreeWindingsName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + Optional foundNoneExistingModelOpt = modelRepository.findByModelName(generatorModelThreeWindingsName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); - // These models have two shared variable sets => after delete one model, shared shared variable sets must be always in db - variableSets = modelVariablesSetRepository.findAllById(List.of("Generator", "VoltageRegulator")); - assertEquals(2, variableSets.size()); + // These models have two shared variable sets => after delete one model, shared variable sets must be always in db + variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("Generator", "VoltageRegulator")); + assertThat(variableSets).hasSize(2); // Variable set Generator contains 4 variable definitions and VoltageRegulator contains 1 variable definition => total = 5 - assertEquals(5, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).hasSize(5); // --- Delete model Four Windings Generator --- // mvc.perform(delete("/models/") @@ -1221,14 +1268,14 @@ public void testDeleteGeneratorModelsWhichShareVariableSets() throws Exception { // --- Check result --- // // model Three Windings Generator must be not exist in db - foundNoneExistingModelOpt = modelRepository.findById(generatorModelFourWindingsName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + foundNoneExistingModelOpt = modelRepository.findByModelName(generatorModelFourWindingsName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); // the last model which uses shared variable sets has been deleted // db must not contain any variable set - assertEquals(0, modelVariablesSetRepository.findAll().size()); + assertThat(modelVariablesSetRepository.findAll()).isEmpty(); // db must not contain any variable definition - assertEquals(0, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).isEmpty(); } @@ -1255,10 +1302,10 @@ public void testDeleteGeneratorModelsWhichShareVariableDefinitionsBetweenDiffere // --- Check result --- // // These models have two shared 3 variables definitions between 2 different variable sets => must be present in the db - List variableSets = modelVariablesSetRepository.findAllById(List.of("GeneratorPQ", "GeneratorPV")); - assertEquals(2, variableSets.size()); + List variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("GeneratorPQ", "GeneratorPV")); + assertThat(variableSets).hasSize(2); // Variable set GeneratorPQ and GeneratorPV share 3 variable definitions - assertEquals(3, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).hasSize(3); // --- Delete model Generator PQ --- // mvc.perform(delete("/models/") @@ -1268,14 +1315,14 @@ public void testDeleteGeneratorModelsWhichShareVariableDefinitionsBetweenDiffere // --- Check result --- // // model Generator PQ must be not exist in db - Optional foundNoneExistingModelOpt = modelRepository.findById(generatorPQModelName); - assertEquals(false, foundNoneExistingModelOpt.isPresent()); + Optional foundNoneExistingModelOpt = modelRepository.findByModelName(generatorPQModelName); + assertThat(foundNoneExistingModelOpt).isNotPresent(); // Variable set Generator PQ must be not exist in db - variableSets = modelVariablesSetRepository.findAllById(List.of("GeneratorPQ")); - assertEquals(0, variableSets.size()); + variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("GeneratorPQ")); + assertThat(variableSets).isEmpty(); // 3 variable definitions used by variable set GeneratorPV must be always present in db - assertEquals(3, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).hasSize(3); // --- Delete model Generator PV --- // mvc.perform(delete("/models/") @@ -1284,10 +1331,10 @@ public void testDeleteGeneratorModelsWhichShareVariableDefinitionsBetweenDiffere .andExpect(status().isOk()).andReturn(); // Variable set Generator PV must be not exist in db - variableSets = modelVariablesSetRepository.findAllById(List.of("GeneratorPV")); - assertEquals(0, variableSets.size()); + variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("GeneratorPV")); + assertThat(variableSets).isEmpty(); // 3 variable definitions used by variable set GeneratorPV must be not exist in db - assertEquals(0, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).isEmpty(); } @Test @@ -1313,10 +1360,11 @@ public void testDeleteAllGeneratorModelsWhichShareVariableDefinitionsBetweenDiff // --- Check result --- // // These models have two shared 3 variables definitions between 2 different variable sets => must be present in the db - List variableSets = modelVariablesSetRepository.findAllById(List.of("GeneratorPQ", "GeneratorPV")); - assertEquals(2, variableSets.size()); + List variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("GeneratorPQ", "GeneratorPV")); + assertThat(variableSets).hasSize(2); // Variable set GeneratorPQ and GeneratorPV share 3 variable definitions - assertEquals(3, modelVariableRepository.findAll().size()); + List variables = modelVariableRepository.findAll(); + assertThat(variables).hasSize(3); // --- Delete model Generator PQ --- // mvc.perform(delete("/models/") @@ -1326,13 +1374,13 @@ public void testDeleteAllGeneratorModelsWhichShareVariableDefinitionsBetweenDiff // --- Check result --- // // model Generator PQ/PV must be not exist in db - List modelEntities = modelRepository.findAllById(List.of(generatorPQModelName, generatorPVModelName)); - assertEquals(0, modelEntities.size()); + List modelEntities = modelRepository.findAllByModelNameIn(List.of(generatorPQModelName, generatorPVModelName)); + assertThat(modelEntities).isEmpty(); // Variable set Generator PQ/PV must be not exist in db - variableSets = modelVariablesSetRepository.findAllById(List.of("GeneratorPV", "GeneratorPQ")); - assertEquals(0, variableSets.size()); + variableSets = modelVariablesSetRepository.findAllByNameIn(List.of("GeneratorPV", "GeneratorPQ")); + assertThat(variableSets).isEmpty(); // 3 variable definitions used by variable sets GeneratorPQ/PV must be not exist in db - assertEquals(0, modelVariableRepository.findAll().size()); + assertThat(modelVariableRepository.findAll()).isEmpty(); } } diff --git a/src/test/java/org/gridsuite/mapping/server/ModelEntitiesTest.java b/src/test/java/org/gridsuite/mapping/server/ModelEntitiesTest.java deleted file mode 100644 index 593a8e78..00000000 --- a/src/test/java/org/gridsuite/mapping/server/ModelEntitiesTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (c) 2021, 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.mapping.server; - -import org.gridsuite.mapping.server.model.ModelParameterId; -import org.gridsuite.mapping.server.model.ModelParameterSetId; -import org.gridsuite.mapping.server.model.ModelSetsGroupId; -import org.gridsuite.mapping.server.utils.SetGroupType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -/** - * @author Mathieu Scalbert - */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class ModelEntitiesTest { - - @Test - public void parameterIdTestEqualHashCode() { - ModelParameterId id = new ModelParameterId("name", "modelName", "setName", "groupName", SetGroupType.FIXED); - ModelParameterId id2 = new ModelParameterId("name", "modelName", "setName", "groupName", SetGroupType.FIXED); - - assertEquals(id, id); - assertEquals(id, id2); - assertNotEquals(null, id); - assertNotEquals("id", id); - } - - @Test - public void parameterSetIdTestEqualHashCode() { - ModelParameterSetId id = new ModelParameterSetId("name", "groupName", "modelName", SetGroupType.FIXED); - ModelParameterSetId id2 = new ModelParameterSetId("name", "groupName", "modelName", SetGroupType.FIXED); - - assertEquals(id, id); - assertEquals(id, id2); - assertNotEquals(null, id); - assertNotEquals("id", id); - } - - @Test - public void setsGroupIdTestEqualHashCode() { - ModelSetsGroupId id = new ModelSetsGroupId("name", "modelName", SetGroupType.FIXED); - ModelSetsGroupId id2 = new ModelSetsGroupId("name", "modelName", SetGroupType.FIXED); - - assertEquals(id, id); - assertEquals(id, id2); - assertNotEquals(null, id); - assertNotEquals("id", id); - } -} diff --git a/src/test/java/org/gridsuite/mapping/server/ParameterControllerTest.java b/src/test/java/org/gridsuite/mapping/server/ParameterControllerTest.java index a8a56a7a..96b80755 100644 --- a/src/test/java/org/gridsuite/mapping/server/ParameterControllerTest.java +++ b/src/test/java/org/gridsuite/mapping/server/ParameterControllerTest.java @@ -9,12 +9,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.gridsuite.filter.expertfilter.ExpertFilter; import org.gridsuite.mapping.server.dto.InputMapping; +import org.gridsuite.mapping.server.dto.ParameterFile; import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition; import org.gridsuite.mapping.server.model.*; import org.gridsuite.mapping.server.repository.ModelParameterDefinitionRepository; import org.gridsuite.mapping.server.repository.ModelRepository; import org.gridsuite.mapping.server.service.client.filter.FilterClient; import org.gridsuite.mapping.server.utils.*; +import org.gridsuite.mapping.server.utils.assertions.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -25,6 +27,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -69,7 +72,7 @@ private void cleanDB() { } private ModelParameterDefinitionEntity createDefinitionEntity(String name, ParameterType type) { - return new ModelParameterDefinitionEntity(new ModelParameterDefinition(name, type, null, null, null)); + return new ModelParameterDefinitionEntity(new ModelParameterDefinition(UUID.randomUUID(), name, type, null, null, null)); } @Before @@ -78,17 +81,14 @@ public void setUp() { cleanDB(); // Prepare models - ModelEntity loadModel = new ModelEntity("LoadAlphaBeta", EquipmentType.LOAD, false, new ArrayList<>(), null, Set.of(), Set.of(), null, null); + ModelEntity loadModel = new ModelEntity(UUID.randomUUID(), "LoadAlphaBeta", EquipmentType.LOAD, false, new ArrayList<>(), null, Set.of(), Set.of(), null, null); ArrayList loadGroups = new ArrayList<>(); - ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", loadModel.getModelName(), null, SetGroupType.FIXED, loadModel); + ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity(UUID.randomUUID(), "LAB", null, SetGroupType.FIXED, loadModel); ArrayList groupSets = new ArrayList<>(); - ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", loadGroup.getName(), loadModel.getModelName(), loadGroup.getType(), - null, - new Date(), - loadGroup); + ModelParameterSetEntity setToSave = new ModelParameterSetEntity(UUID.randomUUID(), "LAB", null, new Date(), loadGroup); ArrayList setParameters = new ArrayList<>(); - setParameters.add(new ModelParameterEntity("load_alpha", loadGroup.getModelName(), loadGroup.getName(), loadGroup.getType(), setToSave.getName(), "1.5", setToSave)); - setParameters.add(new ModelParameterEntity("load_beta", loadGroup.getModelName(), loadGroup.getName(), loadGroup.getType(), setToSave.getName(), "2.5", setToSave)); + setParameters.add(new ModelParameterEntity(UUID.randomUUID(), "load_alpha", "1.5", setToSave)); + setParameters.add(new ModelParameterEntity(UUID.randomUUID(), "load_beta", "2.5", setToSave)); setToSave.setParameters(setParameters); groupSets.add(setToSave); loadGroup.setSets(groupSets); @@ -112,21 +112,21 @@ public void setUp() { modelRepository.save(loadModel); - ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, false, null, null, null, null, null, null); + ModelEntity generatorThreeModel = new ModelEntity(UUID.randomUUID(), "GeneratorThreeWindings", EquipmentType.GENERATOR, false, null, null, null, null, null, null); ArrayList generatorThreeGroups = new ArrayList<>(); - generatorThreeGroups.add(new ModelSetsGroupEntity("GSTWPR", generatorThreeModel.getModelName(), null, SetGroupType.PREFIX, generatorThreeModel)); + generatorThreeGroups.add(new ModelSetsGroupEntity(UUID.randomUUID(), "GSTWPR", null, SetGroupType.PREFIX, generatorThreeModel)); generatorThreeModel.setSetsGroups(generatorThreeGroups); modelRepository.save(generatorThreeModel); - ModelEntity generatorFourModel = new ModelEntity("GeneratorFourWindings", EquipmentType.GENERATOR, false, null, null, null, null, null, null); + ModelEntity generatorFourModel = new ModelEntity(UUID.randomUUID(), "GeneratorFourWindings", EquipmentType.GENERATOR, false, null, null, null, null, null, null); ArrayList generatorFourGroups = new ArrayList<>(); - generatorFourGroups.add(new ModelSetsGroupEntity("GSFWPR", generatorFourModel.getModelName(), null, SetGroupType.PREFIX, generatorFourModel)); + generatorFourGroups.add(new ModelSetsGroupEntity(UUID.randomUUID(), "GSFWPR", null, SetGroupType.PREFIX, generatorFourModel)); generatorFourModel.setSetsGroups(generatorFourGroups); modelRepository.save(generatorFourModel); - ModelEntity sVarModel = new ModelEntity("StaticVarCompensator", EquipmentType.STATIC_VAR_COMPENSATOR, false, null, null, null, null, null, null); + ModelEntity sVarModel = new ModelEntity(UUID.randomUUID(), "StaticVarCompensator", EquipmentType.STATIC_VAR_COMPENSATOR, false, null, null, null, null, null, null); ArrayList sVarModelGroups = new ArrayList<>(); - sVarModelGroups.add(new ModelSetsGroupEntity("SVarC", sVarModel.getModelName(), null, SetGroupType.PREFIX, sVarModel)); + sVarModelGroups.add(new ModelSetsGroupEntity(UUID.randomUUID(), "SVarC", null, SetGroupType.PREFIX, sVarModel)); sVarModel.setSetsGroups(sVarModelGroups); modelRepository.save(sVarModel); } @@ -156,12 +156,19 @@ public void exportParametersTest() throws Exception { .andExpect(status().isOk()); // export parameter file - mvc.perform(get("/parameters/export") + MvcResult mvcResult = mvc.perform(get("/parameters/export") .queryParam("mappingName", name) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json(baseParameterFileJson(name, null), true)); + .andReturn(); + String resultParameterFileJson = objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(objectMapper.readTree(mvcResult.getResponse().getContentAsString())); + String expectedParameterFileJson = baseParameterFileJson(name, null); + + ParameterFile resultParameterFile = objectMapper.readValue(resultParameterFileJson, ParameterFile.class); + ParameterFile expectedParameterFile = objectMapper.readValue(expectedParameterFileJson, ParameterFile.class); + Assertions.assertThat(resultParameterFile).recursivelyEquals(expectedParameterFile); // try to export parameter file with unknown mapping mvc.perform(get("/parameters/export") @@ -213,11 +220,19 @@ public void parTest() throws Exception { .andExpect(status().isOk()); // export parameter file - mvc.perform(get("/parameters/export") + MvcResult mvcResult = mvc.perform(get("/parameters/export") .queryParam("mappingName", name) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(APPLICATION_JSON)) - .andExpect(content().json(baseParameterFileJson(name, objectMapper.writeValueAsString(parFile)), true)); + .andReturn(); + + String resultParameterFileJson = objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(objectMapper.readTree(mvcResult.getResponse().getContentAsString())); + String expectedParameterFileJson = baseParameterFileJson(name, objectMapper.writeValueAsString(parFile)); + + ParameterFile resultParameterFile = objectMapper.readValue(resultParameterFileJson, ParameterFile.class); + ParameterFile expectedParameterFile = objectMapper.readValue(expectedParameterFileJson, ParameterFile.class); + Assertions.assertThat(resultParameterFile).recursivelyEquals(expectedParameterFile); } } diff --git a/src/test/java/org/gridsuite/mapping/server/utils/PropertyUtilsTest.java b/src/test/java/org/gridsuite/mapping/server/utils/PropertyUtilsTest.java index ec5a1995..b41ede04 100644 --- a/src/test/java/org/gridsuite/mapping/server/utils/PropertyUtilsTest.java +++ b/src/test/java/org/gridsuite/mapping/server/utils/PropertyUtilsTest.java @@ -13,6 +13,7 @@ import org.junit.runners.JUnit4; import java.util.Date; +import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -24,9 +25,9 @@ public class PropertyUtilsTest { @Test public void testCopyNonNullProperties() { - // test with an ModelVariableDefinitionEntity - ModelVariableDefinitionEntity variableDefinitionEntity = new ModelVariableDefinitionEntity("load_running_value", VariableType.DOUBLE, "KW", 100.0, null, null, new Date(), new Date()); - ModelVariableDefinitionEntity variableDefinitionEntity2 = new ModelVariableDefinitionEntity("load_running_value2", VariableType.BOOL, null, 90.0, null, null, null, new Date()); + // test with a ModelVariableDefinitionEntity + ModelVariableDefinitionEntity variableDefinitionEntity = new ModelVariableDefinitionEntity(UUID.randomUUID(), "load_running_value", VariableType.DOUBLE, "KW", 100.0, null, null, new Date(), new Date()); + ModelVariableDefinitionEntity variableDefinitionEntity2 = new ModelVariableDefinitionEntity(UUID.randomUUID(), "load_running_value2", VariableType.BOOL, null, 90.0, null, null, null, new Date()); // call method to be tested PropertyUtils.copyNonNullProperties(variableDefinitionEntity2, variableDefinitionEntity); diff --git a/src/test/java/org/gridsuite/mapping/server/utils/assertions/Assertions.java b/src/test/java/org/gridsuite/mapping/server/utils/assertions/Assertions.java index f323c9d8..07d96869 100644 --- a/src/test/java/org/gridsuite/mapping/server/utils/assertions/Assertions.java +++ b/src/test/java/org/gridsuite/mapping/server/utils/assertions/Assertions.java @@ -9,6 +9,10 @@ import org.assertj.core.util.CheckReturnValue; import org.gridsuite.filter.expertfilter.ExpertFilter; import org.gridsuite.mapping.server.dto.InputMapping; +import org.gridsuite.mapping.server.dto.ParameterFile; +import org.gridsuite.mapping.server.dto.models.ParametersSet; + +import java.util.List; /** * @author Tristan Chuine @@ -20,9 +24,22 @@ public static DTOAssert assertThat(T actu return new DTOAssert<>(actual); } + public static DTOAssert assertThat(T actual) { + return new DTOAssert<>(actual); + } + + public static DTOAssert assertThat(T actual) { + return new DTOAssert<>(actual); + } + @CheckReturnValue public static DTOAssert assertThat(T actual) { return new DTOAssert<>(actual); } + @CheckReturnValue + public static DTOAssert> assertThatDtoList(List actual) { + return new DTOAssert<>(actual); + } + } diff --git a/src/test/java/org/gridsuite/mapping/server/utils/assertions/DTOAssert.java b/src/test/java/org/gridsuite/mapping/server/utils/assertions/DTOAssert.java index a34eec70..13204aa1 100644 --- a/src/test/java/org/gridsuite/mapping/server/utils/assertions/DTOAssert.java +++ b/src/test/java/org/gridsuite/mapping/server/utils/assertions/DTOAssert.java @@ -10,6 +10,7 @@ import org.assertj.core.api.recursive.comparison.RecursiveComparisonConfiguration; import java.time.ZonedDateTime; +import java.util.Comparator; import java.util.Date; import java.util.UUID; @@ -18,6 +19,19 @@ * @author Slimane Amar */ public class DTOAssert extends AbstractAssert, T> { + + // A comparator that uses the recursive configuration + Comparator recursiveComparator = (o1, o2) -> { + try { + Assertions.assertThat(o1) + .usingRecursiveComparison(getRecursiveConfiguration()) + .isEqualTo(o2); + return 0; // Equal according to recursive comparison + } catch (AssertionError e) { + return 1; // Not equal + } + }; + public DTOAssert(T actual) { super(actual, DTOAssert.class); } @@ -28,6 +42,18 @@ public DTOAssert recursivelyEquals(T other) { return myself; } + public DTOAssert recursivelyContainAll(T other) { + isNotNull(); + if (actual instanceof Iterable && other instanceof Iterable) { + Assertions.assertThat((Iterable) actual) + .usingElementComparator(recursiveComparator) + .containsAll((Iterable) other); + } else { + throw new AssertionError("Both actual and expected must be Iterables/Collections to use recursiveContainAll"); + } + return myself; + } + private RecursiveComparisonConfiguration getRecursiveConfiguration() { return RecursiveComparisonConfiguration.builder() .withIgnoreAllOverriddenEquals(true) // For equals test, need specific tests diff --git a/src/test/resources/mappingIEEE14Test01.json b/src/test/resources/mappingIEEE14Test01.json index 56de87ae..fed32024 100644 --- a/src/test/resources/mappingIEEE14Test01.json +++ b/src/test/resources/mappingIEEE14Test01.json @@ -60,7 +60,7 @@ { "equipmentType": "STATIC_VAR_COMPENSATOR", "mappedModel": "StaticVarCompensator", - "setGroup": "SVarCT", + "setGroup": "SVarC", "groupType": "FIXED", "filter": { "equipmentType": "STATIC_VAR_COMPENSATOR", @@ -137,7 +137,7 @@ { "family": "VOLTAGE", "model": "TapChangerBlockingAutomaton", - "setGroup": "TCB_2_4", + "setGroup": "IEEE14_TCB_1", "properties": [ { "name": "dynamicModelId", @@ -159,7 +159,7 @@ { "family": "VOLTAGE", "model": "TapChangerBlockingAutomaton", - "setGroup": "TCB_2_5", + "setGroup": "IEEE14_TCB_2", "properties": [ { "name": "dynamicModelId",