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

Commits:

15 changed files:

Changes:

  • dto/src/main/java/fr/ird/observe/dto/referential/LengthLengthParameterReference.java
    1
    +package fr.ird.observe.dto.referential;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Dto
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.dto.reference.ReferentialDtoReferenceAware;
    
    26
    +
    
    27
    +import java.util.Date;
    
    28
    +
    
    29
    +public class LengthLengthParameterReference extends GeneratedLengthLengthParameterReference implements WithStartEndDate {
    
    30
    +
    
    31
    +    public LengthLengthParameterReference(ReferentialDtoReferenceAware dto, String oceanLabel, String speciesLabel, String sexLabel, Date startDate, Date endDate, String inputSizeMeasureTypeCode, String inputSizeMeasureTypeLabel, String outputSizeMeasureTypeCode, String outputSizeMeasureTypeLabel, String inputOutputFormula, String outputInputFormula) {
    
    32
    +        super(dto, oceanLabel, speciesLabel, sexLabel, startDate, endDate, inputSizeMeasureTypeCode, inputSizeMeasureTypeLabel, outputSizeMeasureTypeCode, outputSizeMeasureTypeLabel, inputOutputFormula, outputInputFormula);
    
    33
    +    }
    
    34
    +
    
    35
    +}

  • dto/src/main/java/fr/ird/observe/dto/referential/LengthWeightParameterReference.java
    1
    +package fr.ird.observe.dto.referential;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Dto
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + * 
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + * 
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.dto.reference.ReferentialDtoReferenceAware;
    
    26
    +
    
    27
    +import java.util.Date;
    
    28
    +
    
    29
    +public class LengthWeightParameterReference extends GeneratedLengthWeightParameterReference implements WithStartEndDate {
    
    30
    +
    
    31
    +    public LengthWeightParameterReference(ReferentialDtoReferenceAware dto, String oceanLabel, String speciesLabel, String sexLabel, Date startDate, Date endDate, String lengthWeightFormula, String weightLengthFormula, String sizeMeasureTypeCode) {
    
    32
    +        super(dto, oceanLabel, speciesLabel, sexLabel, startDate, endDate, lengthWeightFormula, weightLengthFormula, sizeMeasureTypeCode);
    
    33
    +}
    
    34
    +
    
    35
    +}

  • dto/src/main/java/fr/ird/observe/dto/referential/WithLengthFormula.java
    ... ... @@ -22,14 +22,10 @@ package fr.ird.observe.dto.referential;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import com.google.common.collect.Ordering;
    
    26
    -import org.apache.commons.lang3.BooleanUtils;
    
    27
    -
    
    28 25
     import java.util.Comparator;
    
    29 26
     import java.util.Date;
    
    30 27
     import java.util.List;
    
    31 28
     import java.util.Set;
    
    32
    -import java.util.stream.Collectors;
    
    33 29
     
    
    34 30
     /**
    
    35 31
      * Created on 22/12/16.
    
    ... ... @@ -37,7 +33,7 @@ import java.util.stream.Collectors;
    37 33
      * @author Tony Chemit - dev@tchemit.fr
    
    38 34
      * @since 6.0
    
    39 35
      */
    
    40
    -public interface WithLengthFormula extends WithFormula {
    
    36
    +public interface WithLengthFormula extends WithFormula, WithStartEndDate {
    
    41 37
     
    
    42 38
         String PROPERTY_OCEAN = "ocean";
    
    43 39
         String PROPERTY_SPECIES = "species";
    
    ... ... @@ -47,32 +43,26 @@ public interface WithLengthFormula extends WithFormula {
    47 43
         String PROPERTY_COEFFICIENTS = "coefficients";
    
    48 44
         String PROPERTY_SOURCE = "source";
    
    49 45
     
    
    50
    -    Comparator<Date> START_DATE_COMPARATOR = Ordering.natural().nullsFirst();
    
    51
    -    Comparator<Date> END_DATE_COMPARATOR = Ordering.natural().nullsLast();
    
    52
    -    Comparator<WithLengthFormula> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(WithLengthFormula::getStartDate, WithLengthFormula.START_DATE_COMPARATOR);
    
    53
    -    Comparator<WithLengthFormula> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(WithLengthFormula::getEndDate, WithLengthFormula.END_DATE_COMPARATOR);
    
    46
    +    Comparator<WithLengthFormula> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getStartDate, WithStartEndDate.START_DATE_COMPARATOR);
    
    47
    +    Comparator<WithLengthFormula> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getEndDate, WithStartEndDate.END_DATE_COMPARATOR);
    
    54 48
         Comparator<WithLengthFormula> FORMULA_SUPPORT_COMPARATOR = FORMULA_SUPPORT_START_DATE_COMPARATOR.thenComparing(FORMULA_SUPPORT_END_DATE_COMPARATOR);
    
    55 49
     
    
    56 50
         static <D extends WithLengthFormula> void sort(List<D> list) {
    
    57 51
             list.sort(FORMULA_SUPPORT_COMPARATOR);
    
    58 52
         }
    
    59 53
     
    
    60
    -    static <D extends WithLengthFormula> List<D> filter(List<D> list, Date date) {
    
    61
    -        return list.stream()
    
    62
    -                .filter(f -> WithLengthFormula.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithLengthFormula.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
    
    63
    -                .collect(Collectors.toList());
    
    64
    -    }
    
    54
    +//    static <D extends WithStartEndDate> List<D> filter(List<D> list, Date date) {
    
    55
    +//        return list.stream()
    
    56
    +//                .filter(f -> WithStartEndDate.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithStartEndDate.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
    
    57
    +//                .collect(Collectors.toList());
    
    58
    +//    }
    
    65 59
     
    
    66 60
         String getFormulaOneVariableName();
    
    67 61
     
    
    68 62
         String getFormulaTwoVariableName();
    
    69 63
     
    
    70
    -    Date getStartDate();
    
    71
    -
    
    72 64
         void setStartDate(Date startDate);
    
    73 65
     
    
    74
    -    Date getEndDate();
    
    75
    -
    
    76 66
         void setEndDate(Date endDate);
    
    77 67
     
    
    78 68
         void setCoefficients(String coefficients);
    
    ... ... @@ -96,10 +86,10 @@ public interface WithLengthFormula extends WithFormula {
    96 86
     
    
    97 87
         boolean isFormulaOneValid();
    
    98 88
     
    
    99
    -    boolean isFormulaTwoValid();
    
    100
    -
    
    101 89
         void setFormulaOneValid(boolean formulaOneValid);
    
    102 90
     
    
    91
    +    boolean isFormulaTwoValid();
    
    92
    +
    
    103 93
         void setFormulaTwoValid(boolean formulaTwoValid);
    
    104 94
     
    
    105 95
         default void revalidateFormulaTwo() {
    

  • dto/src/main/java/fr/ird/observe/dto/referential/WithStartEndDate.java
    1
    +package fr.ird.observe.dto.referential;
    
    2
    +
    
    3
    +import com.google.common.collect.Ordering;
    
    4
    +import fr.ird.observe.dto.reference.DtoReferenceAware;
    
    5
    +
    
    6
    +import java.util.Comparator;
    
    7
    +import java.util.Date;
    
    8
    +
    
    9
    +/**
    
    10
    + * Created by tchemit on 10/07/2018.
    
    11
    + *
    
    12
    + * @author Tony Chemit - dev@tchemit.fr
    
    13
    + */
    
    14
    +public interface WithStartEndDate extends DtoReferenceAware {
    
    15
    +
    
    16
    +    Comparator<Date> START_DATE_COMPARATOR = Ordering.natural().nullsFirst();
    
    17
    +    Comparator<Date> END_DATE_COMPARATOR = Ordering.natural().nullsLast();
    
    18
    +
    
    19
    +    Comparator<WithStartEndDate> WITH_START_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getStartDate, START_DATE_COMPARATOR);
    
    20
    +    Comparator<WithStartEndDate> WITH_END_DATE_COMPARATOR = Comparator.comparing(WithStartEndDate::getEndDate, END_DATE_COMPARATOR);
    
    21
    +
    
    22
    +    Date getStartDate();
    
    23
    +
    
    24
    +    Date getEndDate();
    
    25
    +
    
    26
    +}

  • persistence/src/main/java/fr/ird/observe/entities/referentiel/AbstractFormulaSupportTopiaDao.java
    ... ... @@ -22,7 +22,7 @@ package fr.ird.observe.entities.referentiel;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import fr.ird.observe.dto.referential.LengthFormulaSupportDto;
    
    25
    +import fr.ird.observe.dto.referential.WithStartEndDate;
    
    26 26
     
    
    27 27
     import java.util.Comparator;
    
    28 28
     import java.util.Date;
    
    ... ... @@ -32,13 +32,13 @@ import java.util.stream.Stream;
    32 32
     
    
    33 33
     public class AbstractFormulaSupportTopiaDao<E extends FormulaSupport> extends GeneratedFormulaSupportTopiaDao<E> {
    
    34 34
         
    
    35
    -    public static final Comparator<FormulaSupport> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getStartDate, LengthFormulaSupportDto.START_DATE_COMPARATOR);
    
    36
    -    public static final Comparator<FormulaSupport> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getEndDate, LengthFormulaSupportDto.END_DATE_COMPARATOR);
    
    35
    +    public static final Comparator<FormulaSupport> FORMULA_SUPPORT_START_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getStartDate, WithStartEndDate.START_DATE_COMPARATOR);
    
    36
    +    public static final Comparator<FormulaSupport> FORMULA_SUPPORT_END_DATE_COMPARATOR = Comparator.comparing(FormulaSupport::getEndDate, WithStartEndDate.END_DATE_COMPARATOR);
    
    37 37
         public static final Comparator<FormulaSupport> FORMULA_SUPPORT_COMPARATOR = FORMULA_SUPPORT_START_DATE_COMPARATOR.thenComparing(FORMULA_SUPPORT_END_DATE_COMPARATOR);
    
    38 38
     
    
    39 39
         public static <E extends FormulaSupport> List<E> sortAndFilter(Stream<E> list, Date date) {
    
    40 40
             return list.sorted(FORMULA_SUPPORT_COMPARATOR)
    
    41
    -                .filter(f -> LengthFormulaSupportDto.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && LengthFormulaSupportDto.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
    
    41
    +                .filter(f -> WithStartEndDate.START_DATE_COMPARATOR.compare(f.getStartDate(), date) <= 0 && WithStartEndDate.END_DATE_COMPARATOR.compare(date, f.getEndDate()) <= 0)
    
    42 42
                     .collect(Collectors.toList());
    
    43 43
         }
    
    44 44
     
    

  • services/src/main/java/fr/ird/observe/services/validation/ValidationContext.java
    ... ... @@ -193,6 +193,7 @@ public abstract class ValidationContext extends AbstractSerializableBean {
    193 193
             return validationSpeedMaxValue;
    
    194 194
         }
    
    195 195
     
    
    196
    +    @SuppressWarnings("unused")
    
    196 197
         public Function<ReferentialDto, ReferentialDtoReference> getReferentialReferenceFunction() {
    
    197 198
             return this::toReferentialReference;
    
    198 199
         }
    

  • services/src/main/java/fr/ird/observe/services/validation/validators/ObserveReferentialCollectionUniqueKeyDtoValidator.javaservices/src/main/java/fr/ird/observe/services/validation/validators/ObserveLengthFormulaCollectionUniqueKeyDtoValidator.java
    ... ... @@ -24,18 +24,18 @@ package fr.ird.observe.services.validation.validators;
    24 24
     
    
    25 25
     import com.opensymphony.xwork2.validator.ValidationException;
    
    26 26
     import fr.ird.observe.dto.IdDto;
    
    27
    -import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    27
    +import fr.ird.observe.dto.referential.WithStartEndDate;
    
    28 28
     import org.apache.commons.logging.Log;
    
    29 29
     import org.apache.commons.logging.LogFactory;
    
    30 30
     import org.nuiton.validator.xwork2.field.NuitonFieldValidatorSupport;
    
    31 31
     
    
    32 32
     import java.util.Collection;
    
    33 33
     import java.util.Collections;
    
    34
    -import java.util.Comparator;
    
    35 34
     import java.util.Date;
    
    35
    +import java.util.Iterator;
    
    36
    +import java.util.LinkedList;
    
    37
    +import java.util.List;
    
    36 38
     import java.util.Objects;
    
    37
    -import java.util.Set;
    
    38
    -import java.util.TreeSet;
    
    39 39
     import java.util.function.Function;
    
    40 40
     
    
    41 41
     /**
    
    ... ... @@ -44,9 +44,10 @@ import java.util.function.Function;
    44 44
      * @author Tony Chemit - dev@tchemit.fr
    
    45 45
      * @since 4.0.1
    
    46 46
      */
    
    47
    -public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFieldValidatorSupport {
    
    47
    +public class ObserveLengthFormulaCollectionUniqueKeyDtoValidator extends NuitonFieldValidatorSupport {
    
    48
    +
    
    49
    +    private static final Log log = LogFactory.getLog(ObserveLengthFormulaCollectionUniqueKeyDtoValidator.class);
    
    48 50
     
    
    49
    -    private static final Log log = LogFactory.getLog(ObserveReferentialCollectionUniqueKeyDtoValidator.class);
    
    50 51
         /**
    
    51 52
          * pour indiquer la propriété qui contient la liste à valider.
    
    52 53
          * <p>
    
    ... ... @@ -65,7 +66,6 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
    65 66
          * clef unique.
    
    66 67
          */
    
    67 68
         protected String[] keys;
    
    68
    -    private Comparator<?> comparator;
    
    69 69
     
    
    70 70
         public String getCollectionFieldName() {
    
    71 71
             return collectionFieldName;
    
    ... ... @@ -103,70 +103,72 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
    103 103
                 throw new ValidationException("keys not defined");
    
    104 104
             }
    
    105 105
     
    
    106
    -        Collection<?> col = getCollection(object);
    
    107
    -        if (log.isDebugEnabled()) {
    
    108
    -            log.debug("collection found : " + col);
    
    109
    -        }
    
    106
    +        Collection<? super WithStartEndDate> col = getCollection(object);
    
    110 107
     
    
    111
    -        if (log.isDebugEnabled()) {
    
    112
    -            log.debug("againtBean = " + object);
    
    113
    -        }
    
    108
    +        log.debug("collection found : " + col);
    
    109
    +        log.debug("againstBean = " + object);
    
    114 110
     
    
    115 111
             boolean answer = true;
    
    116 112
     
    
    117 113
             @SuppressWarnings("unchecked")
    
    118
    -        Set<Object> hashCodes = new TreeSet<>((Comparator<? super Object>) getComparator());
    
    119
    -        Function decoratorService = (Function) getFieldValue("referentialReferenceFunction", object);
    
    120
    -        ReferentialDtoReference referentialDtoReference = (ReferentialDtoReference) decoratorService.apply(object);
    
    121
    -        hashCodes.add(referentialDtoReference);
    
    114
    +        Function<Object, WithStartEndDate> decoratorService = (Function) getFieldValue("referentialReferenceFunction", object);
    
    115
    +        WithStartEndDate referentialDtoReference = decoratorService.apply(object);
    
    116
    +
    
    117
    +        Date startDate = referentialDtoReference.getStartDate();
    
    118
    +        Date endDate = referentialDtoReference.getEndDate();
    
    122 119
     
    
    123 120
             String idToExclude = ((IdDto) object).getId();
    
    124
    -        int index = -1;
    
    121
    +        List<WithStartEndDate> challenges = new LinkedList<>();
    
    125 122
             for (Object o : col) {
    
    126 123
     
    
    127
    -            index++;
    
    128
    -
    
    129 124
                 String id = ((IdDto) o).getId();
    
    130 125
                 if (Objects.equals(idToExclude, id)) {
    
    131
    -
    
    132 126
                     // Do not treat again object
    
    133 127
                     continue;
    
    134
    -
    
    135 128
                 }
    
    136 129
     
    
    137
    -            boolean wasAdded = hashCodes.add(o);
    
    138
    -            if (!wasAdded) {
    
    139
    -                answer = false;
    
    140
    -                if (log.isDebugEnabled()) {
    
    141
    -                    log.debug("duplicated unique entry at " + index);
    
    142
    -                }
    
    130
    +            if (equals(referentialDtoReference, o)) {
    
    131
    +                // same common key
    
    132
    +                challenges.add((WithStartEndDate) o);
    
    143 133
                     break;
    
    144 134
                 }
    
    135
    +        }
    
    145 136
     
    
    137
    +        if (challenges.isEmpty()) {
    
    138
    +            // no other entries with same common key
    
    139
    +            return;
    
    146 140
             }
    
    147 141
     
    
    148
    -        if (!answer) {
    
    142
    +        Iterator<WithStartEndDate> iterator = challenges.iterator();
    
    143
    +        while (answer && iterator.hasNext()) {
    
    144
    +            WithStartEndDate challenge = iterator.next();
    
    145
    +            Date challengeStartDate = challenge.getStartDate();
    
    146
    +            Date challengeEndDate = challenge.getEndDate();
    
    149 147
     
    
    148
    +            int min = WithStartEndDate.START_DATE_COMPARATOR.compare(startDate, challengeStartDate);
    
    149
    +            if (min == 0) {
    
    150
    +                // same lower bound
    
    151
    +                answer = false;
    
    152
    +                continue;
    
    153
    +            }
    
    154
    +            if (min < 0) {
    
    155
    +                // only valid if check upper bound is lower than chanllenge min bound
    
    156
    +                answer = WithStartEndDate.END_DATE_COMPARATOR.compare(endDate, challengeStartDate) < 0;
    
    157
    +                continue;
    
    158
    +            }
    
    159
    +            // check min is after challenge min
    
    160
    +            answer = WithStartEndDate.END_DATE_COMPARATOR.compare(startDate, challengeEndDate) > 0;
    
    161
    +        }
    
    162
    +
    
    163
    +        if (!answer) {
    
    150 164
                 String fieldName = getFieldName();
    
    151 165
                 addFieldError(fieldName, object);
    
    152
    -
    
    153 166
             }
    
    154 167
     
    
    155 168
         }
    
    156 169
     
    
    157
    -    @Override
    
    158
    -    public String getValidatorType() {
    
    159
    -        return "observeReferentialCollectionUniqueKeyDto";
    
    160
    -    }
    
    161 170
     
    
    162
    -    private Comparator<?> getComparator() {
    
    163
    -        if (comparator == null) {
    
    164
    -            comparator = new MyComparator<>(keys);
    
    165
    -        }
    
    166
    -        return comparator;
    
    167
    -    }
    
    168
    -
    
    169
    -    private Object getPropertyValue(String key, Object o) {
    
    171
    +    Object getPropertyValue(String key, Object o) {
    
    170 172
     
    
    171 173
             Object result;
    
    172 174
     
    
    ... ... @@ -193,7 +195,7 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
    193 195
          * property
    
    194 196
          * @throws ValidationException if any pb to retreave the collection
    
    195 197
          */
    
    196
    -    private Collection<?> getCollection(Object object) throws ValidationException {
    
    198
    +    Collection<? super WithStartEndDate> getCollection(Object object) throws ValidationException {
    
    197 199
     
    
    198 200
             String fieldName = getCollectionFieldName();
    
    199 201
     
    
    ... ... @@ -227,53 +229,38 @@ public class ObserveReferentialCollectionUniqueKeyDtoValidator extends NuitonFie
    227 229
     
    
    228 230
             }
    
    229 231
     
    
    230
    -        return (Collection<?>) obj;
    
    232
    +        return (Collection) obj;
    
    231 233
     
    
    232 234
         }
    
    233 235
     
    
    234
    -    @SuppressWarnings("ComparatorNotSerializable")
    
    235
    -    private class MyComparator<O> implements Comparator<O> {
    
    236
    -
    
    237
    -        private final String[] comparatorKeys;
    
    238
    -
    
    239
    -        MyComparator(String... comparatorKeys) {
    
    240
    -
    
    241
    -            this.comparatorKeys = comparatorKeys;
    
    242
    -        }
    
    243
    -
    
    244
    -        @Override
    
    245
    -        public int compare(O o1, O o2) {
    
    246
    -
    
    247
    -            boolean equals = true;
    
    248 236
     
    
    249
    -            for (String key : comparatorKeys) {
    
    237
    +    protected boolean equals(Object o1, Object o2) {
    
    238
    +        boolean equals = true;
    
    250 239
     
    
    251
    -                Object property1 = getPropertyValue(key, o1);
    
    252
    -                Object property2 = getPropertyValue(key, o2);
    
    240
    +        for (String key : keys) {
    
    253 241
     
    
    254
    -                equals = equals(property1, property2);
    
    242
    +            Object property1 = getPropertyValue(key, o1);
    
    243
    +            Object property2 = getPropertyValue(key, o2);
    
    255 244
     
    
    256
    -                if (!equals) {
    
    257
    -                    break;
    
    258
    -                }
    
    245
    +            if (property1 instanceof Date) {
    
    246
    +                property1 = ((Date) property1).getTime();
    
    259 247
                 }
    
    260
    -
    
    261
    -            return equals ? 0 : -1;
    
    262
    -        }
    
    263
    -
    
    264
    -        protected boolean equals(Object o1, Object o2) {
    
    265
    -
    
    266
    -            if (o1 instanceof Date) {
    
    267
    -                o1 = ((Date) o1).getTime();
    
    268
    -            }
    
    269
    -            if (o2 instanceof Date) {
    
    270
    -                o2 = ((Date) o2).getTime();
    
    248
    +            if (property2 instanceof Date) {
    
    249
    +                property2 = ((Date) property2).getTime();
    
    271 250
                 }
    
    272 251
     
    
    273
    -            return Objects.equals(o1, o2);
    
    252
    +            equals = Objects.equals(property1, property2);
    
    274 253
     
    
    254
    +            if (!equals) {
    
    255
    +                break;
    
    256
    +            }
    
    275 257
             }
    
    258
    +        return equals;
    
    259
    +    }
    
    276 260
     
    
    261
    +    @Override
    
    262
    +    public String getValidatorType() {
    
    263
    +        return "observeLengthFormulaCollectionUniqueKeyDto";
    
    277 264
         }
    
    278 265
     
    
    279 266
     }

  • validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-create-error-validation.xml
    ... ... @@ -32,10 +32,10 @@
    32 32
           <message>observe.validation.lengthLengthParameter.required.species</message>
    
    33 33
         </field-validator>
    
    34 34
     
    
    35
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    36
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    35
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    36
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    37 37
           <param name="collectionFieldName">editingReferentielList</param>
    
    38
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    38
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    39 39
           <!--<param name="againstMe">true</param>-->
    
    40 40
           <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    41 41
         </field-validator>
    
    ... ... @@ -47,10 +47,10 @@
    47 47
           <message>observe.validation.lengthLengthParameter.null.ocean</message>
    
    48 48
         </field-validator>
    
    49 49
     
    
    50
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    51
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    50
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    51
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    52 52
           <param name="collectionFieldName">editingReferentielList</param>
    
    53
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    53
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    54 54
           <!--<param name="againstMe">true</param>-->
    
    55 55
           <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    56 56
         </field-validator>
    
    ... ... @@ -62,25 +62,38 @@
    62 62
           <message>observe.validation.lengthLengthParameter.null.sex</message>
    
    63 63
         </field-validator>
    
    64 64
     
    
    65
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    66
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    65
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    66
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    67 67
           <param name="collectionFieldName">editingReferentielList</param>
    
    68
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    68
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    69 69
           <!--<param name="againstMe">true</param>-->
    
    70 70
           <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    71 71
         </field-validator>
    
    72 72
       </field>
    
    73 73
     
    
    74 74
       <field name="startDate">
    
    75
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    76
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    75
    +    <field-validator type="fieldexpression" short-circuit="true">
    
    76
    +      <param name="expression">
    
    77
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    78
    +      </param>
    
    79
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    80
    +    </field-validator>
    
    81
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    82
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    77 83
           <param name="collectionFieldName">editingReferentielList</param>
    
    78
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    84
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    79 85
           <!--<param name="againstMe">true</param>-->
    
    80 86
           <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    81 87
         </field-validator>
    
    82 88
       </field>
    
    83
    -
    
    89
    +  <field name="endDate">
    
    90
    +    <field-validator type="fieldexpression">
    
    91
    +      <param name="expression">
    
    92
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    93
    +      </param>
    
    94
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    95
    +    </field-validator>
    
    96
    +  </field>
    
    84 97
       <field name="inputSizeMeasureType">
    
    85 98
     
    
    86 99
         <!-- pas de inputSizeMeasureType selectionne -->
    
    ... ... @@ -95,6 +108,14 @@
    95 108
           </param>
    
    96 109
           <message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
    
    97 110
         </field-validator>
    
    111
    +
    
    112
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    113
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    114
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    115
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    116
    +      <!--<param name="againstMe">true</param>-->
    
    117
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    118
    +    </field-validator>
    
    98 119
       </field>
    
    99 120
     
    
    100 121
     
    
    ... ... @@ -112,6 +133,14 @@
    112 133
           </param>
    
    113 134
           <message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
    
    114 135
         </field-validator>
    
    136
    +
    
    137
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    138
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    139
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    140
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    141
    +      <!--<param name="againstMe">true</param>-->
    
    142
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    143
    +    </field-validator>
    
    115 144
       </field>
    
    116 145
     
    
    117 146
       <field name="inputOutputFormula">
    

  • validation/src/main/resources/fr/ird/observe/dto/referential/LengthLengthParameterDto-update-error-validation.xml
    ... ... @@ -32,10 +32,11 @@
    32 32
           <message>observe.validation.lengthLengthParameter.required.species</message>
    
    33 33
         </field-validator>
    
    34 34
     
    
    35
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    36
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    35
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    36
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    37 37
           <param name="collectionFieldName">editingReferentielList</param>
    
    38
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    38
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    39
    +      <!--<param name="againstMe">true</param>-->
    
    39 40
           <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    40 41
         </field-validator>
    
    41 42
       </field>
    
    ... ... @@ -46,12 +47,12 @@
    46 47
           <message>observe.validation.lengthLengthParameter.null.ocean</message>
    
    47 48
         </field-validator>
    
    48 49
     
    
    49
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    50
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    50
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    51
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    51 52
           <param name="collectionFieldName">editingReferentielList</param>
    
    52
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    53
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    53 54
           <!--<param name="againstMe">true</param>-->
    
    54
    -      <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    55
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    55 56
         </field-validator>
    
    56 57
       </field>
    
    57 58
     
    
    ... ... @@ -61,24 +62,38 @@
    61 62
           <message>observe.validation.lengthLengthParameter.null.sex</message>
    
    62 63
         </field-validator>
    
    63 64
     
    
    64
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    65
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    65
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    66
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    66 67
           <param name="collectionFieldName">editingReferentielList</param>
    
    67
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    68
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    68 69
           <!--<param name="againstMe">true</param>-->
    
    69
    -      <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    70
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    70 71
         </field-validator>
    
    71 72
       </field>
    
    73
    +
    
    72 74
       <field name="startDate">
    
    73
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    74
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    75
    +    <field-validator type="fieldexpression" short-circuit="true">
    
    76
    +      <param name="expression">
    
    77
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    78
    +      </param>
    
    79
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    80
    +    </field-validator>
    
    81
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    82
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    75 83
           <param name="collectionFieldName">editingReferentielList</param>
    
    76
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    84
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    77 85
           <!--<param name="againstMe">true</param>-->
    
    78
    -      <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    86
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    87
    +    </field-validator>
    
    88
    +  </field>
    
    89
    +  <field name="endDate">
    
    90
    +    <field-validator type="fieldexpression">
    
    91
    +      <param name="expression">
    
    92
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    93
    +      </param>
    
    94
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    79 95
         </field-validator>
    
    80 96
       </field>
    
    81
    -
    
    82 97
       <field name="inputSizeMeasureType">
    
    83 98
     
    
    84 99
         <!-- pas de inputSizeMeasureType selectionne -->
    
    ... ... @@ -93,6 +108,14 @@
    93 108
           </param>
    
    94 109
           <message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
    
    95 110
         </field-validator>
    
    111
    +
    
    112
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    113
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    114
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    115
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    116
    +      <!--<param name="againstMe">true</param>-->
    
    117
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    118
    +    </field-validator>
    
    96 119
       </field>
    
    97 120
     
    
    98 121
     
    
    ... ... @@ -110,6 +133,14 @@
    110 133
           </param>
    
    111 134
           <message>observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType</message>
    
    112 135
         </field-validator>
    
    136
    +
    
    137
    +    <!-- clef unique species - gender - ocean - inputSizeMeasureTypeCode - outputSizeMeasureTypeCode -->
    
    138
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    139
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    140
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,inputSizeMeasureTypeCode,outputSizeMeasureTypeCode</param>
    
    141
    +      <!--<param name="againstMe">true</param>-->
    
    142
    +      <message>observe.validation.lengthLengthParameter.invalid.uniqueKey</message>
    
    143
    +    </field-validator>
    
    113 144
       </field>
    
    114 145
     
    
    115 146
       <field name="inputOutputFormula">
    

  • validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-create-error-validation.xml
    ... ... @@ -32,10 +32,10 @@
    32 32
           <message>observe.validation.lengthWeightParameter.required.species</message>
    
    33 33
         </field-validator>
    
    34 34
     
    
    35
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    36
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    35
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    36
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    37 37
           <param name="collectionFieldName">editingReferentielList</param>
    
    38
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    38
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    39 39
           <!--<param name="againstMe">true</param>-->
    
    40 40
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    41 41
         </field-validator>
    
    ... ... @@ -47,10 +47,10 @@
    47 47
           <message>observe.validation.lengthWeightParameter.null.ocean</message>
    
    48 48
         </field-validator>
    
    49 49
     
    
    50
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    51
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    50
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    51
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    52 52
           <param name="collectionFieldName">editingReferentielList</param>
    
    53
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    53
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    54 54
           <!--<param name="againstMe">true</param>-->
    
    55 55
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    56 56
         </field-validator>
    
    ... ... @@ -62,25 +62,40 @@
    62 62
           <message>observe.validation.lengthWeightParameter.null.sex</message>
    
    63 63
         </field-validator>
    
    64 64
     
    
    65
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    66
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    65
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    66
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    67 67
           <param name="collectionFieldName">editingReferentielList</param>
    
    68
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    68
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    69 69
           <!--<param name="againstMe">true</param>-->
    
    70 70
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    71 71
         </field-validator>
    
    72 72
       </field>
    
    73 73
     
    
    74 74
       <field name="startDate">
    
    75
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    76
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    75
    +    <field-validator type="fieldexpression" short-circuit="true">
    
    76
    +      <param name="expression">
    
    77
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    78
    +      </param>
    
    79
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    80
    +    </field-validator>
    
    81
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType -->
    
    82
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    77 83
           <param name="collectionFieldName">editingReferentielList</param>
    
    78
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    84
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    79 85
           <!--<param name="againstMe">true</param>-->
    
    80 86
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    81 87
         </field-validator>
    
    82 88
       </field>
    
    83 89
     
    
    90
    +  <field name="endDate">
    
    91
    +    <field-validator type="fieldexpression">
    
    92
    +      <param name="expression">
    
    93
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    94
    +      </param>
    
    95
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    96
    +    </field-validator>
    
    97
    +  </field>
    
    98
    +
    
    84 99
       <field name="sizeMeasureType">
    
    85 100
         <!-- pas de sizeMeasureType renseigne -->
    
    86 101
         <field-validator type="required">
    
    ... ... @@ -94,6 +109,14 @@
    94 109
           </param>
    
    95 110
           <message>observe.validation.lengthWeightParameter.disabled.sizeMeasureType</message>
    
    96 111
         </field-validator>
    
    112
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    113
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    114
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    115
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    116
    +      <!--<param name="againstMe">true</param>-->
    
    117
    +      <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    118
    +    </field-validator>
    
    119
    +
    
    97 120
       </field>
    
    98 121
     
    
    99 122
       <field name="lengthWeightFormula">
    

  • validation/src/main/resources/fr/ird/observe/dto/referential/LengthWeightParameterDto-update-error-validation.xml
    ... ... @@ -26,43 +26,36 @@
    26 26
         "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
    
    27 27
     <validators>
    
    28 28
     
    
    29
    -  <!--<field name="code">-->
    
    30
    -
    
    31
    -  <!--&lt;!&ndash; clef unique sur le code &ndash;&gt;-->
    
    32
    -  <!--<field-validator type="referentialCode" short-circuit="true">-->
    
    33
    -  <!--<message>observe.validation.referentiel.invalid.code.uniqueKey##${code}</message>-->
    
    34
    -  <!--</field-validator>-->
    
    35
    -
    
    36
    -  <!--</field>-->
    
    37
    -
    
    38 29
       <field name="species">
    
    39 30
         <!-- pas de species selectionne -->
    
    40 31
         <field-validator type="required" short-circuit="true">
    
    41 32
           <message>observe.validation.lengthWeightParameter.required.species</message>
    
    42 33
         </field-validator>
    
    43 34
     
    
    44
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    45
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    35
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    36
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    46 37
           <param name="collectionFieldName">editingReferentielList</param>
    
    47
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    38
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    48 39
           <!--<param name="againstMe">true</param>-->
    
    49 40
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    50 41
         </field-validator>
    
    42
    +
    
    51 43
       </field>
    
    52 44
     
    
    53 45
       <field name="ocean">
    
    54 46
         <!-- pas de ocean renseigne -->
    
    55
    -    <field-validator type="required">
    
    47
    +    <field-validator type="required" short-circuit="true">
    
    56 48
           <message>observe.validation.lengthWeightParameter.null.ocean</message>
    
    57 49
         </field-validator>
    
    58 50
     
    
    59
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    60
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    51
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    52
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    61 53
           <param name="collectionFieldName">editingReferentielList</param>
    
    62
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    54
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    63 55
           <!--<param name="againstMe">true</param>-->
    
    64 56
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    65 57
         </field-validator>
    
    58
    +
    
    66 59
       </field>
    
    67 60
     
    
    68 61
       <field name="sex">
    
    ... ... @@ -71,38 +64,62 @@
    71 64
           <message>observe.validation.lengthWeightParameter.null.sex</message>
    
    72 65
         </field-validator>
    
    73 66
     
    
    74
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    75
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    67
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    68
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    76 69
           <param name="collectionFieldName">editingReferentielList</param>
    
    77
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    70
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    78 71
           <!--<param name="againstMe">true</param>-->
    
    79 72
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    80 73
         </field-validator>
    
    74
    +
    
    81 75
       </field>
    
    82 76
     
    
    83 77
       <field name="startDate">
    
    84
    -    <!-- clef unique species - gender - ocean - startDate -->
    
    85
    -    <field-validator type="observeReferentialCollectionUniqueKeyDto" short-circuit="true">
    
    78
    +    <field-validator type="fieldexpression" short-circuit="true">
    
    79
    +      <param name="expression">
    
    80
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    81
    +      </param>
    
    82
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    83
    +    </field-validator>
    
    84
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    85
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    86 86
           <param name="collectionFieldName">editingReferentielList</param>
    
    87
    -      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate</param>
    
    87
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    88 88
           <!--<param name="againstMe">true</param>-->
    
    89 89
           <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    90 90
         </field-validator>
    
    91 91
       </field>
    
    92 92
     
    
    93
    +  <field name="endDate">
    
    94
    +    <field-validator type="fieldexpression">
    
    95
    +      <param name="expression">
    
    96
    +        <![CDATA[ endDate == null || startDate == null || endDate.after(startDate) ]]>
    
    97
    +      </param>
    
    98
    +      <message>observe.validation.lengthFormula.endDate.before.startDate</message>
    
    99
    +    </field-validator>
    
    100
    +  </field>
    
    101
    +
    
    93 102
       <field name="sizeMeasureType">
    
    94 103
         <!-- pas de sizeMeasureType renseigne -->
    
    95
    -    <field-validator type="required">
    
    104
    +    <field-validator type="required" short-circuit="true">
    
    96 105
           <message>observe.validation.lengthWeightParameter.null.sizeMeasureType</message>
    
    97 106
         </field-validator>
    
    98 107
     
    
    99 108
         <!-- sizeMeasureType desactive -->
    
    100
    -    <field-validator type="fieldexpression">
    
    109
    +    <field-validator type="fieldexpression" short-circuit="true">
    
    101 110
           <param name="expression">
    
    102 111
             <![CDATA[ sizeMeasureType == null || sizeMeasureType.enabled ]]>
    
    103 112
           </param>
    
    104 113
           <message>observe.validation.lengthWeightParameter.disabled.sizeMeasureType</message>
    
    105 114
         </field-validator>
    
    115
    +    <!-- clef unique species - gender - ocean - startDate - sizeMeasureType --> 
    
    116
    +    <field-validator type="observeLengthFormulaCollectionUniqueKeyDto" short-circuit="true">
    
    117
    +      <param name="collectionFieldName">editingReferentielList</param>
    
    118
    +      <param name="keys">speciesLabel,sexLabel,oceanLabel,startDate,sizeMeasureTypeCode</param>
    
    119
    +      <!--<param name="againstMe">true</param>-->
    
    120
    +      <message>observe.validation.lengthWeightParameter.invalid.uniqueKey</message>
    
    121
    +    </field-validator>
    
    122
    +
    
    106 123
       </field>
    
    107 124
     
    
    108 125
       <field name="lengthWeightFormula">
    

  • validation/src/main/resources/i18n/validation_en_GB.properties
    ... ... @@ -451,10 +451,11 @@ observe.validation.hooksComposition.desactivated.hookSize=Selected hook size is
    451 451
     observe.validation.hooksComposition.desactivated.hookType=Selected hook type is disabled.
    
    452 452
     observe.validation.hooksComposition.required.hookType=Hook type must be filled.
    
    453 453
     observe.validation.hooksComposition.required.proportion=Proportion must be filled.
    
    454
    +observe.validation.lengthFormula.endDate.before.startDate=End date must be after start date
    
    454 455
     observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Selected Input Size measure type is disabled
    
    455 456
     observe.validation.lengthLengthParameter.invalid.inputOutputFormula=Formula is not valid.
    
    456 457
     observe.validation.lengthLengthParameter.invalid.outputInputFormula=Formula is not valid.
    
    457
    -observe.validation.lengthLengthParameter.invalid.uniqueKey=Tuple (gender/ocean/species/startDate) must be unique.
    
    458
    +observe.validation.lengthLengthParameter.invalid.uniqueKey=Tuple (species/ocean/gender/input size measure/ output size measure/startDate) must be unique.
    
    458 459
     observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Input size measure type is not filled.
    
    459 460
     observe.validation.lengthLengthParameter.null.ocean=Ocean is not filled.
    
    460 461
     observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Output size measure type is not filled.
    
    ... ... @@ -467,7 +468,7 @@ observe.validation.lengthLengthParameter.required.species=Species must be filled
    467 468
     observe.validation.lengthLengthParameter.required.startDate=Start date must be filled.
    
    468 469
     observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Selected size measure type is disabled.
    
    469 470
     observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Formula is not valid.
    
    470
    -observe.validation.lengthWeightParameter.invalid.uniqueKey=Tuple (gender/ocean/species/startDate) must be unique.
    
    471
    +observe.validation.lengthWeightParameter.invalid.uniqueKey=Tuple (species/ocean/gender/sizeMeasureType/startDate) must be unique.
    
    471 472
     observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Formula is not valid.
    
    472 473
     observe.validation.lengthWeightParameter.null.ocean=Ocean is not filled.
    
    473 474
     observe.validation.lengthWeightParameter.null.sizeMeasureType=Size measure type is not filled.
    

  • validation/src/main/resources/i18n/validation_es_ES.properties
    ... ... @@ -453,10 +453,11 @@ observe.validation.hooksComposition.desactivated.hookSize=El tamaño de avanzuel
    453 453
     observe.validation.hooksComposition.desactivated.hookType=El tipo de avanzuelo seleccionado está desactivado.
    
    454 454
     observe.validation.hooksComposition.required.hookType=La selección de un tipo de avanzuelo es mandatoria.
    
    455 455
     observe.validation.hooksComposition.required.proportion=La proporción está vacía.
    
    456
    +observe.validation.lengthFormula.endDate.before.startDate=End date must be after start date \#TODO
    
    456 457
     observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé. \#TODO
    
    457 458
     observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide. \#TODO
    
    458 459
     observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide. \#TODO
    
    459
    -observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (sexo/océano/especie) debe ser única, la tupla ya se ha usado.
    
    460
    +observe.validation.lengthLengthParameter.invalid.uniqueKey=Tupla (especiesexo/océano/input size measure/ output size measure/startDate) debe ser única, la tupla ya se ha usado. #TODO
    
    460 461
     observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné. \#TODO
    
    461 462
     observe.validation.lengthLengthParameter.null.ocean=No se ha seleccionado oceano.
    
    462 463
     observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné. \#TODO
    
    ... ... @@ -469,7 +470,7 @@ observe.validation.lengthLengthParameter.required.species=Especie no especificad
    469 470
     observe.validation.lengthLengthParameter.required.startDate=fecha de comienzo de validez no especificada.
    
    470 471
     observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé. \#TODO
    
    471 472
     observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=Relación de peso introducida no es coherente.
    
    472
    -observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (sexo/océano/especie) debe ser única, la tupla ya se ha usado.
    
    473
    +observe.validation.lengthWeightParameter.invalid.uniqueKey=Tupla (especie/sexo/océano/sizeMeasureType/startDate) debe ser única, la tupla ya se ha usado. #TODO
    
    473 474
     observe.validation.lengthWeightParameter.invalid.weightLengthFormula=Relación de talla introducida no es coherente.
    
    474 475
     observe.validation.lengthWeightParameter.null.ocean=No se ha seleccionado oceano.
    
    475 476
     observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné. \#TODO
    

  • validation/src/main/resources/i18n/validation_fr_FR.properties
    ... ... @@ -451,10 +451,11 @@ observe.validation.hooksComposition.desactivated.hookSize=La taille d'hameçon s
    451 451
     observe.validation.hooksComposition.desactivated.hookType=Le type d'hameçon sélectionné est désactivée.
    
    452 452
     observe.validation.hooksComposition.required.hookType=La sélection d'un type d'hameçon est obligatoire.
    
    453 453
     observe.validation.hooksComposition.required.proportion=Proportion non renseignée.
    
    454
    +observe.validation.lengthFormula.endDate.before.startDate=La date de fin doit être ultérieure à celle de débuts
    
    454 455
     observe.validation.lengthLengthParameter.disabled.inputSizeMeasureType=Le type de mensuration d'entrée sélectionné est désactivé.
    
    455 456
     observe.validation.lengthLengthParameter.invalid.inputOutputFormula=La formule n'est pas valide.
    
    456 457
     observe.validation.lengthLengthParameter.invalid.outputInputFormula=La formule n'est pas valide.
    
    457
    -observe.validation.lengthLengthParameter.invalid.uniqueKey=Le tuple (sexe/océan/espèce/date de début) doit être unique
    
    458
    +observe.validation.lengthLengthParameter.invalid.uniqueKey=Le tuple (espèce/sexe/océan/type de measure en entrée/type de mesure en sortie/date de début) doit être unique
    
    458 459
     observe.validation.lengthLengthParameter.null.inputSizeMeasureType=Le type de mensuration d'entrée n'est pas renseigné.
    
    459 460
     observe.validation.lengthLengthParameter.null.ocean=Aucun océan sélectionné.
    
    460 461
     observe.validation.lengthLengthParameter.null.outputSizeMeasureType=Le type de mensuration de sortie n'est pas renseigné.
    
    ... ... @@ -467,7 +468,7 @@ observe.validation.lengthLengthParameter.required.species=L'espèce n'est pas re
    467 468
     observe.validation.lengthLengthParameter.required.startDate=date de début de validité non renseignée.
    
    468 469
     observe.validation.lengthWeightParameter.disabled.sizeMeasureType=Le type de mensuration sélectionné est désactivé.
    
    469 470
     observe.validation.lengthWeightParameter.invalid.lengthWeightFormula=La relation poids saisie n'est pas cohérente.
    
    470
    -observe.validation.lengthWeightParameter.invalid.uniqueKey=Le tuple (sexe/océan/espèce/date de début) doit être unique
    
    471
    +observe.validation.lengthWeightParameter.invalid.uniqueKey=Le tuple (espèce/sexe/océan/type de measure/date de début) doit être unique
    
    471 472
     observe.validation.lengthWeightParameter.invalid.weightLengthFormula=La relation taille saisie n'est pas cohérente.
    
    472 473
     observe.validation.lengthWeightParameter.null.ocean=Aucun océan sélectionné.
    
    473 474
     observe.validation.lengthWeightParameter.null.sizeMeasureType=Type de mensuration non renseigné.
    

  • validation/src/main/resources/validators.xml
    ... ... @@ -54,7 +54,7 @@
    54 54
         <!-- Les validateurs spécifique aux Dto dans observe -->
    
    55 55
         <validator name="collectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.CollectionUniqueKeyDtoValidator"/>
    
    56 56
         <validator name="observeCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveCollectionUniqueKeyDtoValidator"/>
    
    57
    -  <validator name="observeReferentialCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveReferentialCollectionUniqueKeyDtoValidator"/>
    
    57
    +    <validator name="observeLengthFormulaCollectionUniqueKeyDto" class="fr.ird.observe.services.validation.validators.ObserveLengthFormulaCollectionUniqueKeyDtoValidator"/>
    
    58 58
         <validator name="openableDto" class="fr.ird.observe.services.validation.validators.OpenableDtoFieldValidator"/>
    
    59 59
         <validator name="species_lengthDto" class="fr.ird.observe.services.validation.validators.SpeciesLengthFieldDtoValidator"/>
    
    60 60
         <validator name="species_weightDto" class="fr.ird.observe.services.validation.validators.SpeciesWeightFieldDtoValidator"/>