Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/**
* 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.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.gridsuite.mapping.server.dto.models.ModelParameterDefinition;
import org.gridsuite.mapping.server.dto.models.ParametersSet;
import org.gridsuite.mapping.server.dto.models.ParametersSetsGroup;
import org.gridsuite.mapping.server.dto.models.SimpleModel;
import org.gridsuite.mapping.server.service.ModelService;
import org.gridsuite.mapping.server.service.implementation.ModelServiceImpl;
import org.gridsuite.mapping.server.utils.SetGroupType;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
*/
@RestController
@RequestMapping(value = "/models")
@Tag(name = "Mapping model server")
@AllArgsConstructor
@ComponentScan(basePackageClasses = {ModelServiceImpl.class})

public class ModelController {

private final ModelService modelService;

@GetMapping(value = "/{modelName}/parameters/sets/{groupName}/{groupType}")
@Operation(summary = "get all parameters sets for a given group")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "parameter sets of the group")})

public ResponseEntity<List<ParametersSet>> getSetsGroupsFromModelName(@PathVariable("modelName") String modelName, @PathVariable("groupName") String groupName, @PathVariable("groupType") SetGroupType groupType) {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getSetsFromGroup(modelName, groupName, groupType));
}

@PostMapping(value = "/{modelName}/parameters/sets/strict")
@Operation(summary = "Save a new parameter sets group without checking sets")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Parameter Set Group Saved")})
public ResponseEntity<ParametersSetsGroup> saveParametersSet(@PathVariable("modelName") String modelName, @RequestBody ParametersSetsGroup setsGroup) {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.saveParametersSetsGroup(modelName, setsGroup, true));
}

@PostMapping(value = "/{modelName}/parameters/sets/")
@Operation(summary = "Save a new parameter sets group without checking sets")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Parameter Set Group Saved")})
public ResponseEntity<ParametersSetsGroup> saveSimpleParametersSet(@PathVariable("modelName") String modelName, @RequestBody ParametersSetsGroup setsGroup) {
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<List<ModelParameterDefinition>> 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<List<SimpleModel>> getModels() {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(modelService.getModels());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,21 @@ public class InputMapping implements Mapping {
@Schema(description = "Mapping automata")
private List<AbstractAutomaton> automata;

@Schema(description = "Mapping should control its parameters")
private boolean controlledParameters;

public MappingEntity convertMappingToEntity() {
MappingEntity convertedMapping = new MappingEntity();
convertedMapping.setName(name);
convertedMapping.setControlledParameters(controlledParameters);
convertedMapping.setRules(rules.stream().map(rule -> rule.convertRuleToEntity(convertedMapping)).collect(Collectors.toList()));
convertedMapping.setAutomata(automata.stream().map(automaton -> automaton.convertAutomatonToEntity(convertedMapping)).collect(Collectors.toList()));
return convertedMapping;
}

public InputMapping(MappingEntity mappingEntity) {
name = mappingEntity.getName();
controlledParameters = mappingEntity.isControlledParameters();
rules = mappingEntity.getRules().stream().map(ruleEntity -> new Rule(ruleEntity)).collect(Collectors.toList());
automata = mappingEntity.getAutomata().stream().map(automatonEntity -> AbstractAutomaton.instantiateFromEntity(automatonEntity)).collect(Collectors.toList());
}
Expand Down
32 changes: 0 additions & 32 deletions src/main/java/org/gridsuite/mapping/server/dto/InstanceModel.java

This file was deleted.

15 changes: 13 additions & 2 deletions src/main/java/org/gridsuite/mapping/server/dto/Rule.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.gridsuite.mapping.server.dto.filters.AbstractFilter;
import org.gridsuite.mapping.server.model.MappingEntity;
import org.gridsuite.mapping.server.model.RuleEntity;
import org.gridsuite.mapping.server.utils.*;
import org.gridsuite.mapping.server.dto.filters.*;
import org.gridsuite.mapping.server.utils.EquipmentType;
import org.gridsuite.mapping.server.utils.SetGroupType;

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

@Schema(description = "Mapped Parameter Set Group ID")
private String setGroup;

@Schema(description = "Mapped Parameter Set Group Type")
private SetGroupType groupType;

@Schema(description = "Composition")
private String composition;

Expand All @@ -50,6 +57,8 @@ public RuleEntity convertRuleToEntity(MappingEntity parentMapping) {
convertedRule.setComposition(composition);
convertedRule.setRuleId(createdId);
convertedRule.setMappedModel(mappedModel);
convertedRule.setSetGroup(setGroup);
convertedRule.setGroupType(groupType);
convertedRule.setEquipmentType(equipmentType);
convertedRule.setMapping(parentMapping);
convertedRule.setFilters(filters.stream().map(filter -> filter.convertFilterToEntity(convertedRule)).collect(Collectors.toList()));
Expand All @@ -59,6 +68,8 @@ public RuleEntity convertRuleToEntity(MappingEntity parentMapping) {
public Rule(RuleEntity ruleEntity) {
equipmentType = ruleEntity.getEquipmentType();
mappedModel = ruleEntity.getMappedModel();
setGroup = ruleEntity.getSetGroup();
groupType = ruleEntity.getGroupType();
composition = ruleEntity.getComposition();
filters = ruleEntity.getFilters().stream().map(filterEmbeddable -> AbstractFilter.createFilterFromEntity(filterEmbeddable)).collect(Collectors.toList());
}
Expand Down
18 changes: 17 additions & 1 deletion src/main/java/org/gridsuite/mapping/server/dto/Script.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
*/
package org.gridsuite.mapping.server.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.gridsuite.mapping.server.model.ScriptEntity;

import java.util.Date;

/**
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
*/
Expand All @@ -28,14 +31,27 @@ public class Script {
@Schema(description = "Generated Script")
private String script;

@JsonIgnore
@Schema(description = "Creation date")
private Date createdDate;

@Schema(description = "Script parameters are up to date")
private boolean current;

@Schema(description = "Parameter file")
private String parametersFile;

public Script(ScriptEntity scriptEntity) {
name = scriptEntity.getName();
parentName = scriptEntity.getParentName();
script = scriptEntity.getScript();
createdDate = scriptEntity.getCreatedDate();
parametersFile = scriptEntity.getParametersFile();
current = false; // Assume false
}

public ScriptEntity convertToEntity() {
return new ScriptEntity(name, parentName, script);
return new ScriptEntity(name, parentName, script, createdDate, parametersFile);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ public abstract class AbstractAutomaton {
@Schema(description = "Mapped Model Instance ID")
private String model;

@Schema(description = "Mapped Parameters Set Group ID")
private String setGroup;

@Schema(description = "Element watched by the automaton")
private String watchedElement;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
*/
package org.gridsuite.mapping.server.dto.automata;

import lombok.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.gridsuite.mapping.server.model.AutomatonEntity;
import org.gridsuite.mapping.server.model.AutomatonPropertyEntity;
import org.gridsuite.mapping.server.model.MappingEntity;
Expand Down Expand Up @@ -34,6 +36,7 @@ public ArrayList<BasicProperty> convertToBasicProperties() {
public CurrentLimitAutomaton(AutomatonEntity automatonEntity) {
this.setFamily(automatonEntity.getFamily());
this.setModel(automatonEntity.getModel());
this.setSetGroup(automatonEntity.getSetGroup());
this.setWatchedElement(automatonEntity.getWatchedElement());
// TODO Create generic function for all properties
Optional<AutomatonPropertyEntity> foundSideProperty = automatonEntity.getProperties().stream().filter(property -> property.getName().equals("side")).findAny();
Expand All @@ -48,6 +51,7 @@ public AutomatonEntity convertAutomatonToEntity(MappingEntity parentMapping) {
convertedAutomaton.setAutomatonId(createdId);
convertedAutomaton.setFamily(this.getFamily());
convertedAutomaton.setModel(this.getModel());
convertedAutomaton.setSetGroup(this.getSetGroup());
convertedAutomaton.setWatchedElement(this.getWatchedElement());
convertedAutomaton.setMapping(parentMapping);
ArrayList<AutomatonPropertyEntity> convertedProperties = new ArrayList<>();
Expand Down
67 changes: 67 additions & 0 deletions src/main/java/org/gridsuite/mapping/server/dto/models/Model.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/**
* 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.dto.models;

import lombok.Data;
import org.gridsuite.mapping.server.model.ModelEntity;
import org.gridsuite.mapping.server.utils.EquipmentType;
import org.gridsuite.mapping.server.utils.ParameterOrigin;

import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;

/**
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
*/
@Data
public class Model {

private String modelName;

private EquipmentType equipmentType;

private List<ModelParameterDefinition> parameterDefinitions;

private List<ParametersSetsGroup> setsGroups;

public Model(ModelEntity modelEntity) {
modelName = modelEntity.getModelName();
equipmentType = modelEntity.getEquipmentType();
parameterDefinitions = modelEntity.getParameterDefinitions().stream().map(ModelParameterDefinition::new).collect(Collectors.toList());
setsGroups = modelEntity.getSetsGroups().stream().map(ParametersSetsGroup::new).collect(Collectors.toList());
}

public boolean isParameterSetGroupValid(String groupName, boolean strict) {
ParametersSetsGroup groupToTest = setsGroups.stream().filter(group -> group.getName().equals(groupName)).findAny().orElse(null);
if (groupToTest == null) {
return false;
} else {
AtomicBoolean isValid = new AtomicBoolean(true);
List<ParametersSet> sets = groupToTest.getSets();
for (ParametersSet set : sets) {
if (isValid.get()) {
isValid.set(isParameterSetValid(set));
}
}
return !(strict && sets.isEmpty()) && isValid.get();
}
}

public boolean isParameterSetValid(ParametersSet setToTest) {
AtomicBoolean isValid = new AtomicBoolean(true);
List<ModelParameter> parameters = setToTest.getParameters();
parameterDefinitions.stream().filter(definition -> ParameterOrigin.USER.equals(definition.getOrigin())).forEach(definition -> {
if (isValid.get()) {
isValid.set(parameters.stream().filter(param -> param.getName().equals(definition.getName())).findAny().orElse(null) != null);
}
});
return isValid.get();
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,23 @@
* 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.dto;
package org.gridsuite.mapping.server.dto.models;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.gridsuite.mapping.server.model.ModelParamsEmbeddable;
import org.gridsuite.mapping.server.utils.ParamsType;
import org.gridsuite.mapping.server.model.ModelParameterEntity;

/**
* @author Mathieu Scalbert <mathieu.scalbert at rte-france.com>
*/
@Data
public class SetParams implements ModelParams {
@AllArgsConstructor
public class ModelParameter {
private String name;
private ParamsType type;
private String value;

SetParams(ModelParamsEmbeddable modelParamsEmbeddable) {
name = modelParamsEmbeddable.getName();
type = modelParamsEmbeddable.getType();
public ModelParameter(ModelParameterEntity modelParameterEntity) {
name = modelParameterEntity.getName();
value = modelParameterEntity.getValue();
}
}
Loading