Author: tchemit Date: 2013-12-17 16:11:02 +0100 (Tue, 17 Dec 2013) New Revision: 1466 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1466 Log: fixes #3983: [CAPTURE] ?\195?\160 l'import pupitri si Tuuti ne d?\195?\169tecte pas le couple SATION/DATE afficher un message Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportServiceTest.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportPupitriAction.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-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java 2013-12-17 15:11:02 UTC (rev 1466) @@ -141,20 +141,25 @@ * @param catchBatch target catch batch * @return the number of rows of the .car file which have not been imported */ - public int importPupitri(File trunkFile, - File carrouselFile, - FishingOperation operation, - CatchBatch catchBatch) { + public PupitriImportResult importPupitri(File trunkFile, + File carrouselFile, + FishingOperation operation, + CatchBatch catchBatch) { - importPupitriTrunk(trunkFile, operation, catchBatch); + PupitriImportResult result = new PupitriImportResult(trunkFile, + carrouselFile); - int result = importPupitriCarrousel(carrouselFile, operation, catchBatch); + importPupitriTrunk(result, trunkFile, operation, catchBatch); + importPupitriCarrousel(result, carrouselFile, operation, catchBatch); - addFileAsAttachment(trunkFile, catchBatch); - addFileAsAttachment(carrouselFile, catchBatch); + if (result.isFishingOperationFound()) { - persistenceService.saveCatchBatch(catchBatch); + // there is some matching rows to import + savePupitriImportResult(result, operation, catchBatch); + + } + return result; } @@ -169,11 +174,6 @@ @Override public SpeciesRow apply(Species input) { SpeciesRow row = new SpeciesRow(input); -// String codeFirstPart = StringUtils.substring(input.getSurveyCode(), 0, 4); -// row.setCodeFirstPart(StringUtils.rightPad(codeFirstPart, 4)); -// String codeSecondPart = StringUtils.substring(input.getSurveyCode(), 4, 7); -// row.setCodeSecondPart(StringUtils.rightPad(codeSecondPart, 3)); -// row.setScientificName(input.getName()); return row; } }); @@ -203,7 +203,7 @@ persistenceService.createAttachment(attachment, f); } - protected void importPupitriTrunk(File file, + protected void importPupitriTrunk(PupitriImportResult result, File file, FishingOperation operation, CatchBatch catchBatch) { @@ -239,6 +239,9 @@ case VNT: rejectedWeight += bean.getWeight(); } + result.incrementNbTrunkImported(); + } else { + result.incrementNbTrunkNotImported(); } } @@ -255,15 +258,14 @@ FileUtils.deleteQuietly(fileWithHeaders); } - catchBatch.setCatchTotalSortedTremisWeight( - TuttiEntities.roundKiloGram(sortedWeight)); - catchBatch.setCatchTotalRejectedWeight( - TuttiEntities.roundKiloGram(rejectedWeight)); + result.setSortedWeight(TuttiEntities.roundKiloGram(sortedWeight)); + result.setRejectedWeight(TuttiEntities.roundKiloGram(rejectedWeight)); } - protected int importPupitriCarrousel(File carrouselFile, - FishingOperation operation, - CatchBatch catchBatch) { + protected void importPupitriCarrousel(PupitriImportResult result, + File carrouselFile, + FishingOperation operation, + CatchBatch catchBatch) { if (log.isInfoEnabled()) { log.info("Will import pupitri operation [" + operation.toString() + @@ -291,8 +293,6 @@ // import the batches - - int result; Float carrouselSortedWeight = 0f; List<PupitriCatch> catches = Lists.newArrayList(); @@ -315,6 +315,8 @@ // is the bean from the current operation and rig ? if (bean.acceptOperation(operation)) { + result.incrementNbCarrousselImported(); + String speciesId = bean.getSpeciesId(); List<Species> speciesList = speciesBySurveyCode.get(speciesId); Float beanWeight = bean.getWeight(); @@ -343,7 +345,6 @@ catches.add(pupitriCatch); } pupitriCatch.addToSign(bean.getSign(), beanWeight); - } else { notFoundSpecies.add(speciesId); } @@ -364,9 +365,22 @@ FileUtils.deleteQuietly(fileWithHeaders); } - result = notFoundSpecies.size(); - catchBatch.setCatchTotalSortedCarousselWeight(TuttiEntities.roundKiloGram(carrouselSortedWeight)); + result.setNbCarrousselNotImported(notFoundSpecies.size()); + result.setCarrouselSortedWeight(TuttiEntities.roundKiloGram(carrouselSortedWeight)); + result.setCatches(catches); + } + protected void savePupitriImportResult(PupitriImportResult result, + FishingOperation operation, + CatchBatch catchBatch) { + addFileAsAttachment(result.getTrunkFile(), catchBatch); + addFileAsAttachment(result.getCarrousselFile(), catchBatch); + + catchBatch.setCatchTotalSortedTremisWeight(result.getSortedWeight()); + catchBatch.setCatchTotalRejectedWeight(result.getRejectedWeight()); + + catchBatch.setCatchTotalSortedCarousselWeight(result.getCarrouselSortedWeight()); + // delete all species batches BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), null); @@ -378,7 +392,7 @@ TuttiEnumerationFile enumerationFile = persistenceService.getEnumerationFile(); Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); - for (PupitriCatch pupitriCatch : catches) { + for (PupitriCatch pupitriCatch : result.getCatches()) { Species species = pupitriCatch.getSpecies(); CaracteristicQualitativeValue cqv = pupitriCatch.isSorted() ? @@ -445,20 +459,7 @@ } } -// carrouselImporter.close(); -// reader.close(); -// -// } catch (Exception e) { -// DecoratorService service = getService(DecoratorService.class); -// throw new ApplicationTechnicalException(_("tutti.service.pupitri.import.carrousel.error", carrouselFile, service.getDecorator(operation).toString(operation)), e);//"Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile -// -// } finally { -// IOUtils.closeQuietly(carrouselImporter); -// IOUtils.closeQuietly(reader); -// FileUtils.deleteQuietly(fileWithHeaders); -// } - - return result; + persistenceService.saveCatchBatch(catchBatch); } public static final Set<PupitriCatch.Signs> DEFAULT_SIGNS = Sets.newHashSet( Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java 2013-12-17 15:11:02 UTC (rev 1466) @@ -0,0 +1,144 @@ +package fr.ifremer.tutti.service.pupitri; + +/* + * #%L + * Tutti :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.io.File; +import java.util.List; + +/** + * Result of a pupitri import. + * <p/> + * Created on 12/17/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 3.0 + */ +public class PupitriImportResult { + + final File trunkFile; + + final File carrousselFile; + + int nbTrunkImported; + + int nbTrunkNotImported; + + int nbCarrousselImported; + + int nbCarrousselNotImported; + + private float sortedWeight; + + private float rejectedWeight; + + private Float carrouselSortedWeight; + + private List<PupitriCatch> catches; + + public PupitriImportResult(File trunkFile, File carrousselFile) { + this.trunkFile = trunkFile; + this.carrousselFile = carrousselFile; + } + + public boolean isFishingOperationFound() { + return nbTrunkImported + nbCarrousselImported > 0; + } + + public File getTrunkFile() { + return trunkFile; + } + + public File getCarrousselFile() { + return carrousselFile; + } + + public int getNbTrunkImported() { + return nbTrunkImported; + } + + public int getNbTrunkNotImported() { + return nbTrunkNotImported; + } + + public int getNbCarrousselImported() { + return nbCarrousselImported; + } + + public int getNbCarrousselNotImported() { + return nbCarrousselNotImported; + } + + public float getSortedWeight() { + return sortedWeight; + } + + public float getRejectedWeight() { + return rejectedWeight; + } + + public Float getCarrouselSortedWeight() { + return carrouselSortedWeight; + } + + void incrementNbTrunkImported() { + this.nbTrunkImported++; + } + + void incrementNbTrunkNotImported() { + this.nbTrunkNotImported++; + } + + void incrementNbCarrousselImported() { + this.nbCarrousselImported++; + } + + void incrementNbCarrousselNotImported() { + this.nbCarrousselNotImported++; + } + + void setNbCarrousselNotImported(int nbCarrousselNotImported) { + this.nbCarrousselNotImported = nbCarrousselNotImported; + } + + void setSortedWeight(float sortedWeight) { + this.sortedWeight = sortedWeight; + } + + void setRejectedWeight(float rejectedWeight) { + this.rejectedWeight = rejectedWeight; + } + + void setCarrouselSortedWeight(Float carrouselSortedWeight) { + this.carrouselSortedWeight = carrouselSortedWeight; + } + + void setCatches(List<PupitriCatch> catches) { + this.catches = catches; + } + + List<PupitriCatch> getCatches() { + return catches; + } +} Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportServiceTest.java 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportServiceTest.java 2013-12-17 15:11:02 UTC (rev 1466) @@ -95,34 +95,46 @@ File trunk = dbResource.copyClassPathResource("pupitri/pupitri.tnk", "pupitri.tnk"); File carroussel = dbResource.copyClassPathResource("pupitri/pupitri.car", "pupitri.car"); - FishingOperation operation = dataContext.operations.get(1); - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); - catchBatch.setFishingOperation(operation); + { + FishingOperation operation = dataContext.operations.get(0); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); - BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), null); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); - int nbNotAdded = service.importPupitri(trunk, carroussel, operation, catchBatch); - Assert.assertEquals(6, nbNotAdded); - BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), null); - Assert.assertEquals(18, rootSpeciesBatchAfter.sizeChildren()); + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), null); + Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + PupitriImportResult importResult = service.importPupitri(trunk, carroussel, operation, catchBatch); - Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); + Assert.assertFalse(importResult.isFishingOperationFound()); + Assert.assertEquals(0, importResult.getNbCarrousselImported()); + Assert.assertEquals(0, importResult.getNbTrunkImported()); + } + { + FishingOperation operation = dataContext.operations.get(1); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); -// int index = 0; - for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), null); + Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + PupitriImportResult importResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(importResult.isFishingOperationFound()); + Assert.assertEquals(6, importResult.getNbCarrousselNotImported()); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), null); + Assert.assertEquals(18, rootSpeciesBatchAfter.sizeChildren()); - int nbChildren; - // species 17392 has two childs (MALE - FEMALE) - if (17392 == speciesBatch.getSpecies().getIdAsInt()) { - nbChildren = 2; - } else { - nbChildren = 0; + Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); + for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { + + int nbChildren; + // species 17392 has two childs (MALE - FEMALE) + if (17392 == speciesBatch.getSpecies().getIdAsInt()) { + nbChildren = 2; + } else { + nbChildren = 0; + } + Assert.assertEquals("SpeciesBatch with species " + speciesDecorator.toString(speciesBatch.getSpecies()) + " should have with " + nbChildren + " but had " + speciesBatch.sizeChildBatchs(), nbChildren, speciesBatch.sizeChildBatchs()); } -// if (index == 11) { -// nbChildren = 2; -// } - Assert.assertEquals("SpeciesBatch with species " + speciesDecorator.toString(speciesBatch.getSpecies()) + " should have with " + nbChildren + " but had " + speciesBatch.sizeChildBatchs(), nbChildren, speciesBatch.sizeChildBatchs()); } + } } Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java 2013-12-17 15:11:02 UTC (rev 1466) @@ -107,7 +107,7 @@ BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), null); Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); - int nbNotAdded = service.importPupitri(trunk, carroussel, operation, catchBatch); + int nbNotAdded = service.importPupitri(trunk, carroussel, operation, catchBatch).getNbCarrousselNotImported(); Assert.assertEquals(0, nbNotAdded); BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), null); Assert.assertEquals(31, rootSpeciesBatchAfter.sizeChildren()); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportPupitriAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportPupitriAction.java 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportPupitriAction.java 2013-12-17 15:11:02 UTC (rev 1466) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.pupitri.PupitriImportExportService; +import fr.ifremer.tutti.service.pupitri.PupitriImportResult; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -64,6 +65,8 @@ protected EditFishingOperationAction editAction; + protected PupitriImportResult importResult; + public ImportPupitriAction(SpeciesBatchUIHandler handler) { super(handler, false); persistenceService = getContext().getPersistenceService(); @@ -138,7 +141,7 @@ @Override public void doAction() throws Exception { - PupitriImportExportService pupitriImportExportService = + PupitriImportExportService importExportService = getContext().getTuttiPupitriImportExportService(); EditCatchesUI parentContainer = handler.getParentContainer(EditCatchesUI.class); @@ -148,16 +151,16 @@ CatchBatch catchBatch = model.toEntity(); // import - int rejectedSpeciesNb = - pupitriImportExportService.importPupitri(importedTrunkFile, + importResult = importExportService.importPupitri(importedTrunkFile, importedCarrouselFile, operation, catchBatch); - getEditAction().loadCatchBatch(operation); + if (importResult.isFishingOperationFound()) { - sendMessage(_("tutti.editSpeciesBatch.action.importPupitri.success", - getModel().getRootNumber(), rejectedSpeciesNb)); + // reload operation + getEditAction().loadCatchBatch(operation); + } } @Override @@ -167,4 +170,24 @@ importedCarrouselFile = null; } + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + if (importResult.isFishingOperationFound()) { + int rejectedSpeciesNb = importResult.getNbCarrousselNotImported(); + + sendMessage(_("tutti.editSpeciesBatch.action.importPupitri.success", + getModel().getRootNumber(), rejectedSpeciesNb)); + } else { + + displayWarningMessage( + _("tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation.title"), + "<html><body>" + + _("tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation") + + "</body></html>" + ); + sendMessage(_("tutti.editSpeciesBatch.action.importPupitri.no.matching.data")); + } + } } 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 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-12-17 15:11:02 UTC (rev 1466) @@ -1040,6 +1040,8 @@ tutti.editSpeciesBatch.action.importPupitri.invalidSampleCategoryModel.message= tutti.editSpeciesBatch.action.importPupitri.invalidSampleCategoryModel.title= tutti.editSpeciesBatch.action.importPupitri.mnemonic= +tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation= +tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation.title= tutti.editSpeciesBatch.action.importPupitri.success= tutti.editSpeciesBatch.action.importPupitri.tip= tutti.editSpeciesBatch.action.removeBatch= 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 2013-12-17 15:10:09 UTC (rev 1465) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-12-17 15:11:02 UTC (rev 1466) @@ -1030,6 +1030,9 @@ tutti.editSpeciesBatch.action.importPupitri.invalidSampleCategoryModel.message=<html><body>Le modèle de catégorisation n'est pas compatible pour un import pupitri.<br> Il manque les catégories suivantes \: <ul>%s</ul><hr/>Veuillez ajouter cette catégorie dans la configuration de catégorisation (menu administration).</body></html> tutti.editSpeciesBatch.action.importPupitri.invalidSampleCategoryModel.title=Modèle de catégorisation non compatible tutti.editSpeciesBatch.action.importPupitri.mnemonic=I +tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation=L'application n'a pas trouvé dans les fichiers Trunk et Carrousel les identifiants de Station et/ou de Date du trait en cours de saisie.<br/>Aucun lot n'a donc été importé. +tutti.editSpeciesBatch.action.importPupitri.no.matching.data=Import pupitri non réalisé (Les identifiants de Station et/ ou de Date du trait ne correspondent pas) +tutti.editSpeciesBatch.action.importPupitri.no.matching.fishingOperation.title=Import Pupitri tutti.editSpeciesBatch.action.importPupitri.success=Import Pupitri réussi \: %1s espèces importées, %2s espèces rejetées tutti.editSpeciesBatch.action.importPupitri.tip=Import Pupitri tutti.editSpeciesBatch.action.removeBatch=Supprimer le lot