r1503 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol tutti-persistence/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol tutti-ui-swing/src/main/resources/i18n
Author: tchemit Date: 2014-01-18 16:13:52 +0100 (Sat, 18 Jan 2014) New Revision: 1503 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1503 Log: fixes #4145: [PROTOCOLE] erreur apr?\195?\168s import protocole (d'avant 3.0), changement nom, et enregistrement. Urgent car bloque cr?\195?\169ation protocole Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2014-01-18 15:13:52 UTC (rev 1503) @@ -52,7 +52,9 @@ import java.io.BufferedWriter; import java.io.File; import java.io.Reader; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -195,6 +197,16 @@ } } + public static void removeBadSpecies(Set<Integer> speciesIds, List<SpeciesProtocol> protocol) { + Iterator<SpeciesProtocol> iterator = protocol.iterator(); + while (iterator.hasNext()) { + SpeciesProtocol next = iterator.next(); + if (speciesIds.contains(next.getSpeciesReferenceTaxonId())) { + iterator.remove(); + } + } + } + public static String getBadCategoriesMessage(Set<Integer> badCategories, Decorator<Caracteristic> decorator, TuttiPersistence persistenceService) { @@ -217,6 +229,26 @@ return message; } + public static String getBadSpeciesMessage(Map<Integer, String> badSpecies) { + List<String> badCategoriesStr = Lists.newArrayList(); + + for (Map.Entry<Integer, String> id : badSpecies.entrySet()) { + badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>"); + } + String message = _("tutti.persistence.error.protocol.species.not.found", Joiner.on("").join(badCategoriesStr)); + return message; + } + + public static String getBadBenthosMessage(Map<Integer, String> badSpecies) { + List<String> badCategoriesStr = Lists.newArrayList(); + + for (Map.Entry<Integer, String> id : badSpecies.entrySet()) { + badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>"); + } + String message = _("tutti.persistence.error.protocol.benthos.not.found", Joiner.on("").join(badCategoriesStr)); + return message; + } + protected static TuttiProtocol fromTuttiProtocol1(TuttiEnumerationFile enumeration, TuttiProtocol1 tuttiProtocol1) { TuttiProtocol result = newTuttiProtocol(); Binder<TuttiProtocol1, TuttiProtocol> binder = BinderFactory.newBinder(TuttiProtocol1.class, TuttiProtocol.class); Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2014-01-18 15:13:52 UTC (rev 1503) @@ -95,7 +95,9 @@ tutti.persistence.dbMetadata.instanciation.error= tutti.persistence.error.caracteristic.notFound= tutti.persistence.error.no.convertor= +tutti.persistence.error.protocol.benthos.not.found= tutti.persistence.error.protocol.categories.not.compatible= +tutti.persistence.error.protocol.species.not.found= tutti.persistence.loader.error= tutti.persistence.protocol.delete.error= tutti.persistence.protocol.fromFile.error= Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2014-01-18 15:13:52 UTC (rev 1503) @@ -95,7 +95,9 @@ tutti.persistence.dbMetadata.instanciation.error=Erreur lors de l'initialisation des metadata de la base de données par la connexion %s tutti.persistence.error.caracteristic.notFound=Caractéristique inconnue tutti.persistence.error.no.convertor=Impossible de convertir en modèle de catégorie le type %s avec la valeur %s +tutti.persistence.error.protocol.benthos.not.found=Le protocole utilise des benthos non connus dans le référentiel \: <ul>%s</ul> tutti.persistence.error.protocol.categories.not.compatible=Le protocole utilise des catégories non connues par la configuration des catégorisations \: <ul>%s</ul> +tutti.persistence.error.protocol.species.not.found=Le protocole utilise des espèces non connues dans le référentiel \: <ul>%s</ul> tutti.persistence.loader.error=Erreur de conversion du dossier %s en URL tutti.persistence.protocol.delete.error=Erreur lors de la suppression du protocole %1s (fichier %2s) tutti.persistence.protocol.fromFile.error=Erreur lors de l'import du protocole du fichier %s Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 15:13:52 UTC (rev 1503) @@ -25,15 +25,20 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.JAXXUtil; import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -41,6 +46,7 @@ import javax.swing.JOptionPane; import javax.swing.UIManager; import java.io.File; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -57,7 +63,8 @@ private static final Log log = LogFactory.getLog(ImportProtocolAction.class); - public static final JAXXContextEntryDef<TuttiProtocol> IMPORT_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("importProtocol", TuttiProtocol.class); + public static final JAXXContextEntryDef<TuttiProtocol> IMPORT_PROTOCOL_ENTRY = + JAXXUtil.newContextEntryDef("importProtocol", TuttiProtocol.class); protected TuttiProtocol protocol; @@ -101,66 +108,30 @@ protocol.setId((String) null); sendMessage(_("tutti.importProtocol.action.success", protocol.getName())); + } + if (doAction) { + // check that protocol is compatible with sample category model - SampleCategoryModel sampleCategoryModel = - getDataContext().getSampleCategoryModel(); + doAction = cleanCategories(protocol); - Set<Integer> badCategories = Sets.newHashSet(); + } - TuttiProtocols.checkSampleCategories(sampleCategoryModel, - protocol, - badCategories); + if (doAction) { - if (!badCategories.isEmpty()) { + Map<String, Species> allReferentSpeciesByTaxonId = TuttiEntities.splitByTaxonId( + getDataContext().getReferentSpecies()); - // detect some bad categories - if (log.isWarnEnabled()) { - log.warn("There is some bad categories: " + badCategories); - } + // clean species + doAction = cleanSpecies(allReferentSpeciesByTaxonId, protocol); - String message = TuttiProtocols.getBadCategoriesMessage( - badCategories, - getDecorator(Caracteristic.class, null), - getContext().getPersistenceService()); + if (doAction) { - String htmlMessage = String.format( - AbstractTuttiUIHandler.CONFIRMATION_FORMAT, - message, - _("tutti.common.askBeforeImportProtocol.help")); - int response = JOptionPane.showOptionDialog( - getContext().getActionUI(), - htmlMessage, - _("tutti.common.askBeforeEditProtocol.title"), - JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE, - UIManager.getIcon("warning"), - new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.import"), _("tutti.option.cancel")}, - _("tutti.option.cancel") - ); - - switch (response) { - case 0: - // clean and import - if (log.isInfoEnabled()) { - log.info("Clean and Import"); - } - TuttiProtocols.removeBadCategories(sampleCategoryModel, - protocol); - break; - case 1: - // import with no clean - if (log.isInfoEnabled()) { - log.info("Import with no cleaning"); - } - break; - default: - - // cancel - doAction = false; - } + // clean benthos + doAction = cleanBenthos(allReferentSpeciesByTaxonId, protocol); } } + return doAction; } @@ -177,4 +148,176 @@ getContext().setProtocolId(null); super.doAction(); } + + protected boolean cleanCategories(TuttiProtocol protocol) { + + boolean doAction = true; + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + Set<Integer> badCategories = Sets.newHashSet(); + + TuttiProtocols.checkSampleCategories(sampleCategoryModel, + protocol, + badCategories); + + if (!badCategories.isEmpty()) { + + if (log.isWarnEnabled()) { + log.warn("There is some bad categories: " + badCategories); + } + + String message = TuttiProtocols.getBadCategoriesMessage( + badCategories, + getDecorator(Caracteristic.class, null), + getContext().getPersistenceService()); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeImportProtocol.help")); + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocol.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.import"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + if (log.isInfoEnabled()) { + log.info("Clean and Import"); + } + TuttiProtocols.removeBadCategories(sampleCategoryModel, + protocol); + break; + case 1: + if (log.isInfoEnabled()) { + log.info("Import with no cleaning"); + } + break; + default: + + // cancel + doAction = false; + } + } + return doAction; + } + + + protected boolean cleanSpecies(Map<String, Species> allReferentSpeciesByTaxonId, TuttiProtocol protocol) { + + boolean doAction = true; + + Map<Integer, String> badSpecies = Maps.newLinkedHashMap(); + + for (SpeciesProtocol speciesProtocol : protocol.getSpecies()) { + Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId(); + if (!allReferentSpeciesByTaxonId.containsKey(String.valueOf(taxonId))) { + + badSpecies.put(taxonId, speciesProtocol.getSpeciesSurveyCode()); + } + } + + if (!badSpecies.isEmpty()) { + + if (log.isWarnEnabled()) { + log.warn("There is some bad species: " + badSpecies); + } + + String message = TuttiProtocols.getBadSpeciesMessage(badSpecies); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeImportProtocolSpecies.help")); + + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocolSpecies.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + + if (log.isInfoEnabled()) { + log.info("Clean species and Import"); + } + TuttiProtocols.removeBadSpecies(badSpecies.keySet(), + protocol.getSpecies()); + break; + default: + + // cancel + doAction = false; + } + } + return doAction; + } + + protected boolean cleanBenthos(Map<String, Species> allReferentSpeciesByTaxonId, TuttiProtocol protocol) { + + boolean doAction = true; + + Map<Integer, String> badBenthos = Maps.newLinkedHashMap(); + + for (SpeciesProtocol speciesProtocol : protocol.getBenthos()) { + Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId(); + if (!allReferentSpeciesByTaxonId.containsKey(String.valueOf(taxonId))) { + + badBenthos.put(taxonId, speciesProtocol.getSpeciesSurveyCode()); + } + } + + if (!badBenthos.isEmpty()) { + + if (log.isWarnEnabled()) { + log.warn("There is some bad benthos: " + badBenthos); + } + + String message = TuttiProtocols.getBadBenthosMessage(badBenthos); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.common.askBeforeImportProtocolBenthos.help")); + + int response = JOptionPane.showOptionDialog( + getContext().getActionUI(), + htmlMessage, + _("tutti.common.askBeforeEditProtocolBenthos.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + UIManager.getIcon("warning"), + new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.cancel")}, + _("tutti.option.cancel") + ); + + switch (response) { + case 0: + + if (log.isInfoEnabled()) { + log.info("Clean benthos and Import"); + } + TuttiProtocols.removeBadSpecies(badBenthos.keySet(), protocol.getSpecies()); + break; + default: + + // cancel + doAction = false; + } + } + return doAction; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2014-01-18 15:13:52 UTC (rev 1503) @@ -502,6 +502,8 @@ // get species referent taxon Species species = allReferentSpeciesByTaxonId.get(taxonIdStr); + // make sure it exists + Preconditions.checkNotNull(species, "Espèce inconnue : "+taxonIdStr); speciesSet.add(species); EditProtocolSpeciesRowModel row = EditProtocolSpeciesTableModel.newRow(sampleCategoryModel); Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-18 15:13:52 UTC (rev 1503) @@ -68,7 +68,11 @@ tutti.common.askBeforeCloneProtocol.help= tutti.common.askBeforeEditProtocol.help= tutti.common.askBeforeEditProtocol.title= +tutti.common.askBeforeEditProtocolBenthos.title= +tutti.common.askBeforeEditProtocolSpecies.title= tutti.common.askBeforeImportProtocol.help= +tutti.common.askBeforeImportProtocolBenthos.help= +tutti.common.askBeforeImportProtocolSpecies.help= tutti.common.askBeforeUpdate.help= tutti.common.cancel= tutti.common.cancel.mnemonic= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-18 00:01:01 UTC (rev 1502) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-18 15:13:52 UTC (rev 1503) @@ -61,7 +61,11 @@ tutti.common.askBeforeCloneProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas cloner le protocole</li><li><strong>Cloner</strong> pour cloner le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Cloner</strong> pour supprimer les catégories non compatibles dans le protocole cloné</li></ul> tutti.common.askBeforeEditProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas éditer le protocole</li><li><strong>Éditer</strong> pour éditer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Éditer</strong> pour supprimer les catégories non compatibles et éditer le protocole</li></ul> tutti.common.askBeforeEditProtocol.title=Catégories non compatibles détectées dans le protocole +tutti.common.askBeforeEditProtocolBenthos.title=Des espèces (benthos) non reconnues dans le protocole +tutti.common.askBeforeEditProtocolSpecies.title=Des espèces non reconnues dans le protocole tutti.common.askBeforeImportProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Importer</strong> pour importer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul> +tutti.common.askBeforeImportProtocolBenthos.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul> +tutti.common.askBeforeImportProtocolSpecies.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul> tutti.common.askBeforeUpdate.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas effectuer la mise à jour</li><li><strong>OK</strong> pour lancer la mise à jour</li></ul> tutti.common.cancel=Annuler tutti.common.cancel.mnemonic=A
participants (1)
-
tchemit@users.forge.codelutin.com