This is an automated email from the git hooks/post-receive script. New commit to branch feature/4309_synchro_referential in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit dc4a1987ac3c677ff98bc4d88f7adc141cd77a07 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 16 12:28:27 2016 +0200 Intégration dans les ui de la synchro bidi + un peu de nettoyage par ci par là --- .../java/fr/ird/observe/ui/admin/AdminTabUI.jaxx | 6 +- .../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 28 +----- .../fr/ird/observe/ui/admin/AdminUILauncher.java | 1 - .../java/fr/ird/observe/ui/admin/AdminUIModel.java | 103 +++++++------------ .../observe/ui/admin/export/ExportUIHandler.java | 2 +- .../observe/ui/admin/report/ReportUIHandler.java | 15 +-- .../ird/observe/ui/admin/resume/ShowResumeUI.jaxx | 3 +- .../ui/admin/resume/ShowResumeUIHandler.java | 3 + .../referential/ng/ReferentialSynchroModel.java | 7 ++ .../ng/ReferentialSynchronizeResources.java | 14 +++ ...ReferentialSynchronizeTaskListCellRenderer.java | 2 +- .../ng/ReferentialSynchronizeTaskListModel.java | 9 +- .../referential/ng/action/ApplyAction.java | 109 +++++++-------------- .../ng/action/RegisterAddTaskAction.java | 12 ++- .../ng/action/RegisterCopyTaskAction.java | 7 +- .../ng/action/RegisterDeleteTaskAction.java | 1 + .../ng/action/RegisterDesactivateTaskAction.java | 1 + .../ng/action/RegisterRevertTaskAction.java | 1 + .../ng/action/RegisterSkipTaskAction.java | 1 + .../ng/action/RegisterTasksActionSupport.java | 11 +-- .../ng/action/RegisterUpdateTaskAction.java | 12 ++- ...ask.java => AddReferentialSynchronizeTask.java} | 4 +- .../ng/task/ReferentialSynchronizeTaskSupport.java | 24 ++++- ...ferentialSynchronizeTaskWithReplaceSupport.java | 9 +- .../ng/task/SkipReferentialSynchronizeTask.java | 5 + ....java => UpdateReferentialSynchronizeTask.java} | 4 +- .../ng/tree/ReferentialSynchronizeTreeModel.java | 13 ++- .../ui/admin/validate/ValidateUIHandler.java | 2 +- .../observe/ui/content/ref/ContentReferenceUI.jaxx | 1 + .../observe/ui/content/ref/ContentReferenceUI.jcss | 1 + .../ui/content/ref/ContentReferenceUIHandler.java | 24 ++++- .../fr/ird/observe/ui/storage/StorageUIModel.java | 23 +---- .../observe-application-swing_fr_FR.properties | 28 +++--- 33 files changed, 228 insertions(+), 258 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUI.jaxx index 9fe5019..3019162 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUI.jaxx @@ -82,13 +82,11 @@ protected void finalize() throws Throwable { @Override public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("message") && step == model.getStep()) { - getHandler().writeMessage(this, (String) evt.getNewValue()); - } + //propertyChange.super(evt); } public void addMessage(AdminStep step, String text) { - progression.append(text+"\n"); + getHandler().addMessage(step, text); } public void updateState(WizardState newState) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java index 154dba5..1be451a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java @@ -86,15 +86,6 @@ public class AdminTabUIHandler { return decoratorService; } - protected ObserveSwingDataSource getSource() { - - ObserveSwingDataSource source = model.getTmpSource(); - if (source == null) { - source = model.getSafeLocalSource(false); - } - return source; - } - public final WizardState onCancel(Exception e) { if (log.isDebugEnabled()) { log.debug(this, e); @@ -167,11 +158,8 @@ public class AdminTabUIHandler { } } - public void sendMessage(String msg) { - ui.firePropertyChange("message", null, msg); - } + public void sendMessage(String message) { - public void writeMessage(AdminTabUI ui, String message) { AdminStep step = ui.getStep(); ui.addMessage(step, message); ShowResumeUI resumeUI = (ShowResumeUI) parentUI.getStepUI(AdminStep.SHOW_RESUME); @@ -208,22 +196,13 @@ public class AdminTabUIHandler { } } - protected ObserveSwingDataSource getSource(AdminUIModel model) { - - ObserveSwingDataSource source = model.getTmpSource(); - if (source == null) { - source = model.getSafeLocalSource(false); - } - return source; - } - protected void openSource(ObserveSwingDataSource service) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException { if (!service.isOpen()) { service.open(); } } - protected void addAdminWorker(String label, Callable<WizardState> callable) { + public void addAdminWorker(String label, Callable<WizardState> callable) { AdminActionWorker worker = AdminActionWorker.newWorker(this, label, callable); ObserveRunner.getActionExecutor().addAction(worker); } @@ -257,4 +236,7 @@ public class AdminTabUIHandler { selectionModel.initUI(selectTree); } + public void addMessage(AdminStep step, String text) { + ui.getProgression().append(text + "\n"); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUILauncher.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUILauncher.java index fd52ee0..437053f 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUILauncher.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUILauncher.java @@ -223,7 +223,6 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad try { - model.doCloseSource(model.getTmpSource(), false); model.doCloseSource(model.getCentralSource(), false); model.doCloseSource(model.getLocalSource(), false); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java index 2a6065d..cbf214d 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java @@ -65,6 +65,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.border.TitledBorder; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; @@ -85,16 +86,15 @@ import static org.nuiton.i18n.I18n.t; */ public class AdminUIModel extends WizardExtModel<AdminStep> { - public static final String SHOW_RESUME_PROPERTY_NAME = "showResume"; - - public static final String NEED_LOCAL_SOURCE_PROPERTY_NAME = "needLocalSource"; - public static final String SELECTION_MODEL_CHANGED_PROPERTY_NAME = "selectionModelChanged"; public static final String SELECTED_TRIP_PROPERTY_NAME = "selectedTrip"; /** Logger */ private static final Log log = LogFactory.getLog(AdminUIModel.class); + + public static final PropertyChangeListener LOG_PROPERTY_CHANGE_LISTENER = new LogPropertyChanged(); + public static final String PROPERTY_LOCAL_SOURCE_LABEL = "localSourceLabel"; public static final String PROPERTY_CENTRAL_SOURCE_LABEL = "centralSourceLabel"; @@ -110,9 +110,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { /** la source de données dite central (contenant le référentiel valide) */ protected ObserveSwingDataSource centralSource; - /** la source de données temporaire */ - protected ObserveSwingDataSource tmpSource; - /** la configuration de la base source */ protected final StorageUIModel localSourceModel; @@ -255,7 +252,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { validate(); - return; } }; @@ -309,17 +305,14 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { return; } - if (AdminStep.CONFIG == oldStep) { + if (AdminStep.CONFIG == oldStep && WizardState.PENDING == getStepState()) { if (AdminStep.DATA_SYNCHRONIZE == newStep) { setBusy(true); - try { - //FIXME-release Supprimer ce code et remettre le code dans AdminUIHandler qui fait ça en lazy initSynchroDataUI(); - } finally { setBusy(false); } @@ -331,19 +324,13 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { if (AdminStep.REFERENTIAL_SYNCHRONIZE == newStep) { setBusy(true); - try { - //FIXME-release Supprimer ce code et remettre le code dans AdminUIHandler qui fait ça en lazy initSynchroReferentialUI(); - } finally { - setBusy(false); - } - return; } @@ -374,9 +361,9 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { } // on remplit le modèle de sélection -// if (log.isDebugEnabled()) { -// log.debug("Will refill selectionModel [" + newStep + "] : " + selectModel); -// } + if (log.isDebugEnabled()) { + log.debug("Will refill selectionModel [" + newStep + "] : " + selectModel); + } ObserveSwingDataSource dataSource = getSafeLocalSource(true); populateSelectionModel(dataSource); }; @@ -758,15 +745,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { centralSourceModel.start(DbMode.USE_REMOTE); if (log.isDebugEnabled()) { - centralSourceModel.addPropertyChangeListener(evt -> { - String name = evt.getPropertyName(); - Object oldValue = evt.getOldValue(); - Object newValue = evt.getNewValue(); - if (log.isDebugEnabled()) { - log.debug(evt.getSource() + " - Property [" + name + "] has changed from " + oldValue + " to " + newValue); - } - - }); + centralSourceModel.removePropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); + centralSourceModel.addPropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); } // on teste si la connexion distante existe @@ -971,10 +951,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { return centralSource; } - public ObserveSwingDataSource getTmpSource() { - return tmpSource; - } - public ObserveSwingDataSource getSafeLocalSource(boolean open) { if (localSource == null || open && !localSource.isOpen()) { @@ -998,16 +974,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { return centralSource; } - public ObserveSwingDataSource getSafeTmpSource(boolean open) { - if (tmpSource == null) { - tmpSource = ObserveSwingApplicationContext.get().createTemporaryH2Storage(n("observe.storage.label.synchro")); - if (open) { - doOpenSource(tmpSource); - } - } - return tmpSource; - } - public StorageUIModel getLocalSourceModel() { return localSourceModel; } @@ -1219,12 +1185,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { DbMode dbMode = localSourceModel.getDbMode(); if (dbMode == centralSourceModel.getDbMode()) { if (dbMode == DbMode.USE_REMOTE) { - validate &= !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl()); - } else { - - // pour le moment ce cas n'est pas possible - // la base de référence est obligatoirement une base distante //FIXME + validate = !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl()); } } @@ -1256,12 +1218,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { DbMode dbMode = localSourceModel.getDbMode(); if (dbMode == centralSourceModel.getDbMode()) { if (dbMode == DbMode.USE_REMOTE) { - validate &= !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl()); - } else { - - // pour le moment ce cas n'est pas possible - // la base de référence est obligatoirement une base distante //FIXME + validate = !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl()); } } @@ -1298,10 +1256,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { if (dbMode == centralSourceModel.getDbMode()) { if (dbMode == DbMode.USE_REMOTE) { validate &= !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl()); - } else { - - // pour le moment ce cas n'est pas possible - // la base de référence est obligatoirement une base distante } } // validate &= centralSourceModel.isValid(); @@ -1328,12 +1282,12 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { if (containsOperation(AdminStep.VALIDATE)) { // la config doit etre ok - validate &= validate(AdminStep.CONFIG); + validate = validate(AdminStep.CONFIG); if (validate) { // il faut au moins une donnee de selectionnee boolean empty = selectionModel.isEmpty(); - validate &= !empty; + validate = !empty; } } if (containsOperation(AdminStep.EXPORT_DATA)) { @@ -1344,7 +1298,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { // il faut au moins une donnee de selectionnee boolean empty = selectionModel.isDataEmpty(); - validate &= !empty; + validate = !empty; } } if (containsOperation(AdminStep.CONSOLIDATE)) { @@ -1355,7 +1309,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { // il faut au moins une donnee de selectionnee boolean empty = selectionModel.isDataEmpty(); - validate &= !empty; + validate = !empty; } } if (containsOperation(AdminStep.REPORT)) { @@ -1366,35 +1320,35 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { // il faut exactement une Trip de selectionnee boolean empty = selectionModel.isDataEmpty(); - validate &= !empty && + validate = !empty && selectionModel.getSelectedData().size() == 1; } } break; case VALIDATE: - validate &= validate(AdminStep.SELECT_DATA) && + validate = validate(AdminStep.SELECT_DATA) && getStepState(step) == WizardState.SUCCESSED; break; case EXPORT_DATA: - validate &= validate(AdminStep.SELECT_DATA) && + validate = validate(AdminStep.SELECT_DATA) && getStepState(step) == WizardState.SUCCESSED; break; case CONSOLIDATE: - validate &= validate(AdminStep.SELECT_DATA) && + validate = validate(AdminStep.SELECT_DATA) && getStepState(step) == WizardState.SUCCESSED; break; case REPORT: // pour acceder a l'onglet des report, il faut que // l'onglet de sélection des données soit ok - validate &= validate(AdminStep.SELECT_DATA); + validate = validate(AdminStep.SELECT_DATA); break; case SYNCHRONIZE: validate = getStepState(step) == WizardState.SUCCESSED; break; case SAVE_LOCAL: // valide si l'action a ete executee avec success - validate &= !getSaveLocalModel().isDoBackup() || + validate = !getSaveLocalModel().isDoBackup() || getStepState(step) == WizardState.SUCCESSED; break; case SHOW_RESUME: @@ -1579,4 +1533,17 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { } } + + private static class LogPropertyChanged implements PropertyChangeListener { + @Override + public void propertyChange(PropertyChangeEvent evt) { + String name = evt.getPropertyName(); + Object oldValue = evt.getOldValue(); + Object newValue = evt.getNewValue(); + if (log.isDebugEnabled()) { + log.debug(evt.getSource() + " - Property [" + name + "] has changed from " + oldValue + " to " + newValue); + } + + } + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java index 843d7d9..e6df440 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java @@ -209,7 +209,7 @@ public class ExportUIHandler extends AdminTabUIHandler { return WizardState.FAILED; } - ObserveSwingDataSource source = getSource(); + ObserveSwingDataSource source = model.getSafeLocalSource(false); stepModel.setSource(source); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java index e725ab4..0f73579 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java @@ -120,8 +120,7 @@ public class ReportUIHandler extends AdminTabUIHandler { Report report = (Report) newValue; onSelectedReportChanged(tabUI, source, report); } else if (ReportModel.VARIABLES_PROPERTY_NAME.equals(propertyName)) { - Map<String, Object> variables = - (Map<String, Object>) newValue; + Map<String, Object> variables = (Map<String, Object>) newValue; onVariablesChanges(source, variables); } else if (ReportModel.VALID_PROPERTY_NAME.equals(propertyName)) { final Boolean valid = (Boolean) newValue; @@ -303,15 +302,9 @@ public class ReportUIHandler extends AdminTabUIHandler { log.info("New selected report [" + report + "]"); } - ObserveSwingDataSource dataSource = getSource(); - try { - if (!dataSource.isOpen()) { - - dataSource.open(); - - } + ObserveSwingDataSource dataSource = getModel().getSafeLocalSource(true); ReportService reportService = dataSource.newReportService(); @@ -423,7 +416,7 @@ public class ReportUIHandler extends AdminTabUIHandler { long startTime = TimeLog.getTime(); - ObserveSwingDataSource dataSource = getSource(); + ObserveSwingDataSource dataSource = getModel().getSafeLocalSource(true); if (!dataSource.isOpen()) { dataSource.open(); } @@ -473,7 +466,7 @@ public class ReportUIHandler extends AdminTabUIHandler { } public void destroy() { - ObserveSwingDataSource dataSource = getSource(); + ObserveSwingDataSource dataSource = model.getSafeLocalSource(false); if (dataSource.isOpen()) { dataSource.close(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUI.jaxx index 1d34e94..67668c5 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUI.jaxx @@ -58,8 +58,7 @@ public void destroy() { @Override public void addMessage(AdminStep step, String text) { - String l = t(step.getLabel())+ " - " + text + "\n"; - globalProgression.append(l); + getHandler().addMessage(step, text); } ]]> </script> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUIHandler.java index e3c96a4..b3da9b8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/resume/ShowResumeUIHandler.java @@ -102,4 +102,7 @@ public class ShowResumeUIHandler extends AdminTabUIHandler { getUi().getResume().setText(buffer.toString()); } + public void addMessage(AdminStep step, String text) { + getUi().getGlobalProgression().append(t(step.getLabel()) + " - " + text + "\n"); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java index da64f4b..d3030d5 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java @@ -4,6 +4,8 @@ import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.service.actions.synchro.referential.ReferentialSynchronizeMode; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceEngine; import fr.ird.observe.ui.admin.AdminActionModel; import fr.ird.observe.ui.admin.AdminStep; import fr.ird.observe.ui.admin.synchronize.referential.ng.tree.ReferentialSynchronizeTreeModel; @@ -252,4 +254,9 @@ public class ReferentialSynchroModel extends AdminActionModel { } + public ReferentialSynchronizeServiceEngine newReferentialSynchronizeServiceEngine() { + ReferentialSynchronizeService leftService = leftSource.newReferentialSynchronizeService(); + ReferentialSynchronizeService rightService = rightSource.newReferentialSynchronizeService(); + return new ReferentialSynchronizeServiceEngine(leftService, rightService); + } } \ No newline at end of file diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeResources.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeResources.java index a1c908f..e297835 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeResources.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeResources.java @@ -1,5 +1,6 @@ package fr.ird.observe.ui.admin.synchronize.referential.ng; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.admin.synchronize.referential.ng.tree.node.ReferenceReferentialSynchroNodeSupport; @@ -24,6 +25,7 @@ public enum ReferentialSynchronizeResources { null, null, null, + ReferentialSynchronizeTaskType.ADD, ReferenceReferentialSynchroNodeSupport::isCanAdd), UPDATE( "copyToRight", @@ -34,6 +36,7 @@ public enum ReferentialSynchronizeResources { null, null, null, + ReferentialSynchronizeTaskType.UPDATE, ReferenceReferentialSynchroNodeSupport::isCanUpdate), COPY( "copyToRight", @@ -44,6 +47,7 @@ public enum ReferentialSynchronizeResources { n("observe.actions.synchro.referential.action.copyToLeft.tip"), ReferentialSynchroModel.COPY_LEFT_PROPERTY_NAME, ReferentialSynchroModel.COPY_RIGHT_PROPERTY_NAME, + null, node -> false), DELETE( "deleteFromLeft", @@ -54,6 +58,7 @@ public enum ReferentialSynchronizeResources { n("observe.actions.synchro.referential.action.deleteFromRight.tip"), ReferentialSynchroModel.DELETE_LEFT_PROPERTY_NAME, ReferentialSynchroModel.DELETE_RIGHT_PROPERTY_NAME, + ReferentialSynchronizeTaskType.DELETE, ReferenceReferentialSynchroNodeSupport::isCanDelete), REVERT( "revertFromLeft", @@ -64,6 +69,7 @@ public enum ReferentialSynchronizeResources { n("observe.actions.synchro.referential.action.revertFromRight.tip"), ReferentialSynchroModel.REVERT_LEFT_PROPERTY_NAME, ReferentialSynchroModel.REVERT_RIGHT_PROPERTY_NAME, + ReferentialSynchronizeTaskType.REVERT, ReferenceReferentialSynchroNodeSupport::isCanRevert), SKIP( "skipFromLeft", @@ -74,6 +80,7 @@ public enum ReferentialSynchronizeResources { n("observe.actions.synchro.referential.action.skipFromRight.tip"), ReferentialSynchroModel.SKIP_LEFT_PROPERTY_NAME, ReferentialSynchroModel.SKIP_RIGHT_PROPERTY_NAME, + null, node -> true), DESACTIVATE( "desactivateFromLeft", @@ -84,6 +91,7 @@ public enum ReferentialSynchronizeResources { n("observe.actions.synchro.referential.action.desactivateFromRight.tip"), ReferentialSynchroModel.DESACTIVATE_LEFT_PROPERTY_NAME, ReferentialSynchroModel.DESACTIVATE_RIGHT_PROPERTY_NAME, + ReferentialSynchronizeTaskType.DESACTIVATE, ReferenceReferentialSynchroNodeSupport::isCanDelete); private final String leftActionName; @@ -95,6 +103,7 @@ public enum ReferentialSynchronizeResources { private final String leftPropertyName; private final String rightPropertyName; private final Predicate<ReferenceReferentialSynchroNodeSupport> predicate; + private final ReferentialSynchronizeTaskType taskType; private transient Icon actionIcon; ReferentialSynchronizeResources(String leftActionName, @@ -105,6 +114,7 @@ public enum ReferentialSynchronizeResources { String rightActionTipI18nKey, String leftPropertyName, String rightPropertyName, + ReferentialSynchronizeTaskType taskType, Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { this.leftActionName = leftActionName; this.rightActionName = rightActionName; @@ -114,6 +124,7 @@ public enum ReferentialSynchronizeResources { this.rightActionTipI18nKey = rightActionTipI18nKey; this.leftPropertyName = leftPropertyName; this.rightPropertyName = rightPropertyName; + this.taskType = taskType; this.predicate = predicate; } @@ -144,4 +155,7 @@ public enum ReferentialSynchronizeResources { return left ? leftPropertyName : rightPropertyName; } + public ReferentialSynchronizeTaskType getTaskType() { + return taskType; + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListCellRenderer.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListCellRenderer.java index 37ec1b9..1b7bfa8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListCellRenderer.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListCellRenderer.java @@ -20,7 +20,7 @@ public class ReferentialSynchronizeTaskListCellRenderer extends DefaultListCellR public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { ReferentialSynchronizeTaskSupport task = (ReferentialSynchronizeTaskSupport) value; - super.getListCellRendererComponent(list, task.getLabel(), index, isSelected, cellHasFocus); + super.getListCellRendererComponent(list, "<html><body>" + task.getLabel(), index, isSelected, cellHasFocus); setIcon(task.getIcon()); return this; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListModel.java index fa846d2..df8ddc0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/ReferentialSynchronizeTaskListModel.java @@ -4,6 +4,8 @@ import fr.ird.observe.ui.admin.synchronize.referential.ng.task.ReferentialSynchr import javax.swing.DefaultListModel; import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; /** * Created on 13/08/16. @@ -11,13 +13,12 @@ import java.util.Collection; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class ReferentialSynchronizeTaskListModel extends DefaultListModel<ReferentialSynchronizeTaskSupport> { +public class ReferentialSynchronizeTaskListModel extends DefaultListModel<ReferentialSynchronizeTaskSupport> implements Iterable<ReferentialSynchronizeTaskSupport> { private static final long serialVersionUID = 1L; private boolean tasksIsAdjusting; - public void addTasks(Collection<ReferentialSynchronizeTaskSupport> addedTasks) { tasksIsAdjusting = true; @@ -44,4 +45,8 @@ public class ReferentialSynchronizeTaskListModel extends DefaultListModel<Refere super.fireIntervalAdded(source, index0, index1); } + @Override + public Iterator<ReferentialSynchronizeTaskSupport> iterator() { + return Collections.list(elements()).iterator(); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/ApplyAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/ApplyAction.java index 76e83c2..e612058 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/ApplyAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/ApplyAction.java @@ -1,23 +1,18 @@ package fr.ird.observe.ui.admin.synchronize.referential.ng.action; -import fr.ird.observe.db.ObserveSwingDataSource; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeRequest; -import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; +import fr.ird.observe.services.service.actions.synchro.referential.ReferentialSynchronizeMode; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceEngine; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceProduceSqlsRequest; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceProduceSqlsResult; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.actions.AbstractObserveAction; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroModel; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroUI; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroUIHandler; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.AddToReferentialSynchronizeTask; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.DeleteReferentialSynchronizeTask; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.DesactivateReferentialSynchronizeTask; +import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeTaskListModel; import fr.ird.observe.ui.admin.synchronize.referential.ng.task.ReferentialSynchronizeTaskSupport; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.RevertReferentialSynchronizeTask; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.UpdateToReferentialSynchronizeTask; import jaxx.runtime.swing.wizard.ext.WizardState; -import javax.swing.DefaultListModel; import java.awt.event.ActionEvent; import static org.nuiton.i18n.I18n.t; @@ -26,6 +21,7 @@ import static org.nuiton.i18n.I18n.t; * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class ApplyAction extends AbstractObserveAction { @@ -34,83 +30,50 @@ public class ApplyAction extends AbstractObserveAction { private final ReferentialSynchroUI ui; public ApplyAction(ReferentialSynchroUI ui) { - super(t("observe.action.apply"), UIHelper.getUIManagerActionIcon("apply")); + super(t("observe.action.apply"), UIHelper.getUIManagerActionIcon("accept")); this.ui = ui; } @Override public void actionPerformed(ActionEvent e) { - ReferentialSynchroUIHandler handler = ui.getHandler(); + + ui.getHandler().addAdminWorker("Application des modifications.", this::apply); + + } + + private WizardState apply() { ReferentialSynchroModel stepModel = ui.getStepModel(); - ObserveSwingDataSource leftSource = stepModel.getLeftSource(); - boolean leftSourceIsH2 = leftSource.getConfiguration() instanceof ObserveDataSourceConfigurationTopiaH2; - - ObserveSwingDataSource rightSource = stepModel.getRightSource(); - boolean rightSourceIsH2 = rightSource.getConfiguration() instanceof ObserveDataSourceConfigurationTopiaH2; - - DefaultListModel<ReferentialSynchronizeTaskSupport> tasks = stepModel.getTasks(); - int size = tasks.size(); - - ReferentialSynchronizeRequest.Builder leftReferentialSynchronizeRequestBuilder = ReferentialSynchronizeRequest.builder(leftSourceIsH2, rightSourceIsH2); - ReferentialSynchronizeRequest.Builder rightReferentialSynchronizeRequestBuilder = ReferentialSynchronizeRequest.builder(rightSourceIsH2, leftSourceIsH2); - for (int i = 0; i < size; i++) { - - ReferentialSynchronizeTaskSupport<?> task = tasks.getElementAt(i); - - String taskLabel = t("observe.actions.synchro.referential.task.prepare", task.getLabel()); - if (task instanceof AddToReferentialSynchronizeTask) { - handler.sendMessage(taskLabel); - leftReferentialSynchronizeRequestBuilder.addAddTask(task.getData()); - continue; - } - - if (task instanceof DeleteReferentialSynchronizeTask) { - DeleteReferentialSynchronizeTask task1 = (DeleteReferentialSynchronizeTask) task; - handler.sendMessage(taskLabel); - leftReferentialSynchronizeRequestBuilder.addDeleteTask(task1.getData(), task1.getReplaceData()); - continue; - } - - if (task instanceof DesactivateReferentialSynchronizeTask) { - DesactivateReferentialSynchronizeTask task1 = (DesactivateReferentialSynchronizeTask) task; - handler.sendMessage(taskLabel); - leftReferentialSynchronizeRequestBuilder.addDesactivateTask(task1.getData(), task1.getReplaceData()); - continue; - } - - if (task instanceof RevertReferentialSynchronizeTask) { - handler.sendMessage(taskLabel); - leftReferentialSynchronizeRequestBuilder.addRevertTask(task.getData()); - continue; - } - - if (task instanceof UpdateToReferentialSynchronizeTask) { - handler.sendMessage(taskLabel); - leftReferentialSynchronizeRequestBuilder.addUpdateTask(task.getData()); - } + ReferentialSynchroUIHandler handler = ui.getHandler(); - } + ReferentialSynchronizeMode synchronizeMode = stepModel.getSynchronizeMode(); + boolean leftIsWrite = synchronizeMode.isLeftWrite(); + boolean rightIsWrite = synchronizeMode.isRightWrite(); - ReferentialSynchronizeService leftReferentialSynchronizeService = leftSource.newReferentialSynchronizeService(); - ReferentialSynchronizeService rightReferentialSynchronizeService = rightSource.newReferentialSynchronizeService(); + ReferentialSynchronizeServiceProduceSqlsRequest.Builder builder = ReferentialSynchronizeServiceProduceSqlsRequest.builder(); - ReferentialSynchronizeRequest leftReferentialSynchronizeRequest = leftReferentialSynchronizeRequestBuilder.build(); - if (leftReferentialSynchronizeRequest.isNotEmpty()) { - rightReferentialSynchronizeService.prepareRequestOnOppositeDataSource(leftReferentialSynchronizeRequest); - leftReferentialSynchronizeService.prepareRequestOnDataSource(leftReferentialSynchronizeRequest); - leftReferentialSynchronizeService.executeRequest(leftReferentialSynchronizeRequest); - } + ReferentialSynchronizeTaskListModel tasks = stepModel.getTasks(); + + for (ReferentialSynchronizeTaskSupport task : tasks) { + + String taskLabel = t("observe.actions.synchro.referential.task.prepare", task.getStripLabel()); + + handler.sendMessage(taskLabel); + + task.registerTask(builder); - ReferentialSynchronizeRequest rightReferentialSynchronizeRequest = rightReferentialSynchronizeRequestBuilder.build(); - if (rightReferentialSynchronizeRequest.isNotEmpty()) { - leftReferentialSynchronizeService.prepareRequestOnOppositeDataSource(rightReferentialSynchronizeRequest); - rightReferentialSynchronizeService.prepareRequestOnDataSource(rightReferentialSynchronizeRequest); - rightReferentialSynchronizeService.executeRequest(rightReferentialSynchronizeRequest); } - ui.getModel().setStepState(WizardState.SUCCESSED); + ReferentialSynchronizeServiceProduceSqlsRequest produceSqlsRequests = builder.build(); + ReferentialSynchronizeServiceEngine engine = stepModel.newReferentialSynchronizeServiceEngine(); + + ReferentialSynchronizeServiceProduceSqlsResult sqlsRequests = engine.produceSqlsRequests(produceSqlsRequests); + + engine.executeSqlRequests(sqlsRequests); + + return WizardState.SUCCESSED; } + } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterAddTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterAddTaskAction.java index 3311aa1..fc3c116 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterAddTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterAddTaskAction.java @@ -4,32 +4,34 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroUI; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.AddToReferentialSynchronizeTask; +import fr.ird.observe.ui.admin.synchronize.referential.ng.task.AddReferentialSynchronizeTask; import fr.ird.observe.ui.admin.synchronize.referential.ng.tree.node.ReferenceReferentialSynchroNodeSupport; +import java.util.Collection; import java.util.function.Predicate; /** * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterAddTaskAction extends RegisterTasksActionSupport { private static final long serialVersionUID = 1L; - private transient Iterable<ReferenceReferentialSynchroNodeSupport> nodes; + private transient Collection<ReferenceReferentialSynchroNodeSupport> nodes; public RegisterAddTaskAction(ReferentialSynchroUI ui, boolean left) { super(ui, ReferentialSynchronizeResources.ADD, left, false); } @Override - protected <R extends ReferentialDto> AddToReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - return new AddToReferentialSynchronizeTask<>(left, reference); + protected <R extends ReferentialDto> AddReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { + return new AddReferentialSynchronizeTask<>(left, reference); } @Override - protected Iterable<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { + protected Collection<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { return nodes; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterCopyTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterCopyTaskAction.java index e9f6588..1f06ce3 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterCopyTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterCopyTaskAction.java @@ -4,12 +4,13 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroUI; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.AddToReferentialSynchronizeTask; +import fr.ird.observe.ui.admin.synchronize.referential.ng.task.AddReferentialSynchronizeTask; /** * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterCopyTaskAction extends RegisterTasksActionSupport { @@ -34,7 +35,7 @@ public class RegisterCopyTaskAction extends RegisterTasksActionSupport { } @Override - protected <R extends ReferentialDto> AddToReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - return new AddToReferentialSynchronizeTask<>(left, reference); + protected <R extends ReferentialDto> AddReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { + return new AddReferentialSynchronizeTask<>(left, reference); } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDeleteTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDeleteTaskAction.java index 5fb4bb5..fde63d1 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDeleteTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDeleteTaskAction.java @@ -12,6 +12,7 @@ import static org.nuiton.i18n.I18n.t; * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterDeleteTaskAction extends RegisterTasksActionSupport { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDesactivateTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDesactivateTaskAction.java index 19b709f..4cd10f2 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDesactivateTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterDesactivateTaskAction.java @@ -12,6 +12,7 @@ import static org.nuiton.i18n.I18n.t; * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterDesactivateTaskAction extends RegisterTasksActionSupport { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterRevertTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterRevertTaskAction.java index 98d7dc2..cbf36dd 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterRevertTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterRevertTaskAction.java @@ -10,6 +10,7 @@ import fr.ird.observe.ui.admin.synchronize.referential.ng.task.RevertReferential * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterRevertTaskAction extends RegisterTasksActionSupport { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterSkipTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterSkipTaskAction.java index 3c33905..e52bd63 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterSkipTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterSkipTaskAction.java @@ -10,6 +10,7 @@ import fr.ird.observe.ui.admin.synchronize.referential.ng.task.SkipReferentialSy * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterSkipTaskAction extends RegisterTasksActionSupport { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterTasksActionSupport.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterTasksActionSupport.java index 39e8e57..9ea8920 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterTasksActionSupport.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterTasksActionSupport.java @@ -32,6 +32,7 @@ import static org.nuiton.i18n.I18n.t; * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public abstract class RegisterTasksActionSupport extends AbstractObserveAction { @@ -39,12 +40,10 @@ public abstract class RegisterTasksActionSupport extends AbstractObserveAction { private static final Log log = LogFactory.getLog(RegisterTasksActionSupport.class); private static final long serialVersionUID = 1L; - + protected final Predicate<ReferenceReferentialSynchroNodeSupport> predicate; private final ReferentialSynchroUI ui; private final boolean left; private final boolean needReplace; - - protected final Predicate<ReferenceReferentialSynchroNodeSupport> predicate; protected String typeStr; protected String referenceStr; @@ -164,10 +163,10 @@ public abstract class RegisterTasksActionSupport extends AbstractObserveAction { ReferentialSynchronizeTaskSupport task = createTask(left, reference, replaceReference); if (log.isInfoEnabled()) { - log.info("Add " + task.getLabel()); + log.info("Add " + task.getStripLabel()); } - ui.getHandler().sendMessage(task.getLabel()); + ui.getHandler().sendMessage(task.getStripLabel()); removedNodes.add(node); addedTasks.add(task); @@ -178,7 +177,7 @@ public abstract class RegisterTasksActionSupport extends AbstractObserveAction { ui.getStepModel().getTasks().addTasks(addedTasks); } - protected Iterable<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { + protected Collection<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { return getTreeModel().filterSelectedReferenceNodes(predicate); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterUpdateTaskAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterUpdateTaskAction.java index f7bd19e..a7740f0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterUpdateTaskAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/action/RegisterUpdateTaskAction.java @@ -4,33 +4,35 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchroUI; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; -import fr.ird.observe.ui.admin.synchronize.referential.ng.task.UpdateToReferentialSynchronizeTask; +import fr.ird.observe.ui.admin.synchronize.referential.ng.task.UpdateReferentialSynchronizeTask; import fr.ird.observe.ui.admin.synchronize.referential.ng.tree.node.ReferenceReferentialSynchroNodeSupport; +import java.util.Collection; import java.util.function.Predicate; /** * Created on 12/08/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ public class RegisterUpdateTaskAction extends RegisterTasksActionSupport { private static final long serialVersionUID = 1L; - private Iterable<ReferenceReferentialSynchroNodeSupport> nodes; + private Collection<ReferenceReferentialSynchroNodeSupport> nodes; public RegisterUpdateTaskAction(ReferentialSynchroUI ui, boolean left) { super(ui, ReferentialSynchronizeResources.UPDATE, left, false); } @Override - protected <R extends ReferentialDto> UpdateToReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - return new UpdateToReferentialSynchronizeTask<>(left, reference); + protected <R extends ReferentialDto> UpdateReferentialSynchronizeTask<R> createTask(boolean left, ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { + return new UpdateReferentialSynchronizeTask<>(left, reference); } @Override - protected Iterable<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { + protected Collection<ReferenceReferentialSynchroNodeSupport> getReferenceReferentialSynchroNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { return nodes; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddToReferentialSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddReferentialSynchronizeTask.java similarity index 68% rename from observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddToReferentialSynchronizeTask.java rename to observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddReferentialSynchronizeTask.java index d86244e..44ae959 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddToReferentialSynchronizeTask.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/AddReferentialSynchronizeTask.java @@ -10,9 +10,9 @@ import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronize * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class AddToReferentialSynchronizeTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { +public class AddReferentialSynchronizeTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - public AddToReferentialSynchronizeTask(boolean left, ReferentialReference<R> data) { + public AddReferentialSynchronizeTask(boolean left, ReferentialReference<R> data) { super(ReferentialSynchronizeResources.ADD, left, data); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskSupport.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskSupport.java index b6d46b6..2bcd7b5 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskSupport.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskSupport.java @@ -4,6 +4,8 @@ import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceProduceSqlsRequest; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; import javax.swing.Icon; @@ -24,6 +26,7 @@ public abstract class ReferentialSynchronizeTaskSupport<R extends ReferentialDto private final ReferentialReference<R> data; private final Icon icon; private final boolean left; + private final ReferentialSynchronizeTaskType taskType; protected ReferentialSynchronizeTaskSupport(ReferentialSynchronizeResources resource, boolean left, @@ -32,6 +35,7 @@ public abstract class ReferentialSynchronizeTaskSupport<R extends ReferentialDto this.data = data; this.icon = resource.getIcon(left); this.i18nKey = resource.getTaskLabel(left); + this.taskType = resource.getTaskType(); this.dataStr = ObserveSwingApplicationContext.get().getDecoratorService().getReferentialReferenceDecorator(data.getType()).toString(data); this.typeStr = t(DecoratorService.getEntityLabel(data.getType())); } @@ -40,16 +44,32 @@ public abstract class ReferentialSynchronizeTaskSupport<R extends ReferentialDto return left; } + public ReferentialSynchronizeTaskType getTaskType() { + return taskType; + } + public String getLabel() { return t(i18nKey, typeStr, dataStr); } - public ReferentialReference<R> getData() { - return data; + public String getStripLabel() { + return getLabel().replaceAll("<[^>]+>", ""); + } + + public Class<R> getType() { + return data.getType(); + } + + public String getId() { + return data.getId(); } public Icon getIcon() { return icon; } + public void registerTask(ReferentialSynchronizeServiceProduceSqlsRequest.Builder builder) { + builder.addTask(isLeft(), taskType, getType(), getId(), null); + } + } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskWithReplaceSupport.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskWithReplaceSupport.java index 08419f9..ace9be9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskWithReplaceSupport.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/ReferentialSynchronizeTaskWithReplaceSupport.java @@ -3,6 +3,7 @@ package fr.ird.observe.ui.admin.synchronize.referential.ng.task; import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceProduceSqlsRequest; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; import static org.nuiton.i18n.I18n.t; @@ -23,12 +24,16 @@ public abstract class ReferentialSynchronizeTaskWithReplaceSupport<R extends Ref this.replaceDataStr = replaceData == null ? null : ObserveSwingApplicationContext.get().getDecoratorService().getReferentialReferenceDecorator(replaceData.getType()).toString(replaceData); } - public ReferentialReference<R> getReplaceData() { - return replaceData; + public String getReplaceId() { + return replaceData == null ? null : replaceData.getId(); } @Override public String getLabel() { return t(i18nKey, typeStr, dataStr, replaceDataStr); } + + public void registerTask(ReferentialSynchronizeServiceProduceSqlsRequest.Builder builder) { + builder.addTask(isLeft(), getTaskType(), getType(), getId(), getReplaceId()); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/SkipReferentialSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/SkipReferentialSynchronizeTask.java index 1c2e157..63b11f8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/SkipReferentialSynchronizeTask.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/SkipReferentialSynchronizeTask.java @@ -2,6 +2,7 @@ package fr.ird.observe.ui.admin.synchronize.referential.ng.task; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceProduceSqlsRequest; import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronizeResources; /** @@ -16,4 +17,8 @@ public class SkipReferentialSynchronizeTask<R extends ReferentialDto> extends Re super(ReferentialSynchronizeResources.SKIP, left, data); } + @Override + public void registerTask(ReferentialSynchronizeServiceProduceSqlsRequest.Builder builder) { + // Skip! + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateToReferentialSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateReferentialSynchronizeTask.java similarity index 68% rename from observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateToReferentialSynchronizeTask.java rename to observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateReferentialSynchronizeTask.java index 13b4c5c..7a0091a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateToReferentialSynchronizeTask.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/task/UpdateReferentialSynchronizeTask.java @@ -10,9 +10,9 @@ import fr.ird.observe.ui.admin.synchronize.referential.ng.ReferentialSynchronize * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class UpdateToReferentialSynchronizeTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { +public class UpdateReferentialSynchronizeTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - public UpdateToReferentialSynchronizeTask(boolean left, ReferentialReference<R> data) { + public UpdateReferentialSynchronizeTask(boolean left, ReferentialReference<R> data) { super(ReferentialSynchronizeResources.UPDATE, left, data); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModel.java index 68107f9..c102002 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModel.java @@ -42,6 +42,7 @@ public class ReferentialSynchronizeTreeModel implements TreeSelectionModel, Tree private boolean canUpdate; private boolean canDelete; private boolean canRevert; + private boolean valueIsAdjusting; public ReferentialSynchronizeTreeModel(RootReferentialSynchroNode root) { this.treeModel = new DefaultTreeModel(root); @@ -70,7 +71,7 @@ public class ReferentialSynchronizeTreeModel implements TreeSelectionModel, Tree } - public Iterable<ReferenceReferentialSynchroNodeSupport> filterSelectedReferenceNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { + public Collection<ReferenceReferentialSynchroNodeSupport> filterSelectedReferenceNodes(Predicate<ReferenceReferentialSynchroNodeSupport> predicate) { ImmutableSet.Builder<ReferenceReferentialSynchroNodeSupport> builder = ImmutableSet.builder(); @@ -191,8 +192,8 @@ public class ReferentialSynchronizeTreeModel implements TreeSelectionModel, Tree collectPaths(collectedPaths, paths); - if (log.isInfoEnabled()) { - log.info("path(s) to add: " + collectedPaths.size()); + if (log.isDebugEnabled()) { + log.debug("path(s) to add: " + collectedPaths.size()); } treeSelectionModel.addSelectionPaths(collectedPaths.toArray(new TreePath[collectedPaths.size()])); } finally { @@ -202,8 +203,6 @@ public class ReferentialSynchronizeTreeModel implements TreeSelectionModel, Tree } } - private boolean valueIsAdjusting; - @Override public void removeSelectionPaths(TreePath... paths) { @@ -218,8 +217,8 @@ public class ReferentialSynchronizeTreeModel implements TreeSelectionModel, Tree collectPaths(collectedPaths, paths); - if (log.isInfoEnabled()) { - log.info("path(s) to remove: " + collectedPaths.size()); + if (log.isDebugEnabled()) { + log.debug("path(s) to remove: " + collectedPaths.size()); } treeSelectionModel.removeSelectionPaths(collectedPaths.toArray(new TreePath[collectedPaths.size()])); } finally { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java index 639832e..643b25c 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java @@ -359,7 +359,7 @@ public class ValidateUIHandler extends AdminTabUIHandler { // on recupere la source de données - source = getSource(); + source = model.getSafeCentralSource(false); DecoratorService decoratorService = getDecoratorService(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx index 1252346..68190ad 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx @@ -36,6 +36,7 @@ jaxx.runtime.swing.editor.bean.BeanListHeader jaxx.runtime.validator.swing.SwingValidator + javax.swing.DefaultListModel javax.swing.ListSelectionModel javax.swing.JTable javax.swing.UIManager diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jcss b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jcss index 40cddf2..179a340 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jcss +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jcss @@ -43,6 +43,7 @@ #list { selectionMode:{ListSelectionModel.SINGLE_SELECTION}; + model:{new DefaultListModel()}; } #listView { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java index 2b01a04..7db44aa 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java @@ -22,11 +22,13 @@ package fr.ird.observe.ui.content.ref; import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.decoration.DecoratorService; +import fr.ird.observe.application.swing.decoration.decorators.ReferentialReferenceDecorator; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.ObserveSwingDataSource; -import fr.ird.observe.services.dto.ReferenceMap; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ReferenceMap; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.reference.request.ReferenceSetRequestDefinitions; @@ -38,14 +40,12 @@ import fr.ird.observe.services.dto.referential.VesselSizeCategoryDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.DataNotFoundException; import fr.ird.observe.services.service.ReferentialService; -import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.ContentUIHandler; import fr.ird.observe.ui.tree.ObserveTreeHelper; import fr.ird.observe.ui.usage.UsagesUI; import fr.ird.observe.ui.util.SpringUtilities; -import fr.ird.observe.application.swing.decoration.decorators.ReferentialReferenceDecorator; import fr.ird.observe.validation.ValidationContext; import jaxx.runtime.JAXXContext; import jaxx.runtime.swing.CardLayout2Ext; @@ -85,6 +85,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -765,13 +766,26 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content String beanId = bean.getId(); getReferentialService().delete(getBeanType(), beanId); + return true; + } + + @Override + protected void afterDelete() { + E bean = getBean(); if (bean instanceof ProgramDto) { // remove the program in tree ObserveTreeHelper treeHelper = getTreeHelper(getUi()); - treeHelper.removeProgram(beanId); + treeHelper.removeProgram(bean.getId()); } - return true; + + Optional<ReferentialReference<ReferentialDto>> referenceToDelete = getModel().tryGetReferentialReferenceById("referentialListHeader", bean.getId()); + List<ReferentialReference<E>> references = new ArrayList<>(getModel().getReferentialReferences("referentialListHeader")); + references.remove(referenceToDelete.get()); + getUi().getReferentialListHeader().setData(references); + + //getModel().setSelectedBean(null); + super.afterDelete(); } protected void afterSave(boolean refresh) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index a28ee48..1ac2533 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -73,6 +73,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; +import static fr.ird.observe.ui.admin.AdminUIModel.LOG_PROPERTY_CHANGE_LISTENER; import static org.nuiton.i18n.I18n.t; /** @@ -606,15 +607,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { centralSourceModel.start(DbMode.USE_REMOTE); if (log.isDebugEnabled()) { - centralSourceModel.addPropertyChangeListener(evt -> { - String name = evt.getPropertyName(); - Object oldValue = evt.getOldValue(); - Object newValue = evt.getNewValue(); - if (log.isDebugEnabled()) { - log.debug(evt.getSource() + " - Property [" + name + "] has changed from " + oldValue + " to " + newValue); - } - - }); + centralSourceModel.removePropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); + centralSourceModel.addPropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); } // on teste si la connexion distante existe @@ -640,15 +634,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { dataSourceModel.start(DbMode.USE_REMOTE); if (log.isDebugEnabled()) { - dataSourceModel.addPropertyChangeListener(evt -> { - String name = evt.getPropertyName(); - Object oldValue = evt.getOldValue(); - Object newValue = evt.getNewValue(); - if (log.isDebugEnabled()) { - log.debug(evt.getSource() + " - Property [" + name + "] has changed from " + oldValue + " to " + newValue); - } - - }); + dataSourceModel.removePropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); + dataSourceModel.addPropertyChangeListener(LOG_PROPERTY_CHANGE_LISTENER); } // on teste si la connexion distante existe diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 9b0aa31..d05d456 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -272,21 +272,21 @@ observe.actions.synchro.referential.replaceBeforeDesactivate.title=Remplacement observe.actions.synchro.referential.safe.entity.to.choose.label=Objets disponibles observe.actions.synchro.referential.step=Synchronisation avancée du référentiel observe.actions.synchro.referential.step.description=Synchronisation bi-directionnelle de référentiel -observe.actions.synchro.referential.task.addToLeft=<html><body>Ajouter dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.addToRight=<html><body>Ajouter dans la base de droite \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.deleteFromLeft=<html><body>Supprimer dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.deleteFromRight=<html><body>Supprimer dans la base de droite \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» -observe.actions.synchro.referential.task.desactivateFromLeft=<html><body>Désactiver (sans remplacement) dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.desactivateFromRight=<html><body>Désactiver (sans remplacement) dans la base dans droite \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.desactivateWithReplaceFromLeft=<html><body>Désactiver dans la base de gauche \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» -observe.actions.synchro.referential.task.desactivateWithReplaceFromRight=<html><body>Désactiver dans la base de droite \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» +observe.actions.synchro.referential.task.addToLeft=Ajouter dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.addToRight=Ajouter dans la base de droite \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.deleteFromLeft=Supprimer dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.deleteFromRight=Supprimer dans la base de droite \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» +observe.actions.synchro.referential.task.desactivateFromLeft=Désactiver (sans remplacement) dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.desactivateFromRight=Désactiver (sans remplacement) dans la base dans droite \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.desactivateWithReplaceFromLeft=Désactiver dans la base de gauche \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» +observe.actions.synchro.referential.task.desactivateWithReplaceFromRight=Désactiver dans la base de droite \: <i>%s</i> - «<b>%s</b>» à remplacer par «<b>%s</b>» observe.actions.synchro.referential.task.prepare=Enregistement de l'action %s -observe.actions.synchro.referential.task.revertFromLeft=<html><body>Revenir en arrière dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.revertFromRight=<html><body>Revenir en arrière dans la base de droite \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.skipFromLeft=<html><body>Ne rien faire dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.skipFromRight=<html><body>Ne rien faire dans la base de droite \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.updateToLeft=<html><body>Mettre à jour dans la base de gauche \: <i>%s</i> - «<b>%s</b>» -observe.actions.synchro.referential.task.updateToRight=<html><body>Mettre à jour dans la base de droite \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.revertFromLeft=Revenir en arrière dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.revertFromRight=Revenir en arrière dans la base de droite \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.skipFromLeft=Ne rien faire dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.skipFromRight=Ne rien faire dans la base de droite \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.updateToLeft=Mettre à jour dans la base de gauche \: <i>%s</i> - «<b>%s</b>» +observe.actions.synchro.referential.task.updateToRight=Mettre à jour dans la base de droite \: <i>%s</i> - «<b>%s</b>» observe.actions.synchro.referential.title=Synchronisation avancée du référentiel observe.actions.synchro.referential.title.tip=Synchronisation avancée du référentiel observe.actions.synchro.referential.withMode=Synchronisation du référentiel (%s) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.