Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

7 changed files:

Changes:

  • core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SetSpi.java
    ... ... @@ -79,7 +79,7 @@ public class SetSpi extends GeneratedSetSpi {
    79 79
     
    
    80 80
         @Override
    
    81 81
         public void loadDtoForValidation(ServiceContext context, Activity parent, Set entity, SetDto dto) {
    
    82
    -        super.loadDtoForValidation(context, entity, dto);
    
    82
    +        super.loadDtoForValidation(context, parent, entity, dto);
    
    83 83
             dto.setOtherSets(getBrothers(context, parent));
    
    84 84
         }
    
    85 85
     
    

  • core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetSpi.java
    ... ... @@ -116,7 +116,7 @@ public class SetSpi extends GeneratedSetSpi {
    116 116
     
    
    117 117
         @Override
    
    118 118
         public void loadDtoForValidation(ServiceContext context,  Activity parent, Set entity, SetDto dto) {
    
    119
    -        super.loadDtoForValidation(context, entity, dto);
    
    119
    +        super.loadDtoForValidation(context, parent, entity, dto);
    
    120 120
             dto.setOtherSets(getBrothers(context, parent));
    
    121 121
         }
    
    122 122
     
    

  • core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java
    ... ... @@ -69,7 +69,7 @@ public class SetSpi extends GeneratedSetSpi {
    69 69
     
    
    70 70
         @Override
    
    71 71
         public void loadDtoForValidation(ServiceContext context, Activity parent, Set entity, SetDto dto) {
    
    72
    -        super.loadDtoForValidation(context, entity, dto);
    
    72
    +        super.loadDtoForValidation(context, parent, entity, dto);
    
    73 73
             Route route = Activity.SPI.getParent(context, parent.getTopiaId());
    
    74 74
             Date routeDate = route.getDate();
    
    75 75
             dto.setStartSetDate(routeDate);
    

  • core/persistence/java/src/main/java/fr/ird/observe/spi/validation/ValidationHelper.java
    ... ... @@ -77,7 +77,7 @@ public class ValidationHelper {
    77 77
                     try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) {
    
    78 78
                         // We need to inject species dto (required by some validators)
    
    79 79
                         Set<SpeciesDto> species = Species.loadEntitiesToDto(context);
    
    80
    -                    ValidationMessageDetector detector = ValidationMessageDetector.forData(toValidatorsMap(request), validationContext, validationContext.getSelectModel(), referentialLocale, resultBuilder);
    
    80
    +                    ValidationMessageDetector detector = ValidationMessageDetector.forData(context, toValidatorsMap(request), validationContext, validationContext.getSelectModel(), referentialLocale, resultBuilder);
    
    81 81
                         long t0 = TimeLog.getTime();
    
    82 82
                         try {
    
    83 83
                             validateData(detector, validationContext, entity, species);
    
    ... ... @@ -99,7 +99,7 @@ public class ValidationHelper {
    99 99
                     try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) {
    
    100 100
                         // We need to inject species dto (required by some validators)
    
    101 101
                         Set<SpeciesDto> species = Species.loadEntitiesToDto(context);
    
    102
    -                    ValidationMessageDetector detector = ValidationMessageDetector.forData(toValidatorsMap(request), validationContext, validationContext.getSelectModel(), referentialLocale, resultBuilder);
    
    102
    +                    ValidationMessageDetector detector = ValidationMessageDetector.forData(context, toValidatorsMap(request), validationContext, validationContext.getSelectModel(), referentialLocale, resultBuilder);
    
    103 103
                         for (String dataId : request.getDataIds()) {
    
    104 104
                             DataDtoEntityContext<?, ?, ?, ?> spi;
    
    105 105
                             if (TripAware.isSeineId(dataId)) {
    
    ... ... @@ -122,7 +122,7 @@ public class ValidationHelper {
    122 122
                     ReferentialLocale referentialLocale = context.getReferentialLocale();
    
    123 123
     
    
    124 124
                     try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) {
    
    125
    -                    ValidationMessageDetector detector = ValidationMessageDetector.forReferential(toValidatorsMap(request), validationContext, referentialLocale, resultBuilder);
    
    125
    +                    ValidationMessageDetector detector = ValidationMessageDetector.forReferential(context, toValidatorsMap(request), validationContext, referentialLocale, resultBuilder);
    
    126 126
                         boolean notPersisted = entity.isNotPersisted();
    
    127 127
                         if (notPersisted) {
    
    128 128
                             entity.setTopiaId("__create");
    
    ... ... @@ -150,7 +150,7 @@ public class ValidationHelper {
    150 150
                 try (ServiceValidationContext validationContext = (ServiceValidationContext) context.createServiceValidationContext(configuration, request)) {
    
    151 151
                     ReferentialLocale referentialLocale = context.getReferentialLocale();
    
    152 152
                     try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) {
    
    153
    -                    ValidationMessageDetector detector = ValidationMessageDetector.forReferential(toValidatorsMap(request), validationContext, referentialLocale, resultBuilder);
    
    153
    +                    ValidationMessageDetector detector = ValidationMessageDetector.forReferential(context, toValidatorsMap(request), validationContext, referentialLocale, resultBuilder);
    
    154 154
                         for (Class<? extends ReferentialDto> type : request.getReferentialTypes()) {
    
    155 155
                             ReferentialDtoEntityContext<?, ?, ?, ?> spi = context.fromReferentialDto(type);
    
    156 156
                             validateReferential(context, spi, detector, validationContext);
    

  • toolkit/persistence/src/main/java/fr/ird/observe/spi/context/EditableDtoEntityContext.java
    ... ... @@ -104,6 +104,12 @@ public abstract class EditableDtoEntityContext<
    104 104
             super.loadDtoForValidation(context, entity, dto);
    
    105 105
         }
    
    106 106
     
    
    107
    +    @Override
    
    108
    +    public void loadDtoForValidation(ServiceContext context, E entity, D dto) {
    
    109
    +        PE parent = getParent(context, entity.getTopiaId());
    
    110
    +        loadDtoForValidation(context, parent, entity, dto);
    
    111
    +    }
    
    112
    +
    
    107 113
         public final Form<D> preCreate(ServiceContext context, String parentId) {
    
    108 114
             PE parent = parentSpi().loadEntity(context, parentId);
    
    109 115
             E preCreated = newEntity(context.now());
    

  • toolkit/persistence/src/main/java/fr/ird/observe/spi/validation/EntityInterceptor.java
    ... ... @@ -26,6 +26,7 @@ import fr.ird.observe.dto.BusinessDto;
    26 26
     import fr.ird.observe.dto.referential.ReferentialLocale;
    
    27 27
     import fr.ird.observe.entities.Entity;
    
    28 28
     import fr.ird.observe.spi.context.DtoEntityContext;
    
    29
    +import fr.ird.observe.spi.service.ServiceContext;
    
    29 30
     import fr.ird.observe.validation.ValidationContextSupport;
    
    30 31
     import fr.ird.observe.validation.api.result.ValidationResultDtoMessage;
    
    31 32
     import io.ultreia.java4all.decoration.Decorator;
    
    ... ... @@ -62,10 +63,14 @@ public class EntityInterceptor<D extends BusinessDto, E extends Entity> {
    62 63
             this.cache = new TreeMap<>();
    
    63 64
         }
    
    64 65
     
    
    65
    -    LinkedList<ValidationResultDtoMessage> intercept(MessagesCollector messagesCollector, ValidationContextSupport validationDataContext, E e) {
    
    66
    +    LinkedList<ValidationResultDtoMessage> intercept(ServiceContext context, MessagesCollector messagesCollector, ValidationContextSupport validationDataContext, E e) {
    
    66 67
             e.registerDecorator(decorator);
    
    67 68
             if (validator != null) {
    
    68
    -            D dto = cache.computeIfAbsent(e.getTopiaId(), id -> spi.toDto(referentialLocale, e));
    
    69
    +            D dto = cache.computeIfAbsent(e.getTopiaId(), id -> {
    
    70
    +                D result = spi.toDto(referentialLocale, e);
    
    71
    +                spi.loadDtoForValidation(context, e, result);
    
    72
    +                return result;
    
    73
    +            });
    
    69 74
                 if (dataContextConsumer != null) {
    
    70 75
                     dataContextConsumer.accept(dto.getId());
    
    71 76
                     validationDataContext.add(dto);
    

  • toolkit/persistence/src/main/java/fr/ird/observe/spi/validation/ValidationMessageDetector.java
    ... ... @@ -26,6 +26,7 @@ import fr.ird.observe.dto.BusinessDto;
    26 26
     import fr.ird.observe.dto.referential.ReferentialLocale;
    
    27 27
     import fr.ird.observe.entities.Entity;
    
    28 28
     import fr.ird.observe.navigation.id.IdProject;
    
    29
    +import fr.ird.observe.spi.service.ServiceContext;
    
    29 30
     import fr.ird.observe.validation.ValidationContextSupport;
    
    30 31
     import fr.ird.observe.validation.ValidatorsMap;
    
    31 32
     import fr.ird.observe.validation.api.result.ValidationResultBuilder;
    
    ... ... @@ -59,6 +60,7 @@ public class ValidationMessageDetector {
    59 60
     
    
    60 61
         private static class ValidationEntityVisitor implements TopiaEntityVisitor {
    
    61 62
     
    
    63
    +        private final ServiceContext context;
    
    62 64
             private final ValidationContextSupport validationDataContext;
    
    63 65
             private final Map<Class<?>, EntityInterceptor<?, ?>> interceptors;
    
    64 66
             private final Deque<Entity> path;
    
    ... ... @@ -68,10 +70,12 @@ public class ValidationMessageDetector {
    68 70
     
    
    69 71
             private final boolean canWalkInSubclasses;
    
    70 72
     
    
    71
    -        ValidationEntityVisitor(ValidationContextSupport validationDataContext,
    
    73
    +        ValidationEntityVisitor(ServiceContext context,
    
    74
    +                                ValidationContextSupport validationDataContext,
    
    72 75
                                     Map<Class<?>, EntityInterceptor<?, ?>> interceptors,
    
    73 76
                                     ValidationResultBuilder resultBuilder,
    
    74 77
                                     MessagesCollector messagesCollector, boolean canWalkInSubclasses) {
    
    78
    +            this.context = context;
    
    75 79
                 this.validationDataContext = validationDataContext;
    
    76 80
                 this.interceptors = interceptors;
    
    77 81
                 this.resultBuilder = resultBuilder;
    
    ... ... @@ -140,7 +144,7 @@ public class ValidationMessageDetector {
    140 144
                 if (interceptor == null) {
    
    141 145
                     return;
    
    142 146
                 }
    
    143
    -            LinkedList<ValidationResultDtoMessage> messages = interceptor.intercept(messagesCollector, validationDataContext, e);
    
    147
    +            LinkedList<ValidationResultDtoMessage> messages = interceptor.intercept(context,messagesCollector, validationDataContext, e);
    
    144 148
                 resultBuilder.addMessages(getPath(), messages);
    
    145 149
             }
    
    146 150
     
    
    ... ... @@ -178,7 +182,8 @@ public class ValidationMessageDetector {
    178 182
             }
    
    179 183
         }
    
    180 184
     
    
    181
    -    public static ValidationMessageDetector forData(ValidatorsMap validators,
    
    185
    +    public static ValidationMessageDetector forData(ServiceContext context,
    
    186
    +                                                    ValidatorsMap validators,
    
    182 187
                                                         ValidationContextSupport validationDataContext,
    
    183 188
                                                         IdProject selectModel,
    
    184 189
                                                         ReferentialLocale referentialLocale,
    
    ... ... @@ -187,33 +192,38 @@ public class ValidationMessageDetector {
    187 192
                                                                                              validationDataContext,
    
    188 193
                                                                                              selectModel,
    
    189 194
                                                                                              referentialLocale);
    
    190
    -        return new ValidationMessageDetector(referentialLocale,
    
    195
    +        return new ValidationMessageDetector(context,
    
    196
    +                                             referentialLocale,
    
    191 197
                                                  validationDataContext,
    
    192 198
                                                  resultBuilder,
    
    193 199
                                                  interceptors,
    
    194 200
                                                  true);
    
    195 201
         }
    
    196 202
     
    
    197
    -    public static ValidationMessageDetector forReferential(ValidatorsMap validators,
    
    203
    +    public static ValidationMessageDetector forReferential(ServiceContext context,
    
    204
    +                                                           ValidatorsMap validators,
    
    198 205
                                                                ValidationContextSupport validationDataContext,
    
    199 206
                                                                ReferentialLocale referentialLocale,
    
    200 207
                                                                ValidationResultBuilder resultBuilder) {
    
    201 208
             Map<Class<?>, EntityInterceptor<?, ?>> interceptors = EntityInterceptors.forReferential(validators,
    
    202 209
                                                                                                     validationDataContext,
    
    203 210
                                                                                                     referentialLocale);
    
    204
    -        return new ValidationMessageDetector(referentialLocale,
    
    211
    +        return new ValidationMessageDetector(context,
    
    212
    +                                             referentialLocale,
    
    205 213
                                                  validationDataContext,
    
    206 214
                                                  resultBuilder,
    
    207 215
                                                  interceptors,
    
    208 216
                                                  false);
    
    209 217
         }
    
    210 218
     
    
    211
    -    private ValidationMessageDetector(ReferentialLocale referentialLocale,
    
    219
    +    private ValidationMessageDetector(ServiceContext context,
    
    220
    +                                      ReferentialLocale referentialLocale,
    
    212 221
                                           ValidationContextSupport validationDataContext,
    
    213 222
                                           ValidationResultBuilder resultBuilder,
    
    214 223
                                           Map<Class<?>, EntityInterceptor<?, ?>> interceptors,
    
    215 224
                                           boolean canWalkInSubclasses) {
    
    216
    -        this.entityVisitor = new ValidationEntityVisitor(validationDataContext,
    
    225
    +        this.entityVisitor = new ValidationEntityVisitor(context,
    
    226
    +                                                         validationDataContext,
    
    217 227
                                                              interceptors,
    
    218 228
                                                              resultBuilder,
    
    219 229
                                                              new MessagesCollector(referentialLocale.getLocale()),