This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit fe94fbc370e7860275183cd0a760bdf9d7955e20 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:59:51 2016 +0200 Construire une base intermédiaire avec toutes les données si besoin, puis utiliser un instruction sql H2 pour sauver la base --- .../swing/ui/storage/StorageBackupUILauncher.java | 83 +++++++++++++++++----- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java index d0d7057..fdd5dc3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java @@ -22,17 +22,25 @@ package fr.ird.observe.application.swing.ui.storage; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.configuration.constants.DbMode; -import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.storage.tabs.DataSelectionModel; +import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.trip.ExportTripRequest; +import fr.ird.observe.services.service.trip.ExportTripResult; +import fr.ird.observe.services.service.trip.ImportTripRequest; +import fr.ird.observe.services.service.trip.TripManagementService; import jaxx.runtime.JAXXContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.awt.Window; import java.io.File; -import java.util.Set; +import java.util.List; +import java.util.Map; +import java.util.Objects; /** * Un wizard pour effectuer des backup de storages. @@ -76,10 +84,7 @@ public class StorageBackupUILauncher extends StorageUILauncher { model.setDbMode(DbMode.USE_SERVER); } - model.setSteps(StorageStep.BACKUP, - StorageStep.SELECT_DATA, - StorageStep.CONFIRM - ); + model.setSteps(StorageStep.BACKUP, StorageStep.SELECT_DATA, StorageStep.CONFIRM); ui.setTitle(title); try { @@ -98,22 +103,62 @@ public class StorageBackupUILauncher extends StorageUILauncher { @Override protected void doAction(StorageUI ui) { super.doAction(ui); - StorageUIHandler handler = getStorageUIHandler(); - - ObserveSwingDataSource source = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); StorageUIModel storageModel = ui.getModel(); File backupFile = storageModel.getBackupFile(); - DataSelectionModel dataModel = storageModel.getSelectDataModel(); - Set<DataReference> trips = null; - if (dataModel != null && !dataModel.isDataFull()) { - // on renseigne les marees a exporter uniquement si - // on en a selectionner, de plus si on a selectionne - // toutes les marees, on le les passe pas : car c un dump - // complet de la base. - trips = dataModel.getSelectedData(); + Objects.requireNonNull(backupFile, "file where to backup can not be null"); + + ObserveSwingDataSource localSource = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); + ObserveSwingDataSource sourceToBackup = localSource; + + try { + DataSelectionModel dataModel = storageModel.getSelectDataModel(); + Map<ReferentialReference<ProgramDto>, List<DataReference>> tripsByProgram; + if (dataModel != null && !dataModel.isDataFull()) { +// // on renseigne les marees a exporter uniquement si +// // on en a selectionner, de plus si on a selectionne +// // toutes les marees, on le les passe pas : car c un dump +// // complet de la base. + + tripsByProgram = dataModel.getSelectedDataByProgram(); + + // on doit creer une nouvelle base avec tout ce qui va bien + + TripManagementService managementService = localSource.newTripManagementService(); + + sourceToBackup = ObserveSwingApplicationContext.get().getDataSourcesManager().newTemporaryH2Datasource("Backup-" + backupFile.getName()); + + TripManagementService tmpManagementService = sourceToBackup.newTripManagementService(); + + for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : tripsByProgram.entrySet()) { + + for (DataReference trip : entry.getValue()) { + + ExportTripRequest exportRequest = new ExportTripRequest(false, entry.getKey().getId(), trip.getId()); + ExportTripResult exportTripResult = managementService.exportTrip(exportRequest); + + ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); + tmpManagementService.importTrip(importTripRequest); + + } + + } + + } + + if (log.isInfoEnabled()) { + log.info("Exporting to " + backupFile); + } + + sourceToBackup.newDataSourceService().backup(backupFile); + + } finally { + + if (sourceToBackup != localSource) { + sourceToBackup.close(); + } + } - handler.backupLocalDatabase(source, backupFile, trips); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.