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

Commits:

19 changed files:

Changes:

  • client/src/main/java/fr/ird/observe/client/ui/actions/content/ShowTechnicalInformationsAction.java
    ... ... @@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.actions.content;
    10 10
      * it under the terms of the GNU General Public License as
    
    11 11
      * published by the Free Software Foundation, either version 3 of the
    
    12 12
      * License, or (at your option) any later version.
    
    13
    - * 
    
    13
    + *
    
    14 14
      * This program is distributed in the hope that it will be useful,
    
    15 15
      * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16 16
      * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17 17
      * GNU General Public License for more details.
    
    18
    - * 
    
    18
    + *
    
    19 19
      * You should have received a copy of the GNU General Public
    
    20 20
      * License along with this program.  If not, see
    
    21 21
      * <http://www.gnu.org/licenses/gpl-3.0.html>.
    

  • client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java
    ... ... @@ -63,6 +63,7 @@ import org.nuiton.jaxx.runtime.swing.editor.EnumEditor;
    63 63
     import org.nuiton.jaxx.runtime.swing.renderer.DecoratorListCellRenderer;
    
    64 64
     import org.nuiton.jaxx.runtime.swing.renderer.EnumEditorRenderer;
    
    65 65
     import org.nuiton.jaxx.validator.JAXXValidator;
    
    66
    +import org.nuiton.jaxx.validator.swing.SwingValidator;
    
    66 67
     import org.nuiton.jaxx.validator.swing.SwingValidatorUtil;
    
    67 68
     import org.nuiton.jaxx.widgets.datetime.DateTimeEditor;
    
    68 69
     import org.nuiton.jaxx.widgets.datetime.TimeEditor;
    
    ... ... @@ -343,6 +344,10 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>>
    343 344
             editor.setConfig(new TemperatureEditorConfig(TemperatureFormat.C, getBean(), label.getText(), propertyName));
    
    344 345
             editor.init(label);
    
    345 346
     
    
    347
    +        editor.getModel().addPropertyChangeListener("format", e -> {
    
    348
    +            ((SwingValidator<?>) ui.getObjectById("validator")).doValidate();
    
    349
    +        });
    
    350
    +
    
    346 351
         }
    
    347 352
     
    
    348 353
         private void init(BigTextEditor editor) {
    

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUIHandler.java
    ... ... @@ -171,7 +171,7 @@ class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<Activity
    171 171
     
    
    172 172
             ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext();
    
    173 173
             validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor());
    
    174
    -
    
    174
    +        validationContext.setTemperatureEditorModel("seaSurfaceTemperature", getUi().getSeaSurfaceTemperature().getModel());
    
    175 175
         }
    
    176 176
     
    
    177 177
         @Override
    

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/obs/ActivityLonglineObsUIHandler.java
    ... ... @@ -170,7 +170,7 @@ class ActivityLonglineObsUIHandler extends ContentOpenableUIHandler<ActivityLong
    170 170
     
    
    171 171
             ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext();
    
    172 172
             validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor());
    
    173
    -
    
    173
    +        validationContext.setTemperatureEditorModel("seaSurfaceTemperature", getUi().getSeaSurfaceTemperature().getModel());
    
    174 174
         }
    
    175 175
     
    
    176 176
         @Override
    

  • client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java
    ... ... @@ -81,9 +81,10 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto,
    81 81
     
    
    82 82
             ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext();
    
    83 83
             validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor());
    
    84
    -
    
    84
    +        validationContext.setTemperatureEditorModel("seaSurfaceTemperature", getUi().getSeaSurfaceTemperature().getModel());
    
    85 85
         }
    
    86 86
     
    
    87
    +
    
    87 88
         @Override
    
    88 89
         protected ContentMode getContentMode() {
    
    89 90
             String selectedId = getSelectedId();
    

  • client/src/main/java/fr/ird/observe/client/validation/ClientValidationContext.java
    ... ... @@ -8,12 +8,12 @@
    8 8
      * it under the terms of the GNU General Public License as
    
    9 9
      * published by the Free Software Foundation, either version 3 of the
    
    10 10
      * License, or (at your option) any later version.
    
    11
    - * 
    
    11
    + *
    
    12 12
      * This program is distributed in the hope that it will be useful,
    
    13 13
      * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    14 14
      * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    15 15
      * GNU General Public License for more details.
    
    16
    - * 
    
    16
    + *
    
    17 17
      * You should have received a copy of the GNU General Public
    
    18 18
      * License along with this program.  If not, see
    
    19 19
      * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    ... ... @@ -39,6 +39,7 @@ import fr.ird.observe.dto.referential.seine.ObservedSystemReference;
    39 39
     import fr.ird.observe.services.ObserveServicesProvider;
    
    40 40
     import fr.ird.observe.services.validation.ValidationContext;
    
    41 41
     import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor;
    
    42
    +import org.nuiton.jaxx.widgets.temperature.TemperatureEditorModel;
    
    42 43
     
    
    43 44
     import java.util.List;
    
    44 45
     import java.util.Map;
    
    ... ... @@ -53,6 +54,7 @@ import java.util.function.Supplier;
    53 54
     public class ClientValidationContext extends ValidationContext {
    
    54 55
     
    
    55 56
         private Map<String, CoordinatesEditor> coordinatesEditors = new TreeMap<>();
    
    57
    +    private Map<String, TemperatureEditorModel> temperatureEditorModels = new TreeMap<>();
    
    56 58
     
    
    57 59
         public ClientValidationContext(ClientConfig config) {
    
    58 60
             super(ObserveSwingApplicationContext.get().getNavigationSelect(),
    
    ... ... @@ -145,4 +147,15 @@ public class ClientValidationContext extends ValidationContext {
    145 147
             coordinatesEditors.put(name, editor);
    
    146 148
         }
    
    147 149
     
    
    150
    +    public Map<String, TemperatureEditorModel> getTemperatureEditorModels() {
    
    151
    +        return temperatureEditorModels;
    
    152
    +    }
    
    153
    +
    
    154
    +    public TemperatureEditorModel getTemperatureEditorModel(String name) {
    
    155
    +        return temperatureEditorModels.get(name);
    
    156
    +    }
    
    157
    +
    
    158
    +    public void setTemperatureEditorModel(String name, TemperatureEditorModel editor) {
    
    159
    +        temperatureEditorModels.put(name, editor);
    
    160
    +    }
    
    148 161
     }

  • services/pom.xml
    ... ... @@ -88,6 +88,10 @@
    88 88
           <groupId>io.ultreia.java4all.http</groupId>
    
    89 89
           <artifactId>http-api</artifactId>
    
    90 90
         </dependency>
    
    91
    +    <dependency>
    
    92
    +      <groupId>io.ultreia.java4all</groupId>
    
    93
    +      <artifactId>java-lang</artifactId>
    
    94
    +    </dependency>
    
    91 95
     
    
    92 96
         <dependency>
    
    93 97
           <groupId>io.ultreia.java4all.jaxx</groupId>
    
    ... ... @@ -161,6 +165,10 @@
    161 165
           <groupId>io.ultreia.java4all.topia</groupId>
    
    162 166
           <artifactId>service-script</artifactId>
    
    163 167
         </dependency>
    
    168
    +    <dependency>
    
    169
    +      <groupId>io.ultreia.java4all.jaxx</groupId>
    
    170
    +      <artifactId>jaxx-widgets-temperature</artifactId>
    
    171
    +    </dependency>
    
    164 172
     
    
    165 173
       </dependencies>
    
    166 174
     
    

  • services/src/main/java/fr/ird/observe/services/validation/validators/TemperatureBoundFieldValidator.java
    1
    +package fr.ird.observe.services.validation.validators;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Services API
    
    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 com.opensymphony.xwork2.validator.ValidationException;
    
    26
    +import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
    
    27
    +import org.nuiton.jaxx.widgets.temperature.I18nEnumHelper;
    
    28
    +import org.nuiton.jaxx.widgets.temperature.TemperatureEditorModel;
    
    29
    +import org.nuiton.jaxx.widgets.temperature.TemperatureFormat;
    
    30
    +
    
    31
    +import java.util.Map;
    
    32
    +
    
    33
    +/**
    
    34
    + * To validate that the temperature is in correct bound.
    
    35
    + * <p>
    
    36
    + * Created by tchemit on 22/09/2018.
    
    37
    + *
    
    38
    + * @author Tony Chemit - dev@tchemit.fr
    
    39
    + */
    
    40
    +public class TemperatureBoundFieldValidator extends FieldValidatorSupport {
    
    41
    +
    
    42
    +    /**
    
    43
    +     * Default temperature format (min and max are based on this format).
    
    44
    +     */
    
    45
    +    private TemperatureFormat defaultTemperatureFormat;
    
    46
    +    /**
    
    47
    +     * Min temperature.
    
    48
    +     */
    
    49
    +    private Float min;
    
    50
    +    /**
    
    51
    +     * Max temperature.
    
    52
    +     */
    
    53
    +    private Float max;
    
    54
    +
    
    55
    +    public void setDefaultTemperatureFormat(String defaultTemperatureFormat) {
    
    56
    +        this.defaultTemperatureFormat = TemperatureFormat.valueOf(defaultTemperatureFormat);
    
    57
    +    }
    
    58
    +
    
    59
    +    public void setMin(String min) {
    
    60
    +        this.min = Float.valueOf(min);
    
    61
    +    }
    
    62
    +
    
    63
    +    public void setMax(String max) {
    
    64
    +        this.max = Float.valueOf(max);
    
    65
    +    }
    
    66
    +
    
    67
    +    @Override
    
    68
    +    public void validate(Object object) throws ValidationException {
    
    69
    +
    
    70
    +        if (min == null) {
    
    71
    +            throw new ValidationException("No parameter 'min' filled");
    
    72
    +        }
    
    73
    +        if (max == null) {
    
    74
    +            throw new ValidationException("No parameter 'max' filled");
    
    75
    +        }
    
    76
    +        if (min >= max) {
    
    77
    +            throw new ValidationException(String.format("No parameter 'min' (%s) is greater than 'max' (%s)", min, max));
    
    78
    +        }
    
    79
    +        String fieldName = getFieldName();
    
    80
    +        if (fieldName == null) {
    
    81
    +            throw new ValidationException("No parameter 'fieldName' filled");
    
    82
    +        }
    
    83
    +        Float temperature = (Float) getFieldValue(fieldName, object);
    
    84
    +        if (temperature == null) {
    
    85
    +            return;
    
    86
    +        }
    
    87
    +
    
    88
    +        @SuppressWarnings("unchecked") Map<String, TemperatureEditorModel> map = (Map<String, TemperatureEditorModel>) getFieldValue("temperatureEditorModels", object);
    
    89
    +        TemperatureFormat temperatureFormat = defaultTemperatureFormat;
    
    90
    +        if (map != null) {
    
    91
    +
    
    92
    +            TemperatureEditorModel temperatureEditorModel = map.get(fieldName);
    
    93
    +            //FIXME une validation est lancé dans l'ui alors que l'on ne devrait pas et on a pas ce composant alors
    
    94
    +            if (temperatureEditorModel != null) {
    
    95
    +                temperatureFormat = temperatureEditorModel.getFormat();
    
    96
    +            }
    
    97
    +        }
    
    98
    +
    
    99
    +        if (temperature < min || temperature > max) {
    
    100
    +            float min;
    
    101
    +            float max;
    
    102
    +            if (temperatureFormat.equals(defaultTemperatureFormat)) {
    
    103
    +                min = this.min;
    
    104
    +                max = this.max;
    
    105
    +            } else {
    
    106
    +                min = defaultTemperatureFormat.convert(this.min, temperatureFormat);
    
    107
    +                max = defaultTemperatureFormat.convert(this.max, temperatureFormat);
    
    108
    +            }
    
    109
    +            stack.set(fieldName + "Bound", new TemperatureResult(min, max, I18nEnumHelper.getLabel(temperatureFormat)));
    
    110
    +            try {
    
    111
    +                addFieldError(fieldName, object);
    
    112
    +            } finally {
    
    113
    +                stack.pop();
    
    114
    +            }
    
    115
    +        }
    
    116
    +
    
    117
    +    }
    
    118
    +
    
    119
    +    @Override
    
    120
    +    public String getValidatorType() {
    
    121
    +        return "temperatureBound";
    
    122
    +    }
    
    123
    +
    
    124
    +    static class TemperatureResult {
    
    125
    +        private final float min;
    
    126
    +        private final float max;
    
    127
    +        private final String format;
    
    128
    +
    
    129
    +        TemperatureResult(float min, float max, String format) {
    
    130
    +            this.min = min;
    
    131
    +            this.max = max;
    
    132
    +            this.format = format;
    
    133
    +        }
    
    134
    +
    
    135
    +        public float getMin() {
    
    136
    +            return min;
    
    137
    +        }
    
    138
    +
    
    139
    +        public float getMax() {
    
    140
    +            return max;
    
    141
    +        }
    
    142
    +
    
    143
    +        public String getFormat() {
    
    144
    +            return format;
    
    145
    +        }
    
    146
    +    }
    
    147
    +
    
    148
    +}
    
    149
    +

  • validation/pom.xml
    ... ... @@ -201,6 +201,11 @@
    201 201
                 <artifactId>jaxx-widgets-gis</artifactId>
    
    202 202
                 <version>${lib.version.java4all.jaxx}</version>
    
    203 203
               </dependency>
    
    204
    +          <dependency>
    
    205
    +            <groupId>io.ultreia.java4all.jaxx</groupId>
    
    206
    +            <artifactId>jaxx-widgets-temperature</artifactId>
    
    207
    +            <version>${lib.version.java4all.jaxx}</version>
    
    208
    +          </dependency>
    
    204 209
               <dependency>
    
    205 210
                 <groupId>org.javassist</groupId>
    
    206 211
                 <artifactId>javassist</artifactId>
    

  • validation/src/main/resources/fr/ird/observe/dto/data/longline/ActivityLonglineLogbookDto-create-error-validation.xml
    ... ... @@ -77,16 +77,14 @@
    77 77
       <field name="seaSurfaceTemperature">
    
    78 78
     
    
    79 79
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    80
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    81
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    82
    -      <param name="expression">
    
    83
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    84
    -      </param>
    
    80
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    81
    +      <param name="min">12.0</param>
    
    82
    +      <param name="max">35.0</param>
    
    83
    +      <param name="defaultTemperatureFormat">C</param>
    
    85 84
           <message>
    
    86
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    85
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    87 86
           </message>
    
    88 87
         </field-validator>
    
    89
    -
    
    90 88
       </field>
    
    91 89
     
    
    92 90
       <field name="quadrant">
    

  • validation/src/main/resources/fr/ird/observe/dto/data/longline/ActivityLonglineLogbookDto-update-error-validation.xml
    ... ... @@ -62,16 +62,14 @@
    62 62
       <field name="seaSurfaceTemperature">
    
    63 63
     
    
    64 64
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    65
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    66
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    67
    -      <param name="expression">
    
    68
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    69
    -      </param>
    
    65
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    66
    +      <param name="min">12.0</param>
    
    67
    +      <param name="max">35.0</param>
    
    68
    +      <param name="defaultTemperatureFormat">C</param>
    
    70 69
           <message>
    
    71
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    70
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    72 71
           </message>
    
    73 72
         </field-validator>
    
    74
    -
    
    75 73
       </field>
    
    76 74
     
    
    77 75
       <field name="quadrant">
    

  • validation/src/main/resources/fr/ird/observe/dto/data/longline/ActivityLonglineObsDto-create-error-validation.xml
    ... ... @@ -77,13 +77,12 @@
    77 77
       <field name="seaSurfaceTemperature">
    
    78 78
     
    
    79 79
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    80
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    81
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    82
    -      <param name="expression">
    
    83
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    84
    -      </param>
    
    80
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    81
    +      <param name="min">12.0</param>
    
    82
    +      <param name="max">35.0</param>
    
    83
    +      <param name="defaultTemperatureFormat">C</param>
    
    85 84
           <message>
    
    86
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    85
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    87 86
           </message>
    
    88 87
         </field-validator>
    
    89 88
     
    

  • validation/src/main/resources/fr/ird/observe/dto/data/longline/ActivityLonglineObsDto-update-error-validation.xml
    ... ... @@ -62,13 +62,12 @@
    62 62
       <field name="seaSurfaceTemperature">
    
    63 63
     
    
    64 64
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    65
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    66
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    67
    -      <param name="expression">
    
    68
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    69
    -      </param>
    
    65
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    66
    +      <param name="min">12.0</param>
    
    67
    +      <param name="max">35.0</param>
    
    68
    +      <param name="defaultTemperatureFormat">C</param>
    
    70 69
           <message>
    
    71
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    70
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    72 71
           </message>
    
    73 72
         </field-validator>
    
    74 73
     
    

  • validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-create-error-validation.xml
    ... ... @@ -251,28 +251,12 @@
    251 251
       <field name="seaSurfaceTemperature">
    
    252 252
     
    
    253 253
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    254
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    255
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    256
    -      <param name="expression">
    
    257
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    258
    -      </param>
    
    259
    -      <message>
    
    260
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    261
    -      </message>
    
    262
    -    </field-validator>
    
    263
    -
    
    264
    -    <!-- coherence temperature surface (delta de 12° par rapport a celle de l'activity precedente) -->
    
    265
    -    <field-validator type="fieldexpression">
    
    266
    -      <param name="expression"><![CDATA[
    
    267
    -                seaSurfaceTemperature == null || previousActivity == null || previousActivity.seaSurfaceTemperature == null ||
    
    268
    -                (previousActivity.seaSurfaceTemperature > seaSurfaceTemperature ?
    
    269
    -                previousActivity.seaSurfaceTemperature - seaSurfaceTemperature <= 12.0
    
    270
    -                :  seaSurfaceTemperature - previousActivity.seaSurfaceTemperature <= 12.0
    
    271
    -                )
    
    272
    -             ]]>
    
    273
    -      </param>
    
    254
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    255
    +      <param name="min">12.0</param>
    
    256
    +      <param name="max">35.0</param>
    
    257
    +      <param name="defaultTemperatureFormat">C</param>
    
    274 258
           <message>
    
    275
    -        observe.validation.activity.invalid.seaSurfaceTemperature##${seaSurfaceTemperature}##${previousActivity.seaSurfaceTemperature}##${previousActivity.time}
    
    259
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    276 260
           </message>
    
    277 261
         </field-validator>
    
    278 262
     
    

  • validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-update-error-validation.xml
    ... ... @@ -180,31 +180,14 @@
    180 180
       <field name="seaSurfaceTemperature">
    
    181 181
     
    
    182 182
         <!-- temperature surface non saisie ||  12.0 <= temperature surface  <= 35.0 -->
    
    183
    -    <field-validator type="fieldexpressionwithparams" short-circuit="true">
    
    184
    -      <param name="doubleParams">min:12.0|max:35.0</param>
    
    185
    -      <param name="expression">
    
    186
    -        <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]>
    
    187
    -      </param>
    
    188
    -      <message>
    
    189
    -        observe.validation.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max}
    
    190
    -      </message>
    
    191
    -    </field-validator>
    
    192
    -
    
    193
    -    <!-- coherence temperature surface (delta de 12° par rapport a celle de l'activity precedente) -->
    
    194
    -    <field-validator type="fieldexpression">
    
    195
    -      <param name="expression"><![CDATA[
    
    196
    -                seaSurfaceTemperature == null || previousActivity == null || previousActivity.seaSurfaceTemperature == null ||
    
    197
    -                (previousActivity.seaSurfaceTemperature > seaSurfaceTemperature ?
    
    198
    -                previousActivity.seaSurfaceTemperature - seaSurfaceTemperature <= 12.0
    
    199
    -                :  seaSurfaceTemperature - previousActivity.seaSurfaceTemperature <= 12.0
    
    200
    -                )
    
    201
    -             ]]>
    
    202
    -      </param>
    
    183
    +    <field-validator type="temperatureBound" short-circuit="true">
    
    184
    +      <param name="min">12.0</param>
    
    185
    +      <param name="max">35.0</param>
    
    186
    +      <param name="defaultTemperatureFormat">C</param>
    
    203 187
           <message>
    
    204
    -        observe.validation.activity.invalid.seaSurfaceTemperature##${seaSurfaceTemperature}##${previousActivity.seaSurfaceTemperature}##${previousActivity.time}
    
    188
    +        observe.validation.activity.bound.seaSurfaceTemperature##${seaSurfaceTemperatureBound.min}##${seaSurfaceTemperatureBound.max}##${seaSurfaceTemperatureBound.format}
    
    205 189
           </message>
    
    206 190
         </field-validator>
    
    207
    -
    
    208 191
       </field>
    
    209 192
     
    
    210 193
       <field name="dataQuality">
    

  • validation/src/main/resources/i18n/validation_en_GB.properties
    ... ... @@ -446,7 +446,7 @@ observe.common.WindDto.speedRange=Speed range
    446 446
     observe.common.WindDto.waveHeight=Wave weight
    
    447 447
     observe.validation.activity.bound.latitude=Latitude must be between %1$s and %2$s.
    
    448 448
     observe.validation.activity.bound.longitude=Longitude must be between %1$s and %2$s.
    
    449
    -observe.validation.activity.bound.seaSurfaceTemperature=Temperature must be between %1$s and %2$s.
    
    449
    +observe.validation.activity.bound.seaSurfaceTemperature=Temperature must be between %1$s%3$s and %2$s%3$s.
    
    450 450
     observe.validation.activity.bound.vesselSpeed=Vessel speed must be between %1$s and %2$s.
    
    451 451
     observe.validation.activity.comment.tobig=Comment size is bound to 1024 characters.
    
    452 452
     observe.validation.activity.desactivated.currentFpaZone=Selected current Fpa zone is disabled.
    
    ... ... @@ -461,7 +461,7 @@ observe.validation.activity.desactivated.vesselActivity=Selected vessel activity
    461 461
     observe.validation.activity.desactivated.wind=Selected wind is disabled.
    
    462 462
     observe.validation.activity.duplicated.time=There is already another activity at this time.
    
    463 463
     observe.validation.activity.invalid.quadrant=Quadrant is not coherent with ocean (%1$s) of trip (indian\: 1,2, atlantic 1,2,3,4).
    
    464
    -observe.validation.activity.invalid.seaSurfaceTemperature=Sea temperature (%1$s) can't vary to more than 12° from surface temperature (%2$s) of the previous activity %3$s.
    
    464
    +observe.validation.activity.invalid.seaSurfaceTemperature=Previous activity (%1$s) sea temperature was %2$s%5$s, current temperature must be between %3$s%5$s and %4$s%5$s.
    
    465 465
     observe.validation.activity.invalid.speed=Activity speed is %s nb, which is more than the maximum authorized which is %s nd.
    
    466 466
     observe.validation.activity.null.dcp=No floating object selected.
    
    467 467
     observe.validation.activity.null.fpaZone=Fpa zone is not filled.
    

  • validation/src/main/resources/i18n/validation_es_ES.properties
    ... ... @@ -448,7 +448,7 @@ observe.common.WindDto.speedRange=Texto velocidad del viento
    448 448
     observe.common.WindDto.waveHeight=Texto descriptivo de «altura media de la ola»
    
    449 449
     observe.validation.activity.bound.latitude=La latitud dada debe estar comprendida entre %1$s y %2$s.
    
    450 450
     observe.validation.activity.bound.longitude=La longitud dada debe estar comprendida entre %1$s y %2$s.
    
    451
    -observe.validation.activity.bound.seaSurfaceTemperature=La temperatura debe estar comprendida entre %1$s y %2$s.
    
    451
    +observe.validation.activity.bound.seaSurfaceTemperature=La temperatura debe estar comprendida entre %1$s%3$s y %2$s%3$s.
    
    452 452
     observe.validation.activity.bound.vesselSpeed=La Velocidad del viento estar comprendida entre %1$s y %2$s.
    
    453 453
     observe.validation.activity.comment.tobig=La longitud del campo comentarios está limitada a 1024 carácteres.
    
    454 454
     observe.validation.activity.desactivated.currentFpaZone=La zona actual debe ser desactivada
    
    ... ... @@ -463,7 +463,7 @@ observe.validation.activity.desactivated.vesselActivity=Actividad del barco sele
    463 463
     observe.validation.activity.desactivated.wind=La fuerza del viento seleccionada está desactivada.
    
    464 464
     observe.validation.activity.duplicated.time=Ya existe una actividad a esa hora.
    
    465 465
     observe.validation.activity.invalid.quadrant=El cuadrante no es coherente con el informe del oceano (%1$s) de la marea (indico \: 1,2, atlantico \: 1, 2, 3, 4)
    
    466
    -observe.validation.activity.invalid.seaSurfaceTemperature=La temperatura superficial (%1$s) no puede variar mas de 12° con respecto a la temperatura superficial (%2$s) de la actividad anterio %3$s.
    
    466
    +observe.validation.activity.invalid.seaSurfaceTemperature=Previous activity (%1$s) sea temperature was %2$s%5$s, current temperature must be between %3$s%5$s and %4$s%5$s. \#TODO
    
    467 467
     observe.validation.activity.invalid.speed=La velocidad de la actividad actual es %s nudos, mientras que la velocidad máxima es %s nudos.
    
    468 468
     observe.validation.activity.null.dcp=No se ha introducido objeto flotante.
    
    469 469
     observe.validation.activity.null.fpaZone=La selección de una zona FPA es obligatoria.
    

  • validation/src/main/resources/i18n/validation_fr_FR.properties
    ... ... @@ -446,7 +446,7 @@ observe.common.WindDto.speedRange=Libellé vitesse vent
    446 446
     observe.common.WindDto.waveHeight=Libellé Hauteur moyenne vagues
    
    447 447
     observe.validation.activity.bound.latitude=La latitude doit être comprise entre %1$s et %2$s.
    
    448 448
     observe.validation.activity.bound.longitude=La longitude doit être comprise entre %1$s et %2$s.
    
    449
    -observe.validation.activity.bound.seaSurfaceTemperature=La température doit être comprise entre %1$s et %2$s.
    
    449
    +observe.validation.activity.bound.seaSurfaceTemperature=La température doit être comprise entre %1$s%3$s et %2$s%3$s.
    
    450 450
     observe.validation.activity.bound.vesselSpeed=La vitesse navire doit être comprise entre %1$s et %2$s.
    
    451 451
     observe.validation.activity.comment.tobig=La taille du commentaire est limitée à 1024 caractères.
    
    452 452
     observe.validation.activity.desactivated.currentFpaZone=La zone courante est désactivée.
    
    ... ... @@ -461,7 +461,7 @@ observe.validation.activity.desactivated.vesselActivity=L'activité bateau séle
    461 461
     observe.validation.activity.desactivated.wind=Le vent Beaufort sélectionné est désactivé.
    
    462 462
     observe.validation.activity.duplicated.time=Il existe déjà une autre activité à cette heure.
    
    463 463
     observe.validation.activity.invalid.quadrant=Le quadrant n'est pas cohérent par rapport à l'océan (%1$s) de la marée (indien \: 1
    
    464
    -observe.validation.activity.invalid.seaSurfaceTemperature=La température surface (%1$s) ne peut pas varier de plus de 12° par rapport à la température surface (%2$s) de l'activité précédente %3$s.
    
    464
    +observe.validation.activity.invalid.seaSurfaceTemperature=La température surface de l'activité précédente (%1$s) est de %2$s%5$s, la température doit être comprise entre %3$s%5$s et %4$s%5$s.
    
    465 465
     observe.validation.activity.invalid.speed=La vitesse de l'activité courante est de %s nd, alors que la vitesse maximale autorisée est %s nd
    
    466 466
     observe.validation.activity.null.dcp=Aucun objet flottant saisi.
    
    467 467
     observe.validation.activity.null.fpaZone=La sélection d'une zone FPA est obligatoire.
    

  • validation/src/main/resources/validators.xml
    ... ... @@ -71,5 +71,6 @@
    71 71
       <validator name="referentialCode" class="fr.ird.observe.services.validation.validators.ReferentialCodeValidator"/>
    
    72 72
       <validator name="nonTargetCatchObservedSystem" class="fr.ird.observe.services.validation.validators.NonTargetCatchObservedSystemValidator"/>
    
    73 73
       <validator name="activitySeine_observedSystem" class="fr.ird.observe.services.validation.validators.ActivitySeineObservedSystemValidator"/>
    
    74
    +  <validator name="temperatureBound" class="fr.ird.observe.services.validation.validators.TemperatureBoundFieldValidator"/>
    
    74 75
     
    
    75 76
     </validators>