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

Commits:

24 changed files:

Changes:

  • client/datasource/actions/src/main/i18n/getters/java.getter
    ... ... @@ -40,10 +40,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip
    40 40
     observe.ui.datasource.editor.actions.consolidate.start.trip
    
    41 41
     observe.ui.datasource.editor.actions.consolidate.title
    
    42 42
     observe.ui.datasource.editor.actions.consolidate.title.tip
    
    43
    +observe.ui.datasource.editor.actions.data.copy
    
    44
    +observe.ui.datasource.editor.actions.data.delete
    
    45
    +observe.ui.datasource.editor.actions.data.delete.result
    
    46
    +observe.ui.datasource.editor.actions.data.export.result
    
    47
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential
    
    48
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type
    
    49
    +observe.ui.datasource.editor.actions.data.import.result
    
    50
    +observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential
    
    43 51
     observe.ui.datasource.editor.actions.exportData
    
    44 52
     observe.ui.datasource.editor.actions.exportData.description
    
    45
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referential
    
    46
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2
    
    47 53
     observe.ui.datasource.editor.actions.exportData.message.not.possible
    
    48 54
     observe.ui.datasource.editor.actions.exportData.message.operation.needFix
    
    49 55
     observe.ui.datasource.editor.actions.exportData.message.prepare.data
    
    ... ... @@ -88,11 +94,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip
    88 94
     observe.ui.datasource.editor.actions.synchro.data.description
    
    89 95
     observe.ui.datasource.editor.actions.synchro.data.launch.operation
    
    90 96
     observe.ui.datasource.editor.actions.synchro.data.message.data.loaded
    
    91
    -observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask
    
    92
    -observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask
    
    93
    -observe.ui.datasource.editor.actions.synchro.data.result.delete.trip
    
    94
    -observe.ui.datasource.editor.actions.synchro.data.result.export.trip
    
    95
    -observe.ui.datasource.editor.actions.synchro.data.result.import.trip
    
    96 97
     observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft
    
    97 98
     observe.ui.datasource.editor.actions.synchro.data.task.copyToRight
    
    98 99
     observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft
    
    ... ... @@ -190,7 +191,6 @@ observe.ui.datasource.storage.config.source.storage
    190 191
     observe.ui.datasource.storage.step.label
    
    191 192
     observe.ui.message.no.report.selected
    
    192 193
     observe.ui.message.select.report
    
    193
    -observe.ui.title.can.not.export.data2
    
    194 194
     observe.ui.title.choose.db.dump.directory
    
    195 195
     observe.ui.title.choose.reportFile
    
    196 196
     observe.ui.title.storage.info
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/DataManager.java
    ... ... @@ -49,13 +49,14 @@ import io.ultreia.java4all.lang.Strings;
    49 49
     import org.apache.commons.lang3.StringUtils;
    
    50 50
     import org.apache.logging.log4j.LogManager;
    
    51 51
     import org.apache.logging.log4j.Logger;
    
    52
    -import org.nuiton.decorator.Decorator;
    
    53 52
     import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
    
    54 53
     
    
    55 54
     import javax.swing.JOptionPane;
    
    56 55
     import java.util.Collection;
    
    57 56
     import java.util.Objects;
    
    58 57
     import java.util.Set;
    
    58
    +import java.util.stream.Collectors;
    
    59
    +import java.util.stream.Stream;
    
    59 60
     
    
    60 61
     import static io.ultreia.java4all.i18n.I18n.n;
    
    61 62
     import static io.ultreia.java4all.i18n.I18n.t;
    
    ... ... @@ -119,6 +120,7 @@ public class DataManager {
    119 120
             return targetSourceLabel;
    
    120 121
         }
    
    121 122
     
    
    123
    +    @SuppressWarnings({"unchecked", "rawtypes"})
    
    122 124
         public WizardState insertMissingReferential(Collection<String> idsToCopy) {
    
    123 125
             progressModel.increments();
    
    124 126
     
    
    ... ... @@ -141,7 +143,7 @@ public class DataManager {
    141 143
             UsageForDisplayUI<ReferentialDtoReference> usagesUI = UsageForDisplayUIHandler.showMissingReferential(getMessage(), usages);
    
    142 144
     
    
    143 145
             int response = ClientUIContext.askUser(null,
    
    144
    -                                               t("observe.ui.title.can.not.export.data2", getTargetSourceLabel()),
    
    146
    +                                               t("observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential", getTargetSourceLabel()),
    
    145 147
                                                    usagesUI,
    
    146 148
                                                    JOptionPane.WARNING_MESSAGE,
    
    147 149
                                                    new Object[]{
    
    ... ... @@ -154,18 +156,18 @@ public class DataManager {
    154 156
                 return WizardState.CANCELED;
    
    155 157
             }
    
    156 158
     
    
    157
    -        log.info(String.format("Base «%s» - Insertion des référentiels manquants.", getTargetSourceLabel()));
    
    158
    -
    
    159
    +        StringBuilder parameters = new StringBuilder();
    
    159 160
             DecoratorService decoratorService = action.getDecoratorService();
    
    160 161
             for (Class<? extends ReferentialDtoReference> key : ReferentialDtoReference.filterReferentialReference(usages.types())) {
    
    161 162
                 Set<? extends ReferentialDtoReference> references = usages.get(key);
    
    162 163
                 String type = t(ContentReferentialUII18nHelper.getType(key));
    
    163
    -            action.sendMessage(t("observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2", getTargetSourceLabel(), references.size(), type));
    
    164
    -            Decorator<?> decorator = decoratorService.getReferenceDecorator(key);
    
    165
    -            for (DtoReference reference : references) {
    
    166
    -                action.sendMessage(t("observe.ui.datasource.editor.actions.exportData.message.add.missing.referential", reference));
    
    167
    -            }
    
    164
    +            decoratorService.installDecorator(key, (Stream) references.stream());
    
    165
    +            String labels = references.stream().map(Object::toString).collect(Collectors.joining("\n\t * "));
    
    166
    +            parameters.append(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type", getTargetSourceLabel(), references.size(), type, labels));
    
    167
    +            parameters.append("\n");
    
    168 168
             }
    
    169
    +        action.sendMessage(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential", getTargetSourceLabel(), parameters.toString()));
    
    170
    +
    
    169 171
             progressModel.increments();
    
    170 172
             targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode());
    
    171 173
             return WizardState.SUCCESSED;
    
    ... ... @@ -178,11 +180,11 @@ public class DataManager {
    178 180
     
    
    179 181
             String tripId = trip.getId();
    
    180 182
     
    
    181
    -        action.sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask", getTargetSourceLabel(), program, trip));
    
    183
    +        action.sendMessage(t("observe.ui.datasource.editor.actions.data.delete", getTargetSourceLabel(), program, trip));
    
    182 184
             progressModel.increments();
    
    183 185
             DeleteTripRequest deleteTripRequest = new DeleteTripRequest(programId, tripId);
    
    184 186
             DeleteTripResult deleteTripResult = targetSource.getTripManagementService().deleteTrip(deleteTripRequest);
    
    185
    -        logDeleteResult(n("observe.ui.datasource.editor.actions.synchro.data.result.delete.trip"),
    
    187
    +        logDeleteResult(n("observe.ui.datasource.editor.actions.data.delete.result"),
    
    186 188
                             getTargetSourceLabel(),
    
    187 189
                             deleteTripResult,
    
    188 190
                             program,
    
    ... ... @@ -199,11 +201,11 @@ public class DataManager {
    199 201
             decoratorService.registerDecoratorInReference(program);
    
    200 202
             decoratorService.registerDecoratorInReference((DtoReference) trip);
    
    201 203
     
    
    202
    -        action.sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask", targetSourceLabel, program, trip));
    
    204
    +        action.sendMessage(t("observe.ui.datasource.editor.actions.data.copy", targetSourceLabel, program, trip));
    
    203 205
             progressModel.increments();
    
    204 206
             ExportTripRequest exportTripRequest = new ExportTripRequest(!targetSource.isLocal(), programId, tripId);
    
    205 207
             ExportTripResult exportTripResult = incomingSource.getTripManagementService().exportTrip(exportTripRequest);
    
    206
    -        logExportResult(n("observe.ui.datasource.editor.actions.synchro.data.result.export.trip"),
    
    208
    +        logExportResult(n("observe.ui.datasource.editor.actions.data.export.result"),
    
    207 209
                             getIncomingSourceLabel(),
    
    208 210
                             exportTripResult,
    
    209 211
                             program,
    
    ... ... @@ -211,10 +213,10 @@ public class DataManager {
    211 213
     
    
    212 214
             progressModel.increments();
    
    213 215
             ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
    
    214
    -        log.info("Use import script: "+importTripRequest.getSqlContent().getLocation());
    
    216
    +        log.info("Use import script: " + importTripRequest.getSqlContent().getLocation());
    
    215 217
             ImportTripResult importTripResult = targetSource.getTripManagementService().importTrip(importTripRequest);
    
    216
    -        logImportResult(n("observe.ui.datasource.editor.actions.synchro.data.result.import.trip"),
    
    217
    -                        n("observe.ui.datasource.editor.actions.synchro.data.result.delete.trip"),
    
    218
    +        logImportResult(n("observe.ui.datasource.editor.actions.data.import.result"),
    
    219
    +                        n("observe.ui.datasource.editor.actions.data.delete.result"),
    
    218 220
                             targetSourceLabel,
    
    219 221
                             importTripResult,
    
    220 222
                             program,
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java
    ... ... @@ -52,7 +52,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
    52 52
     public class Apply extends DataSynchroUIActionSupport {
    
    53 53
     
    
    54 54
         public Apply() {
    
    55
    -        super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'Q');
    
    55
    +        super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'S');
    
    56 56
         }
    
    57 57
     
    
    58 58
         @Override
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
    ... ... @@ -54,7 +54,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
    54 54
     public class Apply extends ReferentialSynchroUIActionSupport {
    
    55 55
     
    
    56 56
         public Apply() {
    
    57
    -        super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'Q');
    
    57
    +        super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'S');
    
    58 58
         }
    
    59 59
     
    
    60 60
         @Override
    

  • client/datasource/editor/api/src/main/i18n/getters/java.getter
    ... ... @@ -190,7 +190,9 @@ observe.ui.action.test.remote
    190 190
     observe.ui.action.test.remote.tip
    
    191 191
     observe.ui.action.test.server
    
    192 192
     observe.ui.action.test.server.tip
    
    193
    +observe.ui.choice.apply
    
    193 194
     observe.ui.choice.cancel
    
    195
    +observe.ui.choice.cancel.tip
    
    194 196
     observe.ui.choice.confirm.delete
    
    195 197
     observe.ui.choice.confirm.replace
    
    196 198
     observe.ui.choice.continue
    
    ... ... @@ -293,6 +295,7 @@ observe.ui.message.show.usage.for.desactivated
    293 295
     observe.ui.message.show.usages
    
    294 296
     observe.ui.message.table.editBean.modified
    
    295 297
     observe.ui.message.table.editBean.modified.but.invalid
    
    298
    +observe.ui.move.selectTarget
    
    296 299
     observe.ui.title.can.not.delete.referentiel
    
    297 300
     observe.ui.title.can.not.export.obstuna
    
    298 301
     observe.ui.title.choose.db.dump
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/ObserveKeyStrokesEditorApi.java
    ... ... @@ -70,6 +70,8 @@ public class ObserveKeyStrokesEditorApi extends ObserveKeyStrokesSupport {
    70 70
     
    
    71 71
         public static final KeyStroke KEY_STROKE_COPY_VALUES_AND_SAVE = KeyStroke.getKeyStroke("ctrl pressed T");
    
    72 72
     
    
    73
    +    public static final KeyStroke KEY_STROKE_SELECT_TARGET = KeyStroke.getKeyStroke("pressed F2");
    
    74
    +
    
    73 75
         public static final KeyStroke KEY_STROKE_GO_TO_OPEN = KeyStroke.getKeyStroke("alt pressed O");
    
    74 76
         public static final KeyStroke KEY_STROKE_TOGGLE_OBSERVATION_AVAILABILITY = KeyStroke.getKeyStroke("ctrl pressed F1");
    
    75 77
         public static final KeyStroke KEY_STROKE_TOGGLE_LOGBOOK_AVAILABILITY = KeyStroke.getKeyStroke("ctrl pressed F2");
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ChangeId.java
    ... ... @@ -72,6 +72,8 @@ public class ChangeId<U extends ContentUI> extends ContentUIActionSupport<U> imp
    72 72
                     ui.open();
    
    73 73
                     NavigationTree tree = ui.getHandler().getDataSourceEditor().getNavigationUI().getTree();
    
    74 74
                     NavigationNode selectedNode = tree.getSelectedNode();
    
    75
    +                //FIXME:Tree No on a such referential node, there is no child! no no need to do this
    
    76
    +                //FIXME:Test use a less brutal node method
    
    75 77
                     selectedNode.updateNode();
    
    76 78
                     selectedNode.nodeChanged();
    
    77 79
     
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
    ... ... @@ -58,14 +58,19 @@ public class MoveRequest {
    58 58
          * Id of parent data where move.
    
    59 59
          */
    
    60 60
         private final String newParentId;
    
    61
    +    /**
    
    62
    +     * to select target node after move operation.
    
    63
    +     */
    
    64
    +    private final boolean selectTarget;
    
    61 65
     
    
    62
    -    public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId) {
    
    66
    +    public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId, boolean selectTarget) {
    
    63 67
             this.referenceType = referenceType;
    
    64 68
             this.parentReferenceType = parentReferenceType;
    
    65 69
             this.parentTargetReferenceType = parentTargetReferenceType;
    
    66 70
             this.oldParentId = oldParentId;
    
    67 71
             this.ids = ids;
    
    68 72
             this.newParentId = newParentId;
    
    73
    +        this.selectTarget = selectTarget;
    
    69 74
         }
    
    70 75
     
    
    71 76
         public Class<? extends DataDtoReference> getReferenceType() {
    
    ... ... @@ -96,6 +101,10 @@ public class MoveRequest {
    96 101
             return ids.iterator().next();
    
    97 102
         }
    
    98 103
     
    
    104
    +    public boolean isSelectTarget() {
    
    105
    +        return selectTarget;
    
    106
    +    }
    
    107
    +
    
    99 108
         public boolean isSingle() {
    
    100 109
             return ids.size() == 1;
    
    101 110
         }
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
    ... ... @@ -24,6 +24,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move;
    24 24
     
    
    25 25
     import com.google.common.collect.ImmutableSet;
    
    26 26
     import fr.ird.observe.client.ClientUIContextApplicationComponent;
    
    27
    +import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
    
    27 28
     import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUIModel;
    
    28 29
     import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUIModel;
    
    29 30
     import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper;
    
    ... ... @@ -38,11 +39,25 @@ import org.apache.logging.log4j.LogManager;
    38 39
     import org.apache.logging.log4j.Logger;
    
    39 40
     import org.nuiton.decorator.JXPathDecorator;
    
    40 41
     
    
    42
    +import javax.swing.AbstractAction;
    
    43
    +import javax.swing.Action;
    
    44
    +import javax.swing.ActionMap;
    
    45
    +import javax.swing.InputMap;
    
    41 46
     import javax.swing.JButton;
    
    47
    +import javax.swing.JCheckBox;
    
    48
    +import javax.swing.JComponent;
    
    42 49
     import javax.swing.JLabel;
    
    50
    +import javax.swing.JLayeredPane;
    
    43 51
     import javax.swing.JOptionPane;
    
    44 52
     import javax.swing.JPanel;
    
    53
    +import javax.swing.JSeparator;
    
    54
    +import javax.swing.KeyStroke;
    
    55
    +import javax.swing.SwingConstants;
    
    56
    +import javax.swing.SwingUtilities;
    
    45 57
     import java.awt.BorderLayout;
    
    58
    +import java.awt.Font;
    
    59
    +import java.awt.GridLayout;
    
    60
    +import java.awt.event.ActionEvent;
    
    46 61
     import java.util.List;
    
    47 62
     import java.util.Objects;
    
    48 63
     import java.util.Optional;
    
    ... ... @@ -56,6 +71,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
    56 71
      * @author Tony Chemit - dev@tchemit.fr
    
    57 72
      * @since 8.0.1
    
    58 73
      */
    
    74
    +@SuppressWarnings("UnusedReturnValue")
    
    59 75
     public class MoveRequestBuilder {
    
    60 76
     
    
    61 77
         private static final Logger log = LogManager.getLogger(MoveRequestBuilder.class);
    
    ... ... @@ -75,6 +91,12 @@ public class MoveRequestBuilder {
    75 91
          * Ids to move.
    
    76 92
          */
    
    77 93
         private final ImmutableSet<String> ids;
    
    94
    +    /**
    
    95
    +     * To get selected target request value.
    
    96
    +     */
    
    97
    +    private final JCheckBox selectTarget;
    
    98
    +    private final AbstractAction selectTargetAction;
    
    99
    +    private final AbstractAction applyAction;
    
    78 100
         /**
    
    79 101
          * To get parent candidates.
    
    80 102
          */
    
    ... ... @@ -91,6 +113,8 @@ public class MoveRequestBuilder {
    91 113
          * Message of dialog to select new parent.
    
    92 114
          */
    
    93 115
         private String askNewParentMessage;
    
    116
    +    private JButton jButton;
    
    117
    +    private JOptionPane optionPane;
    
    94 118
     
    
    95 119
         static class BuilderImpl implements StepSetParentCandidates, StepBuild {
    
    96 120
             private final MoveRequestBuilder builder;
    
    ... ... @@ -151,6 +175,32 @@ public class MoveRequestBuilder {
    151 175
             this.parentReferenceType = Objects.requireNonNull(parentReferenceType);
    
    152 176
             this.oldParentId = Objects.requireNonNull(oldParentId);
    
    153 177
             this.ids = Objects.requireNonNull(ids);
    
    178
    +        KeyStroke keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_SELECT_TARGET;
    
    179
    +        String t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.move.selectTarget"), keyStroke);
    
    180
    +        this.selectTarget = new JCheckBox(t);
    
    181
    +        selectTargetAction = new AbstractAction() {
    
    182
    +            @Override
    
    183
    +            public void actionPerformed(ActionEvent e) {
    
    184
    +                selectTarget.setSelected(!selectTarget.isSelected());
    
    185
    +                log.info(String.format("select target? %s", selectTarget.isSelected()));
    
    186
    +            }
    
    187
    +        };
    
    188
    +        selectTargetAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
    
    189
    +        selectTargetAction.putValue(Action.NAME, t);
    
    190
    +        selectTarget.setFocusable(false);
    
    191
    +        keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_APPLY;
    
    192
    +        t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.choice.apply"), keyStroke);
    
    193
    +
    
    194
    +        applyAction = new AbstractAction() {
    
    195
    +            @Override
    
    196
    +            public void actionPerformed(ActionEvent e) {
    
    197
    +                log.info("Apply :)");
    
    198
    +                jButton.doClick();
    
    199
    +            }
    
    200
    +        };
    
    201
    +        applyAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
    
    202
    +        applyAction.putValue(Action.NAME, t);
    
    203
    +//        selectTarget.setAction(selectTargetAction);
    
    154 204
         }
    
    155 205
     
    
    156 206
         public MoveRequestBuilder setParentTargetReferenceType(Class<? extends DtoReference> parentTargetReferenceType) {
    
    ... ... @@ -189,7 +239,7 @@ public class MoveRequestBuilder {
    189 239
             if (newParentId == null) {
    
    190 240
                 return Optional.empty();
    
    191 241
             }
    
    192
    -        return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId));
    
    242
    +        return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId, selectTarget.isSelected()));
    
    193 243
         }
    
    194 244
     
    
    195 245
         private Optional<String> askNewParent(List<? extends DtoReference> parentCandidates, String dialogTitle, String dialogMessage) {
    
    ... ... @@ -199,20 +249,66 @@ public class MoveRequestBuilder {
    199 249
                     (JXPathDecorator) ClientUIContextApplicationComponent.value().getDecoratorService().getReferenceDecorator(parentTargetReferenceType),
    
    200 250
                     parentCandidates);
    
    201 251
     
    
    202
    -        String continueActionText = t("observe.ui.choice.continue");
    
    203
    -        Object[] options = {continueActionText, t("observe.ui.choice.cancel")};
    
    204
    -        JPanel panel = new JPanel(new BorderLayout());
    
    205
    -        panel.add(BorderLayout.NORTH, new JLabel(t(dialogMessage)));
    
    206
    -        panel.add(BorderLayout.CENTER, editor);
    
    252
    +        String continueActionText = (String) applyAction.getValue(Action.NAME);
    
    253
    +        Object[] options = {continueActionText};
    
    254
    +        JPanel panel = new JPanel(new BorderLayout(3, 3));
    
    255
    +
    
    256
    +        JPanel panel0 = new JPanel(new BorderLayout(3, 3));
    
    257
    +
    
    258
    +        JPanel panel2 = new JPanel(new GridLayout(0, 1));
    
    259
    +
    
    260
    +        panel0.add(BorderLayout.NORTH, new JLabel(t(dialogMessage)));
    
    261
    +        panel0.add(BorderLayout.CENTER, editor);
    
    262
    +        panel0.add(BorderLayout.SOUTH, panel2);
    
    263
    +
    
    264
    +        //FIXME:Move Add a default client configuration option to set this value
    
    265
    +        selectTarget.setSelected(false);
    
    266
    +
    
    267
    +        panel2.add(new JLabel());
    
    268
    +        panel2.add(selectTarget);
    
    269
    +
    
    270
    +        JLabel information = new JLabel(t("observe.ui.choice.cancel.tip"), UIHelper.getUIManagerActionIcon("information"), SwingConstants.LEFT);
    
    271
    +        information.setFont(information.getFont().deriveFont(Font.ITALIC).deriveFont(11f));
    
    272
    +
    
    273
    +        JPanel panel4 = new JPanel(new GridLayout(0, 1));
    
    274
    +        JPanel panel5 = new JPanel(new BorderLayout());
    
    275
    +        panel4.add(panel5);
    
    276
    +        panel4.add(BorderLayout.NORTH, new JSeparator(SwingConstants.HORIZONTAL));
    
    277
    +        panel4.add(BorderLayout.CENTER, information);
    
    207 278
     
    
    208
    -        JOptionPane pane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]);
    
    279
    +        panel.add(BorderLayout.NORTH, panel0);
    
    280
    +        panel.add(BorderLayout.SOUTH, panel4);
    
    209 281
     
    
    210
    -        JButton jButton = UsageUIHandlerSupport.findButton(pane, continueActionText);
    
    282
    +        InputMap inputMap1 = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    
    283
    +        inputMap1.put((KeyStroke) selectTargetAction.getValue(Action.ACCELERATOR_KEY), "selectTarget");
    
    284
    +
    
    285
    +        InputMap inputMap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    
    286
    +        inputMap.put((KeyStroke) selectTargetAction.getValue(Action.ACCELERATOR_KEY), "selectTarget");
    
    287
    +        inputMap.put((KeyStroke) applyAction.getValue(Action.ACCELERATOR_KEY), "apply");
    
    288
    +
    
    289
    +        ActionMap actionMap = panel.getActionMap();
    
    290
    +        actionMap.put("selectTarget", selectTargetAction);
    
    291
    +        actionMap.put("apply", applyAction);
    
    292
    +
    
    293
    +        optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]) {
    
    294
    +            @Override
    
    295
    +            public void selectInitialValue() {
    
    296
    +
    
    297
    +                JLayeredPane parent = (JLayeredPane) optionPane.getParent().getParent();
    
    298
    +
    
    299
    +                InputMap inputMap = parent.getRootPane().getInputMap(2);
    
    300
    +
    
    301
    +                inputMap.put(KeyStroke.getKeyStroke("pressed ENTER"), "none");
    
    302
    +                inputMap.put(KeyStroke.getKeyStroke("ctrl pressed ENTER"), "none");
    
    303
    +
    
    304
    +                SwingUtilities.invokeLater(editor.getCombobox()::requestFocus);
    
    305
    +            }
    
    306
    +        };
    
    307
    +        jButton = UsageUIHandlerSupport.findButton(optionPane, continueActionText);
    
    211 308
             Objects.requireNonNull(jButton);
    
    212 309
             jButton.setEnabled(false);
    
    213 310
             editor.getModel().addPropertyChangeListener("selectedItem", evt -> jButton.setEnabled(evt.getNewValue() != null));
    
    214
    -
    
    215
    -        int response = UIHelper.askUser(ClientUIContextApplicationComponent.value().getMainUI(), pane, t(dialogTitle), options);
    
    311
    +        int response = UIHelper.askUser(ClientUIContextApplicationComponent.value().getMainUI(), optionPane, t(dialogTitle), options);
    
    216 312
     
    
    217 313
             DtoReference newParent = null;
    
    218 314
             if (response == 0) {
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
    ... ... @@ -22,9 +22,13 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import com.google.common.collect.ImmutableSet;
    
    25 26
     import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
    
    27
    +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
    
    26 28
     import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
    
    27 29
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    30
    +import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    31
    +import fr.ird.observe.dto.referential.common.ProgramReference;
    
    28 32
     
    
    29 33
     /**
    
    30 34
      * Created on 15/10/2020.
    
    ... ... @@ -36,15 +40,70 @@ public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter {
    36 40
     
    
    37 41
         @Override
    
    38 42
         public void adaptTree(MoveRequest request, NavigationTree tree) {
    
    43
    +        ImmutableSet<String> ids = request.getIds();
    
    44
    +        // get old parent node
    
    45
    +        ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType());
    
    39 46
     
    
    40
    -        NavigationNode selectedNode = tree.getSelectedNode();
    
    41
    -        NavigationNode oldChildContainerNode = selectedNode.upToReferenceContainerNode(request.getParentReferenceType());
    
    42
    -        oldChildContainerNode.updateNode();
    
    47
    +        // get shared ancestor of tow parents
    
    48
    +        NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType());
    
    43 49
     
    
    44
    -        NavigationNode oldParentContainerReferenceNode = selectedNode.upToReferenceContainerNode(request.getParentReferenceType());
    
    50
    +        // get new parent node
    
    51
    +        ContentListUINavigationNode newParentNode = getNewParentNode(request, parentContainerNode);
    
    45 52
     
    
    46
    -        NavigationNode newParentNode = oldParentContainerReferenceNode.downToReferenceNode(request.getParentTargetReferenceType(), request.getNewParentId());
    
    47
    -        newParentNode.updateNode();
    
    53
    +        // update it
    
    54
    +        newParentNode.addChildren(ids);
    
    55
    +
    
    56
    +        // clean old paren node
    
    57
    +        cleanOldParentNode(tree, ids, oldParentNode);
    
    58
    +
    
    59
    +        if (request.isSelectTarget()) {
    
    60
    +            // select new parent node
    
    61
    +            tree.selectSafeNode(newParentNode);
    
    62
    +        } else {
    
    63
    +            if (oldParentNode.getParent() == null) {
    
    64
    +                // limit case: select first node in tree (previous old parent node was removed)
    
    65
    +                tree.selectFirstNode();
    
    66
    +            }
    
    67
    +        }
    
    68
    +    }
    
    69
    +
    
    70
    +    protected void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
    
    71
    +        if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
    
    72
    +            RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
    
    73
    +            if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
    
    74
    +                // limit case : node will be empty, must remove it
    
    75
    +                root.remove(oldParentNode);
    
    76
    +                return;
    
    77
    +            }
    
    78
    +        }
    
    79
    +        // clean it
    
    80
    +        oldParentNode.removeChildren(ids);
    
    81
    +
    
    82
    +        // reload node
    
    83
    +        oldParentNode.reloadNodeData();
    
    84
    +
    
    85
    +        // re-select the node (to update associated form)
    
    86
    +        tree.reSelectSafeNode(oldParentNode);
    
    87
    +    }
    
    88
    +
    
    89
    +    protected ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
    
    90
    +        String newParentId = request.getNewParentId();
    
    91
    +        if (oldParentContainerNode.isRoot()) {
    
    92
    +            RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
    
    93
    +            boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
    
    94
    +            if (!loadEmptyProgram) {
    
    95
    +                NavigationNode result = root.findChildById(newParentId);
    
    96
    +                if (result == null) {
    
    97
    +                    // limit case : node does not exist (was empty previously), need to create it
    
    98
    +                    ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
    
    99
    +                    result = root.getCapability().createChildNode(reference);
    
    100
    +                    int position = root.getCapability().getNodePosition(reference);
    
    101
    +                    root.insert(result, position);
    
    102
    +                }
    
    103
    +                return (ContentListUINavigationNode) result;
    
    104
    +            }
    
    105
    +        }
    
    106
    +        return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
    
    48 107
         }
    
    49 108
     
    
    50
    -}
    109
    +}
    \ No newline at end of file

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUI.jcss
    ... ... @@ -60,12 +60,8 @@
    60 60
       visible:{states.isEditable()};
    
    61 61
     }
    
    62 62
     
    
    63
    -/*#create {
    
    64
    -  enabled:{states.isEditable()};
    
    65
    -}*/
    
    66
    -
    
    67 63
     #move {
    
    68
    -  enabled:{states.isUpdatingMode() && states.isOneOrMoreSelectedData()};
    
    64
    +  enabled:{states.isEditable() && states.isOneOrMoreSelectedData()};
    
    69 65
     }
    
    70 66
     
    
    71 67
     #delete {
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
    ... ... @@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.editor.api.content.data.list;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import com.google.common.collect.ImmutableSet;
    
    25 26
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    26 27
     import fr.ird.observe.dto.reference.DataDtoReference;
    
    27 28
     import fr.ird.observe.dto.reference.DtoReference;
    
    ... ... @@ -29,6 +30,7 @@ import fr.ird.observe.dto.reference.LazyDataDtoReferenceSet;
    29 30
     import io.ultreia.java4all.lang.Objects2;
    
    30 31
     
    
    31 32
     import java.util.List;
    
    33
    +import java.util.Set;
    
    32 34
     
    
    33 35
     /**
    
    34 36
      * Created on 07/10/2020.
    
    ... ... @@ -79,4 +81,25 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
    79 81
             return getInitializer().getParentReference();
    
    80 82
         }
    
    81 83
     
    
    84
    +    public void removeChildren(ImmutableSet<String> ids) {
    
    85
    +        for (String id : ids) {
    
    86
    +            NavigationNode childNode = findChildById(id);
    
    87
    +            childNode.removeFromParent();
    
    88
    +        }
    
    89
    +    }
    
    90
    +
    
    91
    +    public void addChildren(Set<String> ids) {
    
    92
    +        ContentListUINavigationInitializer initializer = getInitializer();
    
    93
    +        boolean notLoaded = isNotLoaded();
    
    94
    +        reloadNodeData();
    
    95
    +        List<? extends DataDtoReference> references = initializer.getReferences();
    
    96
    +        ContentListUINavigationCapability<?> capability = getCapability();
    
    97
    +        for (DataDtoReference reference : references) {
    
    98
    +            if (notLoaded || ids.contains(reference.getId())) {
    
    99
    +                NavigationNode childNode = capability.createChildNode(reference);
    
    100
    +                int nodePosition = capability.getNodePosition(reference);
    
    101
    +                insert(childNode, nodePosition);
    
    102
    +            }
    
    103
    +        }
    
    104
    +    }
    
    82 105
     }

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationNode.java
    ... ... @@ -30,7 +30,6 @@ import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.Nu
    30 30
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceCapability;
    
    31 31
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceContainerCapability;
    
    32 32
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    33
    -import fr.ird.observe.dto.reference.DataDtoReference;
    
    34 33
     import fr.ird.observe.dto.reference.DtoReference;
    
    35 34
     import fr.ird.observe.toolkit.dto.navigation.NavigationModelNode;
    
    36 35
     import fr.ird.observe.toolkit.dto.navigation.edit.EditNode;
    
    ... ... @@ -276,7 +275,7 @@ public abstract class NavigationNode extends DefaultMutableTreeNode implements W
    276 275
         // Update methods
    
    277 276
         //--------------------------------------------------------------------------------------------
    
    278 277
     
    
    279
    -    public final <R extends DataDtoReference> int getChildrenPosition(R reference, Comparator<R> referenceComparator) {
    
    278
    +    public final <R extends DtoReference> int getChildrenPosition(R reference, Comparator<R> referenceComparator) {
    
    280 279
             List<R> list = getChildrenReferences(reference);
    
    281 280
             list.add(reference);
    
    282 281
             list.sort(referenceComparator);
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/capability/ReferenceListContainerCapability.java deleted
    1
    -package fr.ird.observe.client.datasource.editor.api.navigation.tree.capability;
    
    2
    -
    
    3
    -/*-
    
    4
    - * #%L
    
    5
    - * ObServe Client :: DataSource :: Editor :: API
    
    6
    - * %%
    
    7
    - * Copyright (C) 2008 - 2021 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.datasource.editor.api.navigation.tree.NavigationNode;
    
    26
    -
    
    27
    -/**
    
    28
    - * Created on 08/11/2020.
    
    29
    - *
    
    30
    - * @author Tony Chemit - dev@tchemit.fr
    
    31
    - * @since 8.0.1
    
    32
    - */
    
    33
    -public interface ReferenceListContainerCapability<N extends NavigationNode> extends ContainerCapability<N> {
    
    34
    -
    
    35
    -}

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationCapability.java
    ... ... @@ -28,7 +28,6 @@ import fr.ird.observe.client.configuration.NavigationTreeConfig;
    28 28
     import fr.ird.observe.client.datasource.editor.api.content.referential.ReferentialHomeUINavigationNode;
    
    29 29
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    30 30
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceContainerCapability;
    
    31
    -import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceListContainerCapability;
    
    32 31
     import fr.ird.observe.dto.reference.DtoReference;
    
    33 32
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    34 33
     import fr.ird.observe.dto.referential.common.ProgramReference;
    
    ... ... @@ -45,7 +44,7 @@ import java.util.stream.Collectors;
    45 44
      * @author Tony Chemit - dev@tchemit.fr
    
    46 45
      * @since 8.0.1
    
    47 46
      */
    
    48
    -public class RootNavigationCapability implements ReferenceContainerCapability<RootNavigationNode>, ReferenceListContainerCapability<RootNavigationNode> {
    
    47
    +public class RootNavigationCapability implements ReferenceContainerCapability<RootNavigationNode> {
    
    49 48
     
    
    50 49
         private final RootNavigationNode node;
    
    51 50
     
    
    ... ... @@ -55,7 +54,7 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro
    55 54
         public RootNavigationCapability(RootNavigationNode node) {
    
    56 55
             this.node = Objects.requireNonNull(node);
    
    57 56
             this.acceptedNodeTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().flatMap(m -> m.getAcceptedNodeTypes().stream()).collect(ImmutableList.toImmutableList()));
    
    58
    -        this.acceptedTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().map(RootNavigationTreeNodeProvider::getAcceptedType).filter(Objects::nonNull).collect(ImmutableList.toImmutableList()));
    
    57
    +        this.acceptedTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().map(RootNavigationTreeNodeProvider::getAcceptedType).filter(Objects::nonNull).distinct().collect(ImmutableList.toImmutableList()));
    
    59 58
         }
    
    60 59
     
    
    61 60
         @Override
    
    ... ... @@ -95,7 +94,7 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro
    95 94
     
    
    96 95
         @Override
    
    97 96
         public int getNodePosition(DtoReference reference) {
    
    98
    -        return 0;
    
    97
    +        return getNode().getChildrenPosition((ProgramReference) reference, ProgramReference.COMPARATOR_WITH_GEAR_PREFIX);
    
    99 98
         }
    
    100 99
     
    
    101 100
         public RootNavigationTreeNodeProvider<?> getProvider(ProgramReference referenceType) {
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationTreeNodeProvider.java
    ... ... @@ -28,7 +28,7 @@ import fr.ird.observe.client.configuration.NavigationTreeConfig;
    28 28
     import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
    
    29 29
     import fr.ird.observe.client.datasource.editor.api.content.referential.ReferentialHomeUINavigationNode;
    
    30 30
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    31
    -import fr.ird.observe.dto.reference.DataDtoReference;
    
    31
    +import fr.ird.observe.dto.reference.DtoReference;
    
    32 32
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    33 33
     import fr.ird.observe.dto.referential.common.ProgramReference;
    
    34 34
     import fr.ird.observe.services.service.data.NavigationResult;
    
    ... ... @@ -53,7 +53,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
    53 53
         private final B module;
    
    54 54
         private final int priority;
    
    55 55
         private final ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes;
    
    56
    -    private final Class<? extends DataDtoReference> acceptedType;
    
    56
    +    private final Class<? extends DtoReference> acceptedType;
    
    57 57
     
    
    58 58
         public static synchronized List<RootNavigationTreeNodeProvider<?>> getProviders() {
    
    59 59
             if (PROVIDERS == null) {
    
    ... ... @@ -66,7 +66,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
    66 66
             return PROVIDERS;
    
    67 67
         }
    
    68 68
     
    
    69
    -    protected RootNavigationTreeNodeProvider(BusinessProject project, B module, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DataDtoReference> acceptedType) {
    
    69
    +    protected RootNavigationTreeNodeProvider(BusinessProject project, B module, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DtoReference> acceptedType) {
    
    70 70
             this.module = Objects.requireNonNull(module);
    
    71 71
             this.acceptedNodeTypes = acceptedNodeTypes;
    
    72 72
             this.acceptedType = acceptedType;
    
    ... ... @@ -112,7 +112,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
    112 112
             return acceptedNodeTypes;
    
    113 113
         }
    
    114 114
     
    
    115
    -    public Class<? extends DataDtoReference> getAcceptedType() {
    
    115
    +    public Class<? extends DtoReference> getAcceptedType() {
    
    116 116
             return acceptedType;
    
    117 117
         }
    
    118 118
     
    

  • client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/LlRootNavigationTreeNodeProvider.java
    ... ... @@ -27,7 +27,6 @@ import com.google.common.collect.ImmutableList;
    27 27
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    28 28
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider;
    
    29 29
     import fr.ird.observe.client.datasource.editor.ll.data.common.TripListUINavigationNode;
    
    30
    -import fr.ird.observe.dto.data.ll.common.TripReference;
    
    31 30
     import fr.ird.observe.dto.referential.common.ProgramReference;
    
    32 31
     import fr.ird.observe.spi.module.ObserveBusinessProject;
    
    33 32
     import fr.ird.observe.spi.module.ll.BusinessModule;
    
    ... ... @@ -45,7 +44,7 @@ public class LlRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProv
    45 44
                                    fr.ird.observe.client.datasource.editor.ll.referential.common.ReferentialHomeUINavigationNode.class,
    
    46 45
                                    fr.ird.observe.client.datasource.editor.ll.referential.landing.ReferentialHomeUINavigationNode.class,
    
    47 46
                                    fr.ird.observe.client.datasource.editor.ll.referential.observation.ReferentialHomeUINavigationNode.class),
    
    48
    -              TripReference.class);
    
    47
    +              ProgramReference.class);
    
    49 48
         }
    
    50 49
     
    
    51 50
         @Override
    

  • client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/PsRootNavigationTreeNodeProvider.java
    ... ... @@ -27,7 +27,6 @@ import com.google.common.collect.ImmutableList;
    27 27
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    28 28
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider;
    
    29 29
     import fr.ird.observe.client.datasource.editor.ps.data.common.TripListUINavigationNode;
    
    30
    -import fr.ird.observe.dto.data.ll.common.TripReference;
    
    31 30
     import fr.ird.observe.dto.referential.common.ProgramReference;
    
    32 31
     import fr.ird.observe.spi.module.ObserveBusinessProject;
    
    33 32
     import fr.ird.observe.spi.module.ps.BusinessModule;
    
    ... ... @@ -44,7 +43,7 @@ public class PsRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProv
    44 43
                   ImmutableList.of(TripListUINavigationNode.class,
    
    45 44
                                    fr.ird.observe.client.datasource.editor.ps.referential.common.ReferentialHomeUINavigationNode.class,
    
    46 45
                                    fr.ird.observe.client.datasource.editor.ps.referential.observation.ReferentialHomeUINavigationNode.class),
    
    47
    -              TripReference.class);
    
    46
    +              ProgramReference.class);
    
    48 47
         }
    
    49 48
     
    
    50 49
         @Override
    

  • client/i18n/src/main/i18n/translations/observe_en_GB.properties
    ... ... @@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Click here to validate server connexion
    1295 1295
     observe.ui.action.translate=Translate
    
    1296 1296
     observe.ui.action.translate.tip=Translate application
    
    1297 1297
     observe.ui.action.validate.config.generateReport=Generate validation report
    
    1298
    +observe.ui.choice.apply=Apply
    
    1298 1299
     observe.ui.choice.cancel=Cancel
    
    1300
    +observe.ui.choice.cancel.tip=To cancel, press ESCAPE key. 
    
    1299 1301
     observe.ui.choice.confirm.delete=Confirm delete
    
    1300 1302
     observe.ui.choice.confirm.insert=Confirm to insert
    
    1301 1303
     observe.ui.choice.confirm.replace=Replace
    
    ... ... @@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Data consolidate f
    1326 1328
     observe.ui.datasource.editor.actions.consolidate.start.trip=Start consolidate data on trip %s / %s (%s)
    
    1327 1329
     observe.ui.datasource.editor.actions.consolidate.title=Consolidate data
    
    1328 1330
     observe.ui.datasource.editor.actions.consolidate.title.tip=Consolidate observed data
    
    1331
    +observe.ui.datasource.editor.actions.data.copy=Database «%s» - Register operation copy to database\: %s - %s
    
    1332
    +observe.ui.datasource.editor.actions.data.delete=Database «%s» - Register operation delete from database\: %s - %s
    
    1333
    +observe.ui.datasource.editor.actions.data.delete.result=Database «%s» - Trip %s - %s was removed from database.
    
    1334
    +observe.ui.datasource.editor.actions.data.export.result=Database «%s» - Trip %s - %s was exported from database.
    
    1335
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential=Database «%s» - Insert all missing referentials\n%s
    
    1336
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Database «%s» - Insert %s missing referentials of type «%s»\:%s
    
    1337
    +observe.ui.datasource.editor.actions.data.import.result=Database «%s» - Trip %s - %s was imported into database.
    
    1338
    +observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Need to confirm missing referential insertion 
    
    1329 1339
     observe.ui.datasource.editor.actions.exportData=Export data
    
    1330 1340
     observe.ui.datasource.editor.actions.exportData.description=Export data
    
    1331
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
    
    1332
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Database «%s» - Insert %s missing referentials of type «%s»
    
    1333 1341
     observe.ui.datasource.editor.actions.exportData.message.not.possible=Export is not possible (see above messages)
    
    1334 1342
     observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Select data to export.
    
    1335 1343
     observe.ui.datasource.editor.actions.exportData.message.prepare.data=Prepare data to export...
    
    ... ... @@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Delete sel
    1392 1400
     observe.ui.datasource.editor.actions.synchro.data.description=Advanced data management
    
    1393 1401
     observe.ui.datasource.editor.actions.synchro.data.launch.operation=Get data fro databases
    
    1394 1402
     observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Database «%s» - Data loaded
    
    1395
    -observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Database «%s» - Register operation copy to database\: %s - %s
    
    1396
    -observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Database «%s» - Register operation delete from database\: %s - %s
    
    1397
    -observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Database «%s» - Trip %s - %s was removed from database.
    
    1398
    -observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Database «%s» - Trip %s - %s was exported from database.
    
    1399
    -observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Database «%s» - Trip %s - %s was imported into database.
    
    1400 1403
     observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copy to left database\: <i>%s</i> - «<b>%s</b>»
    
    1401 1404
     observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copy to right database\: <i>%s</i> - «<b>%s</b>»
    
    1402 1405
     observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Delete from left database\: <i>%s</i> - «<b>%s</b>»
    
    ... ... @@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=You have modified i18n, application must be resta
    1672 1675
     observe.ui.message.save.configuration=Save configuration in file %1$s
    
    1673 1676
     observe.ui.message.select.report=Select a report 
    
    1674 1677
     observe.ui.message.server.info=Local database %1$s is ready in server mode.
    
    1675
    -observe.ui.message.show.missing.referential=List of missing referential
    
    1676 1678
     observe.ui.message.show.usage.for.delete=Referential %1$s "%2$s" can be deleted if you choose a replacement.
    
    1677 1679
     observe.ui.message.show.usage.for.delete2=Some data are using this referential, see following references.
    
    1678 1680
     observe.ui.message.show.usage.for.delete3=Choose a replacement reference to be able to delete.
    
    1679 1681
     observe.ui.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disabled.
    
    1680 1682
     observe.ui.message.show.usage.for.desactivated2=Some data are using this referential, see following reference
    
    1681 1683
     observe.ui.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved.
    
    1682
    -observe.ui.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
    
    1683 1684
     observe.ui.message.show.usages=List of usage of referential %1$s\: '%2$s'
    
    1684 1685
     observe.ui.message.table.editBean.modified=Current entry is modifed and valid.
    
    1685 1686
     observe.ui.message.table.editBean.modified.but.invalid=Current entry is modified but not valid.
    
    1686 1687
     observe.ui.message.warning.will.be.delete=%1$s\n\nBe ware, export will replace existing data.
    
    1688
    +observe.ui.move.selectTarget=Select new parent node after move?
    
    1687 1689
     observe.ui.textArea.tip=<html><body><ul><li>To focus on next widget, use accelerator <b>Ctrl + Tab</b></li><li>To focus on previous widget, use accelerator <b>Ctrl + Shift + Tab</b></body></html>
    
    1688 1690
     observe.ui.title.about=About
    
    1689 1691
     observe.ui.title.can.not.delete.referentiel=Impossible to delete a referentiel data...
    
    1690
    -observe.ui.title.can.not.export.data2=Could not export data to «%s» source
    
    1691 1692
     observe.ui.title.can.not.export.obstuna=Could not export obstuna data...
    
    1692 1693
     observe.ui.title.choose.db.dump=Choose a database backup
    
    1693 1694
     observe.ui.title.choose.db.dump.directory=Chhose directory of backup
    

  • client/i18n/src/main/i18n/translations/observe_es_ES.properties
    ... ... @@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Pulsar para comprobar la conexión con el serv
    1295 1295
     observe.ui.action.translate=Traduire \#TODO
    
    1296 1296
     observe.ui.action.translate.tip=Traduire l'application \#TODO
    
    1297 1297
     observe.ui.action.validate.config.generateReport=Generar un informe de validación
    
    1298
    +observe.ui.choice.apply=Utilizar
    
    1298 1299
     observe.ui.choice.cancel=Cancelar
    
    1300
    +observe.ui.choice.cancel.tip=To cancel, press ESCAPE key. \#TODO
    
    1299 1301
     observe.ui.choice.confirm.delete=Eliminar
    
    1300 1302
     observe.ui.choice.confirm.insert=Confirmer l'insertion \#TODO
    
    1301 1303
     observe.ui.choice.confirm.replace=Reemplazar
    
    ... ... @@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Datos calculados p
    1326 1328
     observe.ui.datasource.editor.actions.consolidate.start.trip=Démarrage de la consolidation pour la marée %s / %s (%s) \#TODO
    
    1327 1329
     observe.ui.datasource.editor.actions.consolidate.title=Consolidar los datos observados
    
    1328 1330
     observe.ui.datasource.editor.actions.consolidate.title.tip=Consolidar los datos observados
    
    1331
    +observe.ui.datasource.editor.actions.data.copy=Base «%s» - Preparación de la copia \: %s - %s
    
    1332
    +observe.ui.datasource.editor.actions.data.delete=Base «%s» - Preparación de la eliminación de la base \: %s - %s
    
    1333
    +observe.ui.datasource.editor.actions.data.delete.result=Base «%s» - Eliminación de la marea %s - %s en la base.
    
    1334
    +observe.ui.datasource.editor.actions.data.export.result=Base «%s» - Exportación de la marea %s - %s desde la base.
    
    1335
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential=Database «%s» - Insert all missing referentials\n%s
    
    1336
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Base «%s» - Insertion de %s référentiels de type «%s»\:%s\#TODO
    
    1337
    +observe.ui.datasource.editor.actions.data.import.result=Base «%s» - Inserción de la marea %s - %s en la base.
    
    1338
    +observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Need to confirm missing referential insertion \#TODO
    
    1329 1339
     observe.ui.datasource.editor.actions.exportData=Exportar los datos observados
    
    1330 1340
     observe.ui.datasource.editor.actions.exportData.description=Exportar los datos observados en la base central
    
    1331
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
    
    1332
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Base «%s» - Insertion de %s référentiels de type «%s»\#TODO
    
    1333 1341
     observe.ui.datasource.editor.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior).
    
    1334 1342
     observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Seleccione las mareas a exportar.
    
    1335 1343
     observe.ui.datasource.editor.actions.exportData.message.prepare.data=Preparación de los datos a exportar...
    
    ... ... @@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Eliminar l
    1392 1400
     observe.ui.datasource.editor.actions.synchro.data.description=Gestión avanzada de los datos de los usuarios
    
    1393 1401
     observe.ui.datasource.editor.actions.synchro.data.launch.operation=Recuperar los datos de las fuentes de datos
    
    1394 1402
     observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Base «%s» - Datos recuperadas.
    
    1395
    -observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Base «%s» - Preparación de la copia \: %s - %s
    
    1396
    -observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Base «%s» - Preparación de la eliminación de la base \: %s - %s
    
    1397
    -observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Base «%s» - Eliminación de la marea %s - %s en la base.
    
    1398
    -observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Base «%s» - Exportación de la marea %s - %s desde la base.
    
    1399
    -observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Base «%s» - Inserción de la marea %s - %s en la base.
    
    1400 1403
     observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copiar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
    
    1401 1404
     observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copiar en la base de la derecha \: <i>%s</i> - «<b>%s</b>»
    
    1402 1405
     observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Eliminar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
    
    ... ... @@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=Vous avez modifié des traductions, le redémarra
    1672 1675
     observe.ui.message.save.configuration=Guardar la configuración en el archivo %1$s
    
    1673 1676
     observe.ui.message.select.report=Seleccione informe
    
    1674 1677
     observe.ui.message.server.info=Información modo servidor
    
    1675
    -observe.ui.message.show.missing.referential=List of missing referential \#TODO
    
    1676 1678
     observe.ui.message.show.usage.for.delete=El referencial %1$s "%2$s" no se puede eliminar sin hacer una sustitución antes.
    
    1677 1679
     observe.ui.message.show.usage.for.delete2=Los objetos están usando actualmente las referencias que se enumeran a continuación.
    
    1678 1680
     observe.ui.message.show.usage.for.delete3=Elija una referencia de reemplazo para poder borrar.
    
    1679 1681
     observe.ui.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desactivará.
    
    1680 1682
     observe.ui.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación..
    
    1681 1683
     observe.ui.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse.
    
    1682
    -observe.ui.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
    
    1683 1684
     observe.ui.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s'
    
    1684 1685
     observe.ui.message.table.editBean.modified=El registro actual se ha modificado y es válido.
    
    1685 1686
     observe.ui.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido.
    
    1686 1687
     observe.ui.message.warning.will.be.delete=%1$s\n\nAtención, la exportación reemplazará la marea existente.
    
    1688
    +observe.ui.move.selectTarget=Select new parent node after move? \#TODO
    
    1687 1689
     observe.ui.textArea.tip=<html><body><ul><li>To focus on next widget, use accelerator <b>Ctrl + Tab</b></li><li>To focus on previous widget, use accelerator <b>Ctrl + Shift + Tab</b></body></html> \#TODO
    
    1688 1690
     observe.ui.title.about=A proposito de ObServe...
    
    1689 1691
     observe.ui.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización...
    
    1690
    -observe.ui.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»... \#TODO
    
    1691 1692
     observe.ui.title.can.not.export.obstuna=Impossible exportar los datos de obstuna...
    
    1692 1693
     observe.ui.title.choose.db.dump=Seleccionar una copia de seguridad de base local
    
    1693 1694
     observe.ui.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
    

  • client/i18n/src/main/i18n/translations/observe_fr_FR.properties
    ... ... @@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Cliquer pour valider la connexion au serveur
    1295 1295
     observe.ui.action.translate=Traduire
    
    1296 1296
     observe.ui.action.translate.tip=Traduire l'application
    
    1297 1297
     observe.ui.action.validate.config.generateReport=Générer un rapport de validation
    
    1298
    +observe.ui.choice.apply=Appliquer
    
    1298 1299
     observe.ui.choice.cancel=Annuler
    
    1300
    +observe.ui.choice.cancel.tip=Pour annuler, presser la touche ÉCHAP.
    
    1299 1301
     observe.ui.choice.confirm.delete=Supprimer
    
    1300 1302
     observe.ui.choice.confirm.insert=Confirmer l'insertion
    
    1301 1303
     observe.ui.choice.confirm.replace=Remplacer
    
    ... ... @@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Données calculée
    1326 1328
     observe.ui.datasource.editor.actions.consolidate.start.trip=Démarrage de la consolidation pour la marée %s / %s (%s)
    
    1327 1329
     observe.ui.datasource.editor.actions.consolidate.title=Consolider les données observateur
    
    1328 1330
     observe.ui.datasource.editor.actions.consolidate.title.tip=Consolider les données observateur
    
    1331
    +observe.ui.datasource.editor.actions.data.copy=Source «%s» - Préparation de la recopie \: %s - %s
    
    1332
    +observe.ui.datasource.editor.actions.data.delete=Source «%s» - Préparation de la suppression \: %s - %s
    
    1333
    +observe.ui.datasource.editor.actions.data.delete.result=Source «%s» - Suppression de la marée %s - %s effectuée.
    
    1334
    +observe.ui.datasource.editor.actions.data.export.result=Source «%s» - Export de la marée %s - %s effectuée.
    
    1335
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential=Source «%s» - Insertion de %d référentiels manquants\n%s
    
    1336
    +observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Source «%s» - Insertion de %s référentiels de type «%s» \:%s
    
    1337
    +observe.ui.datasource.editor.actions.data.import.result=Source «%s» - Insertion de la marée %s - %s effectuée.
    
    1338
    +observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Confirmation requise pour insérer les référentiels manquants
    
    1329 1339
     observe.ui.datasource.editor.actions.exportData=Exporter les données observateurs
    
    1330 1340
     observe.ui.datasource.editor.actions.exportData.description=Exporter les données observateurs vers la base centrale
    
    1331
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
    
    1332
    -observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Source «%s» - Insertion de %s référentiels de type «%s»
    
    1333 1341
     observe.ui.datasource.editor.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents).
    
    1334 1342
     observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Veuillez sélectionner les marées à exporter.
    
    1335 1343
     observe.ui.datasource.editor.actions.exportData.message.prepare.data=Préparation des données à exporter...
    
    ... ... @@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Supprimer
    1392 1400
     observe.ui.datasource.editor.actions.synchro.data.description=Gestion avancée des données utilisateurs
    
    1393 1401
     observe.ui.datasource.editor.actions.synchro.data.launch.operation=Récupérer les données des sources de données
    
    1394 1402
     observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Source «%s» - Données récupérées.
    
    1395
    -observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Source «%s» - Préparation de la recopie \: %s - %s
    
    1396
    -observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Source «%s» - Préparation de la suppression \: %s - %s
    
    1397
    -observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Source «%s» - Suppression de la marée %s - %s effectuée.
    
    1398
    -observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Source «%s» - Export de la marée %s - %s effectuée.
    
    1399
    -observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Source «%s» - Insertion de la marée %s - %s effectuée.
    
    1400 1403
     observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copier vers la base de gauche \: <i>%s</i> - «<b>%s</b>»
    
    1401 1404
     observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copier vers la base de droite \: <i>%s</i> - «<b>%s</b>»
    
    1402 1405
     observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Supprimer de la base de gauche \: <i>%s</i> - «<b>%s</b>»
    
    ... ... @@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=Vous avez modifié des traductions, le redémarra
    1672 1675
     observe.ui.message.save.configuration=Sauvegarde de la configuration dans le fichier %1$s
    
    1673 1676
     observe.ui.message.select.report=Choisissez une requête 
    
    1674 1677
     observe.ui.message.server.info=La base locale %1$s est démarrée en mode serveur.
    
    1675
    -observe.ui.message.show.missing.referential=Liste des référentiels manquants
    
    1676 1678
     observe.ui.message.show.usage.for.delete=Le référentiel %1$s "%2$s" ne peut pas être supprimé sans effectuer au préalable un remplacement.
    
    1677 1679
     observe.ui.message.show.usage.for.delete2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
    
    1678 1680
     observe.ui.message.show.usage.for.delete3=Pour pouvoir supprimer l'objet, vous devez choisir une autre référence de remplacement.
    
    1679 1681
     observe.ui.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va être désactivé.
    
    1680 1682
     observe.ui.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
    
    1681 1683
     observe.ui.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour.
    
    1682
    -observe.ui.message.show.usage.for.missingReferentials2=Il existe des référentiels présents dans la base «%s» mais non présents dans la base «%s».
    
    1683 1684
     observe.ui.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s'
    
    1684 1685
     observe.ui.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide.
    
    1685 1686
     observe.ui.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide.
    
    1686 1687
     observe.ui.message.warning.will.be.delete=%1$s\n\nAttention, l'export remplacera la marée existante.
    
    1688
    +observe.ui.move.selectTarget=Se positionner sur le nœud destination après le déplacement ?
    
    1687 1689
     observe.ui.textArea.tip=<html><body><ul><li>Pour accéder au composant suivant, utilisez les raccourci clavier <b>Ctrl + Tab</b></li><li>Pour accéder au composant précédent, utilisez les raccourci clavier <b>Ctrl + Shift + Tab</b></body></html>
    
    1688 1690
     observe.ui.title.about=A propos d'ObServe...
    
    1689 1691
     observe.ui.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation...
    
    1690
    -observe.ui.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»...
    
    1691 1692
     observe.ui.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna...
    
    1692 1693
     observe.ui.title.choose.db.dump=Choisir une sauvegarder de base locale
    
    1693 1694
     observe.ui.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
    

  • models/dto/java/src/main/java/fr/ird/observe/dto/referential/common/ProgramReference.java
    ... ... @@ -37,7 +37,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
    37 37
     @GenerateJavaBeanDefinition
    
    38 38
     public class ProgramReference extends GeneratedProgramReference {
    
    39 39
     
    
    40
    -    public static Comparator<ProgramReference> COMPARATOR_WITH_GEAR_PREFIX = Comparator.comparing(p -> p.getGearTypePrefix() + " " + p.getLabel());
    
    40
    +    public static Comparator<ProgramReference> COMPARATOR_WITH_GEAR_PREFIX = Comparator.<ProgramReference>comparingInt(p->isProgramLongline(p) ? 0 : -1).thenComparing(p -> p.getGearTypePrefix() + " " + p.getLabel());
    
    41 41
     
    
    42 42
         public static boolean isProgramLongline(ProgramReference programDtoRef) {
    
    43 43
             boolean result = false;
    

  • pom.xml
    ... ... @@ -147,7 +147,7 @@
    147 147
         <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
    
    148 148
         <buildDate>${maven.build.timestamp}</buildDate>
    
    149 149
     
    
    150
    -    <toolkit.version>5.0.2-SNAPSHOT</toolkit.version>
    
    150
    +    <toolkit.version>5.0.2</toolkit.version>
    
    151 151
     
    
    152 152
         <lib.version.ognl>3.1.28</lib.version.ognl>
    
    153 153
         <!--can't use 1.4.197 (date has changed + blob also)-->
    

  • services/api/src/main/java/fr/ird/observe/services/service/data/NavigationResult.java
    ... ... @@ -77,4 +77,8 @@ public class NavigationResult implements ObserveDto {
    77 77
         public Date getTimestamp() {
    
    78 78
             return timestamp;
    
    79 79
         }
    
    80
    +
    
    81
    +    public ProgramReference getProgram(String programId) {
    
    82
    +        return programs.stream().filter(p->programId.equals(p.getId())).findFirst().orElseThrow();
    
    83
    +    }
    
    80 84
     }