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

Commits:

18 changed files:

Changes:

  • client-core/src/main/i18n/getters/java.getter
    ... ... @@ -46,6 +46,7 @@ observe.action.configuration.tip
    46 46
     observe.action.connexions
    
    47 47
     observe.action.connexions.tip
    
    48 48
     observe.action.continue
    
    49
    +observe.action.copy
    
    49 50
     observe.action.copy.to.clipBoard
    
    50 51
     observe.action.copyFloatingObjectPartToLeft
    
    51 52
     observe.action.copyFloatingObjectPartToLeft.tip
    
    ... ... @@ -153,12 +154,10 @@ observe.actions.operation.message.needFix
    153 154
     observe.actions.operation.message.running
    
    154 155
     observe.actions.operation.message.successed
    
    155 156
     observe.actions.report
    
    156
    -observe.actions.report.description
    
    157
    -observe.actions.report.title
    
    158
    -observe.actions.report.title.tip
    
    159 157
     observe.actions.saveLocal
    
    160 158
     observe.actions.saveLocal.description
    
    161 159
     observe.actions.synchro.cancel.tip
    
    160
    +observe.actions.synchro.copy.tip
    
    162 161
     observe.actions.synchro.data
    
    163 162
     observe.actions.synchro.data.copyToLeft.tip
    
    164 163
     observe.actions.synchro.data.copyToRight.tip
    
    ... ... @@ -262,6 +261,9 @@ observe.actions.validate.validator.message.header
    262 261
     observe.actions.validate.validator.message.header.tip
    
    263 262
     observe.actions.validate.validator.scope.header
    
    264 263
     observe.actions.validate.validator.scope.header.tip
    
    264
    +observe.admin.report.description
    
    265
    +observe.admin.report.title
    
    266
    +observe.admin.report.title.tip
    
    265 267
     observe.admin.resume.no.operation.done
    
    266 268
     observe.admin.resume.operation.canceled
    
    267 269
     observe.admin.resume.operation.done
    

  • client-core/src/main/i18n/getters/jaxx.getter
    ... ... @@ -9,15 +9,8 @@ observe.Id.species
    9 9
     observe.Id.weightMeasureType
    
    10 10
     observe.Id.whenArriving
    
    11 11
     observe.Id.whenLeaving
    
    12
    -observe.action.auto.copy.to.clipboard
    
    13
    -observe.action.auto.copy.to.clipboard.tip
    
    14 12
     observe.action.configuration
    
    15 13
     observe.action.connexions
    
    16
    -observe.action.copy
    
    17
    -observe.action.copy.column.headers
    
    18
    -observe.action.copy.column.headers.tip
    
    19
    -observe.action.copy.row.headers
    
    20
    -observe.action.copy.row.headers.tip
    
    21 14
     observe.action.create
    
    22 15
     observe.action.delete
    
    23 16
     observe.action.floatingObjectPresets
    
    ... ... @@ -27,16 +20,6 @@ observe.action.save.all.tip
    27 20
     observe.actions.longline.pairing.config
    
    28 21
     observe.actions.operation.configuration
    
    29 22
     observe.actions.operations
    
    30
    -observe.actions.report.config
    
    31
    -observe.actions.report.copy.options
    
    32
    -observe.actions.report.model.type
    
    33
    -observe.actions.report.report.description
    
    34
    -observe.actions.report.result
    
    35
    -observe.actions.report.select
    
    36
    -observe.actions.report.select.file
    
    37
    -observe.actions.report.select.file.tip
    
    38
    -observe.actions.report.variables
    
    39
    -observe.actions.synchro.copy.tip
    
    40 23
     observe.actions.synchro.data.actionsToPerform
    
    41 24
     observe.actions.synchro.referential.config.mode
    
    42 25
     observe.actions.synchro.referential.obsolete.entities.list
    
    ... ... @@ -51,6 +34,21 @@ observe.actions.validate.select.mode
    51 34
     observe.actions.validate.select.mode.tip
    
    52 35
     observe.actions.validate.select.scope
    
    53 36
     observe.actions.validate.select.scope.tip
    
    37
    +observe.admin.report.auto.copy.to.clipboard
    
    38
    +observe.admin.report.auto.copy.to.clipboard.tip
    
    39
    +observe.admin.report.config
    
    40
    +observe.admin.report.copy.column.headers
    
    41
    +observe.admin.report.copy.column.headers.tip
    
    42
    +observe.admin.report.copy.options
    
    43
    +observe.admin.report.copy.row.headers
    
    44
    +observe.admin.report.copy.row.headers.tip
    
    45
    +observe.admin.report.model.type
    
    46
    +observe.admin.report.report.description
    
    47
    +observe.admin.report.result
    
    48
    +observe.admin.report.select
    
    49
    +observe.admin.report.select.file
    
    50
    +observe.admin.report.select.file.tip
    
    51
    +observe.admin.report.variables
    
    54 52
     observe.common.directory
    
    55 53
     observe.common.file
    
    56 54
     observe.common.global.progression.description
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminActionModel.java
    ... ... @@ -6,21 +6,24 @@
    6 6
      * %%
    
    7 7
      * This program is free software: you can redistribute it and/or modify
    
    8 8
      * it under the terms of the GNU General Public License as
    
    9
    - * published by the Free Software Foundation, either version 3 of the 
    
    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
    - * 
    
    17
    - * You should have received a copy of the GNU General Public 
    
    16
    + *
    
    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>.
    
    20 20
      * #L%
    
    21 21
      */
    
    22 22
     package fr.ird.observe.client.ui.admin;
    
    23 23
     
    
    24
    +import io.ultreia.java4all.bean.JavaBean;
    
    25
    +import io.ultreia.java4all.bean.definition.JavaBeanDefinition;
    
    26
    +import io.ultreia.java4all.bean.definition.JavaBeanDefinitionStore;
    
    24 27
     import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardExtStepModel;
    
    25 28
     
    
    26 29
     /**
    
    ... ... @@ -29,10 +32,23 @@ import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardExtStepModel;
    29 32
      * @author Tony Chemit - dev@tchemit.fr
    
    30 33
      * @since 1.4
    
    31 34
      */
    
    32
    -public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> {
    
    35
    +public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> implements JavaBean {
    
    36
    +    /**
    
    37
    +     * Lazy helper class that manages all java bean operations.
    
    38
    +     *
    
    39
    +     * @see #javaBeanDefinition()
    
    40
    +     */
    
    41
    +    private transient JavaBeanDefinition javaBeanDefinition;
    
    33 42
     
    
    34 43
         protected AdminActionModel(AdminStep objectOperation) {
    
    35 44
             super(objectOperation);
    
    36 45
         }
    
    37 46
     
    
    47
    +    @Override
    
    48
    +    public final JavaBeanDefinition javaBeanDefinition() {
    
    49
    +        return javaBeanDefinition == null
    
    50
    +                ? javaBeanDefinition = JavaBeanDefinitionStore.getDefinition(getClass()).orElseThrow(() -> new NullPointerException("Can't find JavaBeanDefinition for " + getClass()))
    
    51
    +                : javaBeanDefinition;
    
    52
    +    }
    
    53
    +
    
    38 54
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java
    ... ... @@ -197,11 +197,11 @@ public enum AdminStep implements WizardExtStep {
    197 197
     
    
    198 198
         /** pour lancer la generation des rapports */
    
    199 199
         REPORT(
    
    200
    -            n("observe.actions.report.title"),
    
    201
    -            n("observe.actions.report.title.tip"),
    
    200
    +            n("observe.admin.report.title"),
    
    201
    +            n("observe.admin.report.title.tip"),
    
    202 202
                 "report",
    
    203 203
                 n("observe.actions.report"),
    
    204
    -            n("observe.actions.report.description"),
    
    204
    +            n("observe.admin.report.description"),
    
    205 205
                 ReportModel.class,
    
    206 206
                 ReportUI.class,
    
    207 207
                 false,
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIInitializer.java
    ... ... @@ -25,7 +25,9 @@ package fr.ird.observe.client.ui.admin;
    25 25
     import com.google.common.collect.ImmutableMap;
    
    26 26
     import fr.ird.observe.client.ObserveSwingApplicationContext;
    
    27 27
     import fr.ird.observe.client.ui.content.api.ContentUIInitializer;
    
    28
    +import fr.ird.observe.client.ui.util.BeanCheckBox;
    
    28 29
     import fr.ird.observe.client.ui.util.UIHelper;
    
    30
    +import fr.ird.observe.client.ui.util.UIHelperSupport;
    
    29 31
     import fr.ird.observe.dto.I18nEnumHelper;
    
    30 32
     import fr.ird.observe.dto.decoration.DecoratorService;
    
    31 33
     import org.apache.commons.lang3.BooleanUtils;
    
    ... ... @@ -80,7 +82,6 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> {
    80 82
     
    
    81 83
         private static final String CLIENT_PROPERTY_NOT_BLOCKING = "notBlocking";
    
    82 84
     
    
    83
    -    /** Logger. */
    
    84 85
         private static final Logger log = LogManager.getLogger(AdminTabUIInitializer.class);
    
    85 86
     
    
    86 87
         protected final UI ui;
    
    ... ... @@ -115,6 +116,10 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> {
    115 116
     //                init((JComponent) o, doNotBlockComponentIds);
    
    116 117
     //            }
    
    117 118
     
    
    119
    +            if (o instanceof BeanCheckBox) {
    
    120
    +                init((BeanCheckBox) o);
    
    121
    +            }
    
    122
    +
    
    118 123
                 if (o instanceof AbstractButton) {
    
    119 124
                     init((AbstractButton) o);
    
    120 125
                     continue;
    
    ... ... @@ -191,6 +196,15 @@ public class AdminTabUIInitializer<UI extends AdminTabUI> {
    191 196
             }
    
    192 197
         }
    
    193 198
     
    
    199
    +    protected void init(BeanCheckBox editor) {
    
    200
    +        log.debug("init simple boolean editor " + editor.getName());
    
    201
    +        String propertyName = editor.getProperty();
    
    202
    +        if (StringUtils.isEmpty(propertyName)) {
    
    203
    +            editor.setProperty(editor.getName());
    
    204
    +        }
    
    205
    +        editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor));
    
    206
    +    }
    
    207
    +
    
    194 208
         @SuppressWarnings("unchecked")
    
    195 209
         protected void init(BeanComboBox beanComboBox) {
    
    196 210
             if (log.isDebugEnabled()) {
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jaxx
    ... ... @@ -59,10 +59,7 @@ protected void finalize() throws Throwable {
    59 59
           <JLabel id='modelTypeLabel'/>
    
    60 60
         </cell>
    
    61 61
         <cell weightx='1' fill="horizontal" columns="2">
    
    62
    -      <EnumEditor id="modelType"
    
    63
    -                  genericType='ObserveModelType'
    
    64
    -                  constructorParams='ObserveModelType.class'
    
    65
    -                  onItemStateChanged='getHandler().setModelTypeFromEvent(event)'/>
    
    62
    +      <EnumEditor id="modelType" genericType='ObserveModelType' constructorParams='ObserveModelType.class' onItemStateChanged='getHandler().setModelTypeFromEvent(event)'/>
    
    66 63
         </cell>
    
    67 64
       </row>
    
    68 65
       <row>
    
    ... ... @@ -70,11 +67,10 @@ protected void finalize() throws Throwable {
    70 67
           <JLabel id='reportFileLabel'/>
    
    71 68
         </cell>
    
    72 69
         <cell weightx='1' fill="horizontal">
    
    73
    -      <JTextField id="reportFile"
    
    74
    -                  onKeyReleased='stepModel.setReportFile(new File(((JTextField)event.getSource()).getText()))'/>
    
    70
    +      <JTextField id="reportFile" onKeyReleased='stepModel.setReportFile(new File(((JTextField)event.getSource()).getText()))'/>
    
    75 71
         </cell>
    
    76 72
         <cell anchor="east">
    
    77
    -      <JButton id="reportFileChooserAction" onActionPerformed="getHandler().chooseReportFile()"/>
    
    73
    +      <JButton id="chooseFileReport"/>
    
    78 74
         </cell>
    
    79 75
       </row>
    
    80 76
     </Table>

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportConfigUI.jcss
    ... ... @@ -21,11 +21,11 @@
    21 21
      */
    
    22 22
     
    
    23 23
     #reportConfig {
    
    24
    -  border:{new TitledBorder(t("observe.actions.report.config"))};
    
    24
    +  border:{new TitledBorder(t("observe.admin.report.config"))};
    
    25 25
     }
    
    26 26
     
    
    27 27
     #modelTypeLabel {
    
    28
    -  text:"observe.actions.report.model.type";
    
    28
    +  text:"observe.admin.report.model.type";
    
    29 29
     }
    
    30 30
     
    
    31 31
     #modelType {
    
    ... ... @@ -33,15 +33,11 @@
    33 33
     }
    
    34 34
     
    
    35 35
     #reportFileLabel {
    
    36
    -  text:"observe.actions.report.select.file";
    
    37
    -  toolTipText:"observe.actions.report.select.file.tip";
    
    36
    +  text:"observe.admin.report.select.file";
    
    37
    +  toolTipText:"observe.admin.report.select.file.tip";
    
    38 38
     }
    
    39 39
     
    
    40 40
     #reportFile {
    
    41 41
       text:{getStringValue(stepModel.getReportFile())};
    
    42 42
     }
    
    43 43
     
    44
    -#reportFileChooserAction {
    
    45
    -  actionIcon:"fileChooser";
    
    46
    -}
    
    47
    -

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportModel.java
    ... ... @@ -32,8 +32,9 @@ import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
    32 32
     import fr.ird.observe.dto.ObserveModelType;
    
    33 33
     import fr.ird.observe.services.service.actions.report.Report;
    
    34 34
     import fr.ird.observe.services.service.actions.report.ReportBuilder;
    
    35
    -import org.apache.logging.log4j.Logger;
    
    35
    +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
    
    36 36
     import org.apache.logging.log4j.LogManager;
    
    37
    +import org.apache.logging.log4j.Logger;
    
    37 38
     
    
    38 39
     import java.beans.PropertyChangeListener;
    
    39 40
     import java.io.File;
    
    ... ... @@ -50,6 +51,7 @@ import java.util.stream.Collectors;
    50 51
      * @author Tony Chemit - dev@tchemit.fr
    
    51 52
      * @since 1.3
    
    52 53
      */
    
    54
    +@GenerateJavaBeanDefinition
    
    53 55
     public class ReportModel extends AdminActionModel {
    
    54 56
     
    
    55 57
         public static final String SELECTED_TRIP_PROPERTY_NAME = "selectedTrip";
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jaxx
    ... ... @@ -28,6 +28,8 @@
    28 28
         fr.ird.observe.client.ui.admin.AdminUI
    
    29 29
         fr.ird.observe.services.service.actions.report.Report
    
    30 30
     
    
    31
    +    fr.ird.observe.client.ui.util.BeanCheckBox
    
    32
    +
    
    31 33
         java.awt.Dimension
    
    32 34
     
    
    33 35
         javax.swing.DefaultComboBoxModel
    
    ... ... @@ -81,17 +83,15 @@ public void destroy() {
    81 83
         </JScrollPane>
    
    82 84
     
    
    83 85
         <JPanel id="copyPane" constraints='BorderLayout.SOUTH'>
    
    84
    -      <JPanel id='copyOptions' constraints='BorderLayout.NORTH'>
    
    85
    -        <JCheckBox id='autoCopyToClipboard'
    
    86
    -                   onStateChanged='getStepModel().setAutoCopyToClipboard(((JCheckBox)event.getSource()).isSelected())'/>
    
    87
    -        <JCheckBox id='copyRowHeaders'
    
    88
    -                   onStateChanged='getStepModel().setCopyRowHeaders(((JCheckBox)event.getSource()).isSelected())'/>
    
    89
    -        <JCheckBox id='copyColumnHeaders'
    
    90
    -                   onStateChanged='getStepModel().setCopyColumnHeaders(((JCheckBox)event.getSource()).isSelected())'/>
    
    86
    +      <JPanel id='copyOptions' constraints='BorderLayout.NORTH' beanScope="stepModel">
    
    87
    +        <BeanCheckBox id='autoCopyToClipboard'/>
    
    88
    +<!--                   onStateChanged='getStepModel().setAutoCopyToClipboard(((JCheckBox)event.getSource()).isSelected())'/>-->
    
    89
    +        <BeanCheckBox id='copyRowHeaders'/>
    
    90
    +<!--                   onStateChanged='getStepModel().setCopyRowHeaders(((JCheckBox)event.getSource()).isSelected())'/>-->
    
    91
    +        <BeanCheckBox id='copyColumnHeaders'/>
    
    92
    +<!--                   onStateChanged='getStepModel().setCopyColumnHeaders(((JCheckBox)event.getSource()).isSelected())'/>-->
    
    91 93
           </JPanel>
    
    92
    -      <JButton id="copy" constraints='BorderLayout.CENTER'
    
    93
    -               onActionPerformed='getHandler().copyReportToClipBoard(getStepModel().getSelectedReport(), getResultModel(), getStepModel().isCopyRowHeaders(),
    
    94
    -                                      getStepModel().isCopyColumnHeaders())'/>
    
    94
    +      <JButton id="copyResultToClipboard" constraints='BorderLayout.CENTER'/>
    
    95 95
     
    
    96 96
         </JPanel>
    
    97 97
     
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUI.jcss
    ... ... @@ -35,18 +35,17 @@ JToolBar {
    35 35
     }
    
    36 36
     
    
    37 37
     #reportVariableSelectorPanel {
    
    38
    -  border:{new TitledBorder(t("observe.actions.report.variables"))};
    
    38
    +  border:{new TitledBorder(t("observe.admin.report.variables"))};
    
    39 39
       layout:{new GridLayout(0,1)};
    
    40 40
     }
    
    41 41
     
    
    42 42
     #copyOptions {
    
    43
    -  border:{new TitledBorder(t("observe.actions.report.copy.options"))};
    
    43
    +  border:{new TitledBorder(t("observe.admin.report.copy.options"))};
    
    44 44
       layout:{new GridLayout(0,1)};
    
    45 45
     }
    
    46 46
     
    
    47 47
     #resultPane {
    
    48
    -  border:{new TitledBorder(t("observe.actions.report.result"))};
    
    49
    -  /*columnHeaderView:{resultTable.getTableHeader()};*/
    
    48
    +  border:{new TitledBorder(t("observe.admin.report.result"))};
    
    50 49
       verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
    
    51 50
     }
    
    52 51
     
    
    ... ... @@ -56,7 +55,7 @@ JToolBar {
    56 55
     }
    
    57 56
     
    
    58 57
     #requestSelectorPane {
    
    59
    -  border:{new TitledBorder(t("observe.actions.report.select"))};
    
    58
    +  border:{new TitledBorder(t("observe.admin.report.select"))};
    
    60 59
       layout:{new BorderLayout()};
    
    61 60
     }
    
    62 61
     
    
    ... ... @@ -66,7 +65,7 @@ JToolBar {
    66 65
     }
    
    67 66
     
    
    68 67
     #reportDescriptionPane {
    
    69
    -  columnHeaderView:{UIHelper.newLabel(t("observe.actions.report.report.description") ,"information", 10)};
    
    68
    +  columnHeaderView:{UIHelper.newLabel(t("observe.admin.report.report.description") ,"information", 10)};
    
    70 69
       minimumSize:{new Dimension(0,0)};
    
    71 70
     }
    
    72 71
     
    
    ... ... @@ -86,29 +85,25 @@ JToolBar {
    86 85
     #copyPane {
    
    87 86
       layout:{new BorderLayout()};
    
    88 87
     }
    
    88
    +
    
    89 89
     #autoCopyToClipboard {
    
    90
    -  text:"observe.action.auto.copy.to.clipboard";
    
    91
    -  toolTipText:"observe.action.auto.copy.to.clipboard.tip";
    
    92
    -  selected:{stepModel.isAutoCopyToClipboard()};
    
    90
    +  text:"observe.admin.report.auto.copy.to.clipboard";
    
    91
    +  toolTipText:"observe.admin.report.auto.copy.to.clipboard.tip";
    
    92
    +  /*selected:{stepModel.isAutoCopyToClipboard()};*/
    
    93 93
     }
    
    94 94
     
    
    95 95
     #copyRowHeaders {
    
    96
    -  text:"observe.action.copy.row.headers";
    
    97
    -  toolTipText:"observe.action.copy.row.headers.tip";
    
    98
    -  selected:{stepModel.isCopyRowHeaders()};
    
    96
    +  text:"observe.admin.report.copy.row.headers";
    
    97
    +  toolTipText:"observe.admin.report.copy.row.headers.tip";
    
    98
    +  /*selected:{stepModel.isCopyRowHeaders()};*/
    
    99 99
     }
    
    100 100
     
    
    101 101
     #copyColumnHeaders {
    
    102
    -  text:"observe.action.copy.column.headers";
    
    103
    -  toolTipText:"observe.action.copy.column.headers.tip";
    
    104
    -  selected:{stepModel.isCopyColumnHeaders()};
    
    105
    -}
    
    106
    -
    
    107
    -#copy {
    
    108
    -  text:"observe.action.copy";
    
    109
    -  toolTipText:"observe.actions.synchro.copy.tip";
    
    110
    -  actionIcon:"report-copy";
    
    111
    -  /*enabled:{stepModel.getSelectedReport() != null};*/
    
    112
    -  enabled:{stepModel.isValid() };
    
    113
    -  mnemonic:C;
    
    102
    +  text:"observe.admin.report.copy.column.headers";
    
    103
    +  toolTipText:"observe.admin.report.copy.column.headers.tip";
    
    104
    +  /*selected:{stepModel.isCopyColumnHeaders()};*/
    
    105
    +}
    
    106
    +
    
    107
    +#copyResultToClipboard {
    
    108
    +  enabled:{stepModel.isValid()};
    
    114 109
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/ReportUIHandler.java
    ... ... @@ -26,7 +26,9 @@ import fr.ird.observe.client.ObserveSwingTechnicalException;
    26 26
     import fr.ird.observe.client.db.ObserveSwingDataSource;
    
    27 27
     import fr.ird.observe.client.ui.admin.AdminStep;
    
    28 28
     import fr.ird.observe.client.ui.admin.AdminTabUIHandler;
    
    29
    +import fr.ird.observe.client.ui.admin.AdminTabUIInitializer;
    
    29 30
     import fr.ird.observe.client.ui.admin.config.ConfigUI;
    
    31
    +import fr.ird.observe.client.ui.admin.report.actions.CopyResultToClipboard;
    
    30 32
     import fr.ird.observe.client.ui.util.UIHelper;
    
    31 33
     import fr.ird.observe.client.ui.util.UIHelperSupport;
    
    32 34
     import fr.ird.observe.dto.ObserveModelType;
    
    ... ... @@ -61,7 +63,6 @@ import java.awt.BorderLayout;
    61 63
     import java.awt.Component;
    
    62 64
     import java.awt.Font;
    
    63 65
     import java.awt.event.ItemEvent;
    
    64
    -import java.io.File;
    
    65 66
     import java.util.ArrayList;
    
    66 67
     import java.util.List;
    
    67 68
     import java.util.Map;
    
    ... ... @@ -87,26 +88,21 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    87 88
     
    
    88 89
         @Override
    
    89 90
         public void afterInit(ReportUI ui) {
    
    91
    +        new AdminTabUIInitializer<>(ui).initUI();
    
    90 92
             super.afterInit(ui);
    
    91
    -        if (log.isDebugEnabled()) {
    
    92
    -            log.debug(" specialized for [" + ui.getStep() + "] for main ui " + parentUI.getClass().getName() + "@" + System.identityHashCode(this.ui));
    
    93
    -        }
    
    93
    +        log.debug(String.format(" specialized for [%s] for main ui %s@%d", ui.getStep(), parentUI.getClass().getName(), System.identityHashCode(this.ui)));
    
    94 94
             revalidateTabUI = ui::revalidate;
    
    95
    -        UIHelper.setLayerUI(ui.getContent(), parentUI.getConfigBlockLayerUI());
    
    95
    +        UIHelperSupport.setLayerUI(ui.getContent(), parentUI.getConfigBlockLayerUI());
    
    96 96
     
    
    97 97
             ReportModel stepModel = getStepModel();
    
    98 98
             stepModel.addPropertyChangeListener(evt -> {
    
    99
    -
    
    100 99
                 if (ui.getModel().getModelState() == WizardState.CANCELED) {
    
    101
    -
    
    102 100
                     // action annulée, on ne declanche plus rien
    
    103 101
                     return;
    
    104 102
                 }
    
    105 103
                 String propertyName = evt.getPropertyName();
    
    106 104
                 Object newValue = evt.getNewValue();
    
    107
    -
    
    108 105
                 ReportModel source = (ReportModel) evt.getSource();
    
    109
    -
    
    110 106
                 if (ReportModel.REPORTS_PROPERTY_NAME.equals(propertyName)) {
    
    111 107
                     List<?> reports = (List<?>) newValue;
    
    112 108
                     onReportsChanged(ui, reports);
    
    ... ... @@ -119,8 +115,6 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    119 115
                 } else if (ReportModel.VALID_PROPERTY_NAME.equals(propertyName)) {
    
    120 116
                     final Boolean valid = (Boolean) newValue;
    
    121 117
                     SwingUtilities.invokeLater(() -> onValidChanged(source, valid != null && valid));
    
    122
    -
    
    123
    -
    
    124 118
                 }
    
    125 119
             });
    
    126 120
     
    
    ... ... @@ -130,14 +124,12 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    130 124
                                                    @Override
    
    131 125
                                                    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    
    132 126
                                                        if (value == null) {
    
    133
    -
    
    134 127
                                                            // on affiche une message de sélection de report
    
    135 128
                                                            value = t("observe.message.select.report");
    
    136 129
                                                        }
    
    137 130
                                                        return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    
    138 131
                                                    }
    
    139 132
                                                }
    
    140
    -
    
    141 133
             );
    
    142 134
             // ajout du renderer sur le tableau
    
    143 135
     
    
    ... ... @@ -180,15 +172,11 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    180 172
             ui.getResultTable().setDefaultRenderer(String.class, renderer);
    
    181 173
     
    
    182 174
             // initialisation de l'ui de configuration
    
    183
    -        if (log.isInfoEnabled()) {
    
    184
    -            log.info("Init extra configuration for " + ui.getName());
    
    185
    -        }
    
    175
    +        log.info(String.format("Init extra configuration for %s", ui.getName()));
    
    186 176
     
    
    187 177
             ConfigUI configUI = (ConfigUI) parentUI.getStepUI(AdminStep.CONFIG);
    
    188 178
             JAXXInitialContext tx = new JAXXInitialContext().add(configUI).add(this);
    
    189
    -
    
    190 179
             ReportConfigUI extraConfig = new ReportConfigUI(tx);
    
    191
    -
    
    192 180
             configUI.getExtraConfig().add(extraConfig);
    
    193 181
         }
    
    194 182
     
    
    ... ... @@ -199,11 +187,7 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    199 187
         }
    
    200 188
     
    
    201 189
         void updateSelectedReportFromEvent(ItemEvent event) {
    
    202
    -
    
    203 190
             if (event.getStateChange() == ItemEvent.SELECTED) {
    
    204
    -            if (log.isInfoEnabled()) {
    
    205
    -                log.info("Item selected!");
    
    206
    -            }
    
    207 191
                 JComboBox source = (JComboBox) event.getSource();
    
    208 192
                 updateSelectedReport((Report) source.getSelectedItem());
    
    209 193
             }
    
    ... ... @@ -212,11 +196,8 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    212 196
         void updateSelectedReport(Report report) {
    
    213 197
             ui.getModel().setBusy(true);
    
    214 198
             try {
    
    215
    -            if (log.isInfoEnabled()) {
    
    216
    -                log.info("New selected report : " + report);
    
    217
    -            }
    
    199
    +            log.info(String.format("New selected report : %s", report));
    
    218 200
                 getStepModel().setSelectedReport(report);
    
    219
    -
    
    220 201
             } finally {
    
    221 202
                 ui.getModel().setBusy(false);
    
    222 203
             }
    
    ... ... @@ -232,64 +213,24 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    232 213
         private void updateVariable(JComboBox combo, Object value) {
    
    233 214
             String variableName = (String) combo.getClientProperty(VARIABLE_NAME);
    
    234 215
             if (variableName == null) {
    
    235
    -            throw new IllegalStateException(
    
    236
    -                    "No 'variableName' clientProperty on " + combo);
    
    216
    +            throw new IllegalStateException("No 'variableName' clientProperty on " + combo);
    
    237 217
             }
    
    238
    -        log.info("Set variable [" + variableName + "] to value " + value);
    
    218
    +        log.info(String.format("Set variable [%s] to value %s", variableName, value));
    
    239 219
             getStepModel().addVariable(variableName, value);
    
    240 220
         }
    
    241 221
     
    
    242
    -    void chooseReportFile() {
    
    243
    -        ReportModel model = ui.getModel().getReportModel();
    
    244
    -        File f = UIHelper.chooseFile(
    
    245
    -                ui,
    
    246
    -                t("observe.title.choose.reportFile"),
    
    247
    -                t("observe.action.choose.reportFile"),
    
    248
    -                model.getReportFile(),
    
    249
    -                "^.+\\.properties$",
    
    250
    -                t("observe.action.choose.reportFile.description"));
    
    251
    -        model.setReportFile(f);
    
    252
    -    }
    
    253
    -
    
    254
    -    void copyReportToClipBoard(Report report,
    
    255
    -                               ResultTableModel model,
    
    256
    -                               boolean copyRowHeaders,
    
    257
    -                               boolean copyColumnHeaders) {
    
    258
    -        if (report == null) {
    
    259
    -
    
    260
    -            // pas de report sélectionné, rien à faire
    
    261
    -            return;
    
    262
    -        }
    
    263
    -
    
    264
    -        if (log.isDebugEnabled()) {
    
    265
    -            log.debug("Will copy result of report " + report.getName());
    
    266
    -            log.debug("Result dimension : [" + model.getRowCount() + "," +
    
    267
    -                              model.getColumnCount() + "]");
    
    268
    -        }
    
    269
    -        String content = model.getClipbordContent(copyRowHeaders, copyColumnHeaders);
    
    270
    -        UIHelper.copyToClipBoard(content);
    
    271
    -    }
    
    272
    -
    
    273 222
         private void onReportsChanged(ReportUI tabUI, List<?> newValue) {
    
    274
    -
    
    275
    -        if (log.isDebugEnabled()) {
    
    276
    -            log.debug("New reports : " + newValue);
    
    277
    -        }
    
    278
    -
    
    223
    +        log.debug("New reports : " + newValue);
    
    279 224
             // on ajoute toujours une premiere valeur null (pour ne rien selectionne)
    
    280 225
             newValue.add(0, null);
    
    281
    -
    
    282 226
             // on charge le nouveau modèle dans la liste déroulante
    
    283
    -        UIHelper.fillComboBox(tabUI.getReportSelector(), newValue, null);
    
    227
    +        UIHelperSupport.fillComboBox(tabUI.getReportSelector(), newValue, null);
    
    284 228
         }
    
    285 229
     
    
    286 230
         @SuppressWarnings({"unchecked"})
    
    287 231
         private void onSelectedReportChanged(ReportUI tabUI, ReportModel model, Report report) {
    
    288
    -
    
    289 232
             log.info("New selected report [" + report + "]");
    
    290
    -
    
    291 233
             ui.getModel().setBusy(true);
    
    292
    -
    
    293 234
             try {
    
    294 235
                 // on regénère l'ui de configuration des variables
    
    295 236
                 JPanel variablesPanel = tabUI.getReportVariableSelectorPanel();
    
    ... ... @@ -303,30 +244,22 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    303 244
                 model.getResultModel().clear();
    
    304 245
     
    
    305 246
                 if (report != null) {
    
    306
    -
    
    307 247
                     try {
    
    308
    -
    
    309 248
                         ObserveSwingDataSource dataSource = ui.getModel().getConfigModel().getLocalSourceModel().getSafeSource(true);
    
    310
    -
    
    311 249
                         ReportService reportService = dataSource.getReportService();
    
    312
    -
    
    313 250
                         report = reportService.populateVariables(report, ui.getModel().getSelectDataModel().getSelectedTripIds());
    
    314
    -
    
    315 251
                     } catch (Exception e) {
    
    316 252
                         throw new ObserveSwingTechnicalException("unable to populate report : " + report.getName(), e);
    
    317 253
                     }
    
    318 254
     
    
    319 255
                     if (useVariables) {
    
    320
    -
    
    321 256
                         // on construit les ui pour chaqsue variable
    
    322 257
                         for (ReportVariable variable : report.getVariables()) {
    
    323 258
                             String variableName = variable.getName();
    
    324
    -                        //                String value = variables.get(variableName);
    
    325 259
                             Set values = variable.getValues();
    
    326 260
                             List<Object> universe = new ArrayList<>(values);
    
    327
    -
    
    328
    -                        Decorator decorator;
    
    329 261
                             log.info("Variable type: " + variable.getType());
    
    262
    +                        Decorator decorator;
    
    330 263
                             Class type;
    
    331 264
                             if (ReferentialDto.class.isAssignableFrom(variable.getType()) && !universe.isEmpty()) {
    
    332 265
                                 type = DtoModelHelper.fromReferentialDto(variable.getType()).toReferenceType();
    
    ... ... @@ -340,7 +273,6 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    340 273
                             }
    
    341 274
                             log.info("Variable real type: " + type);
    
    342 275
                             BeanFilterableComboBox combo = UIHelperSupport.newBeanFilterableComboBox(type, (JXPathDecorator) decorator, universe);
    
    343
    -
    
    344 276
                             combo.setShowReset(true);
    
    345 277
                             JPanel p = new JPanel(new BorderLayout());
    
    346 278
                             p.add(new JLabel(t(I18nDecoratorHelper.getTypeI18nKey(variable.getType()))), BorderLayout.WEST);
    
    ... ... @@ -349,20 +281,14 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    349 281
                             JComboBox jComboBox = combo.getCombobox();
    
    350 282
                             jComboBox.putClientProperty(VARIABLE_NAME, variableName);
    
    351 283
                             jComboBox.addItemListener(e -> {
    
    352
    -
    
    353 284
                                 JComboBox comboBox = (JComboBox) e.getSource();
    
    354
    -
    
    355 285
                                 if (e.getStateChange() == ItemEvent.DESELECTED) {
    
    356
    -
    
    357
    -                                // ne rien faire de l'évènement de déselection
    
    358
    -                                // sauf si le modèle devient vide
    
    359
    -
    
    286
    +                                // ne rien faire de l'évènement de déselection sauf si le modèle devient vide
    
    360 287
                                     if (comboBox.getSelectedItem() == null) {
    
    361 288
                                         updateVariable(comboBox, null);
    
    362 289
                                     }
    
    363 290
                                     return;
    
    364 291
                                 }
    
    365
    -
    
    366 292
                                 Object o = e.getItem();
    
    367 293
                                 updateVariable(comboBox, o);
    
    368 294
                             });
    
    ... ... @@ -371,51 +297,35 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    371 297
     
    
    372 298
                     // on revalide la disposition de l'onglet
    
    373 299
                     SwingUtilities.invokeLater(revalidateTabUI);
    
    374
    -
    
    375 300
                     Map<String, Object> variables = model.getVariables();
    
    376 301
                     updateValidState(report, variables);
    
    377 302
                 }
    
    378 303
             } finally {
    
    379
    -
    
    380 304
                 ui.getModel().setBusy(false);
    
    381
    -
    
    382 305
             }
    
    383 306
         }
    
    384 307
     
    
    385 308
         private void onVariablesChanges(ReportModel model, Map<String, Object> variables) {
    
    386
    -
    
    387 309
             Report report = model.getSelectedReport();
    
    388 310
             if (report != null) {
    
    389
    -
    
    390 311
                 updateValidState(report, variables);
    
    391 312
             }
    
    392 313
         }
    
    393 314
     
    
    394 315
         private void onValidChanged(ReportModel model, boolean valid) {
    
    395
    -
    
    396
    -        if (log.isInfoEnabled()) {
    
    397
    -            log.info("valid state changed to " + valid);
    
    398
    -        }
    
    399
    -
    
    316
    +        log.info("valid state changed to " + valid);
    
    400 317
             if (!valid) {
    
    401 318
                 // calcul des données et contruction du tableau
    
    402 319
                 model.getResultModel().clear();
    
    403 320
                 return;
    
    404 321
             }
    
    405
    -
    
    406 322
             ui.getModel().setBusy(true);
    
    407
    -
    
    408 323
             try {
    
    409
    -
    
    410 324
                 Report report = model.getSelectedReport();
    
    411
    -
    
    412 325
                 ImmutableSet<String> tripIds = ui.getModel().getSelectDataModel().getSelectedTripIds();
    
    413 326
                 DataDtoReference trip = ui.getModel().getSelectDataModel().getSelectedTrip();
    
    414
    -
    
    415 327
                 log.info(String.format("Build result for report [%s] on %s", report.getName(), trip));
    
    416
    -
    
    417 328
                 Map<String, Object> variables = model.getVariables();
    
    418
    -
    
    419 329
                 for (ReportVariable variable : report.getVariables()) {
    
    420 330
                     Object value = variables.get(variable.getName());
    
    421 331
                     variable.setSelectedValue(value);
    
    ... ... @@ -429,11 +339,8 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    429 339
                 }
    
    430 340
     
    
    431 341
                 ReportService reportService = dataSource.getReportService();
    
    432
    -
    
    433 342
                 DataMatrix data = reportService.executeReport(report, tripIds);
    
    434
    -
    
    435 343
                 timeLog.log(startTime, "execute", report.getName());
    
    436
    -
    
    437 344
                 log.info("Result to display:\n" + data.getClipboardContent(true, true, false, '\t'));
    
    438 345
     
    
    439 346
                 // calcul des données et contruction du tableau
    
    ... ... @@ -441,10 +348,10 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
    441 348
     
    
    442 349
                 // mise a jour du clipboard automatique si requis
    
    443 350
                 if (model.isAutoCopyToClipboard()) {
    
    444
    -                copyReportToClipBoard(report,
    
    445
    -                                      model.getResultModel(),
    
    446
    -                                      model.isCopyRowHeaders(),
    
    447
    -                                      model.isCopyColumnHeaders());
    
    351
    +                CopyResultToClipboard.copyReportToClipBoard(report,
    
    352
    +                                                            model.getResultModel(),
    
    353
    +                                                            model.isCopyRowHeaders(),
    
    354
    +                                                            model.isCopyColumnHeaders());
    
    448 355
                 }
    
    449 356
             } catch (Exception e) {
    
    450 357
                 UIHelper.handlingError("Could not obtain report data", e);
    

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/ChooseFileReport.java
    1
    +package fr.ird.observe.client.ui.admin.report.actions;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Client core
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2019 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.client.ui.ObserveKeyStrokesSupport;
    
    26
    +import fr.ird.observe.client.ui.admin.report.ReportConfigUI;
    
    27
    +import fr.ird.observe.client.ui.admin.report.ReportModel;
    
    28
    +import fr.ird.observe.client.ui.util.UIHelper;
    
    29
    +import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport;
    
    30
    +
    
    31
    +import java.awt.event.ActionEvent;
    
    32
    +import java.io.File;
    
    33
    +
    
    34
    +import static io.ultreia.java4all.i18n.I18n.t;
    
    35
    +
    
    36
    +public class ChooseFileReport extends JComponentActionSupport<ReportConfigUI> {
    
    37
    +
    
    38
    +    public ChooseFileReport() {
    
    39
    +        super("", "", "fileChooser", ObserveKeyStrokesSupport.KEY_STROKE_STORAGE_DO_CHOOSE_FILE);
    
    40
    +    }
    
    41
    +
    
    42
    +    @Override
    
    43
    +    protected void doActionPerformed(ActionEvent e, ReportConfigUI ui) {
    
    44
    +        ReportModel model = ui.getModel().getReportModel();
    
    45
    +        File f = UIHelper.chooseFile(
    
    46
    +                ui,
    
    47
    +                t("observe.title.choose.reportFile"),
    
    48
    +                t("observe.action.choose.reportFile"),
    
    49
    +                model.getReportFile(),
    
    50
    +                "^.+\\.properties$",
    
    51
    +                t("observe.action.choose.reportFile.description"));
    
    52
    +        if (f != null) {
    
    53
    +            model.setReportFile(f);
    
    54
    +        }
    
    55
    +    }
    
    56
    +}

  • client-core/src/main/java/fr/ird/observe/client/ui/admin/report/actions/CopyResultToClipboard.java
    1
    +package fr.ird.observe.client.ui.admin.report.actions;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Client core
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2019 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.client.ui.admin.actions.AdminTabUIActionSupport;
    
    26
    +import fr.ird.observe.client.ui.admin.report.ReportModel;
    
    27
    +import fr.ird.observe.client.ui.admin.report.ReportUI;
    
    28
    +import fr.ird.observe.client.ui.admin.report.ResultTableModel;
    
    29
    +import fr.ird.observe.client.ui.util.UIHelperSupport;
    
    30
    +import fr.ird.observe.services.service.actions.report.Report;
    
    31
    +import org.apache.logging.log4j.LogManager;
    
    32
    +import org.apache.logging.log4j.Logger;
    
    33
    +
    
    34
    +import java.awt.event.ActionEvent;
    
    35
    +
    
    36
    +import static io.ultreia.java4all.i18n.I18n.t;
    
    37
    +
    
    38
    +public class CopyResultToClipboard extends AdminTabUIActionSupport<ReportUI> {
    
    39
    +
    
    40
    +    private static final Logger log = LogManager.getLogger(CopyResultToClipboard.class);
    
    41
    +
    
    42
    +    public CopyResultToClipboard() {
    
    43
    +        super(t("observe.action.copy"), t("observe.actions.synchro.copy.tip"), "report-copy", 'C');
    
    44
    +    }
    
    45
    +
    
    46
    +    @Override
    
    47
    +    protected void doActionPerformed(ActionEvent e, ReportUI ui) {
    
    48
    +        ReportModel stepModel = ui.getStepModel();
    
    49
    +        Report report = stepModel.getSelectedReport();
    
    50
    +        ResultTableModel model = stepModel.getResultModel();
    
    51
    +        copyReportToClipBoard(report, model, stepModel.isCopyRowHeaders(), stepModel.isCopyColumnHeaders());
    
    52
    +    }
    
    53
    +
    
    54
    +    public static void copyReportToClipBoard(Report report,
    
    55
    +                                             ResultTableModel model,
    
    56
    +                                             boolean copyRowHeaders,
    
    57
    +                                             boolean copyColumnHeaders) {
    
    58
    +        if (report == null) {
    
    59
    +            return;
    
    60
    +        }
    
    61
    +
    
    62
    +        log.info(String.format("Will copy result of report %s - result dimension : [%d,%d]", report.getName(), model.getRowCount(), model.getColumnCount()));
    
    63
    +        String content = model.getClipbordContent(copyRowHeaders, copyColumnHeaders);
    
    64
    +        UIHelperSupport.copyToClipBoard(content);
    
    65
    +    }
    
    66
    +}

  • client-core/src/main/java/fr/ird/observe/client/ui/content/api/ContentUIInitializer.java
    ... ... @@ -33,6 +33,7 @@ import fr.ird.observe.client.ui.util.BeanDatePicker;
    33 33
     import fr.ird.observe.client.ui.util.BeanEnumEditor;
    
    34 34
     import fr.ird.observe.client.ui.util.BooleanEditor;
    
    35 35
     import fr.ird.observe.client.ui.util.UIHelper;
    
    36
    +import fr.ird.observe.client.ui.util.UIHelperSupport;
    
    36 37
     import fr.ird.observe.client.ui.util.tripMap.ObserveMapPane;
    
    37 38
     import fr.ird.observe.client.validation.ObserveSwingValidator;
    
    38 39
     import fr.ird.observe.dto.I18nEnumHelper;
    
    ... ... @@ -132,9 +133,6 @@ public class ContentUIInitializer<UI extends ContentUI> {
    132 133
         public static final String SUB_TABBED_PANE = "subTabbedPane";
    
    133 134
         private static final String CLIENT_PROPERTY_NOT_BLOCKING = "notBlocking";
    
    134 135
     
    
    135
    -    private static final String CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN = "skipBindingToBean";
    
    136
    -    private static final String CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN = "skipBindingFromBean";
    
    137
    -
    
    138 136
         private static final Logger log = LogManager.getLogger(ContentUIInitializer.class);
    
    139 137
     
    
    140 138
         protected final UI ui;
    
    ... ... @@ -365,7 +363,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    365 363
             editor.getModel().addPropertyChangeListener("format", e -> ((EditableContentUI<?>) ui).getValidator().doValidate());
    
    366 364
     
    
    367 365
             if (editor.getBean() != null) {
    
    368
    -            if (isBindingFromBean(editor)) {
    
    366
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    369 367
                     editor.getModel().addPropertyChangeListener(propertyName, e -> {
    
    370 368
                         Float oldValue = editor.getModel().getTemperature();
    
    371 369
                         Float newValue = (Float) e.getNewValue();
    
    ... ... @@ -382,7 +380,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    382 380
                 editor.setProperty(editor.getName());
    
    383 381
             }
    
    384 382
             if (editor.getBean() != null) {
    
    385
    -            if (isBindingFromBean(editor)) {
    
    383
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    386 384
                     editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> {
    
    387 385
                         String oldValue = editor.getText();
    
    388 386
                         String newValue = (String) e.getNewValue();
    
    ... ... @@ -400,7 +398,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    400 398
             }
    
    401 399
     
    
    402 400
             if (editor.getBean() != null) {
    
    403
    -            if (isBindingFromBean(editor)) {
    
    401
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    404 402
                     editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> {
    
    405 403
                         String oldValue = editor.getText();
    
    406 404
                         String newValue = (String) e.getNewValue();
    
    ... ... @@ -418,7 +416,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    418 416
             }
    
    419 417
     
    
    420 418
             if (editor.getBean() != null) {
    
    421
    -            if (isBindingFromBean(editor)) {
    
    419
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    422 420
                     editor.getModel().addPropertyChangeListener(editor.getProperty(), e -> {
    
    423 421
                         String oldValue = editor.getText();
    
    424 422
                         String newValue = (String) e.getNewValue();
    
    ... ... @@ -495,7 +493,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    495 493
             }
    
    496 494
             editor.init();
    
    497 495
             if (editor.getBean() != null) {
    
    498
    -            if (isBindingFromBean(editor)) {
    
    496
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    499 497
                     ((JavaBean) editor.getBean()).addPropertyChangeListener(config.getProperty(), e -> {
    
    500 498
                         Number oldValue = editor.getModel().getNumberValue();
    
    501 499
                         Number newValue = (Number) e.getNewValue();
    
    ... ... @@ -523,7 +521,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    523 521
             JavaBean bean = (JavaBean) editor.getBean();
    
    524 522
             String property = editor.getProperty();
    
    525 523
             if (bean != null) {
    
    526
    -            if (isBindingFromBean(editor)) {
    
    524
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    527 525
                     bean.addPropertyChangeListener(property, e -> {
    
    528 526
                         Object oldValue = editor.getSelectedItem();
    
    529 527
                         Object newValue = e.getNewValue();
    
    ... ... @@ -573,7 +571,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    573 571
             JavaBean bean = (JavaBean) editor.getModel().getBean();
    
    574 572
             String property = editor.getModel().getProperty();
    
    575 573
             if (bean != null) {
    
    576
    -            if (isBindingFromBean(editor)) {
    
    574
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    577 575
                     bean.addPropertyChangeListener(property, e -> {
    
    578 576
                         Collection oldValue = editor.getModel().getSelected();
    
    579 577
                         Collection newValue = (Collection) e.getNewValue();
    
    ... ... @@ -606,7 +604,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    606 604
             JavaBean bean = (JavaBean) editor.getModel().getBean();
    
    607 605
             String property = editor.getModel().getPropertyTime();
    
    608 606
             if (bean != null) {
    
    609
    -            if (isBindingFromBean(editor)) {
    
    607
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    610 608
                     bean.addPropertyChangeListener(property, e -> {
    
    611 609
                         Date oldValue = editor.getModel().getTime();
    
    612 610
                         Date newValue = (Date) e.getNewValue();
    
    ... ... @@ -658,7 +656,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    658 656
             JavaBean bean = (JavaBean) editor.getModel().getBean();
    
    659 657
             String property = editor.getModel().getPropertyDate();
    
    660 658
             if (bean != null) {
    
    661
    -            if (isBindingFromBean(editor)) {
    
    659
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    662 660
                     bean.addPropertyChangeListener(property, e -> {
    
    663 661
                         Date oldValue = editor.getModel().getDate();
    
    664 662
                         Date newValue = (Date) e.getNewValue();
    
    ... ... @@ -693,7 +691,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    693 691
     
    
    694 692
             JavaBean bean = (JavaBean) editor.getModel().getBean();
    
    695 693
             if (bean != null) {
    
    696
    -            if (isBindingFromBean(editor)) {
    
    694
    +            if (UIHelperSupport.isBindingFromBean(editor)) {
    
    697 695
                     bean.addPropertyChangeListener(editor.getModel().getPropertyLatitude(), e -> {
    
    698 696
                         Float oldValue = editor.getModel().getLatitude();
    
    699 697
                         Float newValue = (Float) e.getNewValue();
    
    ... ... @@ -755,7 +753,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    755 753
             if (StringUtils.isEmpty(propertyName)) {
    
    756 754
                 editor.setProperty(editor.getName());
    
    757 755
             }
    
    758
    -        editor.init(isBindingFromBean(editor), isBindingToBean(editor));
    
    756
    +        editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor));
    
    759 757
         }
    
    760 758
     
    
    761 759
         protected void init(BeanCheckBox editor) {
    
    ... ... @@ -764,7 +762,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    764 762
             if (StringUtils.isEmpty(propertyName)) {
    
    765 763
                 editor.setProperty(editor.getName());
    
    766 764
             }
    
    767
    -        editor.init(isBindingFromBean(editor), isBindingToBean(editor));
    
    765
    +        editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor));
    
    768 766
         }
    
    769 767
     
    
    770 768
         protected <B extends Enum<B>> void init(BeanEnumEditor<B> editor) {
    
    ... ... @@ -773,7 +771,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    773 771
             if (StringUtils.isEmpty(propertyName)) {
    
    774 772
                 editor.setProperty(editor.getName());
    
    775 773
             }
    
    776
    -        editor.init(isBindingFromBean(editor), isBindingToBean(editor));
    
    774
    +        editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor));
    
    777 775
     
    
    778 776
             ImmutableMap.Builder<B, String> labelsBuilder = ImmutableMap.builder();
    
    779 777
             for (B e : EnumSet.allOf(editor.getType())) {
    
    ... ... @@ -791,7 +789,7 @@ public class ContentUIInitializer<UI extends ContentUI> {
    791 789
             if (StringUtils.isEmpty(propertyName)) {
    
    792 790
                 editor.setProperty(editor.getName());
    
    793 791
             }
    
    794
    -        editor.init(isBindingFromBean(editor), isBindingToBean(editor));
    
    792
    +        editor.init(UIHelperSupport.isBindingFromBean(editor), UIHelperSupport.isBindingToBean(editor));
    
    795 793
             editor.setLocale(ObserveSwingApplicationContextSupport.get().getConfig().getLocale());
    
    796 794
             JFormattedTextField formattedTextField = editor.getEditor();
    
    797 795
             formattedTextField.setEditable(true);
    
    ... ... @@ -840,16 +838,6 @@ public class ContentUIInitializer<UI extends ContentUI> {
    840 838
             log.debug("init table editor " + editor.getName());
    
    841 839
         }
    
    842 840
     
    
    843
    -    private boolean isBindingToBean(JComponent editor) {
    
    844
    -        Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN);
    
    845
    -        return skip == null || !skip;
    
    846
    -    }
    
    847
    -
    
    848
    -    private boolean isBindingFromBean(JComponent editor) {
    
    849
    -        Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN);
    
    850
    -        return skip == null || !skip;
    
    851
    -    }
    
    852
    -
    
    853 841
         private boolean isAutoSelectOnFocus(JComponent comp) {
    
    854 842
             Boolean selectOnFocus = (Boolean) comp.getClientProperty("selectOnFocus");
    
    855 843
             return BooleanUtils.isTrue(selectOnFocus);
    

  • client-db/src/main/java/fr/ird/observe/client/ui/util/UIHelperSupport.java
    ... ... @@ -76,6 +76,8 @@ public class UIHelperSupport extends SwingUtil {
    76 76
         public static final PropertyChangeListener LOG_PROPERTY_CHANGE_LISTENER = new LogPropertyChanged();
    
    77 77
     
    
    78 78
         static private final Logger log = LogManager.getLogger(UIHelperSupport.class);
    
    79
    +    private static final String CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN = "skipBindingToBean";
    
    80
    +    private static final String CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN = "skipBindingFromBean";
    
    79 81
     
    
    80 82
         /**
    
    81 83
          * Choisir un fichier via un sélecteur graphique de fichiers.
    
    ... ... @@ -357,6 +359,16 @@ public class UIHelperSupport extends SwingUtil {
    357 359
             return new JAXXInitialContext().add(model).add(ui);
    
    358 360
         }
    
    359 361
     
    
    362
    +    public static boolean isBindingToBean(JComponent editor) {
    
    363
    +        Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_TO_BEAN);
    
    364
    +        return skip == null || !skip;
    
    365
    +    }
    
    366
    +
    
    367
    +    public static boolean isBindingFromBean(JComponent editor) {
    
    368
    +        Boolean skip = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_SKIP_BINDING_FROM_BEAN);
    
    369
    +        return skip == null || !skip;
    
    370
    +    }
    
    371
    +
    
    360 372
         public static class LogPropertyChanged implements PropertyChangeListener {
    
    361 373
             @Override
    
    362 374
             public void propertyChange(PropertyChangeEvent evt) {
    

  • observe-i18n/src/main/i18n/translations/observe_en_GB.properties
    ... ... @@ -33,8 +33,6 @@ observe.action.about.tip=About ObServe...
    33 33
     observe.action.admin.cancel=Cancel wizard
    
    34 34
     observe.action.admin.close=Close wizard
    
    35 35
     observe.action.apply=Apply
    
    36
    -observe.action.auto.copy.to.clipboard=Automatic copy in clipboard
    
    37
    -observe.action.auto.copy.to.clipboard.tip=Copy automaticly in clipboard with report result
    
    38 36
     observe.action.back.to.list=Back to list
    
    39 37
     observe.action.back.to.list.tip=Go back to the list
    
    40 38
     observe.action.cancel=Cancel
    
    ... ... @@ -84,10 +82,6 @@ observe.action.connexions=Manage connections
    84 82
     observe.action.connexions.tip=Manage connection profiles
    
    85 83
     observe.action.continue=Continue
    
    86 84
     observe.action.copy=Copy
    
    87
    -observe.action.copy.column.headers=Copy column headers
    
    88
    -observe.action.copy.column.headers.tip=Add in result column headers
    
    89
    -observe.action.copy.row.headers=Copy row header
    
    90
    -observe.action.copy.row.headers.tip=Add in result row headers
    
    91 85
     observe.action.copy.to.clipBoard=Copy in clipboard
    
    92 86
     observe.action.copyFloatingObjectPartToLeft=Copy values from leaving to arriving
    
    93 87
     observe.action.copyFloatingObjectPartToLeft.tip=Copy values from leaving to arriving
    
    ... ... @@ -236,18 +230,6 @@ observe.actions.operation.message.running=Operation <%1$s> is running...
    236 230
     observe.actions.operation.message.successed=operation <%1$> is done.
    
    237 231
     observe.actions.operations=operations
    
    238 232
     observe.actions.report=Report
    
    239
    -observe.actions.report.config=Report configuration
    
    240
    -observe.actions.report.copy.options=Copy into clipboard options
    
    241
    -observe.actions.report.description=Generate reports
    
    242
    -observe.actions.report.model.type=Model type to use
    
    243
    -observe.actions.report.report.description=Description of selected report
    
    244
    -observe.actions.report.result=Results
    
    245
    -observe.actions.report.select=Select report
    
    246
    -observe.actions.report.select.file=File of reports definitions
    
    247
    -observe.actions.report.select.file.tip=Choose file of reports definitions
    
    248
    -observe.actions.report.title=Help to generat reports
    
    249
    -observe.actions.report.title.tip=Help to generate reports
    
    250
    -observe.actions.report.variables=Variables configuration
    
    251 233
     observe.actions.saveLocal=Save local database
    
    252 234
     observe.actions.saveLocal.description=Save modifcations on local database
    
    253 235
     observe.actions.synchro.cancel.tip=Cancel
    
    ... ... @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Message
    369 351
     observe.actions.validate.validator.message.header.tip=Message
    
    370 352
     observe.actions.validate.validator.scope.header=...
    
    371 353
     observe.actions.validate.validator.scope.header.tip=Type of message
    
    354
    +observe.admin.report.auto.copy.to.clipboard=Automatic copy in clipboard
    
    355
    +observe.admin.report.auto.copy.to.clipboard.tip=Copy automaticly in clipboard with report result
    
    356
    +observe.admin.report.config=Report configuration
    
    357
    +observe.admin.report.copy.column.headers=Copy column headers
    
    358
    +observe.admin.report.copy.column.headers.tip=Add in result column headers
    
    359
    +observe.admin.report.copy.options=Copy into clipboard options
    
    360
    +observe.admin.report.copy.row.headers=Copy row header
    
    361
    +observe.admin.report.copy.row.headers.tip=Add in result row headers
    
    362
    +observe.admin.report.description=Generate reports
    
    363
    +observe.admin.report.model.type=Model type to use
    
    364
    +observe.admin.report.report.description=Description of selected report
    
    365
    +observe.admin.report.result=Results
    
    366
    +observe.admin.report.select=Select report
    
    367
    +observe.admin.report.select.file=File of reports definitions
    
    368
    +observe.admin.report.select.file.tip=Choose file of reports definitions
    
    369
    +observe.admin.report.title=Help to generat reports
    
    370
    +observe.admin.report.title.tip=Help to generate reports
    
    371
    +observe.admin.report.variables=Variables configuration
    
    372 372
     observe.admin.resume.no.operation.done=No operation done.
    
    373 373
     observe.admin.resume.operation.canceled=operation canceled
    
    374 374
     observe.admin.resume.operation.done=operation done
    

  • observe-i18n/src/main/i18n/translations/observe_es_ES.properties
    ... ... @@ -33,8 +33,6 @@ observe.action.about.tip=A cerca de ObServe...
    33 33
     observe.action.admin.cancel=Anular el asintente
    
    34 34
     observe.action.admin.close=Cerrar el asistente
    
    35 35
     observe.action.apply=Aplicar
    
    36
    -observe.action.auto.copy.to.clipboard=Copia automatica al portapapeles
    
    37
    -observe.action.auto.copy.to.clipboard.tip=Puesta a punto automáticamente el contenido del portapapeles con los resultados
    
    38 36
     observe.action.back.to.list=Volver a la lista
    
    39 37
     observe.action.back.to.list.tip=Volver a la lista de datos
    
    40 38
     observe.action.cancel=Cancelar
    
    ... ... @@ -84,10 +82,6 @@ observe.action.connexions=Gérer les connexions \#TODO
    84 82
     observe.action.connexions.tip=Gérer les profiles de connexion \#TODO
    
    85 83
     observe.action.continue=Continuar
    
    86 84
     observe.action.copy=Copiar en el portapeles
    
    87
    -observe.action.copy.column.headers=Copiar los encabezados de columnas
    
    88
    -observe.action.copy.column.headers.tip=Añadir al resultado las cabeceras de columna
    
    89
    -observe.action.copy.row.headers=Copiar las cabeceras de linea
    
    90
    -observe.action.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna)
    
    91 85
     observe.action.copy.to.clipBoard=Copiar el contenido en el portapapeles
    
    92 86
     observe.action.copyFloatingObjectPartToLeft=Copy values from leaving to arriving \#TODO
    
    93 87
     observe.action.copyFloatingObjectPartToLeft.tip=Copy values from leaving to arriving \#TODO
    
    ... ... @@ -236,18 +230,6 @@ observe.actions.operation.message.running=La operación < %1$s > se está ejecut
    236 230
     observe.actions.operation.message.successed=La operación < %1$s > se terminó.
    
    237 231
     observe.actions.operations=Operaciones a realizar
    
    238 232
     observe.actions.report=Cuadros de síntesis
    
    239
    -observe.actions.report.config=Configuración de los informes
    
    240
    -observe.actions.report.copy.options=Opciones de copia en el portapapeles
    
    241
    -observe.actions.report.description=Generar los cuadros de síntesis del informe de fin del embarque
    
    242
    -observe.actions.report.model.type=Tipo de modelo a utilizar
    
    243
    -observe.actions.report.report.description=Descripción del informe seleccionado
    
    244
    -observe.actions.report.result=Resultados del informe
    
    245
    -observe.actions.report.select=Selección del informe
    
    246
    -observe.actions.report.select.file=Archivo de definición de informes
    
    247
    -observe.actions.report.select.file.tip=Elegir el archivo de definición de informes
    
    248
    -observe.actions.report.title=Ayuda a la generación de informes
    
    249
    -observe.actions.report.title.tip=Ayuda a la generación del informe de fin del embarque
    
    250
    -observe.actions.report.variables=Configuración de variables
    
    251 233
     observe.actions.saveLocal=Copia de seguridad de la base local
    
    252 234
     observe.actions.saveLocal.description=Guardar las modificationes realizadas en la base locale
    
    253 235
     observe.actions.synchro.cancel.tip=Cancelar
    
    ... ... @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Mensaje
    369 351
     observe.actions.validate.validator.message.header.tip=El texto del mensaje
    
    370 352
     observe.actions.validate.validator.scope.header=...
    
    371 353
     observe.actions.validate.validator.scope.header.tip=El tipo del mensaje
    
    354
    +observe.admin.report.auto.copy.to.clipboard=Copia automatica al portapapeles
    
    355
    +observe.admin.report.auto.copy.to.clipboard.tip=Puesta a punto automáticamente el contenido del portapapeles con los resultados
    
    356
    +observe.admin.report.config=Configuración de los informes
    
    357
    +observe.admin.report.copy.column.headers=Copiar los encabezados de columnas
    
    358
    +observe.admin.report.copy.column.headers.tip=Añadir al resultado las cabeceras de columna
    
    359
    +observe.admin.report.copy.options=Opciones de copia en el portapapeles
    
    360
    +observe.admin.report.copy.row.headers=Copiar las cabeceras de linea
    
    361
    +observe.admin.report.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna)
    
    362
    +observe.admin.report.description=Generar los cuadros de síntesis del informe de fin del embarque
    
    363
    +observe.admin.report.model.type=Tipo de modelo a utilizar
    
    364
    +observe.admin.report.report.description=Descripción del informe seleccionado
    
    365
    +observe.admin.report.result=Resultados del informe
    
    366
    +observe.admin.report.select=Selección del informe
    
    367
    +observe.admin.report.select.file=Archivo de definición de informes
    
    368
    +observe.admin.report.select.file.tip=Elegir el archivo de definición de informes
    
    369
    +observe.admin.report.title=Ayuda a la generación de informes
    
    370
    +observe.admin.report.title.tip=Ayuda a la generación del informe de fin del embarque
    
    371
    +observe.admin.report.variables=Configuración de variables
    
    372 372
     observe.admin.resume.no.operation.done=Ninguna operación realizada
    
    373 373
     observe.admin.resume.operation.canceled=operación cancelada
    
    374 374
     observe.admin.resume.operation.done=operacion realizada
    

  • observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
    ... ... @@ -33,8 +33,6 @@ observe.action.about.tip=À propos d'ObServe...
    33 33
     observe.action.admin.cancel=Annulation de l'assistant
    
    34 34
     observe.action.admin.close=Fermeture de l'assistant
    
    35 35
     observe.action.apply=Appliquer
    
    36
    -observe.action.auto.copy.to.clipboard=Copie automatique dans le presse-papier
    
    37
    -observe.action.auto.copy.to.clipboard.tip=Mettre à jour automatiquement le contenu du presse-papier avec les résultats
    
    38 36
     observe.action.back.to.list=Retour à la liste
    
    39 37
     observe.action.back.to.list.tip=Retour à la liste des données
    
    40 38
     observe.action.cancel=Annuler
    
    ... ... @@ -84,10 +82,6 @@ observe.action.connexions=Gérer les connexions
    84 82
     observe.action.connexions.tip=Gérer les profiles de connexion
    
    85 83
     observe.action.continue=Continuer
    
    86 84
     observe.action.copy=Copier dans le presse-papier
    
    87
    -observe.action.copy.column.headers=Copier les entêtes de colonne
    
    88
    -observe.action.copy.column.headers.tip=Ajoute dans le résultat les entêtes de colonne (i.e la première ligne)
    
    89
    -observe.action.copy.row.headers=Copier les entêtes de ligne
    
    90
    -observe.action.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne)
    
    91 85
     observe.action.copy.to.clipBoard=Copier le contenu dans le presse-papier
    
    92 86
     observe.action.copyFloatingObjectPartToLeft=Recopier les valeurs du départ vers l'arrivée
    
    93 87
     observe.action.copyFloatingObjectPartToLeft.tip=Recopier les valeurs du départ vers l'arrivée
    
    ... ... @@ -236,18 +230,6 @@ observe.actions.operation.message.running=L'opération < %1$s > est en cours d'e
    236 230
     observe.actions.operation.message.successed=L'opération < %1$s > est terminée.
    
    237 231
     observe.actions.operations=Opérations à effectuer
    
    238 232
     observe.actions.report=Tableaux de synthèse
    
    239
    -observe.actions.report.config=Configuration des reports
    
    240
    -observe.actions.report.copy.options=Options de copie dans le presse-papier
    
    241
    -observe.actions.report.description=Générer les tableaux de synthèse du rapport de fin d'embarquement
    
    242
    -observe.actions.report.model.type=Type de modèle à utiliser
    
    243
    -observe.actions.report.report.description=Description du rapport sélectionné
    
    244
    -observe.actions.report.result=Résultats du rapport
    
    245
    -observe.actions.report.select=Sélection du rapport
    
    246
    -observe.actions.report.select.file=Fichier de définition de reports
    
    247
    -observe.actions.report.select.file.tip=Choisir le fichier de définition des reports
    
    248
    -observe.actions.report.title=Aide à la génération de rapport
    
    249
    -observe.actions.report.title.tip=Aide à la génération du rapport de fin d'embarquement
    
    250
    -observe.actions.report.variables=Configuration des variables
    
    251 233
     observe.actions.saveLocal=Sauvegarde de la base locale
    
    252 234
     observe.actions.saveLocal.description=Sauvegarder les modifications effectuées vers la base locale
    
    253 235
     observe.actions.synchro.cancel.tip=Annuler
    
    ... ... @@ -369,6 +351,24 @@ observe.actions.validate.validator.message.header=Message
    369 351
     observe.actions.validate.validator.message.header.tip=Le texte du message
    
    370 352
     observe.actions.validate.validator.scope.header=...
    
    371 353
     observe.actions.validate.validator.scope.header.tip=Le type de message
    
    354
    +observe.admin.report.auto.copy.to.clipboard=Copie automatique dans le presse-papier
    
    355
    +observe.admin.report.auto.copy.to.clipboard.tip=Mettre à jour automatiquement le contenu du presse-papier avec les résultats
    
    356
    +observe.admin.report.config=Configuration des reports
    
    357
    +observe.admin.report.copy.column.headers=Copier les entêtes de colonne
    
    358
    +observe.admin.report.copy.column.headers.tip=Ajoute dans le résultat les entêtes de colonne (i.e la première ligne)
    
    359
    +observe.admin.report.copy.options=Options de copie dans le presse-papier
    
    360
    +observe.admin.report.copy.row.headers=Copier les entêtes de ligne
    
    361
    +observe.admin.report.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne)
    
    362
    +observe.admin.report.description=Générer les tableaux de synthèse du rapport de fin d'embarquement
    
    363
    +observe.admin.report.model.type=Type de modèle à utiliser
    
    364
    +observe.admin.report.report.description=Description du rapport sélectionné
    
    365
    +observe.admin.report.result=Résultats du rapport
    
    366
    +observe.admin.report.select=Sélection du rapport
    
    367
    +observe.admin.report.select.file=Fichier de définition de reports
    
    368
    +observe.admin.report.select.file.tip=Choisir le fichier de définition des reports
    
    369
    +observe.admin.report.title=Aide à la génération de rapport
    
    370
    +observe.admin.report.title.tip=Aide à la génération du rapport de fin d'embarquement
    
    371
    +observe.admin.report.variables=Configuration des variables
    
    372 372
     observe.admin.resume.no.operation.done=Aucune opération réalisée.
    
    373 373
     observe.admin.resume.operation.canceled=opération annulée
    
    374 374
     observe.admin.resume.operation.done=opération réussie