Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: d2b370e7 by Tony Chemit at 2022-03-09T23:16:19+01:00 Contrôle sur l'heure d'activité sur le WS public en create et update - See ultreiaio/ird-observe#2203 - - - - - 5645462a by Tony Chemit at 2022-03-09T23:40:16+01:00 Ne plus retourner le contenu en erreur de validation dans l'API publique - Closes ultreiaio/ird-observe#2204 - - - - - 3 changed files: - core/services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/api/DataEntityServiceLocalSupport.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/api/ReferentialEntityServiceLocalSupport.java Changes: ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java ===================================== @@ -35,6 +35,7 @@ import fr.ird.observe.dto.data.SimpleDto; import fr.ird.observe.dto.db.DataSourceValidationMode; import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation; import fr.ird.observe.dto.reference.DataDtoReference; +import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; @@ -66,6 +67,7 @@ import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.ContainerDtoEntityContext; import fr.ird.observe.spi.context.DataDtoEntityContext; import fr.ird.observe.spi.context.DataGroupByReferentialHelper; +import fr.ird.observe.spi.context.DtoEntityContext; import fr.ird.observe.spi.context.EditableDtoEntityContext; import fr.ird.observe.spi.context.OpenableDtoEntityContext; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; @@ -211,10 +213,10 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont @Override public final <D extends DataDto, - R extends DataDtoReference, - E extends DataEntity, - T extends ToolkitTopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataEntity(E dtoType) { - return ObservePersistenceBusinessProject.fromDataEntity(dtoType); + R extends DtoReference, + E extends Entity, + T extends ToolkitTopiaDao<E>> DtoEntityContext<D, R, E, T> fromEntity(E dtoType) { + return ObservePersistenceBusinessProject.fromEntity(dtoType); } @Override @@ -379,10 +381,10 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont return serviceContext; } - protected ReferentialValidationRequest newReferentialValidationRequest(String validationContextName, Set<Class<? extends ReferentialDto>> referentialTypes) { + protected ReferentialValidationRequest newReferentialValidationRequest(Set<Class<? extends ReferentialDto>> referentialTypes) { ReferentialValidationRequest request = new ReferentialValidationRequest(); request.setScopes(new LinkedHashSet<>(List.of(NuitonValidatorScope.ERROR, NuitonValidatorScope.FATAL))); - request.setValidationContext(validationContextName); + request.setValidationContext(fr.ird.observe.spi.validation.ValidationContextSupport.UPDATE_VALIDATION_CONTEXT); request.setReferentialTypes(referentialTypes); return request; } @@ -391,15 +393,15 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont return DataSourceValidationMode.NONE == getValidationMode(); } - protected DataValidationRequest newDataValidationRequest(String validationContextName, String id) { + protected DataValidationRequest newDataValidationRequest(String id) { DataValidationRequest request = new DataValidationRequest(); request.setScopes(new LinkedHashSet<>(List.of(NuitonValidatorScope.ERROR, NuitonValidatorScope.FATAL))); - request.setValidationContext(validationContextName); + request.setValidationContext(fr.ird.observe.spi.validation.ValidationContextSupport.UPDATE_VALIDATION_CONTEXT); request.setDataIds(Set.of(id == null ? "__create" : id)); return request; } - protected final void checkValidationResult(String content, ValidationResult<?> result) throws InvalidDataException { + protected final void checkValidationResult(ValidationResult<?> result) throws InvalidDataException { Set<ValidationResultDto> data = result.getData(); if (data.isEmpty()) { return; @@ -415,7 +417,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont } } if (withError) { - String message = String.format("Invalid content:\n%s\n%s", content, newGsonSupplier(true, false).get().toJson(result)); + String message = String.format("Invalid content:\n%s", newGsonSupplier(true, false).get().toJson(result)); throw new InvalidDataException(message, result); } //FIXME We should may be return the result for warning messages? ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/api/DataEntityServiceLocalSupport.java ===================================== @@ -34,7 +34,6 @@ import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.api.DataEntityService; import fr.ird.observe.services.service.api.InvalidDataException; import fr.ird.observe.spi.context.DataDtoEntityContext; -import fr.ird.observe.spi.validation.DtoValidationContext; import fr.ird.observe.spi.validation.ValidationHelper; import org.nuiton.topia.persistence.filter.OrderEnum; import org.nuiton.topia.persistence.filter.ToolkitRequestFilter; @@ -64,17 +63,15 @@ public class DataEntityServiceLocalSupport extends ObserveServiceLocal implement @Override public ToolkitId create(Class<? extends DataDto> dtoType, String content) throws InvalidDataException { - DataDtoEntityContext<?, ?, DataEntity, ?> spi = fromDataDto(dtoType); - return spi.create(this, content, withoutValidation() ? e -> { - } : e -> doValidate(DtoValidationContext.CREATE_VALIDATION_CONTEXT, content, e)); + DataDtoEntityContext<?, ?, ?, ?> spi = fromDataDto(dtoType); + return spi.create(this, content, this::doValidate); } @Override public ToolkitId update(Class<? extends DataDto> dtoType, String id, String content) throws InvalidDataException { id = ToolkitId.decodeId(id); - DataDtoEntityContext<?, ?, DataEntity, ?> spi = fromDataDto(dtoType); - return spi.update(this, id, content, withoutValidation() ? e -> { - } : e -> doValidate(DtoValidationContext.UPDATE_VALIDATION_CONTEXT, content, e)); + DataDtoEntityContext<?, ?, ?, ?> spi = fromDataDto(dtoType); + return spi.update(this, id, content, this::doValidate); } @Override @@ -84,11 +81,14 @@ public class DataEntityServiceLocalSupport extends ObserveServiceLocal implement spi.delete(this, id); } - protected <E extends DataEntity> void doValidate(String validationContextName, String content, E entity) throws InvalidDataException { + protected <E extends DataEntity> void doValidate(E entity) throws InvalidDataException { + if (withoutValidation()) { + return; + } //FIXME Must have this somewhere on server or request ValidationRequestConfiguration configuration = newValidationRequestConfiguration(true); - DataValidationRequest request = newDataValidationRequest(validationContextName, entity.getTopiaId()); + DataValidationRequest request = newDataValidationRequest(entity.getTopiaId()); DataValidationResult result = ValidationHelper.validateApiData(this, configuration, request, entity); - checkValidationResult(content, result); + checkValidationResult(result); } } ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/api/ReferentialEntityServiceLocalSupport.java ===================================== @@ -44,7 +44,6 @@ import fr.ird.observe.spi.module.BusinessProjectVisitor; import fr.ird.observe.spi.module.BusinessReferentialPackage; import fr.ird.observe.spi.module.BusinessSubModule; import fr.ird.observe.spi.module.ObserveBusinessProject; -import fr.ird.observe.spi.validation.DtoValidationContext; import fr.ird.observe.spi.validation.ValidationHelper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -124,25 +123,26 @@ public class ReferentialEntityServiceLocalSupport extends ObserveServiceLocal im @Override public ToolkitId create(Class<? extends ReferentialDto> dtoType, String content) throws InvalidDataException { ReferentialDtoEntityContext<?, ?, ?, ?> spi = fromReferentialDto(dtoType); - return spi.create(this, content, withoutValidation() ? e -> { - } : e -> doValidate(spi.toDtoType(), DtoValidationContext.CREATE_VALIDATION_CONTEXT, content, e)); + return spi.create(this, content, e -> doValidate(spi.toDtoType(), e)); } @Override public ToolkitId update(Class<? extends ReferentialDto> dtoType, String id, String content) throws InvalidDataException { id = ToolkitId.decodeId(id); ReferentialDtoEntityContext<?, ?, ?, ?> spi = fromReferentialDto(dtoType); - return spi.update(this, id, content, withoutValidation() ? e -> { - } : e -> doValidate(spi.toDtoType(), DtoValidationContext.CREATE_VALIDATION_CONTEXT, content, e)); + return spi.update(this, id, content, e -> doValidate(spi.toDtoType(), e)); } - protected <D extends ReferentialDto, E extends ReferentialEntity> void doValidate(Class<D> dtoType, String validationContextName, String content, E entity) throws InvalidDataException { + private <D extends ReferentialDto, E extends ReferentialEntity> void doValidate(Class<D> dtoType, E entity) throws InvalidDataException { + if (withoutValidation()) { + return; + } //FIXME Must have this somewhere on server or request ValidationRequestConfiguration configuration = newValidationRequestConfiguration(false); - ReferentialValidationRequest request = newReferentialValidationRequest(validationContextName, Set.of(dtoType)); + ReferentialValidationRequest request = newReferentialValidationRequest(Set.of(dtoType)); //FIXME What about the not persisted case ? See Data ReferentialValidationResult result = ValidationHelper.validateApiReferential(this, configuration, request, dtoType, entity); - checkValidationResult(content, result); + checkValidationResult(result); } protected ToolkitTreeNodeStates getByType(ToolkitRequestConfig config, Set<Class<? extends ReferentialDto>> dtoTypes) { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/063d58011054af2808d44ef3e... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/063d58011054af2808d44ef3e... You're receiving this email because of your account on gitlab.com.