Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: e06ff9e9 by Tony Chemit at 2024-03-19T11:22:17+01:00 Fix one i18n translation - - - - - 11ea9d2d by Tony Chemit at 2024-03-19T14:20:44+01:00 Review DataManager code (no more logic in the tasks) - - - - - f0d95762 by Tony Chemit at 2024-03-19T14:20:44+01:00 Reduce log in ReferentialIdsBuilder - - - - - ed8c4a22 by Tony Chemit at 2024-03-19T14:20:44+01:00 Fix DataSource IO in long actions - - - - - b3cab5a2 by Tony Chemit at 2024-03-19T14:20:44+01:00 Perte de connection au serveur lors d'envoie massif de marées - Closes #2854 - - - - - 4b1fe74f by Tony Chemit at 2024-03-19T14:20:44+01:00 update pom - - - - - 14 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/DataManager.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/core/src/main/java/fr/ird/observe/client/datasource/api/data/TaskSide.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/validate/actions/Start.java - client/runner/src/main/i18n/translations/client-runner_en_GB.properties - client/runner/src/main/i18n/translations/client-runner_es_ES.properties - client/runner/src/main/i18n/translations/client-runner_fr_FR.properties - core/services/client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java - pom.xml - toolkit/persistence/src/main/java/fr/ird/observe/spi/referential/ReferentialIdsBuilder.java Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/CopyDataTask.java ===================================== @@ -22,22 +22,13 @@ package fr.ird.observe.client.datasource.api.data; * #L% */ -import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; -import fr.ird.observe.dto.ProgressionModel; import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.navigation.tree.selection.SelectionTreeModel; import fr.ird.observe.navigation.tree.selection.SelectionTreeNodeBean; -import fr.ird.observe.services.service.data.ExportDataRequest; -import fr.ird.observe.services.service.data.ExportDataResult; -import fr.ird.observe.services.service.data.ImportDataRequest; -import fr.ird.observe.services.service.data.ImportDataResult; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.util.function.BiFunction; import java.util.stream.Stream; -import static io.ultreia.java4all.i18n.I18n.n; import static io.ultreia.java4all.i18n.I18n.t; /** @@ -48,7 +39,6 @@ import static io.ultreia.java4all.i18n.I18n.t; */ public class CopyDataTask extends DataTaskSupport { - private static final Logger log = LogManager.getLogger(CopyDataTask.class); private final boolean dataExistOnOpposite; private final ToolkitIdLabel data; private final String prefix; @@ -65,30 +55,6 @@ public class CopyDataTask extends DataTaskSupport { this.prefix = prefix; } - public void consume(ProgressionModel progressModel, ObserveSwingDataSource incomingSource, ObserveSwingDataSource targetSource) { - String tripId = data.getTopiaId(); - String incomingSourceLabel = incomingSource.getLabel(); - String targetSourceLabel = targetSource.getLabel(); - progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.copy", targetSourceLabel, prefix, data)); - ExportDataRequest exportDataRequest = new ExportDataRequest(!targetSource.isLocal(), tripId); - ExportDataResult exportDataResult = incomingSource.getDataManagementService().exportData(exportDataRequest); - logExportResult(progressModel, n("observe.ui.datasource.editor.actions.data.export.result"), - incomingSourceLabel, - exportDataResult); - - ImportDataRequest importDataRequest = new ImportDataRequest(exportDataResult); - log.info("Use import script: " + importDataRequest.getSqlContent().getLocation()); - ImportDataResult importDataResult = targetSource.getDataManagementService().importData(importDataRequest); - logImportResult(progressModel, n("observe.ui.datasource.editor.actions.data.import.result"), - n("observe.ui.datasource.editor.actions.data.delete.result"), - targetSourceLabel, - importDataResult); - - if (targetSource.isLocal()) { - targetSource.setModified(true); - } - } - public final ToolkitIdLabel getData() { return data; } @@ -111,31 +77,4 @@ public class CopyDataTask extends DataTaskSupport { return dataExistOnOpposite; } - void logExportResult(ProgressionModel progressModel, - String i18nKey, - String sourceLabel, - ExportDataResult tripResult) { - String message = sendLogResultMessage(progressModel, i18nKey, sourceLabel, prefix, data, tripResult.getTime()); - log.info(message); - } - - void logImportResult(ProgressionModel progressModel, - String importI18nKey, - String deleteI18nKey, - String sourceLabel, - ImportDataResult tripResult) { - 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/DataManager.java ===================================== @@ -23,12 +23,38 @@ package fr.ird.observe.client.datasource.api.data; */ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; +import fr.ird.observe.client.datasource.usage.UsageForDisplayUIHandler; +import fr.ird.observe.dto.I18nDecoratorHelper; import fr.ird.observe.dto.ProgressionModel; +import fr.ird.observe.dto.ToolkitIdLabel; +import fr.ird.observe.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.data.DataManagementService; +import fr.ird.observe.services.service.data.DeleteDataRequest; +import fr.ird.observe.services.service.data.DeleteDataResult; +import fr.ird.observe.services.service.data.ExportDataRequest; +import fr.ird.observe.services.service.data.ExportDataResult; +import fr.ird.observe.services.service.data.ImportDataRequest; +import fr.ird.observe.services.service.data.ImportDataResult; +import fr.ird.observe.services.service.data.MissingReferentialRequest; +import fr.ird.observe.services.service.data.MissingReferentialResult; +import fr.ird.observe.services.service.referential.ReferentialIds; +import fr.ird.observe.services.service.referential.ReferentialService; import io.ultreia.java4all.application.template.spi.GenerateTemplate; -import io.ultreia.java4all.lang.TwoSideContext; +import io.ultreia.java4all.lang.Strings; +import io.ultreia.java4all.util.SingletonSupplier; +import io.ultreia.java4all.util.TwoSideContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.Collection; +import java.util.Map; import java.util.Objects; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +import static io.ultreia.java4all.i18n.I18n.n; +import static io.ultreia.java4all.i18n.I18n.t; /** * Hi-level object to perform business data management (says: delete some trip, copy some trip, insert missing referential, ...) @@ -40,10 +66,15 @@ import java.util.Objects; */ @GenerateTemplate(template = "showMissingReferential.ftl") public class DataManager { + private static final Logger log = LogManager.getLogger(DataManager.class); /** * Data sources by side. */ private final TwoSideContext<TaskSide, ObserveSwingDataSource> dataSources; + /** + * {@link DataManagementService} supplier by side. + */ + private final TwoSideContext<TaskSide, Supplier<DataManagementService>> dataManagementServices; /** * Progression model. */ @@ -61,6 +92,7 @@ public class DataManager { return rightSource; } }; + this.dataManagementServices = dataSources.then(s -> SingletonSupplier.of(s::getDataManagementService)); this.progressModel = Objects.requireNonNull(progressModel); } @@ -90,18 +122,113 @@ public class DataManager { return dataSources; } - public void consume(CopyDataTask task) { - TaskSide taskSide = task.getTaskSide(); - task.consume(progressModel, dataSources.onSameSide(taskSide), dataSources.onOppositeSide(taskSide)); + void consume(CopyDataTask task) { + @SuppressWarnings("resource") ObserveSwingDataSource incomingSource = dataSources.onSameSide(task.getTaskSide()); + @SuppressWarnings("resource") ObserveSwingDataSource targetSource = dataSources.onOppositeSide(task.getTaskSide()); + DataManagementService incomingSourceDataManagementService = dataManagementServices.onSameSide(task.getTaskSide()).get(); + DataManagementService targetSourceDataManagementService = dataManagementServices.onOppositeSide(task.getTaskSide()).get(); + String tripId = task.getData().getTopiaId(); + String incomingSourceLabel = incomingSource.getLabel(); + String targetSourceLabel = targetSource.getLabel(); + progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.copy", targetSourceLabel, task.getPrefix(), task.getData())); + ExportDataRequest exportDataRequest = new ExportDataRequest(!targetSource.isLocal(), tripId); + ExportDataResult exportDataResult = incomingSourceDataManagementService.exportData(exportDataRequest); + + String message = sendLogResultMessage(n("observe.ui.datasource.editor.actions.data.export.result"), + incomingSourceLabel, task.getPrefix(), task.getData(), exportDataResult.getTime()); + log.info(message); + ImportDataRequest importDataRequest = new ImportDataRequest(exportDataResult); + log.info("Use import script: " + importDataRequest.getSqlContent().getLocation()); + ImportDataResult importDataResult = targetSourceDataManagementService.importData(importDataRequest); + + if (importDataResult.isDeleted()) { + message = sendLogResultMessage(n("observe.ui.datasource.editor.actions.data.delete.result"), targetSourceLabel, task.getPrefix(), task.getData(), importDataResult.getDeleteTime()); + log.info(message); + } else { + progressModel.increments(); + } + if (importDataResult.isImported()) { + message = sendLogResultMessage(n("observe.ui.datasource.editor.actions.data.import.result"), targetSourceLabel, task.getPrefix(), task.getData(), importDataResult.getImportTime()); + log.info(message); + } else { + progressModel.increments(); + } + if (targetSource.isLocal()) { + targetSource.setModified(true); + } + } + + void consume(InsertMissingReferentialTask task) { + @SuppressWarnings("resource") ObserveSwingDataSource incomingSource = dataSources.onSameSide(task.getTaskSide()); + @SuppressWarnings("resource") ObserveSwingDataSource targetSource = dataSources.onOppositeSide(task.getTaskSide()); + progressModel.increments(); + + String targetSourceLabel = targetSource.getLabel(); + + ReferentialService targetReferentialService = targetSource.getReferentialService(); + ReferentialIds targetSourceReferential = targetReferentialService.getReferentialIds(); + MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(targetSourceReferential.getIds(), task.getIdsToCopy().toArray(new String[0])); + MissingReferentialResult missingReferentialResult = incomingSource.getRootOpenableService().computeMissingReferential(task.getDataType(), missingReferentialRequest); + progressModel.increments(); + + if (missingReferentialResult == null) { + progressModel.increments(); + return; + } + + // there is some referential to add to target source + + Map<Class<? extends ReferentialDto>, Set<ToolkitIdLabel>> usages = incomingSource.getReferentialMap(missingReferentialResult.getMissingIds()); + + boolean response = UsageForDisplayUIHandler.showMissingReferential(this.getMessage(), usages, targetSourceLabel); + + if (!response) { + progressModel.increments(); + throw new UserCancelException(); + } + + StringBuilder parameters = new StringBuilder(); + + for (Class<? extends ReferentialDto> key : usages.keySet()) { + Set<ToolkitIdLabel> references = usages.get(key); + String type = t(I18nDecoratorHelper.getType(key)); + String labels = references.stream().map(Object::toString).collect(Collectors.joining("\n\t * ")); + parameters.append(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type", targetSourceLabel, references.size(), type, labels)); + parameters.append("\n"); + } + + progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential", targetSourceLabel, parameters.toString())); + + targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode()); } - public void consume(InsertMissingReferentialTask task) { - TaskSide taskSide = task.getTaskSide(); - task.consume(progressModel, this::getMessage, dataSources.onSameSide(taskSide), dataSources.onOppositeSide(taskSide)); + void consume(DeleteDataTask task) { + @SuppressWarnings("resource") ObserveSwingDataSource targetSource = dataSources.onSameSide(task.getTaskSide()); + DataManagementService targetSourceDataManagementService = dataManagementServices.onSameSide(task.getTaskSide()).get(); + String targetSourceLabel = targetSource.getLabel(); + String dataId = task.getData().getTopiaId(); + + progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.delete", targetSourceLabel, task.getPrefix(), task.getData())); + DeleteDataRequest deleteDataRequest = new DeleteDataRequest(dataId); + DeleteDataResult deleteDataResult = targetSourceDataManagementService.deleteData(deleteDataRequest); + + String message = sendLogResultMessage(n("observe.ui.datasource.editor.actions.data.delete.result"), + targetSourceLabel, task.getPrefix(), task.getData(), deleteDataResult.getTime()); + log.info(message); + + if (targetSource.isLocal()) { + targetSource.setModified(true); + } } - public void consume(DeleteDataTask task) { - TaskSide taskSide = task.getTaskSide(); - task.consume(progressModel, dataSources.onSameSide(taskSide)); + String sendLogResultMessage(String i18nKey, + String sourceLabel, + String prefix, + ToolkitIdLabel data, + long time) { + String timeStr = Strings.convertTime(time); + String message = Strings.leftPad(timeStr, 20) + " - " + t(i18nKey, sourceLabel, prefix, data); + progressModel.setMessage(message); + return message; } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DataTaskSupport.java ===================================== @@ -22,15 +22,9 @@ package fr.ird.observe.client.datasource.api.data; * #L% */ -import fr.ird.observe.dto.ProgressionModel; -import fr.ird.observe.dto.ToolkitIdLabel; -import io.ultreia.java4all.lang.Strings; - import javax.swing.Icon; import java.util.Objects; -import static io.ultreia.java4all.i18n.I18n.t; - /** * Created on 03/08/16. * @@ -62,16 +56,5 @@ public abstract class DataTaskSupport { } public abstract int stepCount(); - String sendLogResultMessage(ProgressionModel progressModel, - String i18nKey, - String sourceLabel, - String prefix, - ToolkitIdLabel data, - long time) { - String timeStr = Strings.convertTime(time); - String message = Strings.leftPad(timeStr, 20) + " - " + t(i18nKey, sourceLabel, prefix, data); - progressModel.setMessage(message); - return message; - } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/DeleteDataTask.java ===================================== @@ -22,21 +22,14 @@ package fr.ird.observe.client.datasource.api.data; * #L% */ -import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; -import fr.ird.observe.dto.ProgressionModel; import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.navigation.tree.selection.SelectionTreeModel; import fr.ird.observe.navigation.tree.selection.SelectionTreeNodeBean; -import fr.ird.observe.services.service.data.DeleteDataRequest; -import fr.ird.observe.services.service.data.DeleteDataResult; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.util.Objects; import java.util.function.BiFunction; import java.util.stream.Stream; -import static io.ultreia.java4all.i18n.I18n.n; import static io.ultreia.java4all.i18n.I18n.t; /** @@ -47,7 +40,6 @@ import static io.ultreia.java4all.i18n.I18n.t; */ public class DeleteDataTask extends DataTaskSupport { - private static final Logger log = LogManager.getLogger(DeleteDataTask.class); private final String prefix; private final ToolkitIdLabel data; @@ -62,21 +54,6 @@ public class DeleteDataTask extends DataTaskSupport { this.data = Objects.requireNonNull(data); } - public void consume(ProgressionModel progressModel, ObserveSwingDataSource targetSource) { - String targetSourceLabel = targetSource.getLabel(); - String dataId = data.getTopiaId(); - - progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.delete", targetSourceLabel, prefix, data)); - DeleteDataRequest deleteDataRequest = new DeleteDataRequest(dataId); - DeleteDataResult deleteDataResult = targetSource.getDataManagementService().deleteData(deleteDataRequest); - logDeleteResult(progressModel, n("observe.ui.datasource.editor.actions.data.delete.result"), - targetSourceLabel, - deleteDataResult); - if (targetSource.isLocal()) { - targetSource.setModified(true); - } - } - @Override public int stepCount() { return 2; @@ -87,12 +64,11 @@ public class DeleteDataTask extends DataTaskSupport { return t(super.getLabel(), prefix, data); } - void logDeleteResult(ProgressionModel progressModel, - String deleteI18nKey, - String sourceLabel, - DeleteDataResult tripResult) { - String message = sendLogResultMessage(progressModel, deleteI18nKey, sourceLabel, prefix, data, tripResult.getTime()); - log.info(message); + public String getPrefix() { + return prefix; } + public ToolkitIdLabel getData() { + return data; + } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.java ===================================== @@ -22,27 +22,11 @@ package fr.ird.observe.client.datasource.api.data; * #L% */ -import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; -import fr.ird.observe.client.datasource.usage.UsageForDisplayUIHandler; -import fr.ird.observe.dto.I18nDecoratorHelper; -import fr.ird.observe.dto.ProgressionModel; -import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.dto.data.RootOpenableDto; -import fr.ird.observe.dto.referential.ReferentialDto; -import fr.ird.observe.services.service.data.MissingReferentialRequest; -import fr.ird.observe.services.service.data.MissingReferentialResult; -import fr.ird.observe.services.service.referential.ReferentialIds; -import fr.ird.observe.services.service.referential.ReferentialService; import io.ultreia.java4all.i18n.I18n; import java.util.Collection; -import java.util.Map; import java.util.Objects; -import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -import static io.ultreia.java4all.i18n.I18n.t; /** * Created on 12/11/2021. @@ -75,46 +59,12 @@ public class InsertMissingReferentialTask extends DataTaskSupport { return 3; } - public void consume(ProgressionModel progressModel, Supplier<String> messageSupplier, ObserveSwingDataSource incomingSource, ObserveSwingDataSource targetSource) { - progressModel.increments(); - - String targetSourceLabel = targetSource.getLabel(); - - 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) { - progressModel.increments(); - return; - } - - // there is some referential to add to target source - - Map<Class<? extends ReferentialDto>, Set<ToolkitIdLabel>> usages = incomingSource.getReferentialMap(missingReferentialResult.getMissingIds()); - - boolean response = UsageForDisplayUIHandler.showMissingReferential(messageSupplier.get(), usages, targetSourceLabel); - - if (!response) { - progressModel.increments(); - throw new UserCancelException(); - } - - StringBuilder parameters = new StringBuilder(); - - for (Class<? extends ReferentialDto> key : usages.keySet()) { - Set<ToolkitIdLabel> references = usages.get(key); - String type = t(I18nDecoratorHelper.getType(key)); - String labels = references.stream().map(Object::toString).collect(Collectors.joining("\n\t * ")); - parameters.append(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type", targetSourceLabel, references.size(), type, labels)); - parameters.append("\n"); - } - - progressModel.setMessage(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential", targetSourceLabel, parameters.toString())); + public Class<? extends RootOpenableDto> getDataType() { + return dataType; + } - targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode()); + public Collection<String> getIdsToCopy() { + return idsToCopy; } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/TaskSide.java ===================================== @@ -24,7 +24,7 @@ package fr.ird.observe.client.datasource.api.data; import fr.ird.observe.client.util.UIHelper; import io.ultreia.java4all.i18n.I18n; -import io.ultreia.java4all.lang.TwoSide; +import io.ultreia.java4all.util.TwoSide; import javax.swing.Icon; ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java ===================================== @@ -32,6 +32,11 @@ import fr.ird.observe.client.datasource.api.data.DataTaskSupport; import fr.ird.observe.client.datasource.api.data.InsertMissingReferentialTask; import fr.ird.observe.client.datasource.api.data.TaskSide; import fr.ird.observe.client.datasource.api.data.UserCancelException; +import fr.ird.observe.datasource.security.BabModelVersionException; +import fr.ird.observe.datasource.security.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.datasource.security.DatabaseConnexionNotAuthorizedException; +import fr.ird.observe.datasource.security.DatabaseNotFoundException; +import fr.ird.observe.datasource.security.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.dto.ProgressionModel; import fr.ird.observe.dto.data.RootOpenableDto; import io.ultreia.java4all.lang.Strings; @@ -69,14 +74,12 @@ public class Apply extends DataSynchroUIActionSupport { addAdminWorker(getUi().getStart().getToolTipText(), this::doApply); } - private WizardState doApply() { + private WizardState doApply() throws BabModelVersionException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, IncompatibleDataSourceCreateConfigurationException, DatabaseConnexionNotAuthorizedException { DataSynchroModel stepModel = ui.getStepModel(); DataSelectionTreePaneModel leftModel = stepModel.getModel(true); String moduleName = leftModel.getSelectionDataModel().getConfig().getModuleName(); Class<? extends RootOpenableDto> dataType = "ps".equals(moduleName) ? fr.ird.observe.dto.data.ps.common.TripDto.class : fr.ird.observe.dto.data.ll.common.TripDto.class; - ObserveSwingDataSource leftSource = leftModel.getSource(); - ObserveSwingDataSource rightSource = stepModel.getModel(false).getSource(); DefaultListModel<DataTaskSupport> tasks = stepModel.getTasks(); Set<String> idsToCopyToLeft = new LinkedHashSet<>(); @@ -107,21 +110,26 @@ public class Apply extends DataSynchroUIActionSupport { log.info("Total step computed: " + stepCount); ProgressionModel progressModel = stepModel.getProgressModel(); progressModel.setMaximum(stepCount); - DataManager dataManager = new DataManager(progressModel, leftSource, rightSource); - long t00 = TimeLog.getTime(); - progressModel.increments(); - try { - dataManager.consume(finalTasksToConsume); - sendMessage(t("observe.ui.datasource.editor.actions.operation.message.done", new Date(), Strings.convertTime(TimeLog.getTime() - t00))); - return WizardState.SUCCESSED; - } catch (Exception e) { - progressModel.increments(); - if (e instanceof UserCancelException) { - return WizardState.CANCELED; + + try (ObserveSwingDataSource leftSource = openSource(leftModel.getSource())) { + try (ObserveSwingDataSource rightSource = openSource(stepModel.getModel(false).getSource())) { + long t00 = TimeLog.getTime(); + progressModel.increments(); + try { + DataManager dataManager = new DataManager(progressModel, leftSource, rightSource); + dataManager.consume(finalTasksToConsume); + sendMessage(t("observe.ui.datasource.editor.actions.operation.message.done", new Date(), Strings.convertTime(TimeLog.getTime() - t00))); + 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())); + } } - throw e; - } finally { - log.warn(String.format("Expected count: %d - final step count: %d", stepCount, progressModel.getValue())); } } ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java ===================================== @@ -148,76 +148,74 @@ public class Start extends ValidateUIActionSupport { SelectionTreeModel dataModel = model.getSelectDataModel().getSelectionDataModel(); - ObserveSwingDataSource dataSourceToValidate = model.getConfigModel().getLeftSourceModel().getSource(); + try (ObserveSwingDataSource dataSourceToValidate = model.getConfigModel().getLeftSourceModel().getSource()) { + int stepsCount = computeStepCount(dataSourceToValidate, dataModel); + log.info("Step count: {}", stepsCount); + ProgressionModel progressModel = stepModel.getProgressModel(); + progressModel.setMaximum(stepsCount); + progressModel.setValue(0); + + if (!dataSourceToValidate.isOpen()) { + dataSourceToValidate.open(); + progressModel.increments(); + } - int stepsCount = computeStepCount(dataSourceToValidate, dataModel); - log.info("Step count: {}", stepsCount); - ProgressionModel progressModel = stepModel.getProgressModel(); - progressModel.setMaximum(stepsCount); - progressModel.setValue(0); + ValidateService validateService = dataSourceToValidate.getValidateService(); - if (!dataSourceToValidate.isOpen()) { - dataSourceToValidate.open(); - progressModel.increments(); - } + Set<NuitonValidatorScope> scopes = stepModel.getScopes(); + String contextName = stepModel.getContextName(); + ValidationResult result; - ValidateService validateService = dataSourceToValidate.getValidateService(); + ValidationRequestConfiguration configuration = stepModel.toValidationRequestConfiguration(); + if (dataModel.getConfig().isLoadReferential()) { - Set<NuitonValidatorScope> scopes = stepModel.getScopes(); - String contextName = stepModel.getContextName(); + ReferentialValidationRequest request = new ReferentialValidationRequest(); - ValidationResult result; + request.setReferentialTypes(dataModel.getSelectedReferential()); + request.setScopes(scopes); + request.setValidationContext(contextName); - ValidationRequestConfiguration configuration = stepModel.toValidationRequestConfiguration(); - if (dataModel.getConfig().isLoadReferential()) { + progressModel.increments(); + result = validateService.validateReferential(configuration, request); + progressModel.increments(); - ReferentialValidationRequest request = new ReferentialValidationRequest(); + } else if (dataModel.getConfig().isLoadData()) { - request.setReferentialTypes(dataModel.getSelectedReferential()); - request.setScopes(scopes); - request.setValidationContext(contextName); - - progressModel.increments(); - result = validateService.validateReferential(configuration, request); - progressModel.increments(); + try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) { + List<ToolkitIdLabel> selectedData = new LinkedList<>(dataModel.getSelectedData()); + Class<? extends RootOpenableDto> dataType = dataModel.getRequest().getModuleName().equals("ps") ? fr.ird.observe.dto.data.ps.common.TripDto.class : fr.ird.observe.dto.data.ll.common.TripDto.class; + Decorator decorator = getDecoratorService().getToolkitIdLabelDecoratorByType(dataType); + selectedData.forEach(d -> d.registerDecorator(decorator)); + decorator.sort(selectedData, 0); + int max = selectedData.size(); + int index = 1; + for (ToolkitIdLabel datum : selectedData) { - } else if (dataModel.getConfig().isLoadData()) { + String id = datum.getId(); - try (ValidationResultBuilder resultBuilder = ValidationResultBuilder.create()) { - List<ToolkitIdLabel> selectedData = new LinkedList<>(dataModel.getSelectedData()); - Class<? extends RootOpenableDto> dataType = dataModel.getRequest().getModuleName().equals("ps") ? fr.ird.observe.dto.data.ps.common.TripDto.class : fr.ird.observe.dto.data.ll.common.TripDto.class; - Decorator decorator = getDecoratorService().getToolkitIdLabelDecoratorByType(dataType); - selectedData.forEach(d -> d.registerDecorator(decorator)); - decorator.sort(selectedData, 0); - int max = selectedData.size(); - int index = 1; - for (ToolkitIdLabel datum : selectedData) { + DataValidationRequest request = new DataValidationRequest(); + request.setDataIds(Collections.singleton(id)); + request.setScopes(scopes); + request.setValidationContext(contextName); - String id = datum.getId(); + sendMessage(String.format("[ %4d - %4d ] ", index, max) + t("observe.ui.datasource.editor.actions.validate.message.validate.trip", datum)); - DataValidationRequest request = new DataValidationRequest(); - request.setDataIds(Collections.singleton(id)); - request.setScopes(scopes); - request.setValidationContext(contextName); - - sendMessage(String.format("[ %4d - %4d ] ", index, max) + t("observe.ui.datasource.editor.actions.validate.message.validate.trip", datum)); - - progressModel.increments(); - result = validateService.validateData(configuration, request); - progressModel.increments(); - resultBuilder.addResult(result); - index++; + progressModel.increments(); + result = validateService.validateData(configuration, request); + progressModel.increments(); + resultBuilder.addResult(result); + index++; + } + result = resultBuilder.build(); } - result = resultBuilder.build(); - } - } else { - throw new IllegalStateException(); + } else { + throw new IllegalStateException(); + } + progressModel.increments(); + stepModel.setValidationResult(result); + log.info("Step count (at the end): {} vs computed {}", progressModel.getValue(), stepsCount); } - dataSourceToValidate.close(); - progressModel.increments(); - stepModel.setValidationResult(result); - log.info("Step count (at the end): {} vs computed {}", progressModel.getValue(), stepsCount); } private void generateReportFile(ValidateModel validationModel) throws IOException { ===================================== client/runner/src/main/i18n/translations/client-runner_en_GB.properties ===================================== @@ -548,7 +548,7 @@ observe.ui.datasource.editor.actions.exportData.title=Export data observe.ui.datasource.editor.actions.exportData.title.tip=Export data observe.ui.datasource.editor.actions.operation.configuration=Configuration of operations observe.ui.datasource.editor.actions.operation.message.canceled=Operation <%1$s> canceled. -observe.ui.datasource.editor.actions.operation.message.done=Operation done at %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS (duration\: %s). +observe.ui.datasource.editor.actions.operation.message.done=Operation done at %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS (duration\: %2$s). observe.ui.datasource.editor.actions.operation.message.failed=Operation has failed. observe.ui.datasource.editor.actions.operation.message.needFix=Operation need fix. observe.ui.datasource.editor.actions.operation.message.running=Operation <%1$s> is running... ===================================== client/runner/src/main/i18n/translations/client-runner_es_ES.properties ===================================== @@ -548,7 +548,7 @@ observe.ui.datasource.editor.actions.exportData.title=Exportar los datos observe.ui.datasource.editor.actions.exportData.title.tip=Exportar los datos de usuario observe.ui.datasource.editor.actions.operation.configuration=Configuración de las operaciones observe.ui.datasource.editor.actions.operation.message.canceled=La operación <%1$s> fue cancelada. -observe.ui.datasource.editor.actions.operation.message.done=Operación terminada el %1$td/%1$tm/%1$tY a %1$tH\:%1$tM\:%1$tS (duration\: %s). +observe.ui.datasource.editor.actions.operation.message.done=Operación terminada el %1$td/%1$tm/%1$tY a %1$tH\:%1$tM\:%1$tS (duration\: %2$s). observe.ui.datasource.editor.actions.operation.message.failed=La operación falló observe.ui.datasource.editor.actions.operation.message.needFix=La operación necesita correcciones. observe.ui.datasource.editor.actions.operation.message.running=La operación < %1$s > se está ejecutando... ===================================== client/runner/src/main/i18n/translations/client-runner_fr_FR.properties ===================================== @@ -548,7 +548,7 @@ observe.ui.datasource.editor.actions.exportData.title=Exporter les données observe.ui.datasource.editor.actions.exportData.title.tip=Exporter les données utilisateurs vers une base centrale observe.ui.datasource.editor.actions.operation.configuration=Configuration des opérations observe.ui.datasource.editor.actions.operation.message.canceled=L'opération <%1$s> a été annulée. -observe.ui.datasource.editor.actions.operation.message.done=Opération terminée le %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS (temps écoulé \: %s). +observe.ui.datasource.editor.actions.operation.message.done=Opération terminée le %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS (temps écoulé \: %2$s). observe.ui.datasource.editor.actions.operation.message.failed=L'opération a échouée observe.ui.datasource.editor.actions.operation.message.needFix=L'opération requière des corrections. observe.ui.datasource.editor.actions.operation.message.running=L'opération < %1$s > est en cours d'exécution... ===================================== core/services/client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java ===================================== @@ -37,6 +37,7 @@ import org.apache.hc.client5.http.cookie.BasicCookieStore; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager; +import org.apache.hc.core5.http.io.SocketConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -62,6 +63,7 @@ public class ObserveServiceFactoryClient implements ObserveServiceFactory { if (responseBuilder == null) { int timeout = serviceInitializer.getInitializerConfig().getHttpTimeout(); ConnectionConfig connConfig = ConnectionConfig.custom() + .setTimeToLive(200, TimeUnit.MILLISECONDS) .setSocketTimeout(timeout, TimeUnit.MILLISECONDS) .build(); BasicHttpClientConnectionManager cm = new BasicHttpClientConnectionManager(); ===================================== pom.xml ===================================== @@ -23,7 +23,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2024.12</version> + <version>2024.13</version> </parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> ===================================== toolkit/persistence/src/main/java/fr/ird/observe/spi/referential/ReferentialIdsBuilder.java ===================================== @@ -99,7 +99,7 @@ public class ReferentialIdsBuilder { long t0 = TimeLog.getTime(); List<String> count = persistenceContext.getSqlSupport().findMultipleResult(realSql, r -> r.getString(1)); - TIME_LOG.log(t0, "Get referential ids", realSql); + TIME_LOG.log(t0, "Get referential ids", String.format(TopiaEntitySqlReplicatePlanTask.applyIds(task.getSelectSql(), selectClause, "in (" + this.ids.size() + ")"), columnName)); if (!count.isEmpty()) { result.computeIfAbsent(dtoType, e -> new TreeSet<>()).addAll(count); } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/8634165ecaf550c3d999cf04e... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/8634165ecaf550c3d999cf04e... You're receiving this email because of your account on gitlab.com.