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 481f140cd9e8c7a8d99fddf8bd0bdadaf66bcb79 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Nov 7 12:48:30 2016 +0100 Récupérer le résultat de l'insertion des référentiels manquants et l'afficher à l'utilisateur lors de l'export --- .../swing/db/ObserveSwingDataSource.java | 16 +++++ .../swing/ui/admin/export/ExportUIHandler.java | 76 ++++++++++++++++------ .../i18n/application-swing_en_GB.properties | 5 ++ .../i18n/application-swing_es_ES.properties | 5 ++ .../i18n/application-swing_fr_FR.properties | 5 ++ .../v1/ReferentialServiceController.java | 3 +- .../topia/service/ReferentialServiceTopia.java | 6 +- .../services/service/MissingReferentialResult.java | 33 ++++++++++ .../services/service/ReferentialService.java | 2 +- 9 files changed, 126 insertions(+), 25 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java index f22d8a9..6b2ea22 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java @@ -25,6 +25,7 @@ package fr.ird.observe.application.swing.db; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.SetMultimap; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; @@ -45,6 +46,7 @@ import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportExcept import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.dto.ObserveSpeciesListConfiguration; +import fr.ird.observe.services.dto.ReferenceMap; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -103,6 +105,7 @@ import java.io.Closeable; import java.io.File; import java.util.Locale; import java.util.Set; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -684,4 +687,17 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements public TargetSampleService newTargetSampleService() { return newService(TargetSampleService.class); } + + public ReferenceMap getReferentialMap(SetMultimap<Class<? extends ReferentialDto>, String> referentialIds) { + ReferenceMap result = new ReferenceMap(); + for (Class<? extends ReferentialDto> dtoType : referentialIds.keySet()) { + Set<String> ids = referentialIds.get(dtoType); + Set<? extends ReferentialReference<? extends ReferentialDto>> references = + getReferentialReferenceSet(dtoType).getReferences().stream() + .filter(r -> ids.contains(r.getId())) + .collect(Collectors.toSet()); + result.put(dtoType, references); + } + return result; + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java index dd3fd61..90d8d87 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/export/ExportUIHandler.java @@ -36,11 +36,14 @@ import fr.ird.observe.application.swing.ui.admin.AdminUIModel; import fr.ird.observe.application.swing.ui.admin.config.ConfigUI; import fr.ird.observe.application.swing.ui.admin.config.SelectDataUI; import fr.ird.observe.application.swing.ui.storage.tabs.DataSelectionModel; +import fr.ird.observe.application.swing.ui.usage.UsagesUI; import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.ReferenceMap; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.seine.TripSeineDto; +import fr.ird.observe.services.service.MissingReferentialResult; import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.services.service.trip.ExportTripRequest; import fr.ird.observe.services.service.trip.ExportTripResult; @@ -53,6 +56,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import java.awt.event.MouseAdapter; @@ -260,34 +264,64 @@ public class ExportUIHandler extends AdminTabUIHandler { TripManagementService centralTripManagementService = centralDataSource.newTripManagementService(); - if (insertMissingReferentials) { - ReferentialService centraltReferentialService = centralDataSource.newReferentialService(); + ReferentialService centraltReferentialService = centralDataSource.newReferentialService(); - // chargement du référentiel de la base centrale - if (log.isInfoEnabled()) { - log.info("Chargement du réferentiel de la base centrale."); - } - SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential = - centraltReferentialService.getReferentialIds(); + // chargement du référentiel de la base centrale + if (log.isInfoEnabled()) { + log.info("Chargement du réferentiel de la base centrale."); + } + SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential = + centraltReferentialService.getReferentialIds(); - List<String> tripIds = tripEntries.stream().map(TripEntry::getTripId).collect(Collectors.toList()); + List<String> tripIds = tripEntries.stream().map(TripEntry::getTripId).collect(Collectors.toList()); - // génération du code sql pour les référentiels manquants - if (log.isInfoEnabled()) { - log.info("Chargement de l'enveloppe de référentiels pour les " + tripIds.size() + " marée(s)."); + // génération du code sql pour les référentiels manquants + if (log.isInfoEnabled()) { + log.info("Chargement de l'enveloppe de référentiels pour les " + tripIds.size() + " marée(s)."); + } + MissingReferentialResult result = + localDataSource.newReferentialService().computeMissingReferentials(centralSourceReferential, tripIds.toArray(new String[tripIds.size()])); + + if (!insertMissingReferentials && result != null) { + + // l'export n'est pas possible + UIHelper.displayInfo(t("observe.actions.export.error.missingReferentialsId")); + + return WizardState.CANCELED; + } + + if (insertMissingReferentials && result != null) { + + String message = t("observe.message.show.usage.for.missingReferentials"); + String message2 = t("observe.message.show.usage.for.missingReferentials2"); + + UsagesUI usagesUI = new UsagesUI(ui); + ReferenceMap usages = localDataSource.getReferentialMap(result.getMissingIds()); + usagesUI.init(message, message2, null, usages, null); + + int reponse = UIHelper.askUser(null, + t("observe.title.can.not.export.data"), + usagesUI, + JOptionPane.WARNING_MESSAGE, + new Object[]{ + t("observe.choice.confirm.insert"), + t("observe.choice.cancel")}, + 0); + + if (reponse != 0) { + + return WizardState.CANCELED; } - byte[] referentialsShellSqlContent = - localDataSource.newReferentialService().computeMissingReferentials(centralSourceReferential, tripIds.toArray(new String[tripIds.size()])); - - if (referentialsShellSqlContent != null) { - // insertion des référentiels manquants dans la base centrale - if (log.isInfoEnabled()) { - log.info("Insertion dans la base centrale des référentiels manquants."); - } - centraltReferentialService.insertMissingReferentials(referentialsShellSqlContent); + + // insertion des référentiels manquants dans la base centrale + if (log.isInfoEnabled()) { + log.info("Insertion dans la base centrale des référentiels manquants."); } + //TODO Send message + centraltReferentialService.insertMissingReferentials(result.getSqlCode()); + } for (TripEntry tripEntry : tripEntries) { diff --git a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties index f2e1f89..2ed0d2c 100644 --- a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties +++ b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties @@ -144,6 +144,7 @@ observe.actions.consolidate.message.save.changes=Save modified %1$s trip(s). observe.actions.consolidate.message.trip=Data consolidate for trip %1$s observe.actions.consolidate.title=Consolidate data observe.actions.consolidate.title.tip=Consolidate observed data +observe.actions.export.error.missingReferentialsId=Can't export data, there is some missing referentials in central source and you did not select insert option. observe.actions.exportData=Export data observe.actions.exportData.description=Export data observe.actions.exportData.message.not.possible=Export is not possible (see above messages) @@ -325,6 +326,7 @@ observe.backup.done=[%s] Auto backup done (in %s) observe.backup.start=[%s] Start auto backup observe.choice.cancel=Cancel observe.choice.confirm.delete=Confirm delete +observe.choice.confirm.insert=Confirm to insert observe.choice.confirm.replace=Replace observe.choice.continue=Continue observe.choice.create.fin.veille.activity=Create end activity @@ -1512,6 +1514,8 @@ observe.message.show.usage.for.delete3=Choose a replacement reference to be able observe.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disabled. observe.message.show.usage.for.desactivated2=Some data are using this referential, see following reference observe.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved. +observe.message.show.usage.for.missingReferentials=There is some referentials present in local source but not in centrale one. +observe.message.show.usage.for.missingReferentials2=Please confirm to insert the following missing referentials in central source\: observe.message.show.usages=List of usage of referential %1$s\: '%2$s' observe.message.table.editBean.modified=Current entry is modifed and valid. observe.message.table.editBean.modified.but.invalid=Current entry is modified but not valid. @@ -1687,6 +1691,7 @@ observe.storage.useServerStorage.config=Configure remote server to use observe.storage.useServerStorage.description=Please configure connexion to remote server\nYou must validate your connexion to continue. observe.title.about=About observe.title.can.not.delete.referentiel=Impossible to delete a referentiel data... +observe.title.can.not.export.data=Could not export data observe.title.can.not.export.obstuna=Could not export obstuna data... observe.title.choose.db.dump=Choose a database backup observe.title.choose.db.dump.directory=Chhose directory of backup diff --git a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties index c20ccf1..ec4495d 100644 --- a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties +++ b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties @@ -144,6 +144,7 @@ observe.actions.consolidate.message.save.changes=Guardar las modificaciones de l observe.actions.consolidate.message.trip=Datos calculados para la marea %1$s observe.actions.consolidate.title=Consolidar los datos observados observe.actions.consolidate.title.tip=Consolidar los datos observados +observe.actions.export.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO observe.actions.exportData=Exportar los datos observados observe.actions.exportData.description=Exportar los datos observados en la base central observe.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior). @@ -325,6 +326,7 @@ observe.backup.done=[%s] Fin de la sauvegarde automatique (en %s) \#TODO observe.backup.start=[%s] Début de la sauvegarde automatique \#TODO observe.choice.cancel=Cancelar observe.choice.confirm.delete=Eliminar +observe.choice.confirm.insert=Confirmer l'insertion \#TODO observe.choice.confirm.replace=Reemplazar observe.choice.continue=Continuar observe.choice.create.fin.veille.activity=Crear la actividad de fin de guardia @@ -1512,6 +1514,8 @@ observe.message.show.usage.for.delete3=Choose a replacement reference to be able observe.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desactivará. observe.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación.. observe.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse. +observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale. \#TODO +observe.message.show.usage.for.missingReferentials2=Veuillez confirmer l'insertion dans la base centrale des objets suivants \: \#TODO observe.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s' observe.message.table.editBean.modified=El registro actual se ha modificado y es válido. observe.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido. @@ -1687,6 +1691,7 @@ observe.storage.useServerStorage.config=Configurar el servidor remoto a utilizar observe.storage.useServerStorage.description=Configure su conexión al servidor remoto\nAntes de que pueda continuar, tiene que validar la conexión. observe.title.about=A proposito de ObServe... observe.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización... +observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale... \#TODO observe.title.can.not.export.obstuna=Impossible exportar los datos de obstuna... observe.title.choose.db.dump=Seleccionar una copia de seguridad de base local observe.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad diff --git a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties index b96a1e1..971af68 100644 --- a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties +++ b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties @@ -144,6 +144,7 @@ observe.actions.consolidate.message.save.changes=Sauvegarde des modifications su observe.actions.consolidate.message.trip=Données calculées pour la marée %1$s observe.actions.consolidate.title=Consolider les données observateur observe.actions.consolidate.title.tip=Consolider les données observateur +observe.actions.export.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. observe.actions.exportData=Exporter les données observateurs observe.actions.exportData.description=Exporter les données observateurs vers la base centrale observe.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents). @@ -325,6 +326,7 @@ observe.backup.done=[%s] Fin de la sauvegarde automatique (en %s) observe.backup.start=[%s] Début de la sauvegarde automatique observe.choice.cancel=Annuler observe.choice.confirm.delete=Supprimer +observe.choice.confirm.insert=Confirmer l'insertion observe.choice.confirm.replace=Remplacer observe.choice.continue=Continuer observe.choice.create.fin.veille.activity=Créer l'activité de fin de veille @@ -1512,6 +1514,8 @@ observe.message.show.usage.for.delete3=Pour pouvoir supprimer l'objet, vous deve observe.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va être désactivé. observe.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas. observe.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour. +observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale. +observe.message.show.usage.for.missingReferentials2=Veuillez confirmer l'insertion dans la base centrale des objets suivants \: observe.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s' observe.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide. observe.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide. @@ -1687,6 +1691,7 @@ observe.storage.useServerStorage.config=Configurer le serveur distant à utilise observe.storage.useServerStorage.description=Veuillez configurer votre connexion au serveur distant\nAvant de pouvoir poursuivre, vous devez valider la connexion. observe.title.about=A propos d'ObServe... observe.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation... +observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale... observe.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna... observe.title.choose.db.dump=Choisir une sauvegarder de base locale observe.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde diff --git a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java index c64a661..ab1d48f 100644 --- a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java +++ b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java @@ -32,6 +32,7 @@ import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.DataNotFoundException; +import fr.ird.observe.services.service.MissingReferentialResult; import fr.ird.observe.services.service.ReferenceSetsRequest; import fr.ird.observe.services.service.ReferentialService; @@ -115,7 +116,7 @@ public class ReferentialServiceController extends ObserveAuthenticatedServiceCon } @Override - public byte[] computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds) { + public MissingReferentialResult computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds) { return service.computeMissingReferentials(centralSourceReferential, tripIds); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java index c84a349..8430e9c 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java @@ -53,6 +53,7 @@ import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.AddSqlScriptProducerRequest; import fr.ird.observe.services.service.AddSqlScriptProducerResult; import fr.ird.observe.services.service.DataNotFoundException; +import fr.ird.observe.services.service.MissingReferentialResult; import fr.ird.observe.services.service.ReferenceSetsRequest; import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.services.topia.ObserveServiceTopia; @@ -308,7 +309,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } @Override - public byte[] computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds) { + public MissingReferentialResult computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds) { ReferentialsShellBuilder referentialsShellBuilder = ReferentialsShellBuilder.builder(centralSourceReferential); @@ -347,7 +348,8 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe SqlScriptProducerServiceTopia sqlScriptProducerService = serviceContext.newService(SqlScriptProducerServiceTopia.class); AddSqlScriptProducerResult addSqlScriptProducerResult = sqlScriptProducerService.produceAddSqlScript(request); - return addSqlScriptProducerResult.getSqlCode(); + + return MissingReferentialResult.of(missingReferentialIds, addSqlScriptProducerResult.getSqlCode()); } diff --git a/services/src/main/java/fr/ird/observe/services/service/MissingReferentialResult.java b/services/src/main/java/fr/ird/observe/services/service/MissingReferentialResult.java new file mode 100644 index 0000000..5161404 --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/MissingReferentialResult.java @@ -0,0 +1,33 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.SetMultimap; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +/** + * Created on 07/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class MissingReferentialResult { + + public static MissingReferentialResult of(SetMultimap<Class<? extends ReferentialDto>, String> missingReferentialIds, byte[] sqlCode) { + return new MissingReferentialResult(missingReferentialIds, sqlCode); + } + + private final SetMultimap<Class<? extends ReferentialDto>, String> missingIds; + private final byte[] sqlCode; + + private MissingReferentialResult(SetMultimap<Class<? extends ReferentialDto>, String> missingIds, byte[] sqlCode) { + this.missingIds = missingIds; + this.sqlCode = sqlCode; + } + + public SetMultimap<Class<? extends ReferentialDto>, String> getMissingIds() { + return missingIds; + } + + public byte[] getSqlCode() { + return sqlCode; + } +} diff --git a/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java index a5b194b..5356f6b 100644 --- a/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -105,7 +105,7 @@ public interface ReferentialService extends ObserveService { @ReadReferentialPermission @ReadDataPermission @PostRequest - byte[] computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds); + MissingReferentialResult computeMissingReferentials(SetMultimap<Class<? extends ReferentialDto>, String> centralSourceReferential, String... tripIds); @ReadReferentialPermission @WriteDataPermission -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.