Skip to content

Commit 3e4de4e

Browse files
authored
feat: Add parameters management in mappings (#10)
- Refactor Models to cover all cases - Includes .par generation - Mapping can now independently choose model and set - Parameter Set Management
1 parent c77b7f9 commit 3e4de4e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1987
-310
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/**
2+
* Copyright (c) 2021, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.mapping.server.controller;
8+
9+
import io.swagger.v3.oas.annotations.Operation;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
11+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
12+
import io.swagger.v3.oas.annotations.tags.Tag;
13+
import lombok.AllArgsConstructor;
14+
import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition;
15+
import org.gridsuite.mapping.server.dto.models.ParametersSet;
16+
import org.gridsuite.mapping.server.dto.models.ParametersSetsGroup;
17+
import org.gridsuite.mapping.server.dto.models.SimpleModel;
18+
import org.gridsuite.mapping.server.service.ModelService;
19+
import org.gridsuite.mapping.server.service.implementation.ModelServiceImpl;
20+
import org.gridsuite.mapping.server.utils.SetGroupType;
21+
import org.springframework.context.annotation.ComponentScan;
22+
import org.springframework.http.MediaType;
23+
import org.springframework.http.ResponseEntity;
24+
import org.springframework.web.bind.annotation.*;
25+
26+
import java.util.List;
27+
28+
/**
29+
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
30+
*/
31+
@RestController
32+
@RequestMapping(value = "/models")
33+
@Tag(name = "Mapping model server")
34+
@AllArgsConstructor
35+
@ComponentScan(basePackageClasses = {ModelServiceImpl.class})
36+
37+
public class ModelController {
38+
39+
private final ModelService modelService;
40+
41+
@GetMapping(value = "/{modelName}/parameters/sets/{groupName}/{groupType}")
42+
@Operation(summary = "get all parameters sets for a given group")
43+
@ApiResponses(value = {
44+
@ApiResponse(responseCode = "200", description = "parameter sets of the group")})
45+
46+
public ResponseEntity<List<ParametersSet>> getSetsGroupsFromModelName(@PathVariable("modelName") String modelName, @PathVariable("groupName") String groupName, @PathVariable("groupType") SetGroupType groupType) {
47+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getSetsFromGroup(modelName, groupName, groupType));
48+
}
49+
50+
@PostMapping(value = "/{modelName}/parameters/sets/strict")
51+
@Operation(summary = "Save a new parameter sets group without checking sets")
52+
@ApiResponses(value = {
53+
@ApiResponse(responseCode = "200", description = "Parameter Set Group Saved")})
54+
public ResponseEntity<ParametersSetsGroup> saveParametersSet(@PathVariable("modelName") String modelName, @RequestBody ParametersSetsGroup setsGroup) {
55+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.saveParametersSetsGroup(modelName, setsGroup, true));
56+
}
57+
58+
@PostMapping(value = "/{modelName}/parameters/sets/")
59+
@Operation(summary = "Save a new parameter sets group without checking sets")
60+
@ApiResponses(value = {
61+
@ApiResponse(responseCode = "200", description = "Parameter Set Group Saved")})
62+
public ResponseEntity<ParametersSetsGroup> saveSimpleParametersSet(@PathVariable("modelName") String modelName, @RequestBody ParametersSetsGroup setsGroup) {
63+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.saveParametersSetsGroup(modelName, setsGroup, false));
64+
}
65+
66+
@GetMapping(value = "/{modelName}/parameters/definitions/")
67+
@Operation(summary = "get parameters definitions for a given model")
68+
@ApiResponses(value = {
69+
@ApiResponse(responseCode = "200", description = "parameters definitions of the model")})
70+
public ResponseEntity<List<ModelParameterDefinition>> getParametersDefinitionsFromModelName(@PathVariable("modelName") String modelName) {
71+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getParametersDefinitionsFromModelName(modelName));
72+
}
73+
74+
@GetMapping(value = "/")
75+
@Operation(summary = "get models names")
76+
@ApiResponses(value = {
77+
@ApiResponse(responseCode = "200", description = "names of all models")})
78+
public ResponseEntity<List<SimpleModel>> getModels() {
79+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getModels());
80+
}
81+
}

src/main/java/org/gridsuite/mapping/server/dto/InputMapping.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,21 @@ public class InputMapping implements Mapping {
3131
@Schema(description = "Mapping automata")
3232
private List<AbstractAutomaton> automata;
3333

34+
@Schema(description = "Mapping should control its parameters")
35+
private boolean controlledParameters;
36+
3437
public MappingEntity convertMappingToEntity() {
3538
MappingEntity convertedMapping = new MappingEntity();
3639
convertedMapping.setName(name);
40+
convertedMapping.setControlledParameters(controlledParameters);
3741
convertedMapping.setRules(rules.stream().map(rule -> rule.convertRuleToEntity(convertedMapping)).collect(Collectors.toList()));
3842
convertedMapping.setAutomata(automata.stream().map(automaton -> automaton.convertAutomatonToEntity(convertedMapping)).collect(Collectors.toList()));
3943
return convertedMapping;
4044
}
4145

4246
public InputMapping(MappingEntity mappingEntity) {
4347
name = mappingEntity.getName();
48+
controlledParameters = mappingEntity.isControlledParameters();
4449
rules = mappingEntity.getRules().stream().map(ruleEntity -> new Rule(ruleEntity)).collect(Collectors.toList());
4550
automata = mappingEntity.getAutomata().stream().map(automatonEntity -> AbstractAutomaton.instantiateFromEntity(automatonEntity)).collect(Collectors.toList());
4651
}

src/main/java/org/gridsuite/mapping/server/dto/InstanceModel.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/org/gridsuite/mapping/server/dto/Rule.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
import lombok.AllArgsConstructor;
1111
import lombok.Getter;
1212
import lombok.NoArgsConstructor;
13+
import org.gridsuite.mapping.server.dto.filters.AbstractFilter;
1314
import org.gridsuite.mapping.server.model.MappingEntity;
1415
import org.gridsuite.mapping.server.model.RuleEntity;
15-
import org.gridsuite.mapping.server.utils.*;
16-
import org.gridsuite.mapping.server.dto.filters.*;
16+
import org.gridsuite.mapping.server.utils.EquipmentType;
17+
import org.gridsuite.mapping.server.utils.SetGroupType;
1718

1819
import java.util.Comparator;
1920
import java.util.List;
@@ -34,6 +35,12 @@ public class Rule {
3435
@Schema(description = "Mapped Model Instance ID")
3536
private String mappedModel;
3637

38+
@Schema(description = "Mapped Parameter Set Group ID")
39+
private String setGroup;
40+
41+
@Schema(description = "Mapped Parameter Set Group Type")
42+
private SetGroupType groupType;
43+
3744
@Schema(description = "Composition")
3845
private String composition;
3946

@@ -50,6 +57,8 @@ public RuleEntity convertRuleToEntity(MappingEntity parentMapping) {
5057
convertedRule.setComposition(composition);
5158
convertedRule.setRuleId(createdId);
5259
convertedRule.setMappedModel(mappedModel);
60+
convertedRule.setSetGroup(setGroup);
61+
convertedRule.setGroupType(groupType);
5362
convertedRule.setEquipmentType(equipmentType);
5463
convertedRule.setMapping(parentMapping);
5564
convertedRule.setFilters(filters.stream().map(filter -> filter.convertFilterToEntity(convertedRule)).collect(Collectors.toList()));
@@ -59,6 +68,8 @@ public RuleEntity convertRuleToEntity(MappingEntity parentMapping) {
5968
public Rule(RuleEntity ruleEntity) {
6069
equipmentType = ruleEntity.getEquipmentType();
6170
mappedModel = ruleEntity.getMappedModel();
71+
setGroup = ruleEntity.getSetGroup();
72+
groupType = ruleEntity.getGroupType();
6273
composition = ruleEntity.getComposition();
6374
filters = ruleEntity.getFilters().stream().map(filterEmbeddable -> AbstractFilter.createFilterFromEntity(filterEmbeddable)).collect(Collectors.toList());
6475
}

src/main/java/org/gridsuite/mapping/server/dto/Script.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
*/
77
package org.gridsuite.mapping.server.dto;
88

9+
import com.fasterxml.jackson.annotation.JsonIgnore;
910
import io.swagger.v3.oas.annotations.media.Schema;
1011
import lombok.AllArgsConstructor;
1112
import lombok.Data;
1213
import org.gridsuite.mapping.server.model.ScriptEntity;
1314

15+
import java.util.Date;
16+
1417
/**
1518
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
1619
*/
@@ -28,14 +31,27 @@ public class Script {
2831
@Schema(description = "Generated Script")
2932
private String script;
3033

34+
@JsonIgnore
35+
@Schema(description = "Creation date")
36+
private Date createdDate;
37+
38+
@Schema(description = "Script parameters are up to date")
39+
private boolean current;
40+
41+
@Schema(description = "Parameter file")
42+
private String parametersFile;
43+
3144
public Script(ScriptEntity scriptEntity) {
3245
name = scriptEntity.getName();
3346
parentName = scriptEntity.getParentName();
3447
script = scriptEntity.getScript();
48+
createdDate = scriptEntity.getCreatedDate();
49+
parametersFile = scriptEntity.getParametersFile();
50+
current = false; // Assume false
3551
}
3652

3753
public ScriptEntity convertToEntity() {
38-
return new ScriptEntity(name, parentName, script);
54+
return new ScriptEntity(name, parentName, script, createdDate, parametersFile);
3955
}
4056

4157
}

src/main/java/org/gridsuite/mapping/server/dto/automata/AbstractAutomaton.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ public abstract class AbstractAutomaton {
3434
@Schema(description = "Mapped Model Instance ID")
3535
private String model;
3636

37+
@Schema(description = "Mapped Parameters Set Group ID")
38+
private String setGroup;
39+
3740
@Schema(description = "Element watched by the automaton")
3841
private String watchedElement;
3942

src/main/java/org/gridsuite/mapping/server/dto/automata/CurrentLimitAutomaton.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
*/
77
package org.gridsuite.mapping.server.dto.automata;
88

9-
import lombok.*;
9+
import lombok.Data;
10+
import lombok.EqualsAndHashCode;
11+
import lombok.NoArgsConstructor;
1012
import org.gridsuite.mapping.server.model.AutomatonEntity;
1113
import org.gridsuite.mapping.server.model.AutomatonPropertyEntity;
1214
import org.gridsuite.mapping.server.model.MappingEntity;
@@ -34,6 +36,7 @@ public ArrayList<BasicProperty> convertToBasicProperties() {
3436
public CurrentLimitAutomaton(AutomatonEntity automatonEntity) {
3537
this.setFamily(automatonEntity.getFamily());
3638
this.setModel(automatonEntity.getModel());
39+
this.setSetGroup(automatonEntity.getSetGroup());
3740
this.setWatchedElement(automatonEntity.getWatchedElement());
3841
// TODO Create generic function for all properties
3942
Optional<AutomatonPropertyEntity> foundSideProperty = automatonEntity.getProperties().stream().filter(property -> property.getName().equals("side")).findAny();
@@ -48,6 +51,7 @@ public AutomatonEntity convertAutomatonToEntity(MappingEntity parentMapping) {
4851
convertedAutomaton.setAutomatonId(createdId);
4952
convertedAutomaton.setFamily(this.getFamily());
5053
convertedAutomaton.setModel(this.getModel());
54+
convertedAutomaton.setSetGroup(this.getSetGroup());
5155
convertedAutomaton.setWatchedElement(this.getWatchedElement());
5256
convertedAutomaton.setMapping(parentMapping);
5357
ArrayList<AutomatonPropertyEntity> convertedProperties = new ArrayList<>();
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* Copyright (c) 2021, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.mapping.server.dto.models;
8+
9+
import lombok.Data;
10+
import org.gridsuite.mapping.server.model.ModelEntity;
11+
import org.gridsuite.mapping.server.utils.EquipmentType;
12+
import org.gridsuite.mapping.server.utils.ParameterOrigin;
13+
14+
import java.util.List;
15+
import java.util.concurrent.atomic.AtomicBoolean;
16+
import java.util.stream.Collectors;
17+
18+
/**
19+
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
20+
*/
21+
@Data
22+
public class Model {
23+
24+
private String modelName;
25+
26+
private EquipmentType equipmentType;
27+
28+
private List<ModelParameterDefinition> parameterDefinitions;
29+
30+
private List<ParametersSetsGroup> setsGroups;
31+
32+
public Model(ModelEntity modelEntity) {
33+
modelName = modelEntity.getModelName();
34+
equipmentType = modelEntity.getEquipmentType();
35+
parameterDefinitions = modelEntity.getParameterDefinitions().stream().map(ModelParameterDefinition::new).collect(Collectors.toList());
36+
setsGroups = modelEntity.getSetsGroups().stream().map(ParametersSetsGroup::new).collect(Collectors.toList());
37+
}
38+
39+
public boolean isParameterSetGroupValid(String groupName, boolean strict) {
40+
ParametersSetsGroup groupToTest = setsGroups.stream().filter(group -> group.getName().equals(groupName)).findAny().orElse(null);
41+
if (groupToTest == null) {
42+
return false;
43+
} else {
44+
AtomicBoolean isValid = new AtomicBoolean(true);
45+
List<ParametersSet> sets = groupToTest.getSets();
46+
for (ParametersSet set : sets) {
47+
if (isValid.get()) {
48+
isValid.set(isParameterSetValid(set));
49+
}
50+
}
51+
return !(strict && sets.isEmpty()) && isValid.get();
52+
}
53+
}
54+
55+
public boolean isParameterSetValid(ParametersSet setToTest) {
56+
AtomicBoolean isValid = new AtomicBoolean(true);
57+
List<ModelParameter> parameters = setToTest.getParameters();
58+
parameterDefinitions.stream().filter(definition -> ParameterOrigin.USER.equals(definition.getOrigin())).forEach(definition -> {
59+
if (isValid.get()) {
60+
isValid.set(parameters.stream().filter(param -> param.getName().equals(definition.getName())).findAny().orElse(null) != null);
61+
}
62+
});
63+
return isValid.get();
64+
}
65+
}
66+
67+

src/main/java/org/gridsuite/mapping/server/dto/SetParams.java renamed to src/main/java/org/gridsuite/mapping/server/dto/models/ModelParameter.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,23 @@
44
* License, v. 2.0. If a copy of the MPL was not distributed with this
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
7-
package org.gridsuite.mapping.server.dto;
7+
package org.gridsuite.mapping.server.dto.models;
88

9+
import lombok.AllArgsConstructor;
910
import lombok.Data;
10-
import org.gridsuite.mapping.server.model.ModelParamsEmbeddable;
11-
import org.gridsuite.mapping.server.utils.ParamsType;
11+
import org.gridsuite.mapping.server.model.ModelParameterEntity;
1212

1313
/**
1414
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
1515
*/
1616
@Data
17-
public class SetParams implements ModelParams {
17+
@AllArgsConstructor
18+
public class ModelParameter {
1819
private String name;
19-
private ParamsType type;
20+
private String value;
2021

21-
SetParams(ModelParamsEmbeddable modelParamsEmbeddable) {
22-
name = modelParamsEmbeddable.getName();
23-
type = modelParamsEmbeddable.getType();
22+
public ModelParameter(ModelParameterEntity modelParameterEntity) {
23+
name = modelParameterEntity.getName();
24+
value = modelParameterEntity.getValue();
2425
}
2526
}

0 commit comments

Comments
 (0)