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

Commits:

25 changed files:

Changes:

  • client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
    ... ... @@ -141,16 +141,18 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
    141 141
             }
    
    142 142
         }
    
    143 143
     
    
    144
    -    public static void doOpenSource(ObserveSwingDataSource source) {
    
    144
    +    public static ObserveSwingDataSource doOpenSource(ObserveSwingDataSource source) {
    
    145 145
             if (source != null && !source.isOpen()) {
    
    146 146
                 try {
    
    147 147
                     source.open();
    
    148
    +                return source;
    
    148 149
                 } catch (RuntimeException e) {
    
    149 150
                     throw e;
    
    150 151
                 } catch (Exception e) {
    
    151 152
                     throw new IllegalStateException(e);
    
    152 153
                 }
    
    153 154
             }
    
    155
    +        return source;
    
    154 156
         }
    
    155 157
     
    
    156 158
         public ObserveSwingDataSource(ClientConfig config, ObserveServiceMainFactory serviceFactory, DecoratorService decoratorService, ObserveDataSourceConfiguration configuration) {
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java
    ... ... @@ -108,12 +108,11 @@ public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> imp
    108 108
         }
    
    109 109
     
    
    110 110
     
    
    111
    -    public DifferentialModelBuilder newDifferentialModelBuilder(LeftOrRightContext<ObserveSwingDataSource> sources) {
    
    111
    +    protected DifferentialModelBuilder newDifferentialModelBuilder(LeftOrRightContext<ObserveSwingDataSource> sources) {
    
    112 112
             return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), ObserveDifferentialMetaModel::get, sources.apply(ObserveServicesProvider::getReferentialService));
    
    113 113
         }
    
    114 114
     
    
    115
    -    public SynchronizeEngine newReferentialSynchronizeEngine(LeftOrRightContext<ObserveSwingDataSource> sources) {
    
    115
    +    protected SynchronizeEngine newReferentialSynchronizeEngine(LeftOrRightContext<ObserveSwingDataSource> sources) {
    
    116 116
             return new SynchronizeEngine(getClientConfig().getTemporaryDirectory().toPath(), sources.apply(ObserveSwingDataSource::getSynchronizeService));
    
    117 117
         }
    
    118
    -
    
    119 118
     }

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/AdminTabUIActionSupport.java
    ... ... @@ -26,12 +26,6 @@ import fr.ird.observe.client.WithClientUIContextApi;
    26 26
     import fr.ird.observe.client.datasource.actions.AdminActionWorker;
    
    27 27
     import fr.ird.observe.client.datasource.actions.AdminTabUI;
    
    28 28
     import fr.ird.observe.client.datasource.actions.AdminUI;
    
    29
    -import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    30
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    31
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    32
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    33
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    34
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    35 29
     import fr.ird.observe.dto.ProgressionModel;
    
    36 30
     import io.ultreia.java4all.lang.Strings;
    
    37 31
     import io.ultreia.java4all.util.TimeLog;
    
    ... ... @@ -107,13 +101,6 @@ public abstract class AdminTabUIActionSupport<U extends AdminTabUI> extends JCom
    107 101
             return ui.getContextValue(AdminUI.class, "parent");
    
    108 102
         }
    
    109 103
     
    
    110
    -    protected ObserveSwingDataSource openSource(ObserveSwingDataSource service) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
    
    111
    -        if (!service.isOpen()) {
    
    112
    -            service.open();
    
    113
    -        }
    
    114
    -        return service;
    
    115
    -    }
    
    116
    -
    
    117 104
         public void addMessage(String text) {
    
    118 105
             JTextArea progression = ui.getProgression();
    
    119 106
             progression.append(text + "\n");
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/consolidate/actions/Start.java
    ... ... @@ -31,11 +31,6 @@ import fr.ird.observe.consolidation.AtomicConsolidateAction;
    31 31
     import fr.ird.observe.consolidation.data.ps.common.TripConsolidateRequest;
    
    32 32
     import fr.ird.observe.consolidation.data.ps.common.TripConsolidateResult;
    
    33 33
     import fr.ird.observe.consolidation.data.ps.dcp.SimplifiedObjectTypeSpecializedRules;
    
    34
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    35
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    36
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    37
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    38
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    39 34
     import fr.ird.observe.dto.BusinessDto;
    
    40 35
     import fr.ird.observe.dto.ObserveUtil;
    
    41 36
     import fr.ird.observe.dto.ProgressionModel;
    
    ... ... @@ -86,7 +81,7 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> {
    86 81
             addAdminWorker(ui.getStart().getToolTipText(), this::doAction);
    
    87 82
         }
    
    88 83
     
    
    89
    -    private WizardState doAction() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException {
    
    84
    +    private WizardState doAction() {
    
    90 85
     
    
    91 86
             log.debug(this);
    
    92 87
     
    
    ... ... @@ -102,7 +97,7 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> {
    102 97
             int stepCount = tripIds.size() + 3;
    
    103 98
             long t000 = TimeLog.getTime();
    
    104 99
             ProgressionModel progressModel = stepModel.initProgressModel(stepCount);
    
    105
    -        try (ObserveSwingDataSource dataSource = openSource(stepModel.getSource())) {
    
    100
    +        try (ObserveSwingDataSource dataSource = ObserveSwingDataSource.doOpenSource(stepModel.getSource())) {
    
    106 101
                 progressModel.increments();
    
    107 102
                 ConsolidateDataService consolidateDataService = dataSource.getPsConsolidateDataService();
    
    108 103
     
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Start.java
    ... ... @@ -59,7 +59,7 @@ public class Start extends ExportUIActionSupport {
    59 59
             addAdminWorker(ui.getStart().getToolTipText(), this::doStartAction);
    
    60 60
         }
    
    61 61
     
    
    62
    -    private WizardState doStartAction() throws Exception {
    
    62
    +    private WizardState doStartAction() {
    
    63 63
     
    
    64 64
             AdminUIModel model = ui.getModel();
    
    65 65
             ExportModel stepModel = model.getExportModel();
    
    ... ... @@ -71,9 +71,9 @@ public class Start extends ExportUIActionSupport {
    71 71
             long t00 = TimeLog.getTime();
    
    72 72
             int stepCount = 4 + tasks.stream().mapToInt(CopyDataTask::stepCount).sum();
    
    73 73
             ProgressionModel progressModel = stepModel.initProgressModel(stepCount);
    
    74
    -        try (ObserveSwingDataSource localDataSource = openSource(stepModel.getSource())) {
    
    74
    +        try (ObserveSwingDataSource localDataSource = ObserveSwingDataSource.doOpenSource(stepModel.getSource())) {
    
    75 75
                 progressModel.increments();
    
    76
    -            try (ObserveSwingDataSource centralDataSource = openSource(stepModel.getCentralSource())) {
    
    76
    +            try (ObserveSwingDataSource centralDataSource = ObserveSwingDataSource.doOpenSource(stepModel.getCentralSource())) {
    
    77 77
                     progressModel.increments();
    
    78 78
                     DataManager dataManager = new DataManager(progressModel, localDataSource, centralDataSource);
    
    79 79
                     dataManager.consume(tasks);
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Prepare.java
    ... ... @@ -27,11 +27,6 @@ import fr.ird.observe.client.datasource.actions.config.SelectDataModel;
    27 27
     import fr.ird.observe.client.datasource.actions.pairing.ActivityPairingModel;
    
    28 28
     import fr.ird.observe.client.datasource.actions.pairing.ActivityPairingUI;
    
    29 29
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    30
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    31
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    32
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    33
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    34
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    35 30
     import fr.ird.observe.dto.ProgressionModel;
    
    36 31
     import fr.ird.observe.dto.ToolkitIdLabel;
    
    37 32
     import io.ultreia.java4all.util.TimeLog;
    
    ... ... @@ -67,7 +62,7 @@ public class Prepare extends ActivityPairingUIActionSupport {
    67 62
             addAdminWorker(ui.getPrepare().getToolTipText(), this::doPrepareAction0);
    
    68 63
         }
    
    69 64
     
    
    70
    -    private WizardState doPrepareAction0() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException {
    
    65
    +    private WizardState doPrepareAction0() {
    
    71 66
             log.debug(this);
    
    72 67
             long t00 = TimeLog.getTime();
    
    73 68
             ActivityPairingModel stepModel = ui.getStepModel();
    
    ... ... @@ -79,7 +74,7 @@ public class Prepare extends ActivityPairingUIActionSupport {
    79 74
     
    
    80 75
             int stepCount = 3 + selectedDataByProgram.values().stream().mapToInt(Collection::size).sum();
    
    81 76
             ProgressionModel progressModel = stepModel.initProgressModel(stepCount);
    
    82
    -        try (ObserveSwingDataSource source = openSource(stepModel.getSource())) {
    
    77
    +        try (ObserveSwingDataSource source = ObserveSwingDataSource.doOpenSource(stepModel.getSource())) {
    
    83 78
                 progressModel.increments();
    
    84 79
                 String modelType = selectDataModel.getTreeConfig().getModuleName();
    
    85 80
                 switch (modelType) {
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Start.java
    ... ... @@ -26,11 +26,6 @@ import fr.ird.observe.client.datasource.actions.pairing.ActivityPairingModel;
    26 26
     import fr.ird.observe.client.datasource.actions.pairing.ActivityPairingUI;
    
    27 27
     import fr.ird.observe.client.datasource.actions.pairing.tree.PairingTreeTableModelSupport;
    
    28 28
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    29
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    30
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    31
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    32
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    33
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    34 29
     import fr.ird.observe.dto.ProgressionModel;
    
    35 30
     import fr.ird.observe.dto.data.pairing.ApplyPairingRequest;
    
    36 31
     import fr.ird.observe.services.service.data.ActivityPairingService;
    
    ... ... @@ -66,7 +61,7 @@ public class Start extends ActivityPairingUIActionSupport {
    66 61
             addAdminWorker(ui.getStart().getToolTipText(), this::doStartAction0);
    
    67 62
         }
    
    68 63
     
    
    69
    -    private WizardState doStartAction0() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException {
    
    64
    +    private WizardState doStartAction0() {
    
    70 65
             log.debug(this);
    
    71 66
             long t00 = TimeLog.getTime();
    
    72 67
             int stepCount = 3;
    
    ... ... @@ -76,7 +71,7 @@ public class Start extends ActivityPairingUIActionSupport {
    76 71
     
    
    77 72
             ProgressionModel progressModel = stepModel.initProgressModel(stepCount);
    
    78 73
     
    
    79
    -        try (ObserveSwingDataSource dataSource = openSource(stepModel.getSource())) {
    
    74
    +        try (ObserveSwingDataSource dataSource = ObserveSwingDataSource.doOpenSource(stepModel.getSource())) {
    
    80 75
                 progressModel.increments();
    
    81 76
                 ActivityPairingService<?, ?, ?> service = treeTableModel.getService(dataSource);
    
    82 77
                 service.applyPairing(request);
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java
    ... ... @@ -32,20 +32,13 @@ import fr.ird.observe.client.datasource.api.data.DataTaskSupport;
    32 32
     import fr.ird.observe.client.datasource.api.data.InsertMissingReferentialTask;
    
    33 33
     import fr.ird.observe.client.datasource.api.data.TaskSide;
    
    34 34
     import fr.ird.observe.client.datasource.api.data.UserCancelException;
    
    35
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    36
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    37
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    38
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    39
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    40 35
     import fr.ird.observe.dto.ProgressionModel;
    
    41 36
     import fr.ird.observe.dto.data.RootOpenableDto;
    
    42
    -import io.ultreia.java4all.lang.Strings;
    
    43 37
     import io.ultreia.java4all.util.TimeLog;
    
    44 38
     import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
    
    45 39
     
    
    46 40
     import javax.swing.DefaultListModel;
    
    47 41
     import java.awt.event.ActionEvent;
    
    48
    -import java.util.Date;
    
    49 42
     import java.util.Iterator;
    
    50 43
     import java.util.LinkedHashSet;
    
    51 44
     import java.util.LinkedList;
    
    ... ... @@ -71,7 +64,7 @@ public class Apply extends DataSynchroUIActionSupport {
    71 64
             addAdminWorker(getUi().getStart().getToolTipText(), this::doApply);
    
    72 65
         }
    
    73 66
     
    
    74
    -    private WizardState doApply() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException {
    
    67
    +    private WizardState doApply() {
    
    75 68
     
    
    76 69
             DataSynchroModel stepModel = ui.getStepModel();
    
    77 70
             DataSelectionTreePaneModel leftModel = stepModel.onSameSide(TaskSide.FROM_LEFT);
    
    ... ... @@ -108,15 +101,13 @@ public class Apply extends DataSynchroUIActionSupport {
    108 101
             ProgressionModel progressModel = stepModel.initProgressModel(stepCount);
    
    109 102
     
    
    110 103
             WizardState state;
    
    111
    -        try (ObserveSwingDataSource leftSource = openSource(leftModel.getSource())) {
    
    104
    +        try (ObserveSwingDataSource leftSource = ObserveSwingDataSource.doOpenSource(leftModel.getSource())) {
    
    112 105
                 progressModel.increments();
    
    113
    -            try (ObserveSwingDataSource rightSource = openSource(stepModel.onOppositeSide(TaskSide.FROM_LEFT).getSource())) {
    
    114
    -                long t00 = TimeLog.getTime();
    
    106
    +            try (ObserveSwingDataSource rightSource = ObserveSwingDataSource.doOpenSource(stepModel.onOppositeSide(TaskSide.FROM_LEFT).getSource())) {
    
    115 107
                     progressModel.increments();
    
    116 108
                     try {
    
    117 109
                         DataManager dataManager = new DataManager(progressModel, leftSource, rightSource);
    
    118 110
                         dataManager.consume(finalTasksToConsume);
    
    119
    -                    sendMessage(t("observe.ui.datasource.editor.actions.operation.message.done", new Date(), Strings.convertTime(TimeLog.getTime() - t00)));
    
    120 111
                         state = WizardState.SUCCESSED;
    
    121 112
                     } catch (Exception e) {
    
    122 113
                         if (e instanceof UserCancelException) {
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/SynchronizeModel.java
    ... ... @@ -68,7 +68,6 @@ public class SynchronizeModel extends AdminActionModel {
    68 68
          * Result of synchronization.
    
    69 69
          */
    
    70 70
         private UnidirectionalResult referentialSynchronizeResult;
    
    71
    -    private UnidirectionalSynchronizeEngine engine;
    
    72 71
         private UnidirectionalSynchronizeContext referentialSynchronizeContext;
    
    73 72
         private UnidirectionalCallbackResults referentialSynchronizeCallbackResults;
    
    74 73
     
    
    ... ... @@ -109,9 +108,9 @@ public class SynchronizeModel extends AdminActionModel {
    109 108
             obsoleteReferences.clear();
    
    110 109
             referentialSynchronizeCallbackResults = null;
    
    111 110
             referentialSynchronizeResult = null;
    
    111
    +        sources.accept(ObserveSwingDataSource::doCloseSource);
    
    112 112
             centralSource = null;
    
    113 113
             source = null;
    
    114
    -        engine = null;
    
    115 114
             referentialSynchronizeContext = null;
    
    116 115
         }
    
    117 116
     
    
    ... ... @@ -140,12 +139,12 @@ public class SynchronizeModel extends AdminActionModel {
    140 139
         }
    
    141 140
     
    
    142 141
         public UnidirectionalSynchronizeEngine newEngine() {
    
    143
    -        if (engine == null) {
    
    144
    -            DifferentialModelBuilder diffsEngine = newDifferentialModelBuilder(sources);
    
    145
    -            SynchronizeEngine synchronizeEngine = newReferentialSynchronizeEngine(sources);
    
    146
    -            engine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
    
    147
    -        }
    
    148
    -        return engine;
    
    142
    +        SynchronizeEngine synchronizeEngine = newReferentialSynchronizeEngine(sources);
    
    143
    +        return new UnidirectionalSynchronizeEngine(synchronizeEngine);
    
    144
    +    }
    
    145
    +
    
    146
    +    public DifferentialModelBuilder newDifferentialModelBuilder() {
    
    147
    +        return newDifferentialModelBuilder(sources);
    
    149 148
         }
    
    150 149
     
    
    151 150
         public UnidirectionalSynchronizeContext getReferentialSynchronizeContext() {
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Apply.java
    ... ... @@ -22,23 +22,26 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import fr.ird.observe.client.datasource.actions.AdminStep;
    
    25 26
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.ObsoleteReferentialReference;
    
    26 27
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeModel;
    
    27 28
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeUI;
    
    28 29
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    29
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    30
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    31
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    32
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    33
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    30
    +import fr.ird.observe.dto.I18nDecoratorHelper;
    
    34 31
     import fr.ird.observe.dto.ToolkitIdLabel;
    
    35 32
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    33
    +import fr.ird.observe.services.service.referential.UnidirectionalSynchronizeContext;
    
    36 34
     import fr.ird.observe.services.service.referential.UnidirectionalSynchronizeEngine;
    
    37 35
     import fr.ird.observe.services.service.referential.synchro.UnidirectionalCallbackResults;
    
    36
    +import fr.ird.observe.services.service.referential.synchro.UnidirectionalResult;
    
    38 37
     import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBox;
    
    38
    +import io.ultreia.java4all.util.LeftOrRightContext;
    
    39
    +import io.ultreia.java4all.util.TimeLog;
    
    39 40
     import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
    
    40 41
     
    
    41 42
     import java.awt.event.ActionEvent;
    
    43
    +import java.util.Collection;
    
    44
    +import java.util.List;
    
    42 45
     
    
    43 46
     import static io.ultreia.java4all.i18n.I18n.t;
    
    44 47
     
    
    ... ... @@ -53,9 +56,9 @@ public class Apply extends SynchroUIActionSupport {
    53 56
             resolveObsoleteReference();
    
    54 57
         }
    
    55 58
     
    
    56
    -    public <D extends ReferentialDto> void resolveObsoleteReference() {
    
    59
    +    private  <D extends ReferentialDto> void resolveObsoleteReference() {
    
    57 60
     
    
    58
    -        @SuppressWarnings({"unchecked", "rawtypes"}) ObsoleteReferentialReference<D> obsoleteRef = (ObsoleteReferentialReference) ui.getObsoleteReferencesList().getSelectedValue();
    
    61
    +        @SuppressWarnings("unchecked") ObsoleteReferentialReference<D> obsoleteRef = (ObsoleteReferentialReference<D>) ui.getObsoleteReferencesList().getSelectedValue();
    
    59 62
     
    
    60 63
             FilterableComboBox<ToolkitIdLabel> safeComboBox = ui.getHandler().getSafeComboBox();
    
    61 64
             ToolkitIdLabel safeRef = safeComboBox.getModel().getSelectedItem();
    
    ... ... @@ -73,18 +76,75 @@ public class Apply extends SynchroUIActionSupport {
    73 76
     
    
    74 77
             // S'il ne reste plus de référentiel à corriger, on peut terminer le traitement
    
    75 78
             if (stepModel.getObsoleteReferences().isEmpty()) {
    
    76
    -            try (ObserveSwingDataSource source = openSource(stepModel.getSource())) {
    
    77 79
     
    
    78
    -                try (ObserveSwingDataSource centralSource = openSource(stepModel.getCentralSource())) {
    
    80
    +            try (ObserveSwingDataSource source = ObserveSwingDataSource.doOpenSource(stepModel.getSource())) {
    
    81
    +
    
    82
    +                try (ObserveSwingDataSource centralSource = ObserveSwingDataSource.doOpenSource(stepModel.getCentralSource())) {
    
    79 83
                         UnidirectionalSynchronizeEngine engine = stepModel.newEngine();
    
    80 84
                         beforeSuccess(engine);
    
    81 85
                         ui.getModel().setStepState(WizardState.SUCCESSED);
    
    82 86
                     }
    
    83
    -            } catch (BabModelVersionException | DatabaseConnexionNotAuthorizedException |
    
    84
    -                     IncompatibleDataSourceCreateConfigurationException | DatabaseNotFoundException |
    
    85
    -                     DataSourceCreateWithNoReferentialImportException e) {
    
    86
    -                throw new RuntimeException(e);
    
    87 87
                 }
    
    88 88
             }
    
    89 89
         }
    
    90
    +
    
    91
    +
    
    92
    +    private  void beforeSuccess(UnidirectionalSynchronizeEngine engine) {
    
    93
    +        SynchronizeModel stepModel = ui.getStepModel();
    
    94
    +
    
    95
    +        UnidirectionalSynchronizeContext referentialSynchronizeContext = stepModel.getReferentialSynchronizeContext();
    
    96
    +        UnidirectionalCallbackResults referentialSynchronizeCallbackResults = stepModel.getReferentialSynchronizeCallbackResults();
    
    97
    +
    
    98
    +        UnidirectionalResult referentialSynchronizeResult = engine.prepareResult(referentialSynchronizeContext, referentialSynchronizeCallbackResults);
    
    99
    +        stepModel.setReferentialSynchronizeResult(referentialSynchronizeResult);
    
    100
    +        long t00 = TimeLog.getTime();
    
    101
    +        if (referentialSynchronizeResult.isEmpty()) {
    
    102
    +            //Update lastUpdateDate anyway (See https://gitlab.com/ultreiaio/ird-observe/-/issues/2231)
    
    103
    +            sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.ref.is.updtodate"));
    
    104
    +            ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
    
    105
    +        } else {
    
    106
    +            for (Class<? extends ReferentialDto> referentialName : referentialSynchronizeResult.getReferentialNames()) {
    
    107
    +                String referentialStr = t(I18nDecoratorHelper.getType(referentialName));
    
    108
    +                Collection<String> referentialAdded = referentialSynchronizeResult.getReferentialAdded(referentialName);
    
    109
    +                if (referentialAdded != null && !referentialAdded.isEmpty()) {
    
    110
    +                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.added", referentialStr, referentialAdded.size()));
    
    111
    +                    for (String id : referentialAdded) {
    
    112
    +                        sendMessage("  - " + id);
    
    113
    +                    }
    
    114
    +                }
    
    115
    +                Collection<String> referentialUpdated = referentialSynchronizeResult.getReferentialUpdated(referentialName);
    
    116
    +                if (referentialUpdated != null && !referentialUpdated.isEmpty()) {
    
    117
    +                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.modified", referentialStr, referentialUpdated.size()));
    
    118
    +                    for (String id : referentialUpdated) {
    
    119
    +                        sendMessage("  - " + id);
    
    120
    +                    }
    
    121
    +                }
    
    122
    +                Collection<String> referentialReverted = referentialSynchronizeResult.getReferentialReverted(referentialName);
    
    123
    +                if (referentialReverted != null && !referentialReverted.isEmpty()) {
    
    124
    +                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.reverted", referentialStr, referentialReverted.size()));
    
    125
    +                    for (String id : referentialReverted) {
    
    126
    +                        sendMessage("  - " + id);
    
    127
    +                    }
    
    128
    +                }
    
    129
    +                Collection<String> referentialRemoved = referentialSynchronizeResult.getReferentialRemoved(referentialName);
    
    130
    +                if (referentialRemoved != null && !referentialRemoved.isEmpty()) {
    
    131
    +                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.removed", referentialStr, referentialRemoved.size()));
    
    132
    +                    for (String id : referentialRemoved) {
    
    133
    +                        sendMessage("  - " + id);
    
    134
    +                    }
    
    135
    +                }
    
    136
    +                List<LeftOrRightContext<String>> referentialReplaced = referentialSynchronizeResult.getReferentialReplaced(referentialName);
    
    137
    +                if (referentialReplaced != null && !referentialReplaced.isEmpty()) {
    
    138
    +                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.replaced", referentialStr, referentialReplaced.size()));
    
    139
    +                    for (LeftOrRightContext<String> ids : referentialReplaced) {
    
    140
    +                        sendMessage("  - " + ids.left() + " → " + ids.right());
    
    141
    +                    }
    
    142
    +                }
    
    143
    +            }
    
    144
    +            sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.script.path", referentialSynchronizeContext.getSqlScriptPath()));
    
    145
    +
    
    146
    +            ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
    
    147
    +        }
    
    148
    +        onEndAction(t00, -1, null);
    
    149
    +    }
    
    90 150
     }

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Start.java
    ... ... @@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import fr.ird.observe.client.datasource.actions.AdminStep;
    
    25 26
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.ObsoleteReferentialReference;
    
    26 27
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeModel;
    
    27 28
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeUI;
    
    ... ... @@ -67,7 +68,7 @@ public class Start extends SynchroUIActionSupport {
    67 68
             addAdminWorker(getUi().getStart().getToolTipText(), this::doStartAction0);
    
    68 69
         }
    
    69 70
     
    
    70
    -    private WizardState doStartAction0() throws Exception {
    
    71
    +    private WizardState doStartAction0() {
    
    71 72
     
    
    72 73
             log.debug(this);
    
    73 74
     
    
    ... ... @@ -88,7 +89,7 @@ public class Start extends SynchroUIActionSupport {
    88 89
     
    
    89 90
                     UnidirectionalSynchronizeEngine engine = stepModel.newEngine();
    
    90 91
     
    
    91
    -                UnidirectionalSynchronizeContext context = engine.prepareContext(progressionModel);
    
    92
    +                UnidirectionalSynchronizeContext context = engine.prepareContext(stepModel.newDifferentialModelBuilder(), progressionModel);
    
    92 93
                     stepModel.setReferentialSynchronizeContext(context);
    
    93 94
                     boolean needCallback = context.isNeedCallback();
    
    94 95
                     if (needCallback) {
    
    ... ... @@ -112,11 +113,14 @@ public class Start extends SynchroUIActionSupport {
    112 113
                         // need user fix on obsolete references
    
    113 114
                         return WizardState.NEED_FIX;
    
    114 115
                     }
    
    115
    -                // pas de reference obsolete à traiter
    
    116
    -                // on termine le traitement
    
    117
    -                beforeSuccess(engine);
    
    118 116
                 }
    
    119 117
             }
    
    118
    +        // pas de reference obsolete à traiter
    
    119
    +        // on termine le traitement
    
    120
    +        //Update lastUpdateDate anyway (See https://gitlab.com/ultreiaio/ird-observe/-/issues/2231)
    
    121
    +        sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.ref.is.updtodate"));
    
    122
    +
    
    123
    +        ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
    
    120 124
             return WizardState.SUCCESSED;
    
    121 125
         }
    
    122 126
     
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/SynchroUIActionSupport.java
    ... ... @@ -22,23 +22,8 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import fr.ird.observe.client.datasource.actions.AdminStep;
    
    26 25
     import fr.ird.observe.client.datasource.actions.actions.AdminTabUIActionSupport;
    
    27
    -import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeModel;
    
    28 26
     import fr.ird.observe.client.datasource.actions.synchronize.referential.legacy.SynchronizeUI;
    
    29
    -import fr.ird.observe.dto.I18nDecoratorHelper;
    
    30
    -import fr.ird.observe.dto.referential.ReferentialDto;
    
    31
    -import fr.ird.observe.services.service.referential.UnidirectionalSynchronizeContext;
    
    32
    -import fr.ird.observe.services.service.referential.UnidirectionalSynchronizeEngine;
    
    33
    -import fr.ird.observe.services.service.referential.synchro.UnidirectionalCallbackResults;
    
    34
    -import fr.ird.observe.services.service.referential.synchro.UnidirectionalResult;
    
    35
    -import io.ultreia.java4all.util.LeftOrRightContext;
    
    36
    -import io.ultreia.java4all.util.TimeLog;
    
    37
    -
    
    38
    -import java.util.Collection;
    
    39
    -import java.util.List;
    
    40
    -
    
    41
    -import static io.ultreia.java4all.i18n.I18n.t;
    
    42 27
     
    
    43 28
     public abstract class SynchroUIActionSupport extends AdminTabUIActionSupport<SynchronizeUI> {
    
    44 29
     
    
    ... ... @@ -46,62 +31,4 @@ public abstract class SynchroUIActionSupport extends AdminTabUIActionSupport<Syn
    46 31
             super(label, shortDescription, actionIcon, acceleratorKey);
    
    47 32
         }
    
    48 33
     
    
    49
    -    public void beforeSuccess(UnidirectionalSynchronizeEngine engine) {
    
    50
    -        SynchronizeModel stepModel = ui.getStepModel();
    
    51
    -
    
    52
    -        UnidirectionalSynchronizeContext referentialSynchronizeContext = stepModel.getReferentialSynchronizeContext();
    
    53
    -        UnidirectionalCallbackResults referentialSynchronizeCallbackResults = stepModel.getReferentialSynchronizeCallbackResults();
    
    54
    -
    
    55
    -        UnidirectionalResult referentialSynchronizeResult = engine.prepareResult(referentialSynchronizeContext, referentialSynchronizeCallbackResults);
    
    56
    -        stepModel.setReferentialSynchronizeResult(referentialSynchronizeResult);
    
    57
    -        long t00 = TimeLog.getTime();
    
    58
    -        if (referentialSynchronizeResult.isEmpty()) {
    
    59
    -            //Update lastUpdateDate anyway (See https://gitlab.com/ultreiaio/ird-observe/-/issues/2231)
    
    60
    -            sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.ref.is.updtodate"));
    
    61
    -            ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
    
    62
    -        } else {
    
    63
    -            for (Class<? extends ReferentialDto> referentialName : referentialSynchronizeResult.getReferentialNames()) {
    
    64
    -                String referentialStr = t(I18nDecoratorHelper.getType(referentialName));
    
    65
    -                Collection<String> referentialAdded = referentialSynchronizeResult.getReferentialAdded(referentialName);
    
    66
    -                if (referentialAdded != null && !referentialAdded.isEmpty()) {
    
    67
    -                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.added", referentialStr, referentialAdded.size()));
    
    68
    -                    for (String id : referentialAdded) {
    
    69
    -                        sendMessage("  - " + id);
    
    70
    -                    }
    
    71
    -                }
    
    72
    -                Collection<String> referentialUpdated = referentialSynchronizeResult.getReferentialUpdated(referentialName);
    
    73
    -                if (referentialUpdated != null && !referentialUpdated.isEmpty()) {
    
    74
    -                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.modified", referentialStr, referentialUpdated.size()));
    
    75
    -                    for (String id : referentialUpdated) {
    
    76
    -                        sendMessage("  - " + id);
    
    77
    -                    }
    
    78
    -                }
    
    79
    -                Collection<String> referentialReverted = referentialSynchronizeResult.getReferentialReverted(referentialName);
    
    80
    -                if (referentialReverted != null && !referentialReverted.isEmpty()) {
    
    81
    -                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.reverted", referentialStr, referentialReverted.size()));
    
    82
    -                    for (String id : referentialReverted) {
    
    83
    -                        sendMessage("  - " + id);
    
    84
    -                    }
    
    85
    -                }
    
    86
    -                Collection<String> referentialRemoved = referentialSynchronizeResult.getReferentialRemoved(referentialName);
    
    87
    -                if (referentialRemoved != null && !referentialRemoved.isEmpty()) {
    
    88
    -                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.removed", referentialStr, referentialRemoved.size()));
    
    89
    -                    for (String id : referentialRemoved) {
    
    90
    -                        sendMessage("  - " + id);
    
    91
    -                    }
    
    92
    -                }
    
    93
    -                List<LeftOrRightContext<String>> referentialReplaced = referentialSynchronizeResult.getReferentialReplaced(referentialName);
    
    94
    -                if (referentialReplaced != null && !referentialReplaced.isEmpty()) {
    
    95
    -                    sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.referentiel.was.replaced", referentialStr, referentialReplaced.size()));
    
    96
    -                    for (LeftOrRightContext<String> ids : referentialReplaced) {
    
    97
    -                        sendMessage("  - " + ids.left() + " → " + ids.right());
    
    98
    -                    }
    
    99
    -                }
    
    100
    -            }
    
    101
    -            sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.script.path", referentialSynchronizeContext.getSqlScriptPath()));
    
    102
    -
    
    103
    -            ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
    
    104
    -        }
    
    105
    -        onEndAction(t00, -1, null);
    
    106
    -    }
    
    107 34
     }

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroModel.java
    ... ... @@ -39,6 +39,7 @@ import fr.ird.observe.dto.ToolkitIdLabel;
    39 39
     import fr.ird.observe.dto.ToolkitIdTechnicalLabel;
    
    40 40
     import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    41 41
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    42
    +import fr.ird.observe.services.service.referential.SynchronizeEngine;
    
    42 43
     import fr.ird.observe.services.service.referential.differential.DifferentialModelBuilder;
    
    43 44
     import fr.ird.observe.services.service.referential.differential.DifferentialType;
    
    44 45
     import fr.ird.observe.services.service.referential.synchro.SynchronizeTaskType;
    
    ... ... @@ -94,7 +95,6 @@ public class ReferentialSynchroModel extends AdminActionModel {
    94 95
         private boolean showProperties;
    
    95 96
         private ReferentialSynchronizeTreeModel leftTreeModel;
    
    96 97
         private ReferentialSynchronizeTreeModel rightTreeModel;
    
    97
    -    private DifferentialModelBuilder engine;
    
    98 98
         private boolean copyLeft;
    
    99 99
         private boolean revertLeft;
    
    100 100
         private boolean skipLeft;
    
    ... ... @@ -205,13 +205,11 @@ public class ReferentialSynchroModel extends AdminActionModel {
    205 205
         public void destroy() {
    
    206 206
             super.destroy();
    
    207 207
             tasks.clear();
    
    208
    -        ObserveSwingDataSource.doCloseSource(leftSource);
    
    209
    -        ObserveSwingDataSource.doCloseSource(rightSource);
    
    208
    +        sources.accept(ObserveSwingDataSource::doCloseSource);
    
    210 209
             leftSource = null;
    
    211 210
             rightSource = null;
    
    212 211
             leftTreeModel = null;
    
    213 212
             rightTreeModel = null;
    
    214
    -        engine = null;
    
    215 213
         }
    
    216 214
     
    
    217 215
         public ReferentialSynchronizeMode getSynchronizeMode() {
    
    ... ... @@ -292,10 +290,6 @@ public class ReferentialSynchroModel extends AdminActionModel {
    292 290
             firePropertyChange(TASKS_EMPTY_PROPERTY_NAME, isTasksEmpty());
    
    293 291
         }
    
    294 292
     
    
    295
    -    public void setEngine(DifferentialModelBuilder engine) {
    
    296
    -        this.engine = engine;
    
    297
    -    }
    
    298
    -
    
    299 293
         public boolean isCopyRight() {
    
    300 294
             return copyRight;
    
    301 295
         }
    
    ... ... @@ -453,9 +447,16 @@ public class ReferentialSynchroModel extends AdminActionModel {
    453 447
             return getSource(side).getSynchronizeService().getEnabledReferentialLabelSet(dtoType);
    
    454 448
         }
    
    455 449
     
    
    450
    +    public DifferentialModelBuilder newDifferentialModelBuilder() {
    
    451
    +        return newDifferentialModelBuilder(sources);
    
    452
    +    }
    
    453
    +
    
    454
    +    public SynchronizeEngine newReferentialSynchronizeEngine() {
    
    455
    +        return newReferentialSynchronizeEngine(sources);
    
    456
    +    }
    
    457
    +
    
    456 458
         private ObserveSwingDataSource getSource(LeftOrRight side) {
    
    457
    -        ObserveSwingDataSource source = sources.onSameSide(side);
    
    458
    -        ObserveSwingDataSource.doOpenSource(source);
    
    459
    -        return source;
    
    459
    +        return ObserveSwingDataSource.doOpenSource(sources.onSameSide(side));
    
    460 460
         }
    
    461
    +
    
    461 462
     }

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
    ... ... @@ -29,11 +29,6 @@ import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.task.
    29 29
     import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.task.SwingWithIncludedPropertyNamesTask;
    
    30 30
     import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.ReferentialSynchronizeTreeModel;
    
    31 31
     import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
    
    32
    -import fr.ird.observe.datasource.security.BabModelVersionException;
    
    33
    -import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException;
    
    34
    -import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException;
    
    35
    -import fr.ird.observe.datasource.security.DatabaseNotFoundException;
    
    36
    -import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException;
    
    37 32
     import fr.ird.observe.dto.ToolkitIdTechnicalLabel;
    
    38 33
     import fr.ird.observe.services.service.referential.SynchronizeEngine;
    
    39 34
     import fr.ird.observe.services.service.referential.differential.Differential;
    
    ... ... @@ -71,7 +66,7 @@ public class Apply extends ReferentialSynchroUIActionSupport {
    71 66
             addAdminWorker("Application des modifications.", this::apply);
    
    72 67
         }
    
    73 68
     
    
    74
    -    private WizardState apply() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException {
    
    69
    +    private WizardState apply() {
    
    75 70
     
    
    76 71
             ReferentialSynchroModel stepModel = ui.getStepModel();
    
    77 72
     
    
    ... ... @@ -181,9 +176,9 @@ public class Apply extends ReferentialSynchroUIActionSupport {
    181 176
             }
    
    182 177
             LeftOrRightContext<OneSideSqlRequest> sqlRequest = builder.build();
    
    183 178
     
    
    184
    -        try (ObserveSwingDataSource leftSource = openSource(stepModel.getLeftSource())) {
    
    185
    -            try (ObserveSwingDataSource rightSource = openSource(stepModel.getRightSource())) {
    
    186
    -                SynchronizeEngine synchronizeEngine = stepModel.newReferentialSynchronizeEngine(stepModel.getSources());
    
    179
    +        try (ObserveSwingDataSource leftSource = ObserveSwingDataSource.doOpenSource(stepModel.getLeftSource())) {
    
    180
    +            try (ObserveSwingDataSource rightSource = ObserveSwingDataSource.doOpenSource(stepModel.getRightSource())) {
    
    181
    +                SynchronizeEngine synchronizeEngine = stepModel.newReferentialSynchronizeEngine();
    
    187 182
                     LeftOrRightContext<OneSideSqlResult> sqlResult = synchronizeEngine.produceSql(sqlRequest);
    
    188 183
                     synchronizeEngine.executeSql(sqlResult);
    
    189 184
                     if (leftModified && leftSource.isLocal()) {
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
    ... ... @@ -65,8 +65,7 @@ public class Start extends ReferentialSynchroUIActionSupport {
    65 65
     
    
    66 66
                 try (ObserveSwingDataSource rightSource = ui.getModel().getConfigModel().getRightSourceModel().getSafeSource(true)) {
    
    67 67
                     stepModel.setRightSource(rightSource);
    
    68
    -                DifferentialModelBuilder engine = stepModel.newDifferentialModelBuilder(stepModel.getSources());
    
    69
    -                stepModel.setEngine(engine);
    
    68
    +                DifferentialModelBuilder engine = stepModel.newDifferentialModelBuilder();
    
    70 69
                     ReferentialSynchronizeMode synchronizeMode = stepModel.getSynchronizeMode();
    
    71 70
                     ProgressionModel progressionModel = stepModel.getProgressModel();
    
    72 71
                     ReferentialSynchronizeTreeModelsBuilder treeModelsBuilder = new ReferentialSynchronizeTreeModelsBuilder(synchronizeMode, stepModel.isShowProperties(), engine, progressionModel);
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/task/SwingReferentialSynchronizeTask.java
    ... ... @@ -22,7 +22,6 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.task
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import fr.ird.observe.client.WithClientUIContextApi;
    
    26 25
     import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeResources;
    
    27 26
     import fr.ird.observe.dto.I18nDecoratorHelper;
    
    28 27
     import fr.ird.observe.dto.ToolkitIdTechnicalLabel;
    
    ... ... @@ -44,7 +43,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
    44 43
      * @author Tony Chemit - dev@tchemit.fr
    
    45 44
      * @since 5.0
    
    46 45
      */
    
    47
    -public class SwingReferentialSynchronizeTask implements WithClientUIContextApi {
    
    46
    +public class SwingReferentialSynchronizeTask  {
    
    48 47
     
    
    49 48
         private final String dataStr;
    
    50 49
         private final String typeStr;
    

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java
    ... ... @@ -108,13 +108,13 @@ public class Start extends ValidateUIActionSupport {
    108 108
             return WizardState.NEED_FIX;
    
    109 109
         }
    
    110 110
     
    
    111
    -    private WizardState initDB() throws Exception {
    
    111
    +    private WizardState initDB() {
    
    112 112
     
    
    113 113
             // on récupère la source de données
    
    114 114
             AdminUIModel model = ui.getModel();
    
    115 115
             ObserveSwingDataSource source = model.getConfigModel().getLeftSourceModel().getSafeSource(false);
    
    116 116
     
    
    117
    -        openSource(source);
    
    117
    +        ObserveSwingDataSource.doOpenSource(source);
    
    118 118
     
    
    119 119
             // recuperation des validateurs du modèle
    
    120 120
     
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
    ... ... @@ -131,8 +131,8 @@ public class UnidirectionalResultIssue2208Test extends ServiceLocalTestSupportWr
    131 131
             // do synchro
    
    132 132
     
    
    133 133
             ProgressionModel progressionModel = new ProgressionModel();
    
    134
    -        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
    
    135
    -        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
    
    134
    +        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(synchronizeEngine);
    
    135
    +        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(diffsEngine, progressionModel);
    
    136 136
             UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
    
    137 137
             unidirectionalSynchronizeContext.finish(service);
    
    138 138
     
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java
    ... ... @@ -102,8 +102,8 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
    102 102
     
    
    103 103
             ProgressionModel progressionModel = new ProgressionModel();
    
    104 104
             progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
    
    105
    -        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
    
    106
    -        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
    
    105
    +        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(synchronizeEngine);
    
    106
    +        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(diffsEngine, progressionModel);
    
    107 107
             UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
    
    108 108
             unidirectionalSynchronizeContext.finish(service);
    
    109 109
     
    
    ... ... @@ -138,8 +138,8 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
    138 138
             ProgressionModel progressionModel = new ProgressionModel();
    
    139 139
             progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
    
    140 140
     
    
    141
    -        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
    
    142
    -        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
    
    141
    +        UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(synchronizeEngine);
    
    142
    +        UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(diffsEngine, progressionModel);
    
    143 143
             UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
    
    144 144
             unidirectionalSynchronizeContext.finish(service);
    
    145 145
     
    

  • server/core/src/main/java/fr/ird/observe/server/request/ObserveWebRequestContext.java
    ... ... @@ -137,16 +137,16 @@ public class ObserveWebRequestContext {
    137 137
         }
    
    138 138
     
    
    139 139
         public void checkAuthentication(ObserveWebUserSession session, Class<? extends ObserveService> serviceType) {
    
    140
    -        boolean requiredAuthentication = SpiHelper.anonymous(serviceType);
    
    140
    +        boolean anonymous = SpiHelper.anonymous(serviceType);
    
    141 141
             boolean withConnection = session.withConnection();
    
    142
    -        if (requiredAuthentication) {
    
    143
    -            if (!withConnection) {
    
    144
    -                throw new IllegalStateException("Vous avez demandé un service connecté, mais aucune connection n'est enregistrée.");
    
    145
    -            }
    
    146
    -        } else {
    
    142
    +        if (anonymous) {
    
    147 143
                 if (withConnection) {
    
    148 144
                     throw new IllegalStateException("Vous avez demandé un service anonyme, mais une connection est enregistrée.");
    
    149 145
                 }
    
    146
    +        } else {
    
    147
    +            if (!withConnection) {
    
    148
    +                throw new IllegalStateException("Vous avez demandé un service connecté, mais aucune connection n'est enregistrée.");
    
    149
    +            }
    
    150 150
             }
    
    151 151
         }
    
    152 152
     }

  • toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/SynchronizeEngine.java
    ... ... @@ -22,8 +22,6 @@ package fr.ird.observe.services.service.referential;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import fr.ird.observe.dto.ToolkitIdLabel;
    
    26
    -import fr.ird.observe.dto.referential.ReferentialDto;
    
    27 25
     import fr.ird.observe.services.service.referential.synchro.OneSideSqlRequest;
    
    28 26
     import fr.ird.observe.services.service.referential.synchro.OneSideSqlResult;
    
    29 27
     import io.ultreia.java4all.util.LeftOrRight;
    
    ... ... @@ -35,7 +33,6 @@ import org.apache.logging.log4j.Logger;
    35 33
     import java.nio.file.Path;
    
    36 34
     import java.util.Objects;
    
    37 35
     import java.util.Optional;
    
    38
    -import java.util.Set;
    
    39 36
     
    
    40 37
     /**
    
    41 38
      * Created on 15/07/2021.
    
    ... ... @@ -65,42 +62,34 @@ public class SynchronizeEngine {
    65 62
         }
    
    66 63
     
    
    67 64
         public void executeSql(LeftOrRightContext<OneSideSqlResult> sqlResult) {
    
    68
    -
    
    69 65
             String filePrefix = String.format("SynchronizeEngine-%d-", System.nanoTime());
    
    70
    -        Path leftScriptPath = temporaryPath.resolve(filePrefix + "left.sql");
    
    71
    -        log.info(String.format("Generate left side script at: %s", leftScriptPath));
    
    72
    -        Optional<SqlScript> leftScript = toSqlScript(leftScriptPath, LeftOrRight.LEFT, sqlResult);
    
    73
    -        leftScript.ifPresent(s -> executeSql(s, LeftOrRight.LEFT));
    
    74
    -
    
    75
    -        Path rightScriptPath = temporaryPath.resolve(filePrefix + "right.sql");
    
    76
    -        log.info(String.format("Generate right side script at: %s", rightScriptPath));
    
    77
    -        Optional<SqlScript> rightScript = toSqlScript(leftScriptPath, LeftOrRight.RIGHT, sqlResult);
    
    78
    -        rightScript.ifPresent(s -> executeSql(s, LeftOrRight.RIGHT));
    
    66
    +        executeSqlSide(LeftOrRight.LEFT, filePrefix, sqlResult);
    
    67
    +        executeSqlSide(LeftOrRight.RIGHT, filePrefix, sqlResult);
    
    79 68
         }
    
    80 69
     
    
    81 70
         public Optional<SqlScript> toSqlScript(Path scriptPath, LeftOrRight side, LeftOrRightContext<OneSideSqlResult> result) {
    
    82 71
             return result.onSameSide(side).toSqlScript(Objects.requireNonNull(scriptPath), result.onOppositeSide(side));
    
    83 72
         }
    
    84 73
     
    
    85
    -    public void executeSql(SqlScript sqlResult, LeftOrRight side) {
    
    86
    -        log.info("Execute {} side script...", side);
    
    87
    -        services.onSameSide(side).applySql(sqlResult, SynchronizeService.ADVANCED_REFERENTIAL_SYNCHRONISATION);
    
    88
    -    }
    
    89
    -
    
    90 74
         public Path getTemporaryPath() {
    
    91 75
             return temporaryPath;
    
    92 76
         }
    
    93 77
     
    
    94
    -    public <D extends ReferentialDto> Set<ToolkitIdLabel> getLocalSourceReferentialToDelete(Class<D> dtoType, Set<String> blockingIdsToRemove) {
    
    95
    -        return services.left().getReferentialToDelete(dtoType, blockingIdsToRemove);
    
    78
    +
    
    79
    +    public LeftOrRightContext<SynchronizeService> getServices() {
    
    80
    +        return services;
    
    96 81
         }
    
    97 82
     
    
    98
    -    public <D extends ReferentialDto> Set<String> filterIdsUsedInLocalSource(Class<D> dtoType, Set<String> idsToRemove) {
    
    99
    -        return services.left().filterIdsUsed(dtoType, idsToRemove);
    
    83
    +    protected void executeSqlSide(LeftOrRight side, String filePrefix, LeftOrRightContext<OneSideSqlResult> sqlResult) {
    
    84
    +        Path scriptPath = getTemporaryPath().resolve(filePrefix + side+".sql");
    
    85
    +        log.info("Generate {} side script at: {}", side, scriptPath);
    
    86
    +        Optional<SqlScript> optionalScript = toSqlScript(scriptPath, side, sqlResult);
    
    87
    +        optionalScript.ifPresent(s -> executeSql(s, side));
    
    100 88
         }
    
    101 89
     
    
    102
    -    public <D extends ReferentialDto> Set<ToolkitIdLabel> getRightEnabledReferentialLabelSet(Class<D> referentialName) {
    
    103
    -        return services.right().getEnabledReferentialLabelSet(referentialName);
    
    90
    +    protected void executeSql(SqlScript sqlResult, LeftOrRight side) {
    
    91
    +        log.info("Execute {} side script...", side);
    
    92
    +        services.onSameSide(side).applySql(sqlResult, SynchronizeService.ADVANCED_REFERENTIAL_SYNCHRONISATION);
    
    104 93
         }
    
    105 94
     }
    
    106 95
     

  • toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/UnidirectionalSynchronizeEngine.java
    ... ... @@ -64,15 +64,13 @@ import java.util.stream.Collectors;
    64 64
     public class UnidirectionalSynchronizeEngine {
    
    65 65
     
    
    66 66
         private static final Logger log = LogManager.getLogger(UnidirectionalSynchronizeEngine.class);
    
    67
    -    private final DifferentialModelBuilder diffsEngine;
    
    68 67
         private final SynchronizeEngine synchronizeEngine;
    
    69 68
     
    
    70
    -    public UnidirectionalSynchronizeEngine(DifferentialModelBuilder diffsEngine, SynchronizeEngine synchronizeEngine) {
    
    71
    -        this.diffsEngine = Objects.requireNonNull(diffsEngine);
    
    69
    +    public UnidirectionalSynchronizeEngine(SynchronizeEngine synchronizeEngine) {
    
    72 70
             this.synchronizeEngine = Objects.requireNonNull(synchronizeEngine);
    
    73 71
         }
    
    74 72
     
    
    75
    -    public UnidirectionalSynchronizeContext prepareContext(ProgressionModel progressionModel) {
    
    73
    +    public UnidirectionalSynchronizeContext prepareContext(DifferentialModelBuilder diffsEngine, ProgressionModel progressionModel) {
    
    76 74
             if (progressionModel == null) {
    
    77 75
                 progressionModel = new ProgressionModel();
    
    78 76
                 progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.info(evt.getNewValue()));
    
    ... ... @@ -189,7 +187,7 @@ public class UnidirectionalSynchronizeEngine {
    189 187
                 Set<String> idsToRemove = leftAddDifferentials.stream().map(Differential::getId).collect(Collectors.toCollection(LinkedHashSet::new));
    
    190 188
                 Set<String> blockingIdsToRemove = null;
    
    191 189
                 if (!idsToRemove.isEmpty()) {
    
    192
    -                Set<String> blockingIdsToRemoveFromLocal = synchronizeEngine.filterIdsUsedInLocalSource(dtoType, idsToRemove);
    
    190
    +                Set<String> blockingIdsToRemoveFromLocal = filterIdsUsedInLeftSource(dtoType, idsToRemove);
    
    193 191
                     blockingIdsToRemove = idsToRemove
    
    194 192
                             .stream()
    
    195 193
                             .filter(blockingIdsToRemoveFromLocal::contains)
    
    ... ... @@ -199,14 +197,26 @@ public class UnidirectionalSynchronizeEngine {
    199 197
                 }
    
    200 198
                 boolean needCallback = blockingIdsToRemove != null && !blockingIdsToRemove.isEmpty();
    
    201 199
                 if (needCallback) {
    
    202
    -                Set<ToolkitIdLabel> availableReferenceSet = synchronizeEngine.getRightEnabledReferentialLabelSet(dtoType);
    
    203
    -                Set<ToolkitIdLabel> blockingReferentialSetToRemove = synchronizeEngine.getLocalSourceReferentialToDelete(dtoType, blockingIdsToRemove);
    
    200
    +                Set<ToolkitIdLabel> availableReferenceSet = getRightEnabledReferentialLabelSet(dtoType);
    
    201
    +                Set<ToolkitIdLabel> blockingReferentialSetToRemove = getLeftReferentialToDelete(dtoType, blockingIdsToRemove);
    
    204 202
                     callbackRequests.addCallbackRequest(dtoType, blockingReferentialSetToRemove, availableReferenceSet);
    
    205 203
                 }
    
    206 204
             }
    
    207 205
             return used;
    
    208 206
         }
    
    209 207
     
    
    208
    +    private  <D extends ReferentialDto> Set<ToolkitIdLabel> getLeftReferentialToDelete(Class<D> dtoType, Set<String> blockingIdsToRemove) {
    
    209
    +        return synchronizeEngine.getServices().left().getReferentialToDelete(dtoType, blockingIdsToRemove);
    
    210
    +    }
    
    211
    +
    
    212
    +    private  <D extends ReferentialDto> Set<String> filterIdsUsedInLeftSource(Class<D> dtoType, Set<String> idsToRemove) {
    
    213
    +        return synchronizeEngine.getServices().left().filterIdsUsed(dtoType, idsToRemove);
    
    214
    +    }
    
    215
    +
    
    216
    +    private  <D extends ReferentialDto> Set<ToolkitIdLabel> getRightEnabledReferentialLabelSet(Class<D> referentialName) {
    
    217
    +        return synchronizeEngine.getServices().right().getEnabledReferentialLabelSet(referentialName);
    
    218
    +    }
    
    219
    +
    
    210 220
         private <D extends ReferentialDto> SynchronizeTask createTask(Class<D> dtoType, Differential differential) {
    
    211 221
             return SynchronizeTask.create(dtoType, differential.getId(), differential.getThisSideDto().getLastUpdateDate());
    
    212 222
         }
    

  • toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/BothSidesSqlRequestBuilder.java
    ... ... @@ -52,7 +52,7 @@ public class BothSidesSqlRequestBuilder {
    52 52
         }
    
    53 53
     
    
    54 54
         public void addTask(LeftOrRight side, SynchronizeTaskType taskType, SynchronizeTask task) {
    
    55
    -        OneSideSqlRequest.Builder requestBuilder = getRequestBuilder(side, taskType);
    
    55
    +        OneSideSqlRequest.Builder requestBuilder = taskType.chooseSqlBuilder(builders).apply(side);
    
    56 56
             requestBuilder.addTask(taskType, task);
    
    57 57
     
    
    58 58
             if (SynchronizeTaskType.ADD == taskType) {
    
    ... ... @@ -67,11 +67,4 @@ public class BothSidesSqlRequestBuilder {
    67 67
                 requestBuilder.removeIdOnlyExistOnThisSide(task.getReferentialType(), task.getReferentialId());
    
    68 68
             }
    
    69 69
         }
    
    70
    -
    
    71
    -    private OneSideSqlRequest.Builder getRequestBuilder(LeftOrRight side, SynchronizeTaskType taskType) {
    
    72
    -        if (taskType == SynchronizeTaskType.REVERT) {
    
    73
    -            return builders.onOppositeSide(side);
    
    74
    -        }
    
    75
    -        return builders.onSameSide(side);
    
    76
    -    }
    
    77 70
     }

  • toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/OneSideSqlResult.java
    ... ... @@ -200,7 +200,8 @@ public class OneSideSqlResult implements JsonAware {
    200 200
             }
    
    201 201
             try (BufferedWriter writer = Files.newBufferedWriter(scriptPath)) {
    
    202 202
                 for (String statement : statements) {
    
    203
    -                writer.write(statement);
    
    203
    +                writer.write(statement.trim());
    
    204
    +                writer.newLine();
    
    204 205
                 }
    
    205 206
             } catch (IOException e) {
    
    206 207
                 throw new IllegalStateException("Can't write to " + scriptPath, e);
    

  • toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/SynchronizeTaskType.java
    ... ... @@ -22,6 +22,11 @@ package fr.ird.observe.services.service.referential.synchro;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import io.ultreia.java4all.util.LeftOrRight;
    
    26
    +import io.ultreia.java4all.util.LeftOrRightContext;
    
    27
    +
    
    28
    +import java.util.function.Function;
    
    29
    +
    
    25 30
     /**
    
    26 31
      * Created on 14/08/16.
    
    27 32
      *
    
    ... ... @@ -30,19 +35,21 @@ package fr.ird.observe.services.service.referential.synchro;
    30 35
      */
    
    31 36
     public enum SynchronizeTaskType {
    
    32 37
     
    
    33
    -    ADD(false, true),
    
    34
    -    UPDATE(true, true),
    
    35
    -    REVERT(true, false),
    
    36
    -    DELETE(false, false),
    
    37
    -    DEACTIVATE(false, false),
    
    38
    -    DEACTIVATE_WITH_REPLACEMENT(false, false);
    
    38
    +    ADD(false, true, false),
    
    39
    +    UPDATE(true, true, false),
    
    40
    +    REVERT(true, false, true),
    
    41
    +    DELETE(false, false, false),
    
    42
    +    DEACTIVATE(false, false, false),
    
    43
    +    DEACTIVATE_WITH_REPLACEMENT(false, false, false);
    
    39 44
     
    
    40 45
         private final boolean withProperties;
    
    41 46
         private final boolean toOtherSide;
    
    47
    +    private final boolean useOtherSideSqlBuilder;
    
    42 48
     
    
    43
    -    SynchronizeTaskType(boolean withProperties, boolean toOtherSide) {
    
    49
    +    SynchronizeTaskType(boolean withProperties, boolean toOtherSide, boolean useOtherSideSqlBuilder) {
    
    44 50
             this.withProperties = withProperties;
    
    45 51
             this.toOtherSide = toOtherSide;
    
    52
    +        this.useOtherSideSqlBuilder = useOtherSideSqlBuilder;
    
    46 53
         }
    
    47 54
     
    
    48 55
         public boolean withProperties() {
    
    ... ... @@ -52,4 +59,8 @@ public enum SynchronizeTaskType {
    52 59
         public boolean toOtherSide() {
    
    53 60
             return toOtherSide;
    
    54 61
         }
    
    62
    +
    
    63
    +    public <O> Function<LeftOrRight, O> chooseSqlBuilder(LeftOrRightContext<O> sides) {
    
    64
    +        return useOtherSideSqlBuilder ? sides::onOppositeSide : sides::onSameSide;
    
    65
    +    }
    
    55 66
     }