Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: bca377b5 by Tony Chemit at 2022-04-15T12:31:51+02:00 Corriger le nombre d'étapes dans l'export de données - Closes #2217 - - - - - 6 changed files: - client/core/src/main/java/fr/ird/observe/client/datasource/api/data/CopyDataTask.java - client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DataTaskSupport.java - client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DeleteDataTask.java - client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.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/synchronize/data/actions/Apply.java Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/CopyDataTask.java ===================================== @@ -102,6 +102,11 @@ public class CopyDataTask extends DataTaskSupport { return t(super.getLabel(), prefix, data); } + @Override + public int stepCount() { + return 4; + } + public boolean isDataExistOnOpposite() { return dataExistOnOpposite; } @@ -122,10 +127,14 @@ public class CopyDataTask extends DataTaskSupport { if (tripResult.isDeleted()) { String message = sendLogResultMessage(progressModel, deleteI18nKey, sourceLabel, prefix, data, tripResult.getDeleteTime()); log.info(message); + } else { + progressModel.increments(); } if (tripResult.isImported()) { String message = sendLogResultMessage(progressModel, importI18nKey, sourceLabel, prefix, data, tripResult.getImportTime()); log.info(message); + } else { + progressModel.increments(); } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DataTaskSupport.java ===================================== @@ -61,6 +61,7 @@ public abstract class DataTaskSupport { return label; } + public abstract int stepCount(); String sendLogResultMessage(ProgressionModel progressModel, String i18nKey, String sourceLabel, ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DeleteDataTask.java ===================================== @@ -77,6 +77,11 @@ public class DeleteDataTask extends DataTaskSupport { } } + @Override + public int stepCount() { + return 2; + } + @Override public String getLabel() { return t(super.getLabel(), prefix, data); ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.java ===================================== @@ -70,20 +70,20 @@ public class InsertMissingReferentialTask extends DataTaskSupport { return I18n.t(super.getLabel()); } + @Override + public int stepCount() { + return 3; + } + public void consume(ProgressionModel progressModel, Supplier<String> messageSupplier, ObserveSwingDataSource incomingSource, ObserveSwingDataSource targetSource) { progressModel.increments(); String targetSourceLabel = targetSource.getLabel(); - //FIXME Review this code, if a referential synchro was just performed before - //FIXME We then have already resolved all ids that are only on incoming source - //FIXME From this ids, retains all that are in data to export (on incoming source) - //FIXME That's all, no need to call target source ReferentialService targetReferentialService = targetSource.getReferentialService(); ReferentialIds targetSourceReferential = targetReferentialService.getReferentialIds(); MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(targetSourceReferential.getIds(), idsToCopy.toArray(new String[0])); MissingReferentialResult missingReferentialResult = incomingSource.getRootOpenableService().computeMissingReferential(dataType, missingReferentialRequest); - progressModel.increments(); if (missingReferentialResult == null) { ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Start.java ===================================== @@ -29,6 +29,8 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; import fr.ird.observe.client.datasource.api.data.CopyDataTask; import fr.ird.observe.client.datasource.api.data.DataManager; import fr.ird.observe.dto.ProgressionModel; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState; import javax.swing.ActionMap; @@ -63,24 +65,17 @@ public class Start extends ExportUIActionSupport { AdminUIModel model = ui.getModel(); ExportModel stepModel = model.getExportModel(); -// ConfigModel configModel = model.getConfigModel(); -// String sourceSourceLabel = configModel.getLeftSourceModel().getLabelWithUrl().substring(configModel.getLeftSourceModel().getLabel().length()); -// String centralSourceLabel = configModel.getRightSourceModel().getLabelWithUrl().substring(configModel.getRightSourceModel().getLabel().length()); - - //get selected data List<CopyDataTask> tasks = stepModel.getTasks(); - if (tasks.isEmpty()) { throw new IllegalStateException("Can't export no trip..."); } - int stepCount = 2 + 2 * tasks.size(); + int stepCount = 2 + tasks.stream().mapToInt(CopyDataTask::stepCount).sum(); ProgressionModel progressModel = stepModel.getProgressModel(); progressModel.setMaximum(stepCount); progressModel.setValue(0); - progressModel.increments(); try (ObserveSwingDataSource localDataSource = openSource(stepModel.getSource())) { progressModel.increments(); try (ObserveSwingDataSource centralDataSource = openSource(stepModel.getCentralSource())) { @@ -90,7 +85,9 @@ public class Start extends ExportUIActionSupport { } } sendMessage(t("observe.ui.datasource.editor.actions.operation.message.done", new Date())); - + log.warn(String.format("Expected count: %d - final step count: %d", stepCount, progressModel.getValue())); return WizardState.SUCCESSED; } + + private static final Logger log = LogManager.getLogger(Start.class); } ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java ===================================== @@ -39,12 +39,12 @@ import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState; import javax.swing.DefaultListModel; import java.awt.event.ActionEvent; +import java.util.Date; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; import static io.ultreia.java4all.i18n.I18n.t; @@ -74,62 +74,51 @@ public class Apply extends DataSynchroUIActionSupport { ObserveSwingDataSource leftSource = stepModel.getLeftSource(); ObserveSwingDataSource rightSource = stepModel.getRightSource(); DefaultListModel<DataTaskSupport> tasks = stepModel.getTasks(); - List<String> leftDataIds = stepModel.getLeftSelectionDataModel().allDataIds(); - List<String> rightDataIds = stepModel.getRightSelectionDataModel().allDataIds(); - final AtomicInteger stepsCount = new AtomicInteger(); + Set<String> idsToCopyToLeft = new LinkedHashSet<>(); Set<String> idsToCopyToRight = new LinkedHashSet<>(); Iterator<DataTaskSupport> iterator = tasks.elements().asIterator(); List<DataTaskSupport> finalTasksToConsume = new LinkedList<>(); while (iterator.hasNext()) { DataTaskSupport task = iterator.next(); - stepsCount.incrementAndGet(); if (task instanceof CopyDataTask) { - stepsCount.addAndGet(2); task.getTaskSide().consume( (CopyDataTask) task, // add task id on right - t -> { - idsToCopyToRight.add(t.getData().getTopiaId()); - if (rightDataIds.contains(t.getData().getTopiaId())) { - stepsCount.incrementAndGet(); - } - }, + t -> idsToCopyToRight.add(t.getData().getTopiaId()), // add task id on left - t -> { - idsToCopyToLeft.add(t.getData().getTopiaId()); - if (leftDataIds.contains(t.getData().getTopiaId())) { - stepsCount.incrementAndGet(); - } - }); + t -> idsToCopyToLeft.add(t.getData().getTopiaId())); } finalTasksToConsume.add(task); } if (!idsToCopyToLeft.isEmpty()) { - stepsCount.addAndGet(3); // first add missing referential to left finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_RIGHT, dataType, idsToCopyToLeft)); } if (!idsToCopyToRight.isEmpty()) { - stepsCount.addAndGet(3); // first add missing referential to right finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_LEFT, dataType, idsToCopyToRight)); } - int totalStep = stepsCount.get(); - log.info("Total step computed: " + totalStep); + int stepCount = 1 + finalTasksToConsume.stream().mapToInt(DataTaskSupport::stepCount).sum(); + log.info("Total step computed: " + stepCount); ProgressionModel progressModel = stepModel.getProgressModel(); - progressModel.setMaximum(totalStep); + progressModel.setMaximum(stepCount); DataManager dataManager = new DataManager(progressModel, leftSource, rightSource); + progressModel.increments(); try { dataManager.consume(finalTasksToConsume); + sendMessage(t("observe.ui.datasource.editor.actions.operation.message.done", new Date())); + return WizardState.SUCCESSED; } catch (Exception e) { + progressModel.increments(); if (e instanceof UserCancelException) { return WizardState.CANCELED; } throw e; + } finally { + log.warn(String.format("Expected count: %d - final step count: %d", stepCount, progressModel.getValue())); } - return WizardState.SUCCESSED; } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bca377b59bff5b93f3da277f83... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bca377b59bff5b93f3da277f83... You're receiving this email because of your account on gitlab.com.