Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
-
07bb1e0c
by Tony Chemit at 2024-04-23T10:00:21+02:00
-
f4c3d2fe
by Tony Chemit at 2024-04-23T12:31:36+02:00
-
c9be7d77
by Tony Chemit at 2024-04-23T12:32:12+02:00
-
091c11eb
by Tony Chemit at 2024-04-23T12:32:33+02:00
-
7a81eb84
by Tony Chemit at 2024-04-23T12:33:31+02:00
-
61d55ad5
by Tony Chemit at 2024-04-23T12:34:06+02:00
25 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/AdminTabUIActionSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/consolidate/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Prepare.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/SynchronizeModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Apply.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/SynchroUIActionSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/task/SwingReferentialSynchronizeTask.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java
- server/core/src/main/java/fr/ird/observe/server/request/ObserveWebRequestContext.java
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/SynchronizeEngine.java
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/UnidirectionalSynchronizeEngine.java
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/BothSidesSqlRequestBuilder.java
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/OneSideSqlResult.java
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/referential/synchro/SynchronizeTaskType.java
Changes:
| ... | ... | @@ -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) {
|
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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");
|
| ... | ... | @@ -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 |
| ... | ... | @@ -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);
|
| ... | ... | @@ -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) {
|
| ... | ... | @@ -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);
|
| ... | ... | @@ -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) {
|
| ... | ... | @@ -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() {
|
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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 |
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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()) {
|
| ... | ... | @@ -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);
|
| ... | ... | @@ -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;
|
| ... | ... | @@ -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 |
| ... | ... | @@ -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 |
| ... | ... | @@ -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 |
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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 |
| ... | ... | @@ -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 | }
|
| ... | ... | @@ -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 | } |
| ... | ... | @@ -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);
|
| ... | ... | @@ -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 | } |