diff --git a/src/main/java/org/gridsuite/mapping/server/RestResponseEntityExceptionHandler.java b/src/main/java/org/gridsuite/mapping/server/RestResponseEntityExceptionHandler.java new file mode 100644 index 00000000..15cd00f7 --- /dev/null +++ b/src/main/java/org/gridsuite/mapping/server/RestResponseEntityExceptionHandler.java @@ -0,0 +1,14 @@ +package org.gridsuite.mapping.server; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.client.HttpClientErrorException; + +@ControllerAdvice +public class RestResponseEntityExceptionHandler { + @ExceptionHandler(HttpClientErrorException.class) + protected ResponseEntity handleHttpClientErrorException(HttpClientErrorException exception) { + return ResponseEntity.status(exception.getStatusCode()).body(exception.getStatusText()); + } +} 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 438c9643..e1f3acca 100644 --- a/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java +++ b/src/main/java/org/gridsuite/mapping/server/controller/ModelController.java @@ -60,22 +60,6 @@ public ResponseEntity saveSimpleParametersSet(@PathVariable return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.saveParametersSetsGroup(modelName, setsGroup, false)); } - @GetMapping(value = "/{modelName}/parameters/definitions/") - @Operation(summary = "get parameters definitions for a given model") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "parameters definitions of the model")}) - public ResponseEntity> getParametersDefinitionsFromModelName(@PathVariable("modelName") String modelName) { - return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getParametersDefinitionsFromModelName(modelName)); - } - - @GetMapping(value = "/") - @Operation(summary = "get models names") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "names of all models")}) - public ResponseEntity> getModels() { - return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getModels()); - } - @PostMapping(value = "/") @Operation(summary = "Post a model") @ApiResponses(value = { @@ -92,7 +76,81 @@ public ResponseEntity deleteSet(@PathVariable("modelName") return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.deleteSet(modelName, groupName, groupType, setName)); } + @GetMapping(value = "/") + @Operation(summary = "get models names") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "names of all models")}) + public ResponseEntity> getModels() { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getModels()); + } + + // --- BEGIN parameter definition-related endpoints --- // + @GetMapping(value = "/{modelName}/parameters/definitions") + @Operation(summary = "get parameters definitions for a given model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "parameter definitions of the model")}) + public ResponseEntity> getParameterDefinitionsFromModel(@PathVariable("modelName") String modelName) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getParameterDefinitionsFromModel(modelName)); + } + + @PostMapping(value = "/{modelName}/parameters/definitions") + @Operation(summary = "Add new parameter definitions to model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "saved model")}) + public ResponseEntity addNewParameterDefinitionsToModel(@PathVariable("modelName") String modelName, @RequestBody List parameterDefinitions) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.addNewParameterDefinitionsToModel(modelName, parameterDefinitions)); + } + + @PatchMapping(value = "/{modelName}/parameters/definitions/add") + @Operation(summary = "Add existing parameter definitions to model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "saved model")}) + public ResponseEntity addExistingParameterDefinitionsToModel(@PathVariable("modelName") String modelName, @RequestBody List parameterDefinitionNames) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.addExistingParameterDefinitionsToModel(modelName, parameterDefinitionNames)); + } + + @PatchMapping(value = "/{modelName}/parameters/definitions/remove") + @Operation(summary = "Remove existing parameter definitions from model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "saved model")}) + public ResponseEntity removeExistingParameterDefinitionsFromModel(@PathVariable("modelName") String modelName, @RequestBody List parameterDefinitionNames) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.removeExistingParameterDefinitionsFromModel(modelName, parameterDefinitionNames)); + } + + @PatchMapping(value = "/{modelName}/parameters/definitions/remove-all") + @Operation(summary = "Reset empty parameter definitions on model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "saved model")}) + public ResponseEntity removeAllParameterDefinitionsFromModel(@PathVariable("modelName") String modelName) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.removeAllParameterDefinitionsOnModel(modelName)); + } + + @PostMapping(value = "/parameters/definitions") + @Operation(summary = "Save new parameter definitions") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Saved parameter definitions")}) + public ResponseEntity> saveNewParameterDefinitions(@RequestBody List parameterDefinitions) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.saveNewParameterDefinitions(parameterDefinitions)); + } + + @DeleteMapping(value = "/parameters/definitions") + @Operation(summary = "Delete parameter definitions") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Deleted parameter definitions")}) + public ResponseEntity> deleteParameterDefinitions(@RequestBody List parameterDefinitionNames) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.deleteParameterDefinitions(parameterDefinitionNames)); + } + // --- END parameter definition-related endpoints --- // + // --- BEGIN variable-related endpoints --- // + @GetMapping(value = "/{modelName}/variables") + @Operation(summary = "get variable definitions for a given model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "variable definitions of the model")}) + public ResponseEntity> getVariablesFromModel(@PathVariable("modelName") String modelName) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getVariableDefinitionsFromModel(modelName)); + } + @PostMapping(value = "/{modelName}/variables") @Operation(summary = "Add new variable definitions to model") @ApiResponses(value = { @@ -113,7 +171,7 @@ public ResponseEntity addExistingVariablesToModel(@PathVariable("modelNam @Operation(summary = "Remove existing variable definitions from model") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "saved model")}) - public ResponseEntity removeExistingVariablesToModel(@PathVariable("modelName") String modelName, @RequestBody List variableDefinitionNames) { + public ResponseEntity removeExistingVariablesFromModel(@PathVariable("modelName") String modelName, @RequestBody List variableDefinitionNames) { return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.removeExistingVariableDefinitionsFromModel(modelName, variableDefinitionNames)); } @@ -121,10 +179,18 @@ public ResponseEntity removeExistingVariablesToModel(@PathVariable("model @Operation(summary = "Reset empty variable definitions on model") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "saved model")}) - public ResponseEntity removeAllVariablesToModel(@PathVariable("modelName") String modelName) { + public ResponseEntity removeAllVariablesOnModel(@PathVariable("modelName") String modelName) { return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.removeAllVariableDefinitionsOnModel(modelName)); } + @GetMapping(value = "/variables-sets/{variableSetName}/variables") + @Operation(summary = "Add variable definitions from variables set") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "variable definitions of variables set")}) + public ResponseEntity> getVariablesFromVariablesSet(@PathVariable("variableSetName") String variableSetName) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getVariableDefinitionsFromVariablesSet(variableSetName)); + } + @PostMapping(value = "/variables-sets/{variableSetName}/variables") @Operation(summary = "Add new variable definitions to variables set") @ApiResponses(value = { @@ -149,6 +215,14 @@ public ResponseEntity removeAllVariableDefinitionOnVariablesSet(@P return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.removeAllVariableDefinitionOnVariablesSet(variableSetName)); } + @GetMapping(value = "/{modelName}/variables-sets") + @Operation(summary = "get variable sets for a given model") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "variable sets of the model")}) + public ResponseEntity> getVariablesSetsFromModel(@PathVariable("modelName") String modelName) { + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getVariablesSetsFromModel(modelName)); + } + @PostMapping(value = "/{modelName}/variables-sets") @Operation(summary = "Add new variables set to model") @ApiResponses(value = { 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 16ce66e0..9aee68b1 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 @@ -27,7 +27,7 @@ public class ParametersSet { public ParametersSet(ModelParameterSetEntity modelParameterSetEntity) { name = modelParameterSetEntity.getName(); parameters = modelParameterSetEntity.getParameters().stream().map(ModelParameter::new).collect(Collectors.toList()); - lastModifiedDate = modelParameterSetEntity.getLastModifiedDate(); + lastModifiedDate = modelParameterSetEntity.getUpdatedDate(); } public ParametersSet(String name, List parameters) { 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 c4c0814c..113a6df5 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 @@ -33,6 +33,6 @@ public ParametersSetsGroup(ModelSetsGroupEntity setsGroupEntity) { 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/model/ModelEntity.java b/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java index 226c3b94..33afe923 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelEntity.java @@ -9,39 +9,56 @@ import lombok.*; import org.gridsuite.mapping.server.dto.models.Model; import org.gridsuite.mapping.server.utils.EquipmentType; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.*; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; +import static javax.persistence.TemporalType.TIMESTAMP; + /** * @author Mathieu Scalbert */ -@Getter -@Setter -@Table(name = "models") -@Entity +@EqualsAndHashCode(onlyExplicitlyIncluded = true) @Builder @NoArgsConstructor @AllArgsConstructor +@Getter +@Setter +@Entity +@Table(name = "models") public class ModelEntity extends AbstractManuallyAssignedIdentifierEntity implements Serializable { // Could be replaced with UUID, but we lose the ease of use of names @Id + @EqualsAndHashCode.Include @Column(name = "model_name") private String modelName; @Column(name = "equipment_type") private EquipmentType equipmentType; - @OneToMany(targetEntity = ModelParameterDefinitionEntity.class, mappedBy = "model", cascade = CascadeType.ALL, orphanRemoval = true) - private List parameterDefinitions = new ArrayList<>(0); + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinTable( + name = "models_model_parameter_definitions", + joinColumns = {@JoinColumn(name = "model_name")}, + inverseJoinColumns = {@JoinColumn(name = "parameter_definition_name", referencedColumnName = "name")} + ) + private Set parameterDefinitions = new LinkedHashSet<>(0); @OneToMany(targetEntity = ModelSetsGroupEntity.class, mappedBy = "model", cascade = CascadeType.ALL, orphanRemoval = true) - private List setsGroups = new ArrayList<>(0); - - @ManyToMany(targetEntity = ModelVariableDefinitionEntity.class, mappedBy = "models", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) + private Set setsGroups = new LinkedHashSet<>(0); + + // 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")} + ) private Set variableDefinitions = new LinkedHashSet<>(0); @ManyToMany(targetEntity = ModelVariableSetEntity.class, mappedBy = "models", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) @@ -55,13 +72,44 @@ public String getId() { public ModelEntity(Model modelToConvert) { modelName = modelToConvert.getModelName(); equipmentType = modelToConvert.getEquipmentType(); - parameterDefinitions = modelToConvert.getParameterDefinitions() != null ? modelToConvert.getParameterDefinitions().stream().map(parameterDefinition -> new ModelParameterDefinitionEntity(parameterDefinition.getName(), modelToConvert.getModelName(), parameterDefinition.getType(), parameterDefinition.getOrigin(), parameterDefinition.getOriginName(), parameterDefinition.getFixedValue(), this)).collect(Collectors.toList()) : null; - setsGroups = modelToConvert.getSetsGroups() != null ? modelToConvert.getSetsGroups().stream().map(group -> new ModelSetsGroupEntity(this, group)).collect(Collectors.toList()) : null; + parameterDefinitions = modelToConvert.getParameterDefinitions() != null ? modelToConvert.getParameterDefinitions().stream().map(parameterDefinition -> new ModelParameterDefinitionEntity(this, parameterDefinition)).collect(Collectors.toSet()) : null; + setsGroups = modelToConvert.getSetsGroups() != null ? modelToConvert.getSetsGroups().stream().map(group -> new ModelSetsGroupEntity(this, group)).collect(Collectors.toCollection(LinkedHashSet::new)) : null; variableDefinitions = modelToConvert.getVariableDefinitions() != null ? modelToConvert.getVariableDefinitions().stream().map(variableDefinition -> new ModelVariableDefinitionEntity(this, null, variableDefinition)).collect(Collectors.toCollection(LinkedHashSet::new)) : null; variableSets = modelToConvert.getVariablesSets() != null ? modelToConvert.getVariablesSets().stream().map(variablesSet -> new ModelVariableSetEntity(this, variablesSet)).collect(Collectors.toCollection(LinkedHashSet::new)) : null; } + @CreatedDate + @Temporal(TIMESTAMP) + @Column(name = "created_date", updatable = false) + private Date createdDate; + + @LastModifiedDate + @Temporal(TIMESTAMP) + @Column(name = "updated_date") + private Date updatedDate; + // --- utils methods --- // + + public void addSetsGroup(Collection setsGroups) { + setsGroups.forEach(setsGroup -> setsGroup.setModel(this)); + this.setsGroups.addAll(setsGroups); + } + + public void removeSetsGroup(Collection setsGroups) { + setsGroups.forEach(setsGroup -> setsGroup.setModel(null)); + this.setsGroups.removeAll(setsGroups); + } + + public void addParameterDefinitions(Collection parameterDefinitions) { + parameterDefinitions.forEach(parameterDefinition -> parameterDefinition.getModels().add(this)); + this.parameterDefinitions.addAll(parameterDefinitions); + } + + public void removeParameterDefinitions(Collection parameterDefinitions) { + parameterDefinitions.forEach(parameterDefinition -> parameterDefinition.getModels().remove(this)); + this.parameterDefinitions.removeAll(parameterDefinitions); + } + public void addVariableDefinitions(Collection variableDefinitions) { variableDefinitions.forEach(variableDefinition -> variableDefinition.getModels().add(this)); this.variableDefinitions.addAll(variableDefinitions); 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 624db623..538923d9 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,39 @@ */ package org.gridsuite.mapping.server.model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; +import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition; import org.gridsuite.mapping.server.utils.ParameterOrigin; import org.gridsuite.mapping.server.utils.ParameterType; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.*; import java.io.Serializable; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import static javax.persistence.TemporalType.TIMESTAMP; /** * @author Mathieu Scalbert */ -@Inheritance +@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity -@Table(name = "model_parameter_definitions", indexes = {@Index(name = "model_parameter_definitions_model_name_index", columnList = "model_name")}) -@IdClass(ModelParameterDefinitionId.class) +@Table(name = "model_parameter_definitions") public class ModelParameterDefinitionEntity implements Serializable { @Id + @EqualsAndHashCode.Include @Column(name = "name") private String name; - @Id - @Column(name = "model_name") - private String modelName; - @Column(name = "type") @Enumerated private ParameterType type; @@ -51,8 +53,24 @@ public class ModelParameterDefinitionEntity implements Serializable { @Column(name = "fixed_value") private String fixedValue; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "model_name", foreignKey = @ForeignKey(name = "model_parameter_definition_fk")) - @MapsId("modelName") - private ModelEntity model; + @ManyToMany( + mappedBy = "parameterDefinitions", + cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH} + ) + private Set models; + + public ModelParameterDefinitionEntity(ModelEntity model, ModelParameterDefinition parameterDefinition) { + this(parameterDefinition.getName(), parameterDefinition.getType(), parameterDefinition.getOrigin(), parameterDefinition.getOriginName(), parameterDefinition.getFixedValue(), + model != null ? new LinkedHashSet<>(List.of(model)) : new LinkedHashSet<>(), null, null); + } + + @CreatedDate + @Temporal(TIMESTAMP) + @Column(name = "created_date", updatable = false) + private Date createdDate; + + @LastModifiedDate + @Temporal(TIMESTAMP) + @Column(name = "updated_date") + private Date updatedDate; } diff --git a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionId.java b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionId.java deleted file mode 100644 index 797305ee..00000000 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterDefinitionId.java +++ /dev/null @@ -1,50 +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 javax.persistence.Embeddable; -import java.io.Serializable; -import java.util.Objects; - -/** - * @author Mathieu Scalbert - */ -@NoArgsConstructor -@AllArgsConstructor -@Embeddable -@Getter -@Setter -public class ModelParameterDefinitionId implements Serializable { - - private String name; - - private String modelName; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ModelParameterDefinitionId modelParameterDefinitionIdClass = (ModelParameterDefinitionId) o; - return name.equals(modelParameterDefinitionIdClass.name) && - modelName.equals(modelParameterDefinitionIdClass.modelName); - } - - @Override - public int hashCode() { - return Objects.hash(name, modelName); - } - -} 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 a9224b32..5d605203 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,54 @@ */ package org.gridsuite.mapping.server.model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.gridsuite.mapping.server.dto.models.ModelParameter; -import org.gridsuite.mapping.server.utils.SetGroupType; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.*; import java.io.Serializable; +import java.util.Date; + +import static javax.persistence.TemporalType.TIMESTAMP; /** * @author Mathieu Scalbert */ -@Inheritance +@EqualsAndHashCode(onlyExplicitlyIncluded = true) @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity @Table(name = "model_parameters", indexes = {@Index(name = "model_parameter_set_index", columnList = "set_name")}) -@IdClass(ModelParameterId.class) public class ModelParameterEntity implements Serializable { @Id + @EqualsAndHashCode.Include @Column(name = "name") private String name; - @Id - @Column(name = "model_name") - private String modelName; - - @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 = "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) - }) - private ModelParameterSetEntity set; + @Id + @EqualsAndHashCode.Include + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinColumn(name = "set_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "parameter_set_parameter_fk"), updatable = false) + private ModelParameterSetEntity parameterSet; - public ModelParameterEntity(ModelParameterSetEntity set, ModelParameter parameter) { - this.set = set; - name = parameter.getName(); - groupName = set.getGroup().getName(); - groupType = set.getGroup().getType(); - modelName = set.getGroup().getModelName(); - setName = set.getName(); - value = parameter.getValue(); + public ModelParameterEntity(ModelParameterSetEntity parameterSet, ModelParameter parameter) { + this(parameter.getName(), parameter.getValue(), parameterSet, null, null); } + + @CreatedDate + @Temporal(TIMESTAMP) + @Column(name = "created_date", updatable = false) + private Date createdDate; + + @LastModifiedDate + @Temporal(TIMESTAMP) + @Column(name = "updated_date") + private Date updatedDate; } 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 ba828d7c..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 javax.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 5bedc427..1fb0aa20 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelParameterSetEntity.java @@ -6,69 +6,69 @@ */ package org.gridsuite.mapping.server.model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.gridsuite.mapping.server.dto.models.ParametersSet; -import org.gridsuite.mapping.server.utils.SetGroupType; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.*; import java.io.Serializable; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import static javax.persistence.TemporalType.TIMESTAMP; + /** * @author Mathieu Scalbert */ -@Inheritance +@EqualsAndHashCode(onlyExplicitlyIncluded = true) @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_sets") public class ModelParameterSetEntity implements Serializable { @Id + @EqualsAndHashCode.Include @Column(name = "name") private String name; - @Id - @Column(name = "group_name") - private String groupName; - - @Id - @Column(name = "model_name") - private String modelName; - - @Id - @Column(name = "group_type") - private SetGroupType groupType; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "set", cascade = CascadeType.ALL, orphanRemoval = true) - private List parameters; + @OneToMany(mappedBy = "parameterSet", cascade = {CascadeType.ALL}, orphanRemoval = true) + private Set parameters; - @Column(name = "last_modified_date") - private Date lastModifiedDate; - - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) @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_name", referencedColumnName = "name", insertable = false, updatable = false), + @JoinColumn(name = "group_type", referencedColumnName = "type", insertable = false, updatable = false) }) private ModelSetsGroupEntity group; public ModelParameterSetEntity(ModelSetsGroupEntity group, ParametersSet set) { - 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(); + this(set.getName(), null, group, null, null); + this.parameters = set.getParameters().stream().map(parameter -> new ModelParameterEntity(this, parameter)) + .collect(Collectors.toSet()); + } + + @CreatedDate + @Temporal(TIMESTAMP) + @Column(name = "created_date", updatable = false) + private Date createdDate; + + @LastModifiedDate + @Temporal(TIMESTAMP) + @Column(name = "updated_date") + private Date updatedDate; + + // --- utils methods --- // + public void addParameters(Collection parameters) { + parameters.forEach(parameter -> parameter.setParameterSet(this)); + this.parameters.addAll(parameters); + } + + public void removeParameters(Collection parameters) { + parameters.forEach(parameter -> parameter.setParameterSet(null)); + this.parameters.removeAll(parameters); } } 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 31ec0ede..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 javax.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 7bc28194..fdc0a1d8 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelSetsGroupEntity.java @@ -6,57 +6,70 @@ */ package org.gridsuite.mapping.server.model; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.gridsuite.mapping.server.dto.models.ParametersSetsGroup; import org.gridsuite.mapping.server.utils.SetGroupType; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.*; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import static javax.persistence.TemporalType.TIMESTAMP; + /** * @author Mathieu Scalbert */ -@Inheritance +@EqualsAndHashCode(onlyExplicitlyIncluded = true) @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) public class ModelSetsGroupEntity implements Serializable { @Id + @EqualsAndHashCode.Include @Column(name = "name") private String name; @Id - @Column(name = "model_name") - private String modelName; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true) - private List sets = new ArrayList<>(0); - - @Id + @EqualsAndHashCode.Include @Column(name = "type") private SetGroupType type; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "model_name", foreignKey = @ForeignKey(name = "model_sets_groups_fk")) - @MapsId("modelName") + @OneToMany(mappedBy = "group", cascade = CascadeType.ALL, orphanRemoval = true) + private Set sets = new LinkedHashSet<>(0); + + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinColumn(name = "model_name", foreignKey = @ForeignKey(name = "model_sets_groups_fk"), updatable = false) private ModelEntity model; public ModelSetsGroupEntity(ModelEntity model, ParametersSetsGroup group) { - 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()); + this(group.getName(), group.getType(), null, model, null, null); + this.sets = group.getSets().stream().map(set -> new ModelParameterSetEntity(this, set)).collect(Collectors.toSet()); + } + + @CreatedDate + @Temporal(TIMESTAMP) + @Column(name = "created_date", updatable = false) + private Date createdDate; + + @LastModifiedDate + @Temporal(TIMESTAMP) + @Column(name = "updated_date") + private Date updatedDate; + + public void addSets(Collection parameterSets) { + parameterSets.forEach(parameterSet -> parameterSet.setGroup(this)); + this.sets.addAll(parameterSets); + } + + public void removeSets(Collection parameterSets) { + parameterSets.forEach(parameterSet -> parameterSet.setGroup(null)); + this.sets.removeAll(parameterSets); } } 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 78406434..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 javax.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 9bddbc79..5ec3dba1 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableDefinitionEntity.java @@ -45,19 +45,15 @@ public class ModelVariableDefinitionEntity implements Serializable { @Column(name = "factor") private Double factor; - // 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 = "variable_definition_name")}, - inverseJoinColumns = {@JoinColumn(name = "model_name")} - ) + @ManyToMany( + mappedBy = "variableDefinitions", + cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) private Set models; - @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) - @JoinTable(name = "model_variable_sets_model_variable_definitions", - joinColumns = {@JoinColumn(name = "variable_definition_name")}, - inverseJoinColumns = {@JoinColumn(name = "variable_set_name")}) + @ManyToMany( + mappedBy = "variableDefinitions", + cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH} + ) private Set variablesSets; public ModelVariableDefinitionEntity(ModelEntity model, ModelVariableSetEntity variablesSet, ModelVariableDefinition variableDefinition) { 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 9a524148..3091849a 100644 --- a/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java +++ b/src/main/java/org/gridsuite/mapping/server/model/ModelVariableSetEntity.java @@ -35,7 +35,11 @@ public class ModelVariableSetEntity implements Serializable { @Column(name = "variable_set_name") private String name; - @ManyToMany(targetEntity = ModelVariableDefinitionEntity.class, mappedBy = "variablesSets", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) + @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")} + ) private Set variableDefinitions = new LinkedHashSet<>(0); @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) diff --git a/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java new file mode 100644 index 00000000..72b8c0a0 --- /dev/null +++ b/src/main/java/org/gridsuite/mapping/server/repository/ModelParameterDefinitionRepository.java @@ -0,0 +1,9 @@ +package org.gridsuite.mapping.server.repository; + +import org.gridsuite.mapping.server.model.ModelParameterDefinitionEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ModelParameterDefinitionRepository extends JpaRepository { +} diff --git a/src/main/java/org/gridsuite/mapping/server/service/ModelService.java b/src/main/java/org/gridsuite/mapping/server/service/ModelService.java index 5fc68c77..655a6b56 100644 --- a/src/main/java/org/gridsuite/mapping/server/service/ModelService.java +++ b/src/main/java/org/gridsuite/mapping/server/service/ModelService.java @@ -16,8 +16,6 @@ */ public interface ModelService { - List getParametersDefinitionsFromModelName(String modelName); - List getModels(); List getSetsFromGroup(String modelName, String groupName, SetGroupType groupType); @@ -28,7 +26,26 @@ public interface ModelService { ParametersSetsGroup deleteSet(String modelName, String groupName, SetGroupType groupType, String setName); + // --- BEGIN parameter definition-related service methods --- // + List getParameterDefinitionsFromModel(String modelName); + + Model addNewParameterDefinitionsToModel(String modelName, List parameterDefinitions); + + Model addExistingParameterDefinitionsToModel(String modelName, List parameterDefinitionNames); + + Model removeExistingParameterDefinitionsFromModel(String modelName, List parameterDefinitionNames); + + Model removeAllParameterDefinitionsOnModel(String modelName); + + List saveNewParameterDefinitions(List parameterDefinitions); + + List deleteParameterDefinitions(List parameterDefinitionNames); + + // --- END parameter definition-related service methods --- // + // --- BEGIN variable-related service methods --- // + List getVariableDefinitionsFromModel(String modelName); + Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitions); Model addExistingVariableDefinitionsToModel(String modelName, List variableDefinitionNames); @@ -39,8 +56,12 @@ public interface ModelService { Model removeAllVariableDefinitionsOnModel(String modelName); + List getVariablesSetsFromModel(String modelName); + VariablesSet saveNewVariablesSet(VariablesSet variableSet); + List getVariableDefinitionsFromVariablesSet(String variableSetName); + VariablesSet addNewVariableDefinitionToVariablesSet(String variableSetName, List variableDefinitions); VariablesSet removeExistingVariableDefinitionFromVariablesSet(String variableSetName, List variableDefinitionNames); @@ -58,5 +79,6 @@ public interface ModelService { List deleteVariableDefinitions(List variableDefinitionNames); List deleteVariablesSets(List variablesSetNames); + // --- BEGIN variable-related service methods --- // } 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 0d82ad05..00811dc1 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 @@ -8,6 +8,7 @@ import org.gridsuite.mapping.server.dto.models.*; 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.repository.ModelVariableRepository; import org.gridsuite.mapping.server.repository.ModelVariablesSetRepository; @@ -17,6 +18,7 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.server.ResponseStatusException; @@ -33,29 +35,29 @@ public class ModelServiceImpl implements ModelService { public static final String VARIABLES_SET_NOT_FOUND = "Variables set not found: "; private final ModelRepository modelRepository; + private final ModelParameterDefinitionRepository modelParameterDefinitionRepository; private final ModelVariableRepository modelVariableRepository; private final ModelVariablesSetRepository modelVariablesSetRepository; @Autowired public ModelServiceImpl( ModelRepository modelRepository, + ModelParameterDefinitionRepository modelParameterDefinitionRepository, ModelVariableRepository modelVariableRepository, ModelVariablesSetRepository modelVariablesSetRepository ) { this.modelRepository = modelRepository; + this.modelParameterDefinitionRepository = modelParameterDefinitionRepository; this.modelVariableRepository = modelVariableRepository; this.modelVariablesSetRepository = modelVariablesSetRepository; } - @Override - public List getParametersDefinitionsFromModelName(String modelName) { - Optional foundModel = modelRepository.findById(modelName); - if (foundModel.isPresent()) { - Model modelToSend = new Model(foundModel.get()); - return modelToSend.getParameterDefinitions(); - } else { - throw new HttpClientErrorException(HttpStatus.NOT_FOUND); - } + private ModelEntity getModelFromOptional(String modelName, Optional foundModelOpt) { + return foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + } + + private ModelVariableSetEntity getVariableSetFromOptional(String variableSetName, Optional foundVariableSetOpt) { + return foundVariableSetOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, VARIABLES_SET_NOT_FOUND + variableSetName)); } @Override @@ -79,30 +81,34 @@ public List getSetsFromGroup(String modelName, String groupName, @Override public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersSetsGroup setsGroup, Boolean strict) { - Optional foundModel = modelRepository.findById(modelName); - if (foundModel.isPresent()) { - ModelEntity modelToUpdate = foundModel.get(); - List savedGroups = modelToUpdate.getSetsGroups(); - ModelSetsGroupEntity previousGroup = savedGroups.stream().filter(savedGroup -> savedGroup.getName().equals(setsGroup.getName())).findAny().orElse(null); - ModelSetsGroupEntity groupToAdd = new ModelSetsGroupEntity(modelToUpdate, setsGroup); - groupToAdd.getSets().forEach(set -> set.setLastModifiedDate(new Date())); - - 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(set -> - previousGroup.getSets().add(set) - ); - } - if (new Model(modelToUpdate).isParameterSetGroupValid(setsGroup.getName(), strict)) { - modelRepository.save(modelToUpdate); - return setsGroup; - } else { - throw new HttpClientErrorException(HttpStatus.BAD_REQUEST); - } + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); + + /* + List savedGroups = modelToUpdate.getSetsGroups(); + ModelSetsGroupEntity previousGroup = savedGroups.stream().filter(savedGroup -> savedGroup.getName().equals(setsGroup.getName())).findAny().orElse(null); + ModelSetsGroupEntity groupToAdd = new ModelSetsGroupEntity(modelToUpdate, setsGroup); + groupToAdd.getSets().forEach(set -> set.setUpdatedDate(new Date())); + + 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(set -> + previousGroup.getSets().add(set) + ); + }*/ + + // do merge with the list of set group + ModelSetsGroupEntity newSetsGroupEntity = new ModelSetsGroupEntity(modelToUpdate, setsGroup); + modelToUpdate.addSetsGroup(List.of(newSetsGroupEntity)); + + if (new Model(modelToUpdate).isParameterSetGroupValid(setsGroup.getName(), strict)) { + modelRepository.save(modelToUpdate); + return setsGroup; } else { - throw new HttpClientErrorException(HttpStatus.NOT_FOUND); + throw new HttpClientErrorException(HttpStatus.BAD_REQUEST); } } @@ -122,8 +128,8 @@ public ParametersSetsGroup deleteSet(String modelName, String groupName, SetGrou .filter(setGroup -> setGroup.getName().equals(groupName) && setGroup.getType().equals(groupType)) .findAny() .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "No group found")); - List sets = setsGroup.getSets(); - setsGroup.setSets(sets.stream().filter(set -> !set.getName().equals(setName)).collect(Collectors.toList())); + Set sets = setsGroup.getSets(); + setsGroup.setSets(sets.stream().filter(set -> !set.getName().equals(setName)).collect(Collectors.toSet())); modelRepository.save(modelToEdit); return new ParametersSetsGroup(setsGroup); } else { @@ -131,25 +137,160 @@ public ParametersSetsGroup deleteSet(String modelName, String groupName, SetGrou } } + // --- BEGIN parameter definition-related service methods --- // + @Override + public List getParameterDefinitionsFromModel(String modelName) { + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); + + Model modelToSend = new Model(modelEntity); + return modelToSend.getParameterDefinitions(); + } + + @Override + @Transactional + public Model addNewParameterDefinitionsToModel(String modelName, List parameterDefinitions) { + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); + + // do merge with the list of parameter definitions + if (!CollectionUtils.isEmpty(parameterDefinitions)) { + // do merge with existing list + List parameterDefinitionEntities = parameterDefinitions.stream() + .map(parameterDefinition -> new ModelParameterDefinitionEntity(modelToUpdate, parameterDefinition)) + .collect(Collectors.toList()); + modelToUpdate.addParameterDefinitions(parameterDefinitionEntities); + // save modified existing model entity + modelRepository.save(modelToUpdate); + } + + return new Model(modelToUpdate); + } + + @Override + @Transactional + public Model addExistingParameterDefinitionsToModel(String modelName, List parameterDefinitionNames) { + Optional foundModelOpt = modelRepository.findById(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); + + // check whether found all, fail fast + if (foundParameterDefinitionEntities.size() != parameterDefinitionNames.size()) { + List foundNames = foundParameterDefinitionEntities.stream().map(ModelParameterDefinitionEntity::getName).collect(Collectors.toList()); + List notFoundNames = parameterDefinitionNames.stream().filter(name -> !foundNames.contains(name)).collect(Collectors.toList()); + throw new HttpClientErrorException(HttpStatus.NOT_FOUND, "Some parameter definition not found: " + notFoundNames); + } + + // do merge with existing list + modelToUpdate.addParameterDefinitions(foundParameterDefinitionEntities); + + // save modified existing model entity + modelRepository.save(modelToUpdate); + } + + return new Model(modelToUpdate); + + } + + @Override + @Transactional + public Model removeExistingParameterDefinitionsFromModel(String modelName, List parameterDefinitionNames) { + Optional foundModelOpt = modelRepository.findById(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); + + // remove in existing list + modelToUpdate.removeParameterDefinitions(foundParameterDefinitionEntities); + + // save modified existing model entity + modelRepository.save(modelToUpdate); + } + + return new Model(modelToUpdate); + + } + + @Override + @Transactional + public Model removeAllParameterDefinitionsOnModel(String modelName) { + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); + + // clear the existing list + modelToUpdate.removeParameterDefinitions(modelToUpdate.getParameterDefinitions()); + + // save modified existing model entity + modelRepository.save(modelToUpdate); + + return new Model(modelToUpdate); + } + + @Override + @Transactional + public List saveNewParameterDefinitions(List parameterDefinitions) { + if (!CollectionUtils.isEmpty(parameterDefinitions)) { + Set parameterDefinitionEntities = parameterDefinitions.stream().map(variableDefinition -> new ModelParameterDefinitionEntity(null, variableDefinition)).collect(Collectors.toCollection(LinkedHashSet::new)); + List savedParameterDefinitionEntities = modelParameterDefinitionRepository.saveAll(parameterDefinitionEntities); + return savedParameterDefinitionEntities.stream().map(ModelParameterDefinition::new).collect(Collectors.toList()); + } + + return Collections.emptyList(); + } + + @Override + @Transactional + public List deleteParameterDefinitions(List parameterDefinitionNames) { + if (!CollectionUtils.isEmpty(parameterDefinitionNames)) { + modelParameterDefinitionRepository.deleteAllById(parameterDefinitionNames); + } + return parameterDefinitionNames; + } + + @Override + public List getVariableDefinitionsFromModel(String modelName) { + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); + + Model modelToSend = new Model(modelEntity); + return modelToSend.getVariableDefinitions(); + } + // --- END parameter definition-related service methods --- // + // --- BEGIN variable-related service methods --- // @Override @Transactional public Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitions) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variable definitions - if (variableDefinitions != null && !variableDefinitions.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitions)) { // do merge with existing list - List variableDefinitionEntities = variableDefinitions.stream().map(variableDefinition -> new ModelVariableDefinitionEntity(modelToUpdate, null, variableDefinition)).collect(Collectors.toList()); + List variableDefinitionEntities = variableDefinitions.stream() + .map(variableDefinition -> new ModelVariableDefinitionEntity(modelToUpdate, null, variableDefinition)) + .collect(Collectors.toList()); modelToUpdate.addVariableDefinitions(variableDefinitionEntities); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); - } else { - return new Model(modelToUpdate); + modelRepository.save(modelToUpdate); } + + return new Model(modelToUpdate); + } @Override @@ -157,14 +298,14 @@ public Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitionNames) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variable definitions - if (variableDefinitionNames != null && !variableDefinitionNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); - // check whether found all + // check whether found all, fail fast if (foundVariableDefinitionEntities.size() != variableDefinitionNames.size()) { List foundNames = foundVariableDefinitionEntities.stream().map(ModelVariableDefinitionEntity::getName).collect(Collectors.toList()); List notFoundNames = variableDefinitionNames.stream().filter(name -> !foundNames.contains(name)).collect(Collectors.toList()); @@ -175,11 +316,10 @@ public Model addExistingVariableDefinitionsToModel(String modelName, List variableDefinitionNames) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do remove in the list of variable definitions - if (variableDefinitionNames != null && !variableDefinitionNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); @@ -198,17 +338,16 @@ public Model removeExistingVariableDefinitionsFromModel(String modelName, List saveNewVariableDefinitions(List variableDefinitions) { - if (variableDefinitions != null && !variableDefinitions.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitions)) { Set variableDefinitionEntities = variableDefinitions.stream().map(variableDefinition -> new ModelVariableDefinitionEntity(null, null, variableDefinition)).collect(Collectors.toCollection(LinkedHashSet::new)); List savedVariableDefinitionEntities = modelVariableRepository.saveAll(variableDefinitionEntities); return savedVariableDefinitionEntities.stream().map(ModelVariableDefinition::new).collect(Collectors.toList()); @@ -221,14 +360,25 @@ public List saveNewVariableDefinitions(List foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // clear the existing list modelToUpdate.removeVariableDefinitions(modelToUpdate.getVariableDefinitions()); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); + modelRepository.save(modelToUpdate); + + return new Model(modelToUpdate); + } + + @Override + public List getVariablesSetsFromModel(String modelName) { + Optional foundModelOpt = modelRepository.findById(modelName); + + ModelEntity modelEntity = getModelFromOptional(modelName, foundModelOpt); + + Model modelToSend = new Model(modelEntity); + return modelToSend.getVariablesSets(); } @Override @@ -239,34 +389,42 @@ public VariablesSet saveNewVariablesSet(VariablesSet variableSet) { return new VariablesSet(savedVariableSetEntity); } + @Override + public List getVariableDefinitionsFromVariablesSet(String variableSetName) { + Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); + + ModelVariableSetEntity variableSetEntity = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); + + VariablesSet variablesSet = new VariablesSet(variableSetEntity); + return variablesSet.getVariableDefinitions(); + } + @Override @Transactional public VariablesSet addNewVariableDefinitionToVariablesSet(String variableSetName, List variableDefinitions) { - Optional foundModelOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); - ModelVariableSetEntity variableSetToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, VARIABLES_SET_NOT_FOUND + variableSetName)); + ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); - if (variableDefinitions != null && !variableDefinitions.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitions)) { // do merge with existing list List variableDefinitionEntities = variableDefinitions.stream().map(variableDefinition -> new ModelVariableDefinitionEntity(null, variableSetToUpdate, variableDefinition)).collect(Collectors.toList()); variableSetToUpdate.addVariableDefinitions(variableDefinitionEntities); // save modified existing variables set entity - ModelVariableSetEntity savedVariablesSetEntity = modelVariablesSetRepository.save(variableSetToUpdate); - return new VariablesSet(savedVariablesSetEntity); - - } else { - return new VariablesSet(variableSetToUpdate); + modelVariablesSetRepository.save(variableSetToUpdate); } + + return new VariablesSet(variableSetToUpdate); } @Override @Transactional public VariablesSet removeExistingVariableDefinitionFromVariablesSet(String variableSetName, List variableDefinitionNames) { - Optional foundModelOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); - ModelVariableSetEntity variableSetToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, VARIABLES_SET_NOT_FOUND + variableSetName)); + ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); - if (variableDefinitionNames != null && !variableDefinitionNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitionNames)) { // find existing variable definitions List foundVariableDefinitionEntities = modelVariableRepository.findAllById(variableDefinitionNames); @@ -275,28 +433,26 @@ public VariablesSet removeExistingVariableDefinitionFromVariablesSet(String vari // save modified existing variables set entity // variable definitions are systematically deleted via orphanRemoval = true - ModelVariableSetEntity savedVariablesSetEntity = modelVariablesSetRepository.save(variableSetToUpdate); - - return new VariablesSet(savedVariablesSetEntity); - } else { - return new VariablesSet(variableSetToUpdate); + modelVariablesSetRepository.save(variableSetToUpdate); } + + return new VariablesSet(variableSetToUpdate); } @Override @Transactional public VariablesSet removeAllVariableDefinitionOnVariablesSet(String variableSetName) { - Optional foundModelOpt = modelVariablesSetRepository.findById(variableSetName); + Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName); - ModelVariableSetEntity variableSetToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, VARIABLES_SET_NOT_FOUND + variableSetName)); + ModelVariableSetEntity variableSetToUpdate = getVariableSetFromOptional(variableSetName, foundVariableSetOpt); // clear the existing list variableSetToUpdate.removeVariableDefinitions(variableSetToUpdate.getVariableDefinitions()); // save modified existing variables set entity // variable definitions are systematically deleted via orphanRemoval = true - ModelVariableSetEntity savedVariablesSetEntity = modelVariablesSetRepository.save(variableSetToUpdate); - return new VariablesSet(savedVariablesSetEntity); + modelVariablesSetRepository.save(variableSetToUpdate); + return new VariablesSet(variableSetToUpdate); } @Override @@ -304,19 +460,18 @@ public VariablesSet removeAllVariableDefinitionOnVariablesSet(String variableSet public Model addNewVariablesSetsToModel(String modelName, List variableSets) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variables set - if (variableSets != null && !variableSets.isEmpty()) { + if (!CollectionUtils.isEmpty(variableSets)) { // do merge with existing list List variablesSetEntities = variableSets.stream().map(variablesSet -> new ModelVariableSetEntity(modelToUpdate, variablesSet)).collect(Collectors.toList()); modelToUpdate.addVariablesSets(variablesSetEntities); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); - } else { - return new Model(modelToUpdate); + modelRepository.save(modelToUpdate); } + + return new Model(modelToUpdate); } @Override @@ -324,10 +479,10 @@ public Model addNewVariablesSetsToModel(String modelName, List var public Model addExistingVariablesSetsToModel(String modelName, List variablesSetNames) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variables set - if (variablesSetNames != null && !variablesSetNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variablesSetNames)) { // do merge with existing list List foundVariablesSetEntities = modelVariablesSetRepository.findAllById(variablesSetNames); @@ -340,11 +495,10 @@ public Model addExistingVariablesSetsToModel(String modelName, List vari modelToUpdate.addVariablesSets(foundVariablesSetEntities); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); - } else { - return new Model(modelToUpdate); + modelRepository.save(modelToUpdate); } + + return new Model(modelToUpdate); } @Override @@ -352,41 +506,42 @@ public Model addExistingVariablesSetsToModel(String modelName, List vari public Model removeExistingVariablesSetsFromModel(String modelName, List variablesSetNames) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); // do merge with the list of variables set - if (variablesSetNames != null && !variablesSetNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variablesSetNames)) { // remove from existing list List foundVariablesSetEntities = modelVariablesSetRepository.findAllById(variablesSetNames); modelToUpdate.removeVariablesSets(foundVariablesSetEntities); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); - } else { - return new Model(modelToUpdate); + modelRepository.save(modelToUpdate); } + + return new Model(modelToUpdate); } @Override public Model removeAllExistingVariablesSetsFromModel(String modelName) { Optional foundModelOpt = modelRepository.findById(modelName); - ModelEntity modelToUpdate = foundModelOpt.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND, MODEL_NOT_FOUND + modelName)); + ModelEntity modelToUpdate = getModelFromOptional(modelName, foundModelOpt); modelToUpdate.removeVariablesSets(modelToUpdate.getVariableSets()); // save modified existing model entity - ModelEntity savedModelEntity = modelRepository.save(modelToUpdate); - return new Model(savedModelEntity); + modelRepository.save(modelToUpdate); + + return new Model(modelToUpdate); } @Override @Transactional public List deleteVariableDefinitions(List variableDefinitionNames) { - if (variableDefinitionNames != null && !variableDefinitionNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variableDefinitionNames)) { modelVariableRepository.deleteAllById(variableDefinitionNames); } + return variableDefinitionNames; } @@ -394,7 +549,7 @@ public List deleteVariableDefinitions(List variableDefinitionNam @Transactional public List deleteVariablesSets(List variablesSetNames) { - if (variablesSetNames != null && !variablesSetNames.isEmpty()) { + if (!CollectionUtils.isEmpty(variablesSetNames)) { // cleanup associations List foundVariablesSetEntities = modelVariablesSetRepository.findAllById(variablesSetNames); @@ -409,7 +564,7 @@ public List deleteVariablesSets(List variablesSetNames) { return foundVariablesSetNames; } - return List.of(); + return variablesSetNames; } // --- END variable-related service methods --- // diff --git a/src/main/java/org/gridsuite/mapping/server/utils/Templater.java b/src/main/java/org/gridsuite/mapping/server/utils/Templater.java index 1a1609f4..f80204ad 100644 --- a/src/main/java/org/gridsuite/mapping/server/utils/Templater.java +++ b/src/main/java/org/gridsuite/mapping/server/utils/Templater.java @@ -69,7 +69,7 @@ public static String mappingToScript(ScriptServiceImpl.SortedMapping sortedMappi String[] rulesScripts = sortedRules.getRules().stream().map(flatRule -> { ST ruleScript = new ST(ruleTemplate); ruleScript.add("composition", flatRule.getComposition()); - ruleScript.add("modelName", flatRule.getMappedModel().getModelName()); + ruleScript.add("modelName", flatRule.getMappedModel().getModel().getModelName()); ruleScript.add("parameterSetId", modelToParamSetId(flatRule.getMappedModel())); return ruleScript.render(); }).toArray(String[]::new); diff --git a/src/main/resources/IEEE14Models.sql b/src/main/resources/IEEE14Models.sql index 55f798b1..627ccc6e 100644 --- a/src/main/resources/IEEE14Models.sql +++ b/src/main/resources/IEEE14Models.sql @@ -1,15 +1,15 @@ -- Temporary models values while no user interface for them is provided. -INSERT INTO models (model_name, equipment_type) -VALUES ('GeneratorSynchronousThreeWindings', 0), - ('GeneratorSynchronousFourWindings', 0), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 0), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 0), - ('GeneratorPQ', 0), - ('GeneratorPV', 0), - ('LoadAlphaBeta', 1), - ('LoadPQ', 1), - ('CurrentLimitAutomaton', 2); +INSERT INTO models (model_name, equipment_type, created_date) +VALUES ('GeneratorSynchronousThreeWindings', 0, now()::timestamp), + ('GeneratorSynchronousFourWindings', 0, now()::timestamp), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 0, now()::timestamp), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 0, now()::timestamp), + ('GeneratorPQ', 0, now()::timestamp), + ('GeneratorPV', 0, now()::timestamp), + ('LoadAlphaBeta', 1, now()::timestamp), + ('LoadPQ', 1, now()::timestamp), + ('CurrentLimitAutomaton', 2, now()::timestamp); INSERT INTO model_sets_group (model_name, name, type) VALUES ('GeneratorSynchronousThreeWindings', 'GSTW', 0), @@ -37,223 +37,295 @@ VALUES ('GSTW', 0, 'GeneratorSynchronousThreeWindings', 'GSTW'), ('CLA_2_4', 0, 'CurrentLimitAutomaton', 'CLA_2_4'), ('CLA_2_5', 0, 'CurrentLimitAutomaton', 'CLA_2_5'); -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type, fixed_value) -VALUES ('GeneratorSynchronousThreeWindings', 'generator_UNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_SNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_PNomTurb', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_PNomAlt', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_ExcitationPu', 1, NULL, 0, 1), - ('GeneratorSynchronousThreeWindings', 'generator_MdPuEfd', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_H', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_DPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_SnTfo', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_UNomHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_UNomLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_UBaseHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_UBaseLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_RTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_RaPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XlPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XpdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XppdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_Tpd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_Tppd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_XppqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_Tppq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_md', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_mq', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_nd', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_nq', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindings', 'URef_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousThreeWindings', 'Pm_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousThreeWindings', 'generator_P0Pu', 0, 'p_pu', 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_Q0Pu', 0, 'q_pu', 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_UPhase0', 0, 'angle_pu', 2, NULL), - ('GeneratorSynchronousThreeWindings', 'generator_U0Pu', 0, 'v_pu', 2, NULL); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type, fixed_value) -VALUES ('GeneratorSynchronousFourWindings', 'generator_UNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_SNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_PNomTurb', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_PNomAlt', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_ExcitationPu', 1, NULL, 0, 1), - ('GeneratorSynchronousFourWindings', 'generator_MdPuEfd', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_H', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_DPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_SnTfo', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_UNomHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_UNomLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_UBaseHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_UBaseLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_RTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_RaPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XlPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XpdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XppdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_Tpd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_Tppd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XppqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_Tppq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_md', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_mq', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_nd', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_nq', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_XpqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_Tpq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindings', 'URef_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousFourWindings', 'Pm_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousFourWindings', 'generator_P0Pu', 0, 'p_pu', 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_Q0Pu', 0, 'q_pu', 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_UPhase0', 0, 'angle_pu', 2, NULL), - ('GeneratorSynchronousFourWindings', 'generator_U0Pu', 0, 'v_pu', 2, NULL); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type, fixed_value) -VALUES ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_SNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_PNomTurb', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_PNomAlt', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_ExcitationPu', 1, NULL, 0, 1), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_MdPuEfd', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_H', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_DPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_SnTfo', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNomHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNomLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UBaseHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UBaseLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_RTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_RaPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XlPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XpdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XppdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tpd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tppd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XppqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tppq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_md', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_mq', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_nd', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_nq', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_KGover', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PMin', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PMax', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_LagEfdMin', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_LagEfdMax', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_EfdMinPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_EfdMaxPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_UsRefMinPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_UsRefMaxPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_Gain', 2, NULL, 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'URef_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'Pm_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_P0Pu', 0, 'p_pu', 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Q0Pu', 0, 'q_pu', 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UPhase0', 0, 'angle_pu', 2, NULL), - ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_U0Pu', 0, 'v_pu', 2, NULL); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type, fixed_value) -VALUES ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_SNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_PNomTurb', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_PNomAlt', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_ExcitationPu', 1, NULL, 0, 1), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_MdPuEfd', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_H', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_DPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_SnTfo', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNomHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNomLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UBaseHV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UBaseLV', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_RTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XTfPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_RaPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XlPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XpdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XppdPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tpd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tppd0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XppqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tppq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_md', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_mq', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_nd', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_nq', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XpqPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tpq0', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_KGover', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PMin', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PMax', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PNom', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_LagEfdMin', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_LagEfdMax', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_EfdMinPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_EfdMaxPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_UsRefMinPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_UsRefMaxPu', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_Gain', 2, NULL, 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'URef_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'Pm_ValueIn', 1, NULL, 2, 0), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_P0Pu', 0, 'p_pu', 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Q0Pu', 0, 'q_pu', 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UPhase0', 0, 'angle_pu', 2, NULL), - ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_U0Pu', 0, 'v_pu', 2, NULL); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type) -VALUES ('GeneratorPQ', 'generator_AlphaPuPNom', 2, NULL, 2), - ('GeneratorPQ', 'generator_PNom', 0, 'pMax', 2), - ('GeneratorPQ', 'generator_PMin', 0, 'pMin', 2), - ('GeneratorPQ', 'generator_PMax', 0, 'pMax', 2), - ('GeneratorPQ', 'generator_P0Pu', 0, 'p_pu', 2), - ('GeneratorPQ', 'generator_Q0Pu', 0, 'q_pu', 2), - ('GeneratorPQ', 'generator_U0Pu', 0, 'v_pu', 2), - ('GeneratorPQ', 'generator_UPhase0', 0, 'angle_pu', 2); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type) -VALUES ('GeneratorPV', 'generator_AlphaPuPNom', 2, NULL, 2), - ('GeneratorPV', 'generator_LambdaPuSNom', 2, NULL, 2), - ('GeneratorPV', 'generator_QMax', 2, NULL, 2), - ('GeneratorPV', 'generator_QMin', 2, NULL, 2), - ('GeneratorPV', 'generator_PNom', 0, 'pMax', 2), - ('GeneratorPV', 'generator_SNom', 0, 'pMax', 2), - ('GeneratorPV', 'generator_PMin', 0, 'pMin', 2), - ('GeneratorPV', 'generator_PMax', 0, 'pMax', 2), - ('GeneratorPV', 'generator_P0Pu', 0, 'p_pu', 2), - ('GeneratorPV', 'generator_Q0Pu', 0, 'q_pu', 2), - ('GeneratorPV', 'generator_U0Pu', 0, 'v_pu', 2), - ('GeneratorPV', 'generator_UPhase0', 0, 'angle_pu', 2); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type) -VALUES ('LoadAlphaBeta', 'load_alpha', 2, NULL, 2), - ('LoadAlphaBeta', 'load_beta', 2, NULL, 2), - ('LoadAlphaBeta', 'load_P0Pu', 0, 'p_pu', 2), - ('LoadAlphaBeta', 'load_Q0Pu', 0, 'q_pu', 2), - ('LoadAlphaBeta', 'load_U0Pu', 0, 'v_pu', 2), - ('LoadAlphaBeta', 'load_UPhase0', 0, 'angle_pu', 2); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type) -VALUES ('LoadPQ', 'load_P0Pu', 0, 'p_pu', 2), - ('LoadPQ', 'load_Q0Pu', 0, 'q_pu', 2), - ('LoadPQ', 'load_U0Pu', 0, 'v_pu', 2), - ('LoadPQ', 'load_UPhase0', 0, 'angle_pu', 2); - -INSERT INTO model_parameter_definitions (model_name, name, origin, origin_name, type) -VALUES ('CurrentLimitAutomaton', 'currentLimitAutomaton_OrderToEmit', 2, NULL, 0), - ('CurrentLimitAutomaton', 'currentLimitAutomaton_Running', 2, NULL, 1), - ('CurrentLimitAutomaton', 'currentLimitAutomaton_IMax', 2, NULL, 2), - ('CurrentLimitAutomaton', 'currentLimitAutomaton_tLagBeforeActing', 2, NULL, 2); +INSERT INTO model_parameter_definitions (name, origin, origin_name, type, fixed_value, created_date) +VALUES ('generator_UNom', 2, NULL, 2, NULL, now()::timestamp), + ('generator_SNom', 2, NULL, 2, NULL, now()::timestamp), + ('generator_PNomTurb', 2, NULL, 2, NULL, now()::timestamp), + ('generator_PNomAlt', 2, NULL, 2, NULL, now()::timestamp), + ('generator_ExcitationPu', 1, NULL, 0, 1, now()::timestamp), + ('generator_MdPuEfd', 2, NULL, 2, NULL, now()::timestamp), + ('generator_H', 2, NULL, 2, NULL, now()::timestamp), + ('generator_DPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_SnTfo', 2, NULL, 2, NULL, now()::timestamp), + ('generator_UNomHV', 2, NULL, 2, NULL, now()::timestamp), + ('generator_UNomLV', 2, NULL, 2, NULL, now()::timestamp), + ('generator_UBaseHV', 2, NULL, 2, NULL, now()::timestamp), + ('generator_UBaseLV', 2, NULL, 2, NULL, now()::timestamp), + ('generator_RTfPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XTfPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_RaPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XlPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XdPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XpdPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XppdPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_Tpd0', 2, NULL, 2, NULL, now()::timestamp), + ('generator_Tppd0', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XqPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_XppqPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_Tppq0', 2, NULL, 2, NULL, now()::timestamp), + ('generator_md', 2, NULL, 2, NULL, now()::timestamp), + ('generator_mq', 2, NULL, 2, NULL, now()::timestamp), + ('generator_nd', 2, NULL, 2, NULL, now()::timestamp), + ('generator_nq', 2, NULL, 2, NULL, now()::timestamp), + ('URef_ValueIn', 1, NULL, 2, 0, now()::timestamp), + ('Pm_ValueIn', 1, NULL, 2, 0, now()::timestamp), + ('generator_P0Pu', 0, 'p_pu', 2, NULL, now()::timestamp), + ('generator_Q0Pu', 0, 'q_pu', 2, NULL, now()::timestamp), + ('generator_UPhase0', 0, 'angle_pu', 2, NULL, now()::timestamp), + ('generator_U0Pu', 0, 'v_pu', 2, NULL, now()::timestamp), + ('generator_XpqPu', 2, NULL, 2, NULL, now()::timestamp), + ('generator_Tpq0', 2, NULL, 2, NULL, now()::timestamp), + ('governor_KGover', 2, NULL, 2, NULL, now()::timestamp), + ('governor_PMin', 2, NULL, 2, NULL, now()::timestamp), + ('governor_PMax', 2, NULL, 2, NULL, now()::timestamp), + ('governor_PNom', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_LagEfdMin', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_LagEfdMax', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_EfdMinPu', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_EfdMaxPu', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_UsRefMinPu', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_UsRefMaxPu', 2, NULL, 2, NULL, now()::timestamp), + ('voltageRegulator_Gain', 2, NULL, 2, NULL, now()::timestamp), + ('generator_AlphaPuPNom', 2, NULL, 2, NULL, now()::timestamp), + ('generator_PNom', 0, 'pMax', 2, NULL, now()::timestamp), + ('generator_PMin', 0, 'pMin', 2, NULL, now()::timestamp), + ('generator_PMax', 0, 'pMax', 2, NULL, now()::timestamp), + ('generator_LambdaPuSNom', 2, NULL, 2, NULL, now()::timestamp), + ('generator_QMax', 2, NULL, 2, NULL, now()::timestamp), + ('generator_QMin', 2, NULL, 2, NULL, now()::timestamp); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorSynchronousThreeWindings', 'generator_UNom'), + ('GeneratorSynchronousThreeWindings', 'generator_SNom'), + ('GeneratorSynchronousThreeWindings', 'generator_PNomTurb'), + ('GeneratorSynchronousThreeWindings', 'generator_PNomAlt'), + ('GeneratorSynchronousThreeWindings', 'generator_ExcitationPu'), + ('GeneratorSynchronousThreeWindings', 'generator_MdPuEfd'), + ('GeneratorSynchronousThreeWindings', 'generator_H'), + ('GeneratorSynchronousThreeWindings', 'generator_DPu'), + ('GeneratorSynchronousThreeWindings', 'generator_SnTfo'), + ('GeneratorSynchronousThreeWindings', 'generator_UNomHV'), + ('GeneratorSynchronousThreeWindings', 'generator_UNomLV'), + ('GeneratorSynchronousThreeWindings', 'generator_UBaseHV'), + ('GeneratorSynchronousThreeWindings', 'generator_UBaseLV'), + ('GeneratorSynchronousThreeWindings', 'generator_RTfPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XTfPu'), + ('GeneratorSynchronousThreeWindings', 'generator_RaPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XlPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XdPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XpdPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XppdPu'), + ('GeneratorSynchronousThreeWindings', 'generator_Tpd0'), + ('GeneratorSynchronousThreeWindings', 'generator_Tppd0'), + ('GeneratorSynchronousThreeWindings', 'generator_XqPu'), + ('GeneratorSynchronousThreeWindings', 'generator_XppqPu'), + ('GeneratorSynchronousThreeWindings', 'generator_Tppq0'), + ('GeneratorSynchronousThreeWindings', 'generator_md'), + ('GeneratorSynchronousThreeWindings', 'generator_mq'), + ('GeneratorSynchronousThreeWindings', 'generator_nd'), + ('GeneratorSynchronousThreeWindings', 'generator_nq'), + ('GeneratorSynchronousThreeWindings', 'URef_ValueIn'), + ('GeneratorSynchronousThreeWindings', 'Pm_ValueIn'), + ('GeneratorSynchronousThreeWindings', 'generator_P0Pu'), + ('GeneratorSynchronousThreeWindings', 'generator_Q0Pu'), + ('GeneratorSynchronousThreeWindings', 'generator_UPhase0'), + ('GeneratorSynchronousThreeWindings', 'generator_U0Pu'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorSynchronousFourWindings', 'generator_UNom'), + ('GeneratorSynchronousFourWindings', 'generator_SNom'), + ('GeneratorSynchronousFourWindings', 'generator_PNomTurb'), + ('GeneratorSynchronousFourWindings', 'generator_PNomAlt'), + ('GeneratorSynchronousFourWindings', 'generator_ExcitationPu'), + ('GeneratorSynchronousFourWindings', 'generator_MdPuEfd'), + ('GeneratorSynchronousFourWindings', 'generator_H'), + ('GeneratorSynchronousFourWindings', 'generator_DPu'), + ('GeneratorSynchronousFourWindings', 'generator_SnTfo'), + ('GeneratorSynchronousFourWindings', 'generator_UNomHV'), + ('GeneratorSynchronousFourWindings', 'generator_UNomLV'), + ('GeneratorSynchronousFourWindings', 'generator_UBaseHV'), + ('GeneratorSynchronousFourWindings', 'generator_UBaseLV'), + ('GeneratorSynchronousFourWindings', 'generator_RTfPu'), + ('GeneratorSynchronousFourWindings', 'generator_XTfPu'), + ('GeneratorSynchronousFourWindings', 'generator_RaPu'), + ('GeneratorSynchronousFourWindings', 'generator_XlPu'), + ('GeneratorSynchronousFourWindings', 'generator_XdPu'), + ('GeneratorSynchronousFourWindings', 'generator_XpdPu'), + ('GeneratorSynchronousFourWindings', 'generator_XppdPu'), + ('GeneratorSynchronousFourWindings', 'generator_Tpd0'), + ('GeneratorSynchronousFourWindings', 'generator_Tppd0'), + ('GeneratorSynchronousFourWindings', 'generator_XqPu'), + ('GeneratorSynchronousFourWindings', 'generator_XppqPu'), + ('GeneratorSynchronousFourWindings', 'generator_Tppq0'), + ('GeneratorSynchronousFourWindings', 'generator_md'), + ('GeneratorSynchronousFourWindings', 'generator_mq'), + ('GeneratorSynchronousFourWindings', 'generator_nd'), + ('GeneratorSynchronousFourWindings', 'generator_nq'), + ('GeneratorSynchronousFourWindings', 'generator_XpqPu'), + ('GeneratorSynchronousFourWindings', 'generator_Tpq0'), + ('GeneratorSynchronousFourWindings', 'URef_ValueIn'), + ('GeneratorSynchronousFourWindings', 'Pm_ValueIn'), + ('GeneratorSynchronousFourWindings', 'generator_P0Pu'), + ('GeneratorSynchronousFourWindings', 'generator_Q0Pu'), + ('GeneratorSynchronousFourWindings', 'generator_UPhase0'), + ('GeneratorSynchronousFourWindings', 'generator_U0Pu'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNom'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_SNom'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_PNomTurb'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_PNomAlt'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_ExcitationPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_MdPuEfd'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_H'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_DPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_SnTfo'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNomHV'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UNomLV'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UBaseHV'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UBaseLV'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_RTfPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XTfPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_RaPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XlPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XdPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XpdPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XppdPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tpd0'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tppd0'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XqPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_XppqPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Tppq0'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_md'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_mq'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_nd'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_nq'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_KGover'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PMin'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PMax'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'governor_PNom'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_LagEfdMin'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_LagEfdMax'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_EfdMinPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_EfdMaxPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_UsRefMinPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_UsRefMaxPu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'voltageRegulator_Gain'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'URef_ValueIn'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'Pm_ValueIn'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_P0Pu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_Q0Pu'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UPhase0'), + ('GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_U0Pu'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNom'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_SNom'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_PNomTurb'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_PNomAlt'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_ExcitationPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_MdPuEfd'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_H'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_DPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_SnTfo'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNomHV'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UNomLV'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UBaseHV'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UBaseLV'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_RTfPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XTfPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_RaPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XlPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XdPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XpdPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XppdPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tpd0'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tppd0'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XqPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XppqPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tppq0'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_md'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_mq'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_nd'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_nq'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_XpqPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Tpq0'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_KGover'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PMin'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PMax'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'governor_PNom'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_LagEfdMin'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_LagEfdMax'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_EfdMinPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_EfdMaxPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_UsRefMinPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_UsRefMaxPu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'voltageRegulator_Gain'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'URef_ValueIn'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'Pm_ValueIn'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_P0Pu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_Q0Pu'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_UPhase0'), + ('GeneratorSynchronousFourWindingsProportionalRegulations', 'generator_U0Pu'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorPQ', 'generator_AlphaPuPNom'), + ('GeneratorPQ', 'generator_PNom'), + ('GeneratorPQ', 'generator_PMin'), + ('GeneratorPQ', 'generator_PMax'), + ('GeneratorPQ', 'generator_P0Pu'), + ('GeneratorPQ', 'generator_Q0Pu'), + ('GeneratorPQ', 'generator_U0Pu'), + ('GeneratorPQ', 'generator_UPhase0'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('GeneratorPV', 'generator_AlphaPuPNom'), + ('GeneratorPV', 'generator_LambdaPuSNom'), + ('GeneratorPV', 'generator_QMax'), + ('GeneratorPV', 'generator_QMin'), + ('GeneratorPV', 'generator_PNom'), + ('GeneratorPV', 'generator_SNom'), + ('GeneratorPV', 'generator_PMin'), + ('GeneratorPV', 'generator_PMax'), + ('GeneratorPV', 'generator_P0Pu'), + ('GeneratorPV', 'generator_Q0Pu'), + ('GeneratorPV', 'generator_U0Pu'), + ('GeneratorPV', 'generator_UPhase0'); + +INSERT INTO model_parameter_definitions (name, origin, origin_name, type, created_date) +VALUES ('load_alpha', 2, NULL, 2, now()::timestamp), + ('load_beta', 2, NULL, 2, now()::timestamp), + ('load_P0Pu', 0, 'p_pu', 2, now()::timestamp), + ('load_Q0Pu', 0, 'q_pu', 2, now()::timestamp), + ('load_U0Pu', 0, 'v_pu', 2, now()::timestamp), + ('load_UPhase0', 0, 'angle_pu', 2, now()::timestamp); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('LoadAlphaBeta', 'load_alpha'), + ('LoadAlphaBeta', 'load_beta'), + ('LoadAlphaBeta', 'load_P0Pu'), + ('LoadAlphaBeta', 'load_Q0Pu'), + ('LoadAlphaBeta', 'load_U0Pu'), + ('LoadAlphaBeta', 'load_UPhase0'); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('LoadPQ', 'load_P0Pu'), + ('LoadPQ', 'load_Q0Pu'), + ('LoadPQ', 'load_U0Pu'), + ('LoadPQ', 'load_UPhase0'); + +INSERT INTO model_parameter_definitions (name, origin, origin_name, type, created_date) +VALUES + ('currentLimitAutomaton_OrderToEmit', 2, NULL, 0, now()::timestamp), + ('currentLimitAutomaton_Running', 2, NULL, 1, now()::timestamp), + ('currentLimitAutomaton_IMax', 2, NULL, 2, now()::timestamp), + ('currentLimitAutomaton_tLagBeforeActing', 2, NULL, 2, now()::timestamp); + +INSERT INTO models_model_parameter_definitions (model_name, parameter_definition_name) +VALUES ('CurrentLimitAutomaton', 'currentLimitAutomaton_OrderToEmit'), + ('CurrentLimitAutomaton', 'currentLimitAutomaton_Running'), + ('CurrentLimitAutomaton', 'currentLimitAutomaton_IMax'), + ('CurrentLimitAutomaton', 'currentLimitAutomaton_tLagBeforeActing'); INSERT INTO model_parameters (group_name, group_type, model_name, name, set_name, value_) VALUES ('GSTW', 0, 'GeneratorSynchronousThreeWindings', 'generator_ExcitationPu', 'GSTW', 1.), @@ -486,13 +558,13 @@ VALUES ('CLA', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_OrderToEmit', ('CLA', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_Running', 'CLA', true), ('CLA', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_IMax', 'CLA', 1000.), ('CLA', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_tLagBeforeActing', 'CLA', 10.); - + INSERT INTO model_parameters (group_name, group_type, model_name, name, set_name, value_) VALUES ('CLA_2_4', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_OrderToEmit', 'CLA_2_4', 3), ('CLA_2_4', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_Running', 'CLA_2_4', true), ('CLA_2_4', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_IMax', 'CLA_2_4', 1000.), ('CLA_2_4', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_tLagBeforeActing', 'CLA_2_4', 10.); - + INSERT INTO model_parameters (group_name, group_type, model_name, name, set_name, value_) VALUES ('CLA_2_5', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_OrderToEmit', 'CLA_2_5', 1), ('CLA_2_5', 0, 'CurrentLimitAutomaton', 'currentLimitAutomaton_Running', 'CLA_2_5', true), @@ -779,12 +851,12 @@ VALUES ('IEEE14', 1, 'GeneratorSynchronousThreeWindingsProportionalRegulations', ('IEEE14', 1, 'GeneratorSynchronousThreeWindingsProportionalRegulations', 'generator_UPhase0', 'IEEE14_GEN____8_SM'); -- variables for LoadAlphaBeta model -INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date, updated_date) -VALUES ('load_PPu', 2, 'MW', 100, now()::timestamp, now()::timestamp), - ('load_PRefPu', 2, 'MW', 100, now()::timestamp, now()::timestamp), - ('load_QPu', 2, 'MW', 100, now()::timestamp, now()::timestamp), - ('load_QRefPu', 2, 'MW', 100, now()::timestamp, now()::timestamp), - ('load_running_value', 1, NULL, NULL, now()::timestamp, now()::timestamp); +INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date) +VALUES ('load_PPu', 2, 'MW', 100, now()::timestamp), + ('load_PRefPu', 2, 'MW', 100, now()::timestamp), + ('load_QPu', 2, 'MW', 100, now()::timestamp), + ('load_QRefPu', 2, 'MW', 100, now()::timestamp), + ('load_running_value', 1, NULL, NULL, now()::timestamp); INSERT INTO models_model_variable_definitions (model_name, variable_definition_name) VALUES ('LoadAlphaBeta', 'load_PPu'), @@ -793,16 +865,16 @@ VALUES ('LoadAlphaBeta', 'load_PPu'), ('LoadAlphaBeta', 'load_QRefPu'), ('LoadAlphaBeta', 'load_running_value'); -INSERT INTO model_variable_sets (variable_set_name, created_date, updated_date) -VALUES ('Generator', now()::timestamp, now()::timestamp), - ('VoltageRegulator', now()::timestamp, now()::timestamp); +INSERT INTO model_variable_sets (variable_set_name, created_date) +VALUES ('Generator', now()::timestamp), + ('VoltageRegulator', now()::timestamp); -- variables grouped in sets used in generator models -INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date, updated_date) -VALUES ('generator_omegaPu', 2, 'pu', NULL, now()::timestamp, now()::timestamp), - ('generator_PGen', 2, 'MW', NULL, now()::timestamp, now()::timestamp), - ('generator_QGen', 2, 'MW', NULL, now()::timestamp, now()::timestamp), - ('generator_UStatorPu', 2, 'pu', NULL, now()::timestamp, now()::timestamp); +INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date) +VALUES ('generator_omegaPu', 2, 'pu', NULL, now()::timestamp), + ('generator_PGen', 2, 'MW', NULL, now()::timestamp), + ('generator_QGen', 2, 'MW', NULL, now()::timestamp), + ('generator_UStatorPu', 2, 'pu', NULL, now()::timestamp); INSERT INTO model_variable_sets_model_variable_definitions (variable_definition_name, variable_set_name) VALUES ('generator_omegaPu', 'Generator'), @@ -810,8 +882,8 @@ VALUES ('generator_omegaPu', 'Generator'), ('generator_QGen', 'Generator'), ('generator_UStatorPu', 'Generator'); -INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date, updated_date) -VALUES ('voltageRegulator_EfdPu', 2, 'pu', NULL, now()::timestamp, now()::timestamp); +INSERT INTO model_variable_definitions (variable_definition_name, type, unit, factor, created_date) +VALUES ('voltageRegulator_EfdPu', 2, 'pu', NULL, now()::timestamp); INSERT INTO model_variable_sets_model_variable_definitions (variable_definition_name, variable_set_name) VALUES ('voltageRegulator_EfdPu', 'VoltageRegulator'); diff --git a/src/main/resources/db/changelog/changesets/changelog_20230605T173446Z.xml b/src/main/resources/db/changelog/changesets/changelog_20230605T173446Z.xml new file mode 100644 index 00000000..0005cd33 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20230605T173446Z.xml @@ -0,0 +1,65 @@ + + + + Clear any existing legacy data in tables + + DELETE FROM model_parameters; + DELETE FROM model_parameter_sets; + DELETE FROM model_sets_group; + DELETE FROM model_parameter_definitions; + DELETE FROM models_model_variable_sets; + DELETE FROM models_model_variable_definitions; + DELETE FROM model_variable_sets; + DELETE FROM model_variable_definitions; + DELETE FROM models; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/changelog_20230608T205630Z.xml b/src/main/resources/db/changelog/changesets/changelog_20230608T205630Z.xml new file mode 100644 index 00000000..84184d5e --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20230608T205630Z.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 92471d8d..33770df1 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -15,3 +15,11 @@ databaseChangeLog: - include: file: changesets/changelog_20230531T113101Z.xml relativeToChangelogFile: true + + - include: + file: changesets/changelog_20230605T173446Z.xml + relativeToChangelogFile: true + + - include: + file: changesets/changelog_20230608T205630Z.xml + relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java b/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java index 3af0db43..687b75f3 100644 --- a/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java +++ b/src/test/java/org/gridsuite/mapping/server/ModelControllerTest.java @@ -8,10 +8,13 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Sets; import org.gridsuite.mapping.server.dto.models.Model; +import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition; import org.gridsuite.mapping.server.dto.models.ModelVariableDefinition; import org.gridsuite.mapping.server.dto.models.VariablesSet; 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.repository.ModelVariableRepository; import org.gridsuite.mapping.server.repository.ModelVariablesSetRepository; @@ -35,10 +38,7 @@ import java.nio.file.Files; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.util.*; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.Assert.assertEquals; @@ -61,6 +61,10 @@ public class ModelControllerTest { @Autowired private ModelRepository modelRepository; + + @Autowired + private ModelParameterDefinitionRepository modelParameterDefinitionRepository; + @Autowired private ModelVariableRepository modelVariableRepository; @Autowired @@ -72,14 +76,16 @@ public class ModelControllerTest { @Autowired ObjectMapper objectMapper; - private void cleanDB() { - modelVariableRepository.deleteAll(); - modelVariablesSetRepository.deleteAll(); + public void cleanDB() { + // delete from parent to child modelRepository.deleteAll(); + modelVariablesSetRepository.deleteAll(); + modelVariableRepository.deleteAll(); + modelParameterDefinitionRepository.deleteAll(); } private ModelParameterDefinitionEntity createDefinitionEntity(String name, ParameterType type, ParameterOrigin origin, String originName, ModelEntity model) { - return new ModelParameterDefinitionEntity(name, model.getModelName(), type, origin, originName, null, model); + return new ModelParameterDefinitionEntity(model, new ModelParameterDefinition(name, type, origin, originName, null)); } @Before @@ -88,7 +94,7 @@ public void setUp() { // prepare token model ModelEntity modelToSave = new ModelEntity("LoadAlphaBeta", EquipmentType.LOAD, - null, new ArrayList<>(), Set.of(), Set.of()); + new LinkedHashSet<>(), new LinkedHashSet<>(), Set.of(), Set.of(), null, null); ArrayList definitions = new ArrayList<>(); definitions.add(createDefinitionEntity("load_alpha", ParameterType.DOUBLE, ParameterOrigin.USER, null, modelToSave)); definitions.add(createDefinitionEntity("load_beta", ParameterType.DOUBLE, ParameterOrigin.USER, null, modelToSave)); @@ -96,7 +102,7 @@ public void setUp() { definitions.add(createDefinitionEntity("load_Q0Pu", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "q_pu", modelToSave)); definitions.add(createDefinitionEntity("load_U0Pu", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "v_pu", modelToSave)); definitions.add(createDefinitionEntity("load_UPhase0", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "angle_pu", modelToSave)); - modelToSave.setParameterDefinitions(definitions); + modelToSave.addParameterDefinitions(definitions); modelRepository.save(modelToSave); } @@ -144,7 +150,8 @@ public void test() throws Exception { .contentType(APPLICATION_JSON)) .andExpect(status().isNotFound()); - Date setCreationDate = modelRepository.findById(modelName).get().getSetsGroups().get(0).getSets().get(0).getLastModifiedDate(); + Date createdDate = new ArrayList<>(new ArrayList<>(modelRepository.findById(modelName).get().getSetsGroups()).get(0) + .getSets()).get(0).getCreatedDate(); // Update data mvc.perform(post("/models/" + modelName + "/parameters/sets/strict") @@ -152,9 +159,10 @@ 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 updatedDate = new ArrayList<>(new ArrayList<>(modelRepository.findById(modelName).get().getSetsGroups()).get(0) + .getSets()).get(0).getUpdatedDate(); - assertThat(setCreationDate.compareTo(setUpdateDate) < 0); + assertThat(createdDate.compareTo(updatedDate) < 0); } @Test @@ -172,7 +180,7 @@ public void definitionTest() throws Exception { "{\"name\":\"load_Q0Pu\",\"type\":\"DOUBLE\",\"origin\":\"NETWORK\",\"originName\":\"q_pu\",\"fixedValue\":null},\n" + "{\"name\":\"load_U0Pu\",\"type\":\"DOUBLE\",\"origin\":\"NETWORK\",\"originName\":\"v_pu\",\"fixedValue\":null},\n" + "{\"name\":\"load_UPhase0\",\"type\":\"DOUBLE\",\"origin\":\"NETWORK\",\"originName\":\"angle_pu\",\"fixedValue\":null}\n" + - "]", true)); + "]", false)); } @Test @@ -209,29 +217,23 @@ public void invalidTest() throws Exception { @Test @Transactional public void getTest() throws Exception { + // Prepare models ModelEntity loadModel = modelRepository.findById("LoadAlphaBeta").get(); - List loadGroups = loadModel.getSetsGroups(); - ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", loadModel.getModelName(), null, SetGroupType.FIXED, loadModel); - ArrayList groupSets = new ArrayList<>(); - ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", loadGroup.getName(), loadModel.getModelName(), loadGroup.getType(), - 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)); - setToSave.setParameters(setParameters); - groupSets.add(setToSave); - loadGroup.setSets(groupSets); - loadGroups.add(loadGroup); - loadModel.setSetsGroups(loadGroups); + ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", SetGroupType.FIXED, new LinkedHashSet<>(), loadModel, null, null); + ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", new LinkedHashSet<>(), loadGroup, null, null); + List setParameters = new ArrayList<>(); + setParameters.add(new ModelParameterEntity("load_alpha", "1.5", setToSave, null, null)); + setParameters.add(new ModelParameterEntity("load_beta", "2.5", setToSave, null, null)); + setToSave.addParameters(setParameters); + loadGroup.addSets(Set.of(setToSave)); + loadModel.addSetsGroup(Set.of(loadGroup)); modelRepository.save(loadModel); - ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, new ArrayList<>(), null, Set.of(), Set.of()); + ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, Set.of(), null, Set.of(), Set.of(), null, null); ArrayList generatorThreeGroups = new ArrayList<>(); - generatorThreeGroups.add(new ModelSetsGroupEntity("GSTWPR", generatorThreeModel.getModelName(), new ArrayList<>(), SetGroupType.PREFIX, generatorThreeModel)); - generatorThreeModel.setSetsGroups(generatorThreeGroups); + generatorThreeGroups.add(new ModelSetsGroupEntity("GSTWPR", SetGroupType.PREFIX, null, generatorThreeModel, null, null)); + generatorThreeModel.addSetsGroup(generatorThreeGroups); modelRepository.save(generatorThreeModel); mvc.perform(get("/models/") @@ -249,41 +251,118 @@ public static String readFileAsString(String file) throws Exception { } @Test - @Transactional - public void testSaveLoadModel() throws Exception { + public void testSaveLoadModelThenModifyParameterDefinitions() throws Exception { String modelName = "LoadAlphaBeta"; - ModelEntity previousModel = modelRepository.findById(modelName).orElseThrow(); - String newModel = readFileAsString("src/test/resources/data/model/load/loadAlphaBeta.json"); + String newModelJson = readFileAsString("src/test/resources/data/model/load/loadAlphaBeta.json"); + String newParameterDefinitionsJson = readFileAsString("src/test/resources/data/model/load/loadAlphaBeta_parameter_definitions.json"); cleanDB(); - // Put data - mvc.perform(post("/models/") - .content(newModel) + // --- Put data first time with initial parameter definitions --- // + MvcResult mvcResult = mvc.perform(post("/models/") + .content(newModelJson) .contentType(APPLICATION_JSON)) - .andExpect(status().isOk()); + .andExpect(status().isOk()).andReturn(); - // Get Data - ModelEntity savedModel = modelRepository.findById(modelName).orElseThrow(); + // Get initial parameter definitions + List parameterDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); + assertEquals(6, parameterDefinitions.size()); + + // --- 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()); + + // --- Try to get parameter definitions from unknown model --- // + mvc.perform(get("/models/" + modelName + "_unknown" + "/parameters/definitions")) + .andExpect(status().isNotFound()); + + // --- Put data second time which add only a parameter definition --- // + mvcResult = mvc.perform(post("/models/" + modelName + "/parameters/definitions") + .content(newParameterDefinitionsJson) + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + // 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); + + // check result + // final model's parameter definitions must contain all ones of initial model + assertEquals(1, parameterDefinitions2.size() - parameterDefinitions.size()); + assertTrue(parameterDefinitions2.containsAll(parameterDefinitions)); - assertEquals(previousModel.getModelName(), savedModel.getModelName()); - assertEquals(previousModel.getEquipmentType(), savedModel.getEquipmentType()); - List previousDefinitions = previousModel.getParameterDefinitions(); - List savedDefinitions = savedModel.getParameterDefinitions(); - assertEquals(previousDefinitions.size(), savedDefinitions.size()); - for (int i = 0; i < previousDefinitions.size(); i++) { - ModelParameterDefinitionEntity previousDefinition = previousDefinitions.get(i); - ModelParameterDefinitionEntity savedDefinition = savedDefinitions.get(i); - assertEquals(previousDefinition.getName(), savedDefinition.getName()); - assertEquals(previousDefinition.getModelName(), savedDefinition.getModelName()); - assertEquals(previousDefinition.getType(), savedDefinition.getType()); - assertEquals(previousDefinition.getOrigin(), savedDefinition.getOrigin()); - assertEquals(previousDefinition.getOriginName(), savedDefinition.getOriginName()); - assertEquals(previousDefinition.getFixedValue(), savedDefinition.getFixedValue()); - } - // Import does not check sets because it is not part of the typical model import - - // test variable definitions - assertEquals(5, savedModel.getVariableDefinitions().size()); + // --- Remove an existing variable definition --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/remove") + .content(objectMapper.writeValueAsString(List.of(parameterDefinitions2.get(5).getName()))) + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + // 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); + + // check result + // final model's parameter definitions must contain all ones of model + assertEquals(1, parameterDefinitions2.size() - parameterDefinitions3.size()); + assertTrue(parameterDefinitions2.containsAll(parameterDefinitions3)); + + // --- Remove all parameter definitions --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/remove-all") + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + List parameterDefinitions4 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); + LOGGER.info("Unset parameter definitions = " + parameterDefinitions4); + + // check result + // must have no parameter definition + assertEquals(0, parameterDefinitions4.size()); + + // --- Save new parameter definition --- // + List parameterDefinitionList = objectMapper.readValue(newParameterDefinitionsJson, new TypeReference>() { }); + parameterDefinitionList.get(0).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>() { }); + + // check result + // must have the same number of input variable definitions + assertEquals(parameterDefinitionList.size(), savedParameterDefinitionList.size()); + + // --- Add existing parameter definition to model --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/parameters/definitions/add") + .content(objectMapper.writeValueAsString(savedParameterDefinitionList.stream().map(ModelParameterDefinition::getName))) + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + // Get current parameter definitions in the model + List parameterDefinitions6 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getParameterDefinitions(); + LOGGER.info("Updated parameter definitions = " + parameterDefinitions6); + // must have the same number of above input parameter definitions + assertEquals(savedParameterDefinitionList.size(), parameterDefinitions6.size()); + + // --- Add unknown existing parameter definition to model => must fail fast --- // + mvc.perform(patch("/models/" + modelName + "/parameters/definitions/add") + .content(objectMapper.writeValueAsString(List.of("parameter_definition_unknown"))) + .contentType(APPLICATION_JSON)) + .andExpect(status().isNotFound()); + + // --- Delete definitively a parameter definition --- // + mvcResult = mvc.perform(delete("/models/parameters/definitions") + .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); + + // Check result + assertEquals(1, deletedParameterDefinitionNames.size()); + assertEquals(parameterDefinitions.get(4).getName(), deletedParameterDefinitionNames.get(0)); } @Test @@ -295,7 +374,7 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { cleanDB(); - // Put data first time with initial variable definitions + // --- Put data first time with initial variable definitions --- // MvcResult mvcResult = mvc.perform(post("/models/") .content(newModelJson) .contentType(APPLICATION_JSON)) @@ -305,14 +384,24 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { List variableDefinitions = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); assertEquals(5, variableDefinitions.size()); - // Put data second time which add only a variable definition - MvcResult mvcResult2 = mvc.perform(post("/models/" + modelName + "/variables") + // --- 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()); + + // --- Try to get variable definitions from unknown model --- // + mvc.perform(get("/models/" + modelName + "_unknown" + "/variables")) + .andExpect(status().isNotFound()); + + // --- Put data second time which add only a variable definition --- // + mvcResult = mvc.perform(post("/models/" + modelName + "/variables") .content(newVariableDefinitionsJson) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); // Get current variable definitions - List variableDefinitions2 = objectMapper.readValue(mvcResult2.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); + List variableDefinitions2 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); LOGGER.info("Initial variable definitions = " + variableDefinitions); LOGGER.info("Updated variable definitions = " + variableDefinitions2); @@ -321,60 +410,66 @@ public void testSaveLoadModelThenModifyVariableDefinitions() throws Exception { assertEquals(1, variableDefinitions2.size() - variableDefinitions.size()); assertTrue(variableDefinitions2.containsAll(variableDefinitions)); - // Remove an existing variable definition - MvcResult mvcResult3 = mvc.perform(patch("/models/" + modelName + "/variables/remove") + // --- Remove an existing variable definition --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/remove") .content(objectMapper.writeValueAsString(List.of(variableDefinitions2.get(5).getName()))) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); // Get current variable definitions - List variableDefinitions3 = objectMapper.readValue(mvcResult3.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); + List variableDefinitions3 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); LOGGER.info("Updated variable definitions = " + variableDefinitions2); LOGGER.info("Removed variable definitions = " + variableDefinitions3); // check result - // final model's variable definition must contains all ones of model + // final model's variable definition must contain all ones of model assertEquals(1, variableDefinitions2.size() - variableDefinitions3.size()); assertTrue(variableDefinitions2.containsAll(variableDefinitions3)); - // remove all variable definitions - MvcResult mvcResult4 = mvc.perform(patch("/models/" + modelName + "/variables/remove-all") + // --- Remove all variable definitions --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/remove-all") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List variableDefinitions4 = objectMapper.readValue(mvcResult4.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); + List variableDefinitions4 = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); LOGGER.info("Unset variable definitions = " + variableDefinitions4); // check result // must have no variable definition assertEquals(0, variableDefinitions4.size()); - // save new variable definition + // --- Save new variable definition --- // List variableDefinitionList = objectMapper.readValue(newVariableDefinitionsJson, new TypeReference>() { }); variableDefinitionList.get(0).setName("load_running_value_3"); - MvcResult mvcResult5 = mvc.perform(post("/models/variables") + mvcResult = mvc.perform(post("/models/variables") .content(objectMapper.writeValueAsString(variableDefinitionList)) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - List savedVariableDefinitionList = objectMapper.readValue(mvcResult5.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()); - // add existing variable definition to model - MvcResult mvcResult6 = mvc.perform(patch("/models/" + modelName + "/variables/add") + // --- Add existing variable definition to model --- // + mvcResult = mvc.perform(patch("/models/" + modelName + "/variables/add") .content(objectMapper.writeValueAsString(savedVariableDefinitionList.stream().map(ModelVariableDefinition::getName))) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); // Get current variable definitions in the model - List variableDefinitions6 = objectMapper.readValue(mvcResult6.getResponse().getContentAsString(), Model.class).getVariableDefinitions(); + 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()); - // --- delete definitively a variable definition --- // + // --- add unknown existing variable definition to model => must fail fast --- // + mvc.perform(patch("/models/" + modelName + "/variables/add") + .content(objectMapper.writeValueAsString(List.of("variable_definition_unknown"))) + .contentType(APPLICATION_JSON)) + .andExpect(status().isNotFound()); + + // --- Delete definitively a variable definition --- // mvcResult = mvc.perform(delete("/models/variables") .content(objectMapper.writeValueAsString(List.of(variableDefinitions.get(4).getName()))) .contentType(APPLICATION_JSON)) @@ -458,7 +553,6 @@ public void testSaveNewVariablesSetThenModifyVariableDefinitions() throws Except } @Test - @Transactional public void testSaveNewVariablesSetsWhichShareVariableDefinitions() throws Exception { String newVariablesSetJson = readFileAsString("src/test/resources/data/model/generator/variablesSet_ThreeWindingsSynchronousGenerator.json"); String newVariablesSet2Json = readFileAsString("src/test/resources/data/model/generator/variablesSet_FourWindingsSynchronousGenerator.json"); @@ -472,27 +566,96 @@ public void testSaveNewVariablesSetsWhichShareVariableDefinitions() throws Excep .andExpect(status().isOk()).andReturn(); // Get initial variable definitions - VariablesSet variablesSet = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); - List variableDefinitions = variablesSet.getVariableDefinitions(); - - // Check result - assertEquals(2, variableDefinitions.size()); + VariablesSet threeWindingVariablesSet = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); // --- Put the second variables set with 3 variable definitions in which 2 ones are identical to first variables set --- // - MvcResult mvcResult2 = mvc.perform(post("/models/variables-sets") + mvcResult = mvc.perform(post("/models/variables-sets") .content(newVariablesSet2Json) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); // Get initial variable definitions - VariablesSet variablesSet2 = objectMapper.readValue(mvcResult2.getResponse().getContentAsString(), VariablesSet.class); - List variableDefinitions2 = variablesSet2.getVariableDefinitions(); + VariablesSet fourWindingVariablesSet = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), VariablesSet.class); - // Check result - assertEquals(3, variableDefinitions2.size()); + // --- 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()); + + // --- Try to get variable definition from unknown variables set --- // + mvc.perform(get("/models/variables-sets/" + "variable_set_unknown" + "/variables")) + .andExpect(status().isNotFound()); + + // --- Get initial variable definition from GET endpoint --- // + 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()); // cross-check between two variables set - variableDefinitions2.containsAll(variableDefinitions); + Sets.SetView intersectionVariableDefinitions = Sets.intersection(new HashSet<>(fourWindingVariableDefinitions), new HashSet<>(threeWindingVariableDefinitions)); + assertEquals(2, intersectionVariableDefinitions.size()); + } + + @Test + public void testSaveNewLoadModelsWhichShareParameterDefinitionsAndVariableDefinitions() throws Exception { + String newLoadAlphaBetaModelJson = readFileAsString("src/test/resources/data/model/load/loadAlphaBeta.json"); + String newLoadPQModelJson = readFileAsString("src/test/resources/data/model/load/loadPQ.json"); + + cleanDB(); + + // *** LOAD ALPHA BETA *** // + // --- Put data first time with initial parameter/variable definitions --- // + MvcResult mvcResult = mvc.perform(post("/models/") + .content(newLoadAlphaBetaModelJson) + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + String loadAlphaBetaModelName = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getModelName(); + + // *** LOAD PQ *** // + // --- Put data first time with initial parameter/variable definitions --- // + mvcResult = mvc.perform(post("/models/") + .content(newLoadPQModelJson) + .contentType(APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + String loadPQModelName = objectMapper.readValue(mvcResult.getResponse().getContentAsString(), Model.class).getModelName(); + + // --- 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()); + + // --- 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()); + + // --- 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()); + + // --- 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()); + + // cross-check variable definitions between two models + Sets.SetView intersectionVariableDefinitions = Sets.intersection(new HashSet<>(loadAlphaBetaVariableDefinitions), new HashSet<>(loadPQVariableDefinitions)); + assertEquals(3, intersectionVariableDefinitions.size()); + + // cross-check parameter definitions between two models + Sets.SetView intersectionParameterDefinitions = Sets.intersection(new HashSet<>(loadAlphaBetaParameterDefinitions), new HashSet<>(loadPQParameterDefinitions)); + assertEquals(4, intersectionParameterDefinitions.size()); + } @Test @@ -543,6 +706,16 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { assertEquals(4, variableDefinitionsOfGeneratorSet.size()); assertEquals(1, variableDefinitionsOfVoltageRegulatorSet.size()); + // --- 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()); + + // --- Try to get variable sets from unknown model --- // + mvc.perform(get("/models/" + model.getModelName() + "_unknown" + "/variables")) + .andExpect(status().isNotFound()); + // --- Put second time which add only a variables sets --- // mvcResult = mvc.perform(post("/models/" + model.getModelName() + "/variables-sets") .content("[\n" + newVariablesSetJson + "\n]") @@ -563,7 +736,7 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { assertEquals(1, variableDefinitionsOfVoltageRegulatorSet.size()); assertEquals(2, variableDefinitionsOfRegulator2Set.size()); - // --- remove an existing variables set --- // + // --- Remove an existing variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/remove") .content(objectMapper.writeValueAsString(List.of(variablesSet2.get(2).getName()))) .contentType(APPLICATION_JSON)) @@ -578,7 +751,7 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { // must contains all variables sets after removing assertTrue(variablesSet2.containsAll(variablesSet3)); - // --- remove all variables set --- // + // --- Remove all variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/remove-all") .contentType(APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); @@ -590,7 +763,7 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { // Check result assertEquals(0, variablesSet4.size()); - // --- add an existing variables set --- // + // --- Add an existing variables set --- // mvcResult = mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/add") .content(objectMapper.writeValueAsString(List.of(variablesSet2.get(2).getName()))) .contentType(APPLICATION_JSON)) @@ -603,7 +776,13 @@ public void testSaveGeneratorModelThenModifyVariablesSets() throws Exception { // Check result assertEquals(1, variablesSet5.size()); - // --- delete definitively a variables set --- // + // --- Add an unknown existing variables set => must fail fast --- // + mvc.perform(patch("/models/" + model.getModelName() + "/variables-sets/add") + .content(objectMapper.writeValueAsString(List.of("variable_set_unknown"))) + .contentType(APPLICATION_JSON)) + .andExpect(status().isNotFound()); + + // --- Delete definitively a variables set --- // mvcResult = mvc.perform(delete("/models/variables-sets") .content(objectMapper.writeValueAsString(List.of(variablesSet2.get(2).getName()))) .contentType(APPLICATION_JSON)) 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 de2f11ee..00000000 --- a/src/test/java/org/gridsuite/mapping/server/ModelEntitiesTest.java +++ /dev/null @@ -1,71 +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.ModelParameterDefinitionId; -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 parameterDefinitionIdTestEqualHashCode() { - ModelParameterDefinitionId id = new ModelParameterDefinitionId("name", "modelName"); - ModelParameterDefinitionId id2 = new ModelParameterDefinitionId("name", "modelName"); - - assertEquals(id, id); - assertEquals(id, id2); - assertNotEquals(null, id); - assertNotEquals("id", id); - } - - @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/ScriptControllerTest.java b/src/test/java/org/gridsuite/mapping/server/ScriptControllerTest.java index 0aad767d..8c221b15 100644 --- a/src/test/java/org/gridsuite/mapping/server/ScriptControllerTest.java +++ b/src/test/java/org/gridsuite/mapping/server/ScriptControllerTest.java @@ -6,7 +6,9 @@ */ package org.gridsuite.mapping.server; +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.repository.ScriptRepository; import org.gridsuite.mapping.server.utils.EquipmentType; @@ -25,7 +27,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; import static org.springframework.http.MediaType.APPLICATION_JSON; @@ -47,16 +50,20 @@ public class ScriptControllerTest { @Autowired private MockMvc mvc; + @Autowired + private ModelRepository modelRepository; + + @Autowired + private ModelParameterDefinitionRepository modelParameterDefinitionRepository; + private void cleanDB() { scriptRepository.deleteAll(); modelRepository.deleteAll(); + modelParameterDefinitionRepository.deleteAll(); } - @Autowired - private ModelRepository modelRepository; - private ModelParameterDefinitionEntity createDefinitionEntity(String name, ParameterType type, ParameterOrigin origin, String originName, ModelEntity model) { - return new ModelParameterDefinitionEntity(name, model.getModelName(), type, origin, originName, null, model); + return new ModelParameterDefinitionEntity(model, new ModelParameterDefinition(name, type, origin, originName, null)); } @Before @@ -64,43 +71,32 @@ public void setUp() { cleanDB(); // Prepare models - ModelEntity loadModel = new ModelEntity("LoadAlphaBeta", EquipmentType.LOAD, null, null, Set.of(), Set.of()); - ArrayList loadGroups = new ArrayList<>(); - ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", loadModel.getModelName(), null, SetGroupType.FIXED, loadModel); - ArrayList groupSets = new ArrayList<>(); - ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", loadGroup.getName(), loadModel.getModelName(), loadGroup.getType(), - null, - new Date(), - loadGroup); + ModelEntity loadModel = new ModelEntity("LoadAlphaBeta", EquipmentType.LOAD, new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), null, null); + ModelSetsGroupEntity loadGroup = new ModelSetsGroupEntity("LAB", SetGroupType.FIXED, new LinkedHashSet<>(), loadModel, null, null); + ModelParameterSetEntity setToSave = new ModelParameterSetEntity("LAB", new LinkedHashSet<>(), loadGroup, null, null); 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)); - setToSave.setParameters(setParameters); - groupSets.add(setToSave); - loadGroup.setSets(groupSets); - loadGroups.add(loadGroup); - loadModel.setSetsGroups(loadGroups); - - ArrayList definitions = new ArrayList<>(); + setParameters.add(new ModelParameterEntity("load_alpha", "1.5", setToSave, null, null)); + setParameters.add(new ModelParameterEntity("load_beta", "2.5", setToSave, null, null)); + setToSave.addParameters(setParameters); + //loadGroup.addSets(List.of(setToSave)); + loadModel.addSetsGroup(List.of(loadGroup)); + + Set definitions = new LinkedHashSet<>(); definitions.add(createDefinitionEntity("load_alpha", ParameterType.DOUBLE, ParameterOrigin.USER, null, loadModel)); definitions.add(createDefinitionEntity("load_beta", ParameterType.DOUBLE, ParameterOrigin.USER, null, loadModel)); definitions.add(createDefinitionEntity("load_P0Pu", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "p_pu", loadModel)); definitions.add(createDefinitionEntity("load_Q0Pu", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "q_pu", loadModel)); definitions.add(createDefinitionEntity("load_U0Pu", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "v_pu", loadModel)); definitions.add(createDefinitionEntity("load_UPhase0", ParameterType.DOUBLE, ParameterOrigin.NETWORK, "angle_pu", loadModel)); - loadModel.setParameterDefinitions(definitions); + loadModel.addParameterDefinitions(definitions); modelRepository.save(loadModel); - ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, null, null, null, null); - ArrayList generatorThreeGroups = new ArrayList<>(); - generatorThreeGroups.add(new ModelSetsGroupEntity("GSTWPR", generatorThreeModel.getModelName(), null, SetGroupType.PREFIX, generatorThreeModel)); - generatorThreeModel.setSetsGroups(generatorThreeGroups); + ModelEntity generatorThreeModel = new ModelEntity("GeneratorThreeWindings", EquipmentType.GENERATOR, new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), null, null); + generatorThreeModel.addSetsGroup(List.of(new ModelSetsGroupEntity("GSTWPR", SetGroupType.PREFIX, new LinkedHashSet<>(), generatorThreeModel, null, null))); modelRepository.save(generatorThreeModel); - ModelEntity generatorFourModel = new ModelEntity("GeneratorFourWindings", EquipmentType.GENERATOR, null, null, null, null); - ArrayList generatorFourGroups = new ArrayList<>(); - generatorFourGroups.add(new ModelSetsGroupEntity("GSFWPR", generatorFourModel.getModelName(), null, SetGroupType.PREFIX, generatorFourModel)); - generatorFourModel.setSetsGroups(generatorFourGroups); + ModelEntity generatorFourModel = new ModelEntity("GeneratorFourWindings", EquipmentType.GENERATOR, new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), new LinkedHashSet<>(), null, null); + generatorFourModel.addSetsGroup(List.of(new ModelSetsGroupEntity("GSFWPR", SetGroupType.PREFIX, new LinkedHashSet<>(), generatorFourModel, null, null))); modelRepository.save(generatorFourModel); } @@ -380,12 +376,12 @@ public void parTest() throws Exception { String parFile = "\n" + "\n" + " \n" + - " \n" + - " \n" + - " \n" + - " \n" + " \n" + + " \n" + " \n" + + " \n" + + " \n" + + " \n" + " \n" + ""; diff --git a/src/test/resources/data/model/load/loadAlphaBeta_parameter_definitions.json b/src/test/resources/data/model/load/loadAlphaBeta_parameter_definitions.json new file mode 100644 index 00000000..6f5e33c1 --- /dev/null +++ b/src/test/resources/data/model/load/loadAlphaBeta_parameter_definitions.json @@ -0,0 +1,8 @@ +[ + { + "name": "load_UPhase0_2", + "type": "DOUBLE", + "origin": "NETWORK", + "originName": "angle_pu" + } +] diff --git a/src/test/resources/data/model/load/loadAlphaBeta_variable_definitions.json b/src/test/resources/data/model/load/loadAlphaBeta_variable_definitions.json index cd14be1d..1aa121ab 100644 --- a/src/test/resources/data/model/load/loadAlphaBeta_variable_definitions.json +++ b/src/test/resources/data/model/load/loadAlphaBeta_variable_definitions.json @@ -1,6 +1,6 @@ [ - { - "name": "load_running_value_2", - "type": "DOUBLE" - } + { + "name": "load_running_value_2", + "type": "DOUBLE" + } ] diff --git a/src/test/resources/data/model/load/loadPQ.json b/src/test/resources/data/model/load/loadPQ.json new file mode 100644 index 00000000..fe1b286d --- /dev/null +++ b/src/test/resources/data/model/load/loadPQ.json @@ -0,0 +1,52 @@ +{ + "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_PPu", + "type": "DOUBLE", + "unit": "MW", + "factor": 100 + }, + { + "name": "load_QPu", + "type": "DOUBLE", + "unit": "MW", + "factor": 100 + }, + { + "name": "load_QRefPu", + "type": "DOUBLE", + "unit": "MW", + "factor": 100 + } + ], + "variablesSets": [] +} \ No newline at end of file