diff --git a/pom.xml b/pom.xml
index e0d9d65..02d9feb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
- 37.0.0
+ 38.0.0
4.3.1
org.gridsuite.mapping.server
diff --git a/src/main/java/org/gridsuite/mapping/server/controller/MappingController.java b/src/main/java/org/gridsuite/mapping/server/controller/MappingController.java
index 6bf5d9d..b196f7a 100644
--- a/src/main/java/org/gridsuite/mapping/server/controller/MappingController.java
+++ b/src/main/java/org/gridsuite/mapping/server/controller/MappingController.java
@@ -15,9 +15,12 @@
import org.gridsuite.mapping.server.dto.RenameObject;
import org.gridsuite.mapping.server.dto.models.Model;
import org.gridsuite.mapping.server.service.MappingService;
+import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ResponseStatusException;
import java.util.List;
@@ -30,6 +33,8 @@
@AllArgsConstructor
public class MappingController {
+ private static final String CONFLICT_MAPPING_ERROR_MESSAGE = "A mapping already exists with name: ";
+
private final MappingService mappingService;
@GetMapping(value = "/")
@@ -77,8 +82,15 @@ public ResponseEntity deleteMapping(@PathVariable("mappingName") String
@ApiResponse(responseCode = "404", description = "Mapping not found"),
@ApiResponse(responseCode = "500", description = "The storage is down or a mapping with the same name already exists")})
public ResponseEntity renameMapping(@PathVariable("oldName") String oldName, @PathVariable("newName") String newName) {
- RenameObject renamedMapping = mappingService.renameMapping(oldName, newName);
- return ResponseEntity.ok().body(renamedMapping);
+ return ResponseEntity.ok().body(renameMappingWithUniquenessCheck(oldName, newName));
+ }
+
+ private RenameObject renameMappingWithUniquenessCheck(String oldName, String newName) {
+ try {
+ return mappingService.renameMapping(oldName, newName);
+ } catch (DataIntegrityViolationException ex) {
+ throw new ResponseStatusException(HttpStatus.CONFLICT, CONFLICT_MAPPING_ERROR_MESSAGE + newName, ex);
+ }
}
@PostMapping(value = "/copy/{originalName}/to/{copyName}")
@@ -87,8 +99,15 @@ public ResponseEntity renameMapping(@PathVariable("oldName") Strin
@ApiResponse(responseCode = "404", description = "Mapping not found"),
@ApiResponse(responseCode = "500", description = "The storage is down or a mapping with the same name already exists")})
public ResponseEntity copyMapping(@PathVariable("originalName") String originalName, @PathVariable("copyName") String copyName) {
- InputMapping copiedMapping = mappingService.copyMapping(originalName, copyName);
- return ResponseEntity.ok().body(copiedMapping);
+ return ResponseEntity.ok().body(copyMappingWithUniquenessCheck(originalName, copyName));
+ }
+
+ private InputMapping copyMappingWithUniquenessCheck(String originalName, String copyName) {
+ try {
+ return mappingService.copyMapping(originalName, copyName);
+ } catch (DataIntegrityViolationException ex) {
+ throw new ResponseStatusException(HttpStatus.CONFLICT, CONFLICT_MAPPING_ERROR_MESSAGE + copyName, ex);
+ }
}
}
diff --git a/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java b/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java
index 0abaeee..11d2397 100644
--- a/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java
+++ b/src/main/java/org/gridsuite/mapping/server/service/implementation/MappingServiceImpl.java
@@ -25,7 +25,6 @@
import org.gridsuite.mapping.server.service.client.filter.FilterClient;
import org.gridsuite.mapping.server.utils.Methods;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -44,8 +43,7 @@
@Service
public class MappingServiceImpl implements MappingService {
- public static final String CONFLICT_MAPPING_ERROR_MESSAGE = "A mapping already exists with name: ";
- public static final String MAPPING_NOT_FOUND_ERROR_MESSAGE = "Mapping not found with name: ";
+ private static final String MAPPING_NOT_FOUND_ERROR_MESSAGE = "Mapping not found with name: ";
private final ModelRepository modelRepository;
private final MappingRepository mappingRepository;
@@ -114,6 +112,7 @@ public InputMapping getMapping(String mappingName) {
}
@Override
+ @Transactional
public InputMapping saveMapping(String mappingName, InputMapping mapping) {
if (!StringUtils.isBlank(mappingName)) {
mapping.setName(mappingName);
@@ -210,66 +209,55 @@ public String deleteMapping(String mappingName) {
}
@Override
+ @Transactional
public RenameObject renameMapping(String oldName, String newName) {
Optional mappingToRename = mappingRepository.findById(oldName);
if (mappingToRename.isPresent()) {
MappingEntity mappingToSave = new MappingEntity(newName, mappingToRename.get());
- try {
- mappingRepository.deleteById(oldName);
- mappingRepository.save(mappingToSave);
- return new RenameObject(oldName, newName);
- } catch (DataIntegrityViolationException ex) {
- throw new ResponseStatusException(HttpStatus.CONFLICT, CONFLICT_MAPPING_ERROR_MESSAGE + newName, ex);
- }
+ mappingRepository.deleteById(oldName);
+ mappingRepository.save(mappingToSave);
+ return new RenameObject(oldName, newName);
} else if (oldName.equals(DEFAULT_MAPPING_NAME)) {
// In case of naming of new mapping, save it to db.
- try {
- mappingRepository.save(new MappingEntity(newName, new ArrayList<>(), new ArrayList<>(), false));
- return new RenameObject(DEFAULT_MAPPING_NAME, newName);
-
- } catch (DataIntegrityViolationException ex) {
- throw new ResponseStatusException(HttpStatus.CONFLICT, CONFLICT_MAPPING_ERROR_MESSAGE + newName, ex);
- }
+ mappingRepository.save(new MappingEntity(newName, new ArrayList<>(), new ArrayList<>(), false));
+ return new RenameObject(DEFAULT_MAPPING_NAME, newName);
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, MAPPING_NOT_FOUND_ERROR_MESSAGE + oldName);
}
}
@Override
+ @Transactional
public InputMapping copyMapping(String originalName, String copyName) {
Optional mappingToCopyOpt = mappingRepository.findById(originalName);
MappingEntity mappingToCopy = mappingToCopyOpt.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, MAPPING_NOT_FOUND_ERROR_MESSAGE + originalName));
MappingEntity copiedMapping = new MappingEntity(copyName, mappingToCopy);
- try {
- // --- duplicate filters in filter-server--- //
- // get all filter uuids that needs to duplicate its corresponding filter
- List filterUuids = copiedMapping.getRules().stream()
- .map(RuleEntity::getFilterUuid)
- .filter(Objects::nonNull)
- .toList();
+ // --- duplicate filters in filter-server--- //
+ // get all filter uuids that needs to duplicate its corresponding filter
+ List filterUuids = copiedMapping.getRules().stream()
+ .map(RuleEntity::getFilterUuid)
+ .filter(Objects::nonNull)
+ .toList();
- if (CollectionUtils.isNotEmpty(filterUuids)) {
- // call filter-server API to duplicate filter
- Map uuidsMap = filterClient.duplicateFilters(filterUuids);
+ if (CollectionUtils.isNotEmpty(filterUuids)) {
+ // call filter-server API to duplicate filter
+ Map uuidsMap = filterClient.duplicateFilters(filterUuids);
- // replace the old by the new uuid for rule entities
- copiedMapping.getRules().stream()
- .filter(rule -> rule.getFilterUuid() != null)
- .forEach(rule -> rule.setFilterUuid(uuidsMap.get(rule.getFilterUuid())));
- }
+ // replace the old by the new uuid for rule entities
+ copiedMapping.getRules().stream()
+ .filter(rule -> rule.getFilterUuid() != null)
+ .forEach(rule -> rule.setFilterUuid(uuidsMap.get(rule.getFilterUuid())));
+ }
- // --- persist in cascade the mapping in local database --- //
- MappingEntity savedMappingEntity = mappingRepository.save(copiedMapping);
+ // --- persist in cascade the mapping in local database --- //
+ MappingEntity savedMappingEntity = mappingRepository.save(copiedMapping);
- // --- build mapping dto to return --- //
- InputMapping mapping = new InputMapping(savedMappingEntity);
- enrichFiltersForMappings(List.of(mapping));
+ // --- build mapping dto to return --- //
+ InputMapping mapping = new InputMapping(savedMappingEntity);
+ enrichFiltersForMappings(List.of(mapping));
- return mapping;
- } catch (DataIntegrityViolationException ex) {
- throw new ResponseStatusException(HttpStatus.CONFLICT, CONFLICT_MAPPING_ERROR_MESSAGE + copyName, ex);
- }
+ return mapping;
}
@Transactional(readOnly = true)
@@ -291,11 +279,9 @@ public List getMappedModelsList(String mappingName) {
.collect(Collectors.toSet());
// get model by name from db, concat to default models and convert to dtos
- List mappedModels = Stream.concat(modelRepository.findAllById(mappedModelNames).stream(),
+ return Stream.concat(modelRepository.findAllById(mappedModelNames).stream(),
modelRepository.findAllByDefaultModelTrue().stream())
.map(Model::new).toList();
-
- return mappedModels;
}
}
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 96b83b8..48dbe1e 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
@@ -31,7 +31,8 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.client.HttpClientErrorException;
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -171,26 +172,31 @@ public String getAutomatonDefinitions() {
}
@Override
+ @Transactional(readOnly = true)
public List getModels() {
- return modelRepository.findAll().stream().map(modelEntity -> new SimpleModel(new Model(modelEntity))).collect(Collectors.toList());
+ return modelRepository.findAll().stream().map(modelEntity -> new SimpleModel(new Model(modelEntity))).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getParameters() {
return modelParameterRepository.findAll().stream().map(ModelParameter::new).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getParametersSetsGroups() {
return modelSetsGroupRepository.findAll().stream().map(ParametersSetsGroup::new).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getParametersSets() {
return modelParameterSetRepository.findAll().stream().map(ParametersSet::new).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getSetsFromGroup(String modelName, String groupName, SetGroupType groupType) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -201,10 +207,11 @@ public List getSetsFromGroup(String modelName, String groupName,
.findAny();
ModelSetsGroupEntity setsGroup = getSetsGroupFromOptional("[" + groupName + "," + groupType.name() + "]", modelSetsGroupOpt);
- return setsGroup.getSets().stream().map(ParametersSet::new).collect(Collectors.toList());
+ return setsGroup.getSets().stream().map(ParametersSet::new).toList();
}
@Override
+ @Transactional
public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersSetsGroup setsGroup, Boolean strict) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -219,9 +226,7 @@ public ParametersSetsGroup saveParametersSetsGroup(String modelName, ParametersS
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.addParameterSet(set)
- );
+ groupToAdd.getSets().forEach(previousGroup::addParameterSet);
}
if (new Model(modelToUpdate).isParameterSetGroupValid(setsGroup.getName(), strict)) {
@@ -301,6 +306,7 @@ public List deleteModels(List modelNames) {
}
@Override
+ @Transactional
public ParametersSetsGroup deleteSet(String modelName, String groupName, SetGroupType groupType, String setName) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -326,17 +332,20 @@ public ParametersSetsGroup deleteSet(String modelName, String groupName, SetGrou
// --- BEGIN parameter definition-related service methods --- //
@Override
+ @Transactional(readOnly = true)
public List getParameterDefinitionNames() {
return modelParameterDefinitionRepository.findAll().stream().map(ModelParameterDefinitionEntity::getName).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getParameterDefinitions(List parameterDefinitionNames) {
return modelParameterDefinitionRepository.findAllById(parameterDefinitionNames).stream()
.map(parameterDefinitionEntity -> new ModelParameterDefinition(parameterDefinitionEntity, null, null)).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getParameterDefinitionsFromModel(String modelName) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -380,8 +389,8 @@ public Model addExistingParameterDefinitionsToModel(String modelName, List foundNames = foundParameterDefinitionEntities.stream()
- .map(ModelParameterDefinitionEntity::getName).collect(Collectors.toList());
- List notFoundNames = parameterDefinitionNames.stream().filter(name -> !foundNames.contains(name)).collect(Collectors.toList());
+ .map(ModelParameterDefinitionEntity::getName).toList();
+ List notFoundNames = parameterDefinitionNames.stream().filter(name -> !foundNames.contains(name)).toList();
throw new HttpClientErrorException(HttpStatus.NOT_FOUND, "Some parameter definition not found: " + notFoundNames);
}
@@ -428,7 +437,7 @@ public Model removeAllParameterDefinitionsOnModel(String modelName) {
// clear the existing list
modelToUpdate.removeAllParameterDefinition(modelToUpdate.getParameterDefinitions().stream()
- .map(ModelModelParameterDefinitionEntity::getParameterDefinition).collect(Collectors.toList()));
+ .map(ModelModelParameterDefinitionEntity::getParameterDefinition).toList());
// save modified existing model entity
modelRepository.save(modelToUpdate);
@@ -444,7 +453,7 @@ public List saveNewParameterDefinitions(List savedParameterDefinitionEntities = modelParameterDefinitionRepository.saveAll(parameterDefinitionEntities);
- return savedParameterDefinitionEntities.stream().map(entity -> new ModelParameterDefinition(entity, null, null)).collect(Collectors.toList());
+ return savedParameterDefinitionEntities.stream().map(entity -> new ModelParameterDefinition(entity, null, null)).toList();
}
return Collections.emptyList();
@@ -463,6 +472,7 @@ public List deleteParameterDefinitions(List parameterDefinitionN
// --- BEGIN variable-related service methods --- //
@Override
+ @Transactional(readOnly = true)
public List getVariableDefinitionsFromModel(String modelName) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -473,10 +483,12 @@ public List getVariableDefinitionsFromModel(String mode
}
@Override
+ @Transactional(readOnly = true)
public List getVariableDefinitionNames() {
return modelVariableRepository.findAll().stream().map(ModelVariableDefinitionEntity::getName).toList();
}
+ @Transactional(readOnly = true)
@Override
public List getVariableDefinitions(List variableNames) {
return modelVariableRepository.findAllById(variableNames).stream().map(ModelVariableDefinition::new).toList();
@@ -494,7 +506,7 @@ public Model addNewVariableDefinitionsToModel(String modelName, List variableDefinitionEntities = variableDefinitions.stream()
.map(variableDefinition -> new ModelVariableDefinitionEntity(modelToUpdate, null, variableDefinition))
- .collect(Collectors.toList());
+ .toList();
modelToUpdate.addAllVariableDefinition(variableDefinitionEntities);
// save modified existing model entity
modelRepository.save(modelToUpdate);
@@ -519,8 +531,8 @@ public Model addExistingVariableDefinitionsToModel(String modelName, List foundNames = foundVariableDefinitionEntities.stream()
- .map(ModelVariableDefinitionEntity::getName).collect(Collectors.toList());
- List notFoundNames = variableDefinitionNames.stream().filter(name -> !foundNames.contains(name)).collect(Collectors.toList());
+ .map(ModelVariableDefinitionEntity::getName).toList();
+ List notFoundNames = variableDefinitionNames.stream().filter(name -> !foundNames.contains(name)).toList();
throw new HttpClientErrorException(HttpStatus.NOT_FOUND, "Some variable definition not found: " + notFoundNames);
}
@@ -564,7 +576,7 @@ public List saveNewVariableDefinitions(List new ModelVariableDefinitionEntity(null, null, variableDefinition))
.collect(Collectors.toCollection(LinkedHashSet::new));
List savedVariableDefinitionEntities = modelVariableRepository.saveAll(variableDefinitionEntities);
- return savedVariableDefinitionEntities.stream().map(ModelVariableDefinition::new).collect(Collectors.toList());
+ return savedVariableDefinitionEntities.stream().map(ModelVariableDefinition::new).toList();
}
return Collections.emptyList();
}
@@ -586,16 +598,19 @@ public Model removeAllVariableDefinitionsOnModel(String modelName) {
}
@Override
+ @Transactional(readOnly = true)
public List getVariablesSetNames() {
return modelVariablesSetRepository.findAll().stream().map(ModelVariableSetEntity::getName).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getVariablesSets(List variablesSetNames) {
return modelVariablesSetRepository.findAllById(variablesSetNames).stream().map(VariablesSet::new).toList();
}
@Override
+ @Transactional(readOnly = true)
public List getVariablesSetsFromModel(String modelName) {
Optional foundModelOpt = modelRepository.findById(modelName);
@@ -614,6 +629,7 @@ public VariablesSet saveNewVariablesSet(VariablesSet variableSet) {
}
@Override
+ @Transactional(readOnly = true)
public List getVariableDefinitionsFromVariablesSet(String variableSetName) {
Optional foundVariableSetOpt = modelVariablesSetRepository.findById(variableSetName);
@@ -634,7 +650,7 @@ public VariablesSet addNewVariableDefinitionToVariablesSet(String variableSetNam
// do merge with existing list
List variableDefinitionEntities = variableDefinitions.stream()
.map(variableDefinition -> new ModelVariableDefinitionEntity(null, variableSetToUpdate, variableDefinition))
- .collect(Collectors.toList());
+ .toList();
variableSetToUpdate.addAllVariableDefinition(variableDefinitionEntities);
// save modified existing variables set entity
modelVariablesSetRepository.save(variableSetToUpdate);
@@ -691,7 +707,7 @@ public Model addNewVariablesSetsToModel(String modelName, List var
// do merge with existing list
List variablesSetEntities = variableSets.stream()
.map(variablesSet -> new ModelVariableSetEntity(modelToUpdate, variablesSet))
- .collect(Collectors.toList());
+ .toList();
modelToUpdate.addAllVariablesSet(variablesSetEntities);
// save modified existing model entity
modelRepository.save(modelToUpdate);
@@ -714,8 +730,8 @@ public Model addExistingVariablesSetsToModel(String modelName, List vari
// check whether found all
if (foundVariablesSetEntities.size() != variablesSetNames.size()) {
- List foundNames = foundVariablesSetEntities.stream().map(ModelVariableSetEntity::getName).collect(Collectors.toList());
- List notFoundNames = variablesSetNames.stream().filter(name -> !foundNames.contains(name)).collect(Collectors.toList());
+ List foundNames = foundVariablesSetEntities.stream().map(ModelVariableSetEntity::getName).toList();
+ List notFoundNames = variablesSetNames.stream().filter(name -> !foundNames.contains(name)).toList();
throw new HttpClientErrorException(HttpStatus.NOT_FOUND, "Some variables set not found: " + notFoundNames);
}
@@ -748,6 +764,7 @@ public Model removeExistingVariablesSetsFromModel(String modelName, List
}
@Override
+ @Transactional
public Model removeAllExistingVariablesSetsFromModel(String modelName) {
Optional foundModelOpt = modelRepository.findById(modelName);
diff --git a/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java b/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java
index 898b03c..76f6631 100644
--- a/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java
+++ b/src/main/java/org/gridsuite/mapping/server/service/implementation/ParameterServiceImpl.java
@@ -26,6 +26,7 @@
import org.gridsuite.mapping.server.utils.Templater;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.server.ResponseStatusException;
import java.util.*;
@@ -51,6 +52,7 @@ public ParameterServiceImpl(
}
@Override
+ @Transactional(readOnly = true)
public ParameterFile exportParameters(String mappingName) {
Optional foundMapping = mappingRepository.findById(mappingName);
if (foundMapping.isPresent()) {