This is an automated email from the git hooks/post-receive script. New commit to branch feature/7677-VerifActionExport in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 8c2515fc35da635a660b85cb8409662721baf47f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Mar 30 18:09:53 2016 +0200 ajout du service d'action pour l'export de données observateur (see #7677). --- .../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 36 +++--- .../java/fr/ird/observe/ui/admin/AdminUIModel.java | 3 +- .../observe/ui/admin/export/ExportUIHandler.java | 135 ++++++--------------- .../controller/v1/DataSourceServiceController.java | 6 - .../replicate/ReplicateServiceController.java | 28 +++++ .../services/service/DataSourceService.java | 9 -- .../actions/replicate/ReplicateService.java | 27 +++++ .../actions/replicate/ReplicateTripResult.java | 31 +++++ .../fr/ird/observe/services/dto/ImportDataDto.java | 38 ------ .../dto/actions/replicate/ReplicateTrip.java | 25 ++++ .../services/service/DataSourceServiceTopia.java | 12 -- .../actions/replicate/ReplicateServiceTopia.java | 99 +++++++++++++++ 12 files changed, 267 insertions(+), 182 deletions(-) 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 324c508..84b13f8 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 @@ -21,17 +21,16 @@ */ package fr.ird.observe.ui.admin; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import fr.ird.observe.ObserveRunner; import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.db.ObserveSwingDataSource; -import fr.ird.observe.services.dto.ImportDataDto; +import fr.ird.observe.services.dto.actions.replicate.ReplicateTrip; import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DataSourceService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; -import fr.ird.observe.services.service.SqlScriptProducerRequest; -import fr.ird.observe.services.service.SqlScriptProducerService; +import fr.ird.observe.services.service.actions.replicate.ReplicateService; +import fr.ird.observe.services.service.actions.replicate.ReplicateTripResult; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.ui.admin.config.SelectDataUI; import fr.ird.observe.ui.admin.resume.ShowResumeUI; @@ -39,6 +38,7 @@ import fr.ird.observe.ui.storage.tabs.DataSelectionModel; import fr.ird.observe.ui.tree.DataSelectionTreeSelectionModel; import fr.ird.observe.ui.tree.ObserveTreeHelper; import jaxx.runtime.swing.wizard.ext.WizardState; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,6 +46,7 @@ import javax.swing.JTree; import javax.swing.tree.TreeModel; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.List; import java.util.concurrent.Callable; import static org.nuiton.i18n.I18n.n; @@ -117,37 +118,34 @@ public class AdminTabUIHandler { return WizardState.FAILED; } - protected void replicateData(ObserveSwingDataSource source, + protected List<ReplicateTripResult> replicateData(ObserveSwingDataSource source, ObserveSwingDataSource target, - String... tripIds) throws DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException { + List<String> tripIds) throws DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException { - if (tripIds != null && tripIds.length > 0) { + List<ReplicateTripResult> results = Lists.newArrayList(); - openSource(source); + if (CollectionUtils.isNotEmpty(tripIds)) { - SqlScriptProducerService sqlScriptProducerService = source.newSqlScriptProducerService(); + openSource(source); - // on replique les données specifiees - ImmutableSet<String> dataIds = ImmutableSet.<String>copyOf(tripIds); + ReplicateService sourceReplicateService = source.newService(ReplicateService.class); - SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addDataIds(dataIds); - byte[] dataDump = sqlScriptProducerService.produceSqlScript(request); + List<ReplicateTrip> replicateTrips = sourceReplicateService.exportTrips(tripIds); source.close(); - openSource(target); - DataSourceService dataSourceService = target.newService(DataSourceService.class); + ReplicateService targetReplicateService = target.newService(ReplicateService.class); - ImportDataDto importData = new ImportDataDto(dataDump, dataIds); - - dataSourceService.importData(importData); + results = targetReplicateService.importTrips(replicateTrips); target.close(); } + return results; + } protected void replicateReferentiel(ObserveSwingDataSource source, 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 4d6c174..1910346 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 @@ -954,7 +954,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { // pour exporter les données utilisateurs // l'objectOperation de synchronisation de référentiel est nécessaire - getOperations().add(AdminStep.SYNCHRONIZE); + // FIXME Sbavencoff 30/03/20156 desactivation temproraire de la synchro du référentiel */ + //getOperations().add(AdminStep.SYNCHRONIZE); // l'objectOperation de calcul des données est aussi obligatoire getOperations().add(AdminStep.CONSOLIDATE); 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 d6a0891..245b525 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 @@ -25,10 +25,8 @@ import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.TripSeineDto; -import fr.ird.observe.services.service.longline.TripLonglineService; -import fr.ird.observe.services.service.seine.TripSeineService; +import fr.ird.observe.services.service.actions.replicate.ReplicateTripResult; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.admin.AdminStep; @@ -49,11 +47,9 @@ import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.util.Date; import java.util.List; -import java.util.concurrent.Callable; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -86,25 +82,21 @@ public class ExportUIHandler extends AdminTabUIHandler { final SelectDataUI selectTabUI = (SelectDataUI) ui.getStepUI(AdminStep.SELECT_DATA); - tabUI.getModel().addPropertyChangeListener(AdminUIModel.SELECTION_MODEL_CHANGED_PROPERTY_NAME, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - AdminUIModel model = (AdminUIModel) evt.getSource(); + tabUI.getModel().addPropertyChangeListener(AdminUIModel.SELECTION_MODEL_CHANGED_PROPERTY_NAME, evt -> { + AdminUIModel model1 = (AdminUIModel) evt.getSource(); // if (!getModel().containsStep(tabUI.getStep())) { // // avoid multi-cast // return; // } - //FIXME -// DataSelectionModel value = (DataSelectionModel) evt.getNewValue(); -// if (log.isInfoEnabled()) { -// log.info("selection model changed to " + value); -// } - selectTabUI.getSelectionModel().clearSelection(); - selectTabUI.getSelectionRenderer().setExistingTrips(model.getExportModel().getExistingTrips()); - updateSelectionModel(selectTabUI); + DataSelectionModel value = (DataSelectionModel) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("selection model changed to " + value); } + + selectTabUI.getSelectionModel().clearSelection(); + selectTabUI.getSelectionRenderer().setExistingTrips(model1.getExportModel().getExistingTrips()); + updateSelectionModel(selectTabUI); }); // tableau de l'export de données @@ -168,13 +160,7 @@ public class ExportUIHandler extends AdminTabUIHandler { addAdminWorker( ((ExportUI) ui).getPrepareAction().getToolTipText(), - new Callable<WizardState>() { - - @Override - public WizardState call() throws Exception { - return prepareAction(); - } - } + this::prepareAction ); } @@ -187,13 +173,7 @@ public class ExportUIHandler extends AdminTabUIHandler { addAdminWorker( tabUI.getStartAction().getToolTipText(), - new Callable<WizardState>() { - - @Override - public WizardState call() throws Exception { - return doAction(); - } - } + this::doAction ); } @@ -258,83 +238,44 @@ public class ExportUIHandler extends AdminTabUIHandler { ExportModel stepModel = model.getExportModel(); // on filtre les marées sélectionnées pour export - List<TripEntry> tripEntries = stepModel.getSelectedTrips(); - - for (TripEntry tripEntry : tripEntries) { - - processTrip(stepModel, tripEntry); - - } - - sendMessage(t("observe.message.synchro.operation.done", new Date())); - - return WizardState.SUCCESSED; - } - - protected void processTrip(ExportModel stepModel, TripEntry tripEntry) throws Exception { + List<String> tripId = stepModel.getSelectedTrips() + .stream() + .map(TripEntry::getTrip) + .map(DataReference::getId) + .collect(Collectors.toList()); - ObserveSwingDataSource centralSource = stepModel.getCentralSource(); - ObserveSwingDataSource source = stepModel.getSource(); + List<ReplicateTripResult> results = replicateData(stepModel.getSource(), stepModel.getCentralSource(), tripId); - ReferentialReference<ProgramDto> program = tripEntry.getProgram(); - DataReference trip = tripEntry.getTrip(); - String tripId = trip.getId(); + for (ReplicateTripResult result : results) { - String tripDecorated = stepModel.decorate(trip); - String programDecorated = stepModel.decorate(program); + TripEntry tripEntry = stepModel.getSelectedTrips() + .stream() + .filter(t -> result.getTripId().equals(t.getTrip().getId())) + .findFirst().get(); - if (tripEntry.isExist()) { + String tripDecorated = stepModel.decorate(tripEntry.getTrip()); + String programDecorated = stepModel.decorate(tripEntry.getProgram()); - //TODO afficher un message de confirmation pour l'écrasement des marées sur la base distante - // on supprime les marées à écraser de la base distante + if (result.isDeleted()) { - if (log.isInfoEnabled()) { - log.info(tripId + " -- " + t("observe.message.exportData.delete.remote.maree", tripDecorated, programDecorated)); + if (log.isInfoEnabled()) { + log.info(tripId + " -- " + t("observe.message.exportData.delete.remote.maree", tripDecorated, programDecorated)); + } + sendMessage(t("observe.message.exportData.delete.remote.maree", tripDecorated, programDecorated)); } - sendMessage(t("observe.message.exportData.delete.remote.maree", tripDecorated, programDecorated)); - - if (TripSeineDto.class.isAssignableFrom(trip.getType())) { - - TripSeineService tripSeineService = centralSource.newService(TripSeineService.class); - - tripSeineService.delete(tripId); - - } else if (TripLonglineDto.class.isAssignableFrom(trip.getType())) { - - TripLonglineService tripLonglineService = centralSource.newService(TripLonglineService.class); - - tripLonglineService.delete(tripId); + if (result.isDuplicated()) { + if (log.isInfoEnabled()) { + log.info(tripId + " -- " + t("observe.message.exportData.replicate.maree", tripDecorated, programDecorated)); + } + sendMessage(t("observe.message.exportData.replicate.maree", tripDecorated, programDecorated)); } } - if (log.isInfoEnabled()) { - log.info(tripId + " -- " + t("observe.message.exportData.replicate.maree", tripDecorated, programDecorated)); - } - sendMessage(t("observe.message.exportData.replicate.maree", tripDecorated, programDecorated)); - - try { - replicateData(source, centralSource, tripId); - } catch (Exception e) { - //FIXME 20100726 : il faut supprimer tous les objets crées pour cette marée - -// tx = beginTransaction(centralSource, txName); -// -// // on supprime la maree qui n'a pas pu etre importee -// try { -// TopiaDAO<Trip> dao = ObserveDAOHelper.getTripSeineDAO(tx); -// // on recharge la données depuis la base centrale -// m = dao.findByTopiaId(m.getTopiaId()); -// dao.delete(m); -// commitTransaction(centralSource, tx, txName); -// } finally { -// closeTransaction(centralSource, tx, txName); -// } - - throw e; - } + sendMessage(t("observe.message.synchro.operation.done", new Date())); + return WizardState.SUCCESSED; } } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 65d40ac..c95c772 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -34,7 +34,6 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; -import fr.ird.observe.services.dto.ImportDataDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.service.BabModelVersionException; @@ -137,11 +136,6 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport getAnonymousService(dataSourceConfigurationTopia).migrateData(dataSourceConfiguration); } - @Override - public void importData(ImportDataDto importData) { - getAuthenticatedService().importData(importData); - } - protected ObserveDataSourceConfiguration getTopiaDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfigurationFromRequest) { Preconditions.checkArgument(dataSourceConfigurationFromRequest instanceof ObserveDataSourceConfigurationRest); diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/replicate/ReplicateServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/replicate/ReplicateServiceController.java new file mode 100644 index 0000000..d000c72 --- /dev/null +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/replicate/ReplicateServiceController.java @@ -0,0 +1,28 @@ +package fr.ird.observe.application.web.controller.v1.actions.replicate; + +import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; +import fr.ird.observe.services.dto.actions.replicate.ReplicateTrip; +import fr.ird.observe.services.service.actions.replicate.ReplicateService; +import fr.ird.observe.services.service.actions.replicate.ReplicateTripResult; + +import java.util.List; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ReplicateServiceController extends ObserveAuthenticatedServiceControllerSupport<ReplicateService> implements ReplicateService{ + + public ReplicateServiceController() { + super(ReplicateService.class); + } + + @Override + public List<ReplicateTrip> exportTrips(List<String> tripIds) { + return getAuthenticatedService().exportTrips(tripIds); + } + + @Override + public List<ReplicateTripResult> importTrips(List<ReplicateTrip> replicateTrips) { + return getAuthenticatedService().importTrips(replicateTrips); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index 1d66a31..bd951dd 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -28,13 +28,9 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; -import fr.ird.observe.services.dto.ImportDataDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.spi.NoDataAccess; -import fr.ird.observe.services.spi.PostRequest; -import fr.ird.observe.services.spi.Write; -import fr.ird.observe.services.spi.WriteDataPermission; import java.io.Closeable; import java.util.Set; @@ -71,9 +67,4 @@ public interface DataSourceService extends ObserveService, Closeable { void destroy() throws DatabaseDestroyNotAuthorizedException; - @WriteDataPermission - @Write - @PostRequest - void importData(ImportDataDto importData); - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateService.java new file mode 100644 index 0000000..a4284c0 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateService.java @@ -0,0 +1,27 @@ +package fr.ird.observe.services.service.actions.replicate; + +import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.dto.actions.replicate.ReplicateTrip; +import fr.ird.observe.services.spi.PostRequest; +import fr.ird.observe.services.spi.ReadDataPermission; +import fr.ird.observe.services.spi.ReadReferentialPermission; +import fr.ird.observe.services.spi.WriteDataPermission; + +import java.util.List; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public interface ReplicateService extends ObserveService { + + @ReadDataPermission + @ReadReferentialPermission + @PostRequest + List<ReplicateTrip> exportTrips(List<String> tripIds); + + @WriteDataPermission + @ReadReferentialPermission + @PostRequest + List<ReplicateTripResult> importTrips(List<ReplicateTrip> replicateTrips); + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateTripResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateTripResult.java new file mode 100644 index 0000000..ba4f01d --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateTripResult.java @@ -0,0 +1,31 @@ +package fr.ird.observe.services.service.actions.replicate; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ReplicateTripResult { + + protected final String tripId; + + protected final boolean deleted; + + protected final boolean duplicated; + + public ReplicateTripResult(String tripId, boolean deleted, boolean duplicated) { + this.tripId = tripId; + this.deleted = deleted; + this.duplicated = duplicated; + } + + public String getTripId() { + return tripId; + } + + public boolean isDeleted() { + return deleted; + } + + public boolean isDuplicated() { + return duplicated; + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ImportDataDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ImportDataDto.java deleted file mode 100644 index 8ef6084..0000000 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ImportDataDto.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.ird.observe.services.dto; - -import com.google.common.collect.ImmutableSet; - -/** - * @author Sylvain Bavencoff - bavencoff@codelutin.com - */ -public class ImportDataDto implements ObserveDto { - - protected byte[] dumpData; - - protected ImmutableSet<String> importDataIds; - - public ImportDataDto() { - this(null, null); - } - - public ImportDataDto(byte[] dumpData, ImmutableSet<String> importDataIds) { - this.dumpData = dumpData; - this.importDataIds = importDataIds; - } - - public byte[] getDumpData() { - return dumpData; - } - - public ImmutableSet<String> getImportDataIds() { - return importDataIds; - } - - public void setDumpData(byte[] dumpData) { - this.dumpData = dumpData; - } - - public void setImportDataIds(ImmutableSet<String> importDataIds) { - this.importDataIds = importDataIds; - } -} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/actions/replicate/ReplicateTrip.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/actions/replicate/ReplicateTrip.java new file mode 100644 index 0000000..391742a --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/actions/replicate/ReplicateTrip.java @@ -0,0 +1,25 @@ +package fr.ird.observe.services.dto.actions.replicate; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ReplicateTrip { + + protected final String tripId; + + protected final byte[] tripContent; + + public ReplicateTrip(String tripId, byte[] tripContent) { + this.tripId = tripId; + this.tripContent = tripContent; + } + + public String getTripId() { + return tripId; + } + + public byte[] getTripContent() { + return tripContent; + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 4024e43..0ab73f9 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -45,7 +45,6 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnectionTopia; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; -import fr.ird.observe.services.dto.ImportDataDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.dto.ObserveDbUserDtos; @@ -504,17 +503,6 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } - @Override - public void importData(ImportDataDto importData) { - if (log.isTraceEnabled()) { - log.trace("importData([" + Joiner.on(", ").join(importData.getImportDataIds()) + "])"); - } - - ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext(); - topiaApplicationContext.executeSqlStatements(importData.getDumpData()); - - } - protected ObserveDataSourceConnectionTopia createDataSourceConnection(ObserveDataSourceInformation dataSourceInformation, String authenticationToken) { ObserveDataSourceConnectionTopia dataSourceConnection = new ObserveDataSourceConnectionTopia( diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateServiceTopia.java new file mode 100644 index 0000000..92741be --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/replicate/ReplicateServiceTopia.java @@ -0,0 +1,99 @@ +package fr.ird.observe.services.service.actions.replicate; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.IdDtos; +import fr.ird.observe.services.dto.actions.replicate.ReplicateTrip; +import fr.ird.observe.services.service.SqlScriptProducerRequest; +import fr.ird.observe.services.service.SqlScriptProducerService; +import fr.ird.observe.services.service.longline.TripLonglineService; +import fr.ird.observe.services.service.seine.TripSeineService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ReplicateServiceTopia extends ObserveServiceTopia implements ReplicateService { + + private static final Log log = LogFactory.getLog(ReplicateServiceTopia.class); + + @Override + public List<ReplicateTrip> exportTrips(List<String> tripIds) { + if (log.isTraceEnabled()) { + log.trace("exportTrips([" + tripIds.stream().collect(Collectors.joining(", ")) + "])"); + } + + return tripIds + .stream() + .map(this::exportTrip) + .collect(Collectors.toList()); + } + + protected ReplicateTrip exportTrip(String tripId) { + + SqlScriptProducerService dumpProducerService = serviceContext.newService(SqlScriptProducerService.class); + + SqlScriptProducerRequest request = SqlScriptProducerRequest.forPostgres().addDataIds(ImmutableSet.of(tripId)); + + byte[] tripContent = dumpProducerService.produceSqlScript(request); + + return new ReplicateTrip(tripId, tripContent); + + } + + @Override + public List<ReplicateTripResult> importTrips(List<ReplicateTrip> replicateTrips) { + if (log.isTraceEnabled()) { + log.trace("exportTrips([" + replicateTrips.stream().map(ReplicateTrip::getTripId).collect(Collectors.joining(", ")) + "])"); + } + + return replicateTrips + .stream() + .map(this::importTrip) + .collect(Collectors.toList()); + } + + protected ReplicateTripResult importTrip(ReplicateTrip replicateTrip) { + + String tripId = replicateTrip.getTripId(); + + boolean deleted = false; + + boolean duplicated = false; + + if (IdDtos.isTripSeineId(tripId)) { + + TripSeineService tripSeineService = serviceContext.newService(TripSeineService.class); + + deleted = tripSeineService.exists(tripId); + + if (deleted) { + tripSeineService.delete(tripId); + } + + } else if (IdDtos.isTripLonglineId(tripId)) { + + TripLonglineService tripLonglineService = serviceContext.newService(TripLonglineService.class); + + deleted = tripLonglineService.exists(tripId); + + if (deleted) { + tripLonglineService.delete(tripId); + } + + } + + ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext(); + topiaApplicationContext.executeSqlStatements(replicateTrip.getTripContent()); + + duplicated = true; + + return new ReplicateTripResult(tripId, deleted, duplicated); + + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.