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 d04373c5958a1e7cb5cb06d7e62985b1211c16e5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jul 20 12:18:01 2016 +0200 Début de réécriture des services de recopie de marées (See #7677) --- .../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 78 +++++++-------- .../fr/ird/observe/ui/admin/export/ExportUI.jaxx | 15 +-- .../observe/ui/admin/export/ExportUIHandler.java | 38 ++++++++ .../actions/export/ReplicateTripService.java | 27 ++++++ .../export/ReplicateTripsExportRequest.java | 77 +++++++++++++++ .../actions/export/ReplicateTripsExportResult.java | 78 +++++++++++++++ .../actions/export/ReplicateTripsImportResult.java | 69 ++++++++++++++ .../actions/export/ReplicateTripServiceTopia.java | 105 +++++++++++++++++++++ 8 files changed, 435 insertions(+), 52 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 84b13f8..5176bf4 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,16 +21,12 @@ */ package fr.ird.observe.ui.admin; -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.actions.replicate.ReplicateTrip; import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; -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; @@ -38,7 +34,6 @@ 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,7 +41,6 @@ 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; @@ -118,42 +112,42 @@ public class AdminTabUIHandler { return WizardState.FAILED; } - protected List<ReplicateTripResult> replicateData(ObserveSwingDataSource source, - ObserveSwingDataSource target, - List<String> tripIds) throws DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException { - - List<ReplicateTripResult> results = Lists.newArrayList(); - - if (CollectionUtils.isNotEmpty(tripIds)) { - - openSource(source); - - ReplicateService sourceReplicateService = source.newService(ReplicateService.class); - - List<ReplicateTrip> replicateTrips = sourceReplicateService.exportTrips(tripIds); - - source.close(); - - openSource(target); - - ReplicateService targetReplicateService = target.newService(ReplicateService.class); - - results = targetReplicateService.importTrips(replicateTrips); - - target.close(); - - } - - return results; - - } - - protected void replicateReferentiel(ObserveSwingDataSource source, - ObserveSwingDataSource target) { - - //FIXME -// getReplicationService().replicateReferentiel(source, target); - } +// protected List<ReplicateTripResult> replicateData(ObserveSwingDataSource source, +// ObserveSwingDataSource target, +// List<String> tripIds) throws DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException { +// +// List<ReplicateTripResult> results = Lists.newArrayList(); +// +// if (CollectionUtils.isNotEmpty(tripIds)) { +// +// openSource(source); +// +// ReplicateService sourceReplicateService = source.newService(ReplicateService.class); +// +// List<ReplicateTrip> replicateTrips = sourceReplicateService.exportTrips(tripIds); +// +// source.close(); +// +// openSource(target); +// +// ReplicateService targetReplicateService = target.newService(ReplicateService.class); +// +// results = targetReplicateService.importTrips(replicateTrips); +// +// target.close(); +// +// } +// +// return results; +// +// } + +// protected void replicateReferentiel(ObserveSwingDataSource source, +// ObserveSwingDataSource target) { +// +// //FIXME +//// getReplicationService().replicateReferentiel(source, target); +// } public void initTabUI(AdminUI ui, AdminTabUI tabUI) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUI.jaxx index f207c17..7b4b0a8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUI.jaxx @@ -33,14 +33,12 @@ </import> - <ExportModel id='stepModel' - initializer='getModel().getExportModel()'/> + <ExportModel id='stepModel' initializer='getModel().getExportModel()'/> <ExportUIHandler id='handler' constructorParams='this'/> <!-- le modèles des activités dont on a pu calculé un point gps --> - <TripToExportTableModel id='tripsModel' - onTableChanged='startAction.setEnabled(tripsModel.hasSelection())'/> + <TripToExportTableModel id='tripsModel' onTableChanged='startAction.setEnabled(tripsModel.hasSelection())'/> <script><![CDATA[ public ExportUI(AdminUI parentContext) { @@ -67,12 +65,10 @@ public void updateState(WizardState newState) { </script> <JPanel id='PENDING_content'> - <Table constraints='BorderLayout.CENTER' fill='both' weightx='1' - weighty='1'> + <Table constraints='BorderLayout.CENTER' fill='both' weightx='1' weighty='1'> <row> <cell> - <JButton id="prepareAction" - onActionPerformed="getHandler().doPrepareAction()"/> + <JButton id="prepareAction" onActionPerformed="getHandler().doPrepareAction()"/> </cell> </row> </Table> @@ -86,8 +82,7 @@ public void updateState(WizardState newState) { </JScrollPane> <JPanel constraints='BorderLayout.SOUTH' layout='{new BorderLayout()}'> - <JButton id='startAction' constraints='BorderLayout.CENTER' - onActionPerformed="getHandler().doStartAction()"/> + <JButton id='startAction' constraints='BorderLayout.CENTER' onActionPerformed="getHandler().doStartAction()"/> </JPanel> </JPanel> 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 245b525..13ade10 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 @@ -21,11 +21,17 @@ */ package fr.ird.observe.ui.admin.export; +import com.google.common.collect.Lists; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.actions.replicate.ReplicateTrip; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.seine.TripSeineDto; +import fr.ird.observe.services.service.BabModelVersionException; +import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; +import fr.ird.observe.services.service.DatabaseNotFoundException; +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.UIHelper; @@ -40,6 +46,7 @@ import fr.ird.observe.ui.util.decorator.DataReferenceDecorator; import fr.ird.observe.ui.util.decorator.ReferentialReferenceDecorator; import jaxx.runtime.swing.editor.MyDefaultCellEditor; 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; @@ -278,4 +285,35 @@ public class ExportUIHandler extends AdminTabUIHandler { return WizardState.SUCCESSED; } + private List<ReplicateTripResult> replicateData(ObserveSwingDataSource source, + ObserveSwingDataSource target, + List<String> tripIds) throws DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException { + + List<ReplicateTripResult> results = Lists.newArrayList(); + + if (CollectionUtils.isNotEmpty(tripIds)) { + + openSource(source); + + ReplicateService sourceReplicateService = source.newService(ReplicateService.class); + + List<ReplicateTrip> replicateTrips = sourceReplicateService.exportTrips(tripIds); + + source.close(); + + openSource(target); + + ReplicateService targetReplicateService = target.newService(ReplicateService.class); + + results = targetReplicateService.importTrips(replicateTrips); + + target.close(); + + } + + return results; + + } + + } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripService.java new file mode 100644 index 0000000..9c318b1 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripService.java @@ -0,0 +1,27 @@ +package fr.ird.observe.services.service.actions.export; + +import fr.ird.observe.services.ObserveService; +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; + +/** + * Created on 20/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public interface ReplicateTripService extends ObserveService { + + @ReadDataPermission + @ReadReferentialPermission + @PostRequest + ReplicateTripsExportResult exportTrips(ReplicateTripsExportRequest exportRequest); + + @WriteDataPermission + @ReadReferentialPermission + @PostRequest + ReplicateTripsImportResult importTrips(ReplicateTripsExportResult importRequest); + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportRequest.java new file mode 100644 index 0000000..f2484ed --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportRequest.java @@ -0,0 +1,77 @@ +package fr.ird.observe.services.service.actions.export; + +import com.google.common.collect.ImmutableSet; + +import java.util.Iterator; +import java.util.Objects; + +/** + * Created on 20/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReplicateTripsExportRequest implements Iterable<ReplicateTripsExportRequest.ReplicateTripExportRequest> { + + public static ExportTripsRequestBuilder builder() { + return new ExportTripsRequestBuilder(); + } + + public static class ExportTripsRequestBuilder { + + private final ImmutableSet.Builder<ReplicateTripExportRequest> trips = ImmutableSet.builder(); + + public ExportTripsRequestBuilder addTripToReplicate(String tripId, boolean deleteBeofreImport) { + trips.add(new ReplicateTripExportRequest(tripId, deleteBeofreImport)); + return this; + } + + public ReplicateTripsExportRequest build() { + return new ReplicateTripsExportRequest(trips.build()); + } + + } + + public static class ReplicateTripExportRequest { + + private final String tripId; + + private final boolean deleteBeforeImport; + + public ReplicateTripExportRequest(String tripId, boolean deleteBeforeImport) { + this.tripId = tripId; + this.deleteBeforeImport = deleteBeforeImport; + } + + public String getTripId() { + return tripId; + } + + public boolean isDeleteBeforeImport() { + return deleteBeforeImport; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ReplicateTripExportRequest that = (ReplicateTripExportRequest) o; + return Objects.equals(getTripId(), that.getTripId()); + } + + @Override + public int hashCode() { + return Objects.hash(getTripId()); + } + } + + private final ImmutableSet<ReplicateTripExportRequest> tripsToExport; + + @Override + public Iterator<ReplicateTripExportRequest> iterator() { + return tripsToExport.iterator(); + } + + private ReplicateTripsExportRequest(ImmutableSet<ReplicateTripExportRequest> tripsToExport) { + this.tripsToExport = tripsToExport; + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportResult.java new file mode 100644 index 0000000..0811119 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsExportResult.java @@ -0,0 +1,78 @@ +package fr.ird.observe.services.service.actions.export; + +import com.google.common.collect.ImmutableSet; + +import java.util.Iterator; +import java.util.Objects; + +/** + * Created on 20/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReplicateTripsExportResult implements Iterable<ReplicateTripsExportResult.ReplicateTripExportResult> { + + public static ExportTripsRequestBuilder builder() { + return new ExportTripsRequestBuilder(); + } + + public static class ExportTripsRequestBuilder { + + private final ImmutableSet.Builder<ReplicateTripExportResult> trips = ImmutableSet.builder(); + + public ExportTripsRequestBuilder addTripToReplicate(ReplicateTripsExportRequest.ReplicateTripExportRequest request, byte[] sqlContent) { + trips.add(new ReplicateTripExportResult(request, sqlContent)); + return this; + } + + public ReplicateTripsExportResult build() { + return new ReplicateTripsExportResult(trips.build()); + } + + } + + public static class ReplicateTripExportResult { + + private final ReplicateTripsExportRequest.ReplicateTripExportRequest request; + + private final byte[] sqlContent; + + public ReplicateTripExportResult(ReplicateTripsExportRequest.ReplicateTripExportRequest request, byte[] sqlContent) { + this.request = request; + this.sqlContent = sqlContent; + } + + public ReplicateTripsExportRequest.ReplicateTripExportRequest getRequest() { + return request; + } + + public byte[] getSqlContent() { + return sqlContent; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ReplicateTripExportResult that = (ReplicateTripExportResult) o; + return Objects.equals(getRequest(), that.getRequest()); + } + + @Override + public int hashCode() { + return Objects.hash(getRequest()); + } + + } + + private final ImmutableSet<ReplicateTripExportResult> exportedTrips; + + @Override + public Iterator<ReplicateTripExportResult> iterator() { + return exportedTrips.iterator(); + } + + private ReplicateTripsExportResult(ImmutableSet<ReplicateTripExportResult> exportedTrips) { + this.exportedTrips = exportedTrips; + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsImportResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsImportResult.java new file mode 100644 index 0000000..881648f --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripsImportResult.java @@ -0,0 +1,69 @@ +package fr.ird.observe.services.service.actions.export; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.DataReference; + +import java.util.Iterator; + +/** + * Le résultat de l'export de plusieurs marées. + * + * Created on 20/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ReplicateTripsImportResult implements Iterable<ReplicateTripsImportResult.ReplicateTripImportResult> { + + public static ExportTripsResultBuilder builder() { + return new ExportTripsResultBuilder(); + } + + public static class ExportTripsResultBuilder { + + private final ImmutableSet.Builder<ReplicateTripImportResult> trips = ImmutableSet.builder(); + + public ExportTripsResultBuilder addTripResult(DataReference tripReference, boolean deleted) { + trips.add(new ReplicateTripImportResult(tripReference, deleted)); + return this; + } + + public ReplicateTripsImportResult build() { + + return new ReplicateTripsImportResult(trips.build()); + } + + } + + public static class ReplicateTripImportResult { + + private final DataReference tripReference; + + private final boolean deleted; + + public ReplicateTripImportResult(DataReference tripReference, boolean deleted) { + this.tripReference = tripReference; + this.deleted = deleted; + } + + public DataReference getTripReference() { + return tripReference; + } + + public boolean isDeleted() { + return deleted; + } + + } + + private final ImmutableSet<ReplicateTripImportResult> trips; + + @Override + public Iterator<ReplicateTripImportResult> iterator() { + return trips.iterator(); + } + + private ReplicateTripsImportResult(ImmutableSet<ReplicateTripImportResult> trips) { + this.trips = trips; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java new file mode 100644 index 0000000..261bfc5 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java @@ -0,0 +1,105 @@ +package fr.ird.observe.services.service.actions.export; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.entities.Trip; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.binder.BinderEngine; +import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.IdDtos; +import fr.ird.observe.services.dto.longline.TripLonglineDto; +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; + +/** + * Created on 20/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReplicateTripServiceTopia extends ObserveServiceTopia implements ReplicateTripService { + + @Override + public ReplicateTripsExportResult exportTrips(ReplicateTripsExportRequest exportRequest) { + + SqlScriptProducerService sqlScriptProducerService = serviceContext.newService(SqlScriptProducerService.class); + + ReplicateTripsExportResult.ExportTripsRequestBuilder resultBuilder = ReplicateTripsExportResult.builder(); + + for (ReplicateTripsExportRequest.ReplicateTripExportRequest replicateTripExportRequest : exportRequest) { + + String tripId = replicateTripExportRequest.getTripId(); + + SqlScriptProducerRequest request = SqlScriptProducerRequest.forPostgres().addDataIds(ImmutableSet.of(tripId)); + + byte[] tripContent = sqlScriptProducerService.produceSqlScript(request); + + resultBuilder.addTripToReplicate(replicateTripExportRequest, tripContent); + + } + + return resultBuilder.build(); + + } + + @Override + public ReplicateTripsImportResult importTrips(ReplicateTripsExportResult importTripsRequest) { + + TripSeineService tripSeineService = serviceContext.newService(TripSeineService.class); + TripLonglineService tripLonglineService = serviceContext.newService(TripLonglineService.class); + ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext(); + + ReplicateTripsImportResult.ExportTripsResultBuilder resultBuilder = ReplicateTripsImportResult.builder(); + + for (ReplicateTripsExportResult.ReplicateTripExportResult importTripRequest : importTripsRequest) { + + String tripId = importTripRequest.getRequest().getTripId(); + boolean deleteBeforeImport = importTripRequest.getRequest().isDeleteBeforeImport(); + + Trip trip; + + if (IdDtos.isTripSeineId(tripId)) { + +// deleted = tripSeineService.exists(tripId); + + if (deleteBeforeImport) { + + //FIXME Do not use this, prefer usage of topai SqlBatchService + tripSeineService.delete(tripId); + + } + + topiaApplicationContext.executeSqlStatements(importTripRequest.getSqlContent()); + + trip = loadEntity(TripLonglineDto.class, tripId); + + } else if (IdDtos.isTripLonglineId(tripId)) { + +// deleted = tripLonglineService.exists(tripId); + + if (deleteBeforeImport) { + + //FIXME Do not use this, prefer usage of topai SqlBatchService + tripLonglineService.delete(tripId); + + } + + topiaApplicationContext.executeSqlStatements(importTripRequest.getSqlContent()); + + trip = loadEntity(TripLonglineDto.class, tripId); + } else { + throw new IllegalStateException("Can't come here!"); + } + + DataReference tripReference = BinderEngine.get().transformEntityToDataReferenceDto(getReferentialLocale(), trip); + + resultBuilder.addTripResult(tripReference, deleteBeforeImport); + + } + + return resultBuilder.build(); + + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.