branch feature/7677-VerifActionExport created (now 8c2515f)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7677-VerifActionExport in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git at 8c2515f ajout du service d'action pour l'export de données observateur (see #7677). This branch includes the following new commits: new 8c2515f ajout du service d'action pour l'export de données observateur (see #7677). The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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). -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm