Author: tchemit Date: 2014-05-13 14:11:02 +0200 (Tue, 13 May 2014) New Revision: 1758 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1758 Log: fxes #5060 Changer la gestion du Hors-Vrac Added: branches/tutti-3.4.x/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.car branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tnk branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tuttiProtocol Modified: branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java Modified: branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java =================================================================== --- branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java 2014-05-13 11:22:05 UTC (rev 1757) +++ branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java 2014-05-13 12:11:02 UTC (rev 1758) @@ -125,4 +125,11 @@ this.weight = weight; } + public boolean isSorted() { + + boolean sorted = Directions.VAT == direction && !"H".equals(sign); + return sorted; + + } + } Modified: branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java =================================================================== --- branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java 2014-05-13 11:22:05 UTC (rev 1757) +++ branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java 2014-05-13 12:11:02 UTC (rev 1758) @@ -55,6 +55,19 @@ return enumerationFile.QUALITATIVE_SEX_UNDEFINED_ID; } }, + UNSORTED("H") { + @Override + public Integer getCategory(TuttiEnumerationFile enumerationFile) { + // special case, there is no cateogry possible here + return null; + } + + @Override + public Integer getQualitativeValueId(TuttiEnumerationFile enumerationFile) { + // special case, there is no cateogry possible here + return null; + } + }, MALE("1") { @Override public Integer getCategory(TuttiEnumerationFile enumerationFile) { Modified: branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java =================================================================== --- branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java 2014-05-13 11:22:05 UTC (rev 1757) +++ branches/tutti-3.4.x/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportExportService.java 2014-05-13 12:11:02 UTC (rev 1758) @@ -318,21 +318,32 @@ result.incrementNbCarrousselImported(); String speciesId = bean.getSpeciesId(); + + if (Directions.HOV.equals(bean.getDirection())) { + + // Do not accept any longer this direction (see https://forge.codelutin.com/issues/5060) + notFoundSpecies.add(speciesId); + continue; + } + List<Species> speciesList = speciesBySurveyCode.get(speciesId); Float beanWeight = bean.getWeight(); if (beanWeight < 0f) { beanWeight = 0f; } - boolean sorted; - switch (bean.getDirection()) { - case HOV: - sorted = false; - break; - - default: - sorted = true; - carrouselSortedWeight += beanWeight; + boolean sorted = bean.isSorted(); + if (sorted) { + carrouselSortedWeight += beanWeight; } +// switch (bean.getDirection()) { +// case HOV: +// sorted = false; +// break; +// +// default: +// sorted = true; +// carrouselSortedWeight += beanWeight; +// } if (CollectionUtils.isNotEmpty(speciesList)) { @@ -466,6 +477,10 @@ PupitriCatch.Signs.DEFAULT ); + public static final Set<PupitriCatch.Signs> UNSORTED_SIGNS = Sets.newHashSet( + PupitriCatch.Signs.UNSORTED + ); + public static final Set<PupitriCatch.Signs> SEX_SIGNS = Sets.newHashSet( PupitriCatch.Signs.DEFAULT, PupitriCatch.Signs.MALE, @@ -483,7 +498,7 @@ * Check that the given species catch can be split. * For the moment accept for a same catch : * <ul> - * <li>Signs.DEFAULT, Signs.MALE, Signs.FEMALE</li> + * <li>Signs.DEFAULT, Signs.UNSORTED, Signs.MALE, Signs.FEMALE</li> * <li>Signs.SMALL, Signs.MEDIUM, Signs.BIG</li> * </ul> * See http://forge.codelutin.com/issues/3898 @@ -503,6 +518,10 @@ // only a default sign, no split result = false; + } else if (UNSORTED_SIGNS.equals(signs)) { + + // only a unsorted sign, no split + result = false; } else { // remove all sex signs Added: branches/tutti-3.4.x/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java =================================================================== --- branches/tutti-3.4.x/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java (rev 0) +++ branches/tutti-3.4.x/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java 2014-05-13 12:11:02 UTC (rev 1758) @@ -0,0 +1,130 @@ +package fr.ifremer.tutti.service.pupitri; + +import com.google.common.collect.Sets; +import fr.ifremer.tutti.TuttiConfigurationOption; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.decorator.Decorator; + +import java.io.File; +import java.io.IOException; +import java.util.Set; + +/** + * Created on 5/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 3.4.2 + */ +public class PupitriImportServiceEvo5060Test { + + /** Logger. */ + private static final Log log = LogFactory.getLog(PupitriImportServiceEvo5060Test.class); + + @ClassRule + public static final ServiceDbResource dbResource = + ServiceDbResource.writeDb("dbExport"); + + public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; + + public static final String CRUISE_ID = "100003"; + + public static final String OPERATION_1_ID = "100112"; + + public static final String OPERATION_2_ID = "100113"; + + public static final String OPERATION_3_ID = "100115"; + + protected PupitriImportExportService service; + + protected PersistenceService persistenceService; + + protected DecoratorService decoratorService; + + protected ServiceDbResource.DataContext dataContext; + + @Before + public void setUp() throws Exception { + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + persistenceService = serviceContext.getService(PersistenceService.class); + + decoratorService = serviceContext.getService(DecoratorService.class); + + dbResource.openDataContext(); + + service = serviceContext.getService(PupitriImportExportService.class); + + dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, + OPERATION_2_ID, + OPERATION_1_ID, + OPERATION_3_ID); + } + + @Test + public void importPupitri() throws IOException { + + File trunk = dbResource.copyClassPathResource("pupitri/evo-5060.tnk", "pupitri.tnk"); + File carroussel = dbResource.copyClassPathResource("pupitri/evo-5060.car", "pupitri.car"); + File protocol = dbResource.copyClassPathResource("pupitri/evo-5060.tuttiProtocol", "evo-5060.tuttiProtocol"); + dbResource.getConfig().getApplicationConfig().setOption(TuttiConfigurationOption.DB_PROTOCOL_DIRECTORY.getKey(), protocol.getParentFile().getAbsolutePath()); + TuttiProtocol protocol1 = persistenceService.getProtocol("evo-5060"); + persistenceService.setProtocol(protocol1); + + FishingOperation operation = dataContext.operations.get(1); + 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).getNbCarrousselNotImported(); + Assert.assertEquals(1, nbNotAdded); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), null); + Assert.assertEquals(2, rootSpeciesBatchAfter.sizeChildren()); + + Set<Integer> unexpectedSpecies = Sets.newHashSet( + ); + Set<Integer> expectedSpecies = Sets.newHashSet( + + 17186, // ACATPAL + 16328 // ACAPPEL + ); + + Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); + + for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { + + Species species = speciesBatch.getSpecies(); + Integer speciesId = species.getIdAsInt(); + boolean remove = expectedSpecies.remove(speciesId); + if (log.isInfoEnabled()) { + log.info("Species : " + speciesId + " : " + speciesDecorator.toString(species)); + } + if (!remove) { + unexpectedSpecies.add(speciesId); + if (log.isWarnEnabled()) { + log.warn("Unexpected Species " + speciesId); + } + } + } + + Assert.assertTrue("Expected species not found: " + expectedSpecies, expectedSpecies.isEmpty()); + Assert.assertTrue("Unexpected species found: " + unexpectedSpecies, unexpectedSpecies.isEmpty()); + } +} Property changes on: branches/tutti-3.4.x/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.car =================================================================== --- branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.car (rev 0) +++ branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.car 2014-05-13 12:11:02 UTC (rev 1758) @@ -0,0 +1,3 @@ +$TSMES,27/11/13,09:17:40.272,BLCAR, 0,A,1,002,MERLMNG,0,HOV,0021.1, +$TSMES,27/11/13,09:18:48.818,BLCAR, 0,A,1,002,ACAN-PEL,H,VAT,100.0, +$TSMES,27/11/13,09:18:48.818,BLCAR, 0,A,1,002,ACANPAL,0,VAT,200.0, Added: branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tnk =================================================================== --- branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tnk (rev 0) +++ branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tnk 2014-05-13 12:11:02 UTC (rev 1758) @@ -0,0 +1,32 @@ +$TSMES,27/11/13,09:08:45.130,BLTNK, 0,A,1,VAT,0045.4, +$TSMES,27/11/13,09:10:10.522,BLTNK, 0,A,1,VAT,0045.0, +$TSMES,27/11/13,09:12:14.730,BLTNK, 0,A,1,VAT,0043.9, +$TSMES,27/11/13,09:14:06.033,BLTNK, 0,A,1,VAT,0044.0, +$TSMES,27/11/13,09:16:08.907,BLTNK, 0,A,1,VAT,0042.4, +$TSMES,27/11/13,09:17:47.515,BLTNK, 0,A,1,VAT,0044.3, +$TSMES,27/11/13,09:19:44.039,BLTNK, 0,A,1,VAT,0043.6, +$TSMES,27/11/13,09:21:49.166,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,09:26:57.681,BLTNK, 0,A,1,VAT,0045.9, +$TSMES,27/11/13,09:29:20.020,BLTNK, 0,A,1,VAT,0045.8, +$TSMES,27/11/13,09:30:37.535,BLTNK, 0,A,1,VAT,0047.0, +$TSMES,27/11/13,09:32:16.153,BLTNK, 0,A,1,VAT,0046.6, +$TSMES,27/11/13,09:33:30.882,BLTNK, 0,A,1,VAT,0044.4, +$TSMES,27/11/13,09:34:50.649,BLTNK, 0,A,1,VAT,0044.5, +$TSMES,27/11/13,09:36:36.933,BLTNK, 0,A,1,VAT,0043.7, +$TSMES,27/11/13,09:37:53.424,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:41:40.944,BLTNK, 0,A,1,VAT,0048.6, +$TSMES,27/11/13,09:43:33.377,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:44:46.487,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:46:12.192,BLTNK, 0,A,1,VAT,0045.2, +$TSMES,27/11/13,09:47:34.846,BLTNK, 0,A,1,VAT,0045.4, +$TSMES,27/11/13,09:48:55.920,BLTNK, 0,A,1,VAT,0048.4, +$TSMES,27/11/13,09:51:12.724,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:54:14.063,BLTNK, 0,A,1,VAT,0040.4, +$TSMES,27/11/13,09:56:11.000,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,09:57:38.344,BLTNK, 0,A,1,VAT,0047.3, +$TSMES,27/11/13,09:59:23.603,BLTNK, 0,A,1,VAT,0047.6, +$TSMES,27/11/13,10:00:51.868,BLTNK, 0,A,1,VAT,0047.9, +$TSMES,27/11/13,10:02:29.655,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,10:04:14.101,BLTNK, 0,A,1,VAT,0045.9, +$TSMES,27/11/13,10:06:08.886,BLTNK, 0,A,1,VAT,0043.2, +$TSMES,27/11/13,10:08:35.000,BLTNK, 0,A,1,VAT,0007.5, \ No newline at end of file Copied: branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tuttiProtocol (from rev 1756, branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/ano-5032.tuttiProtocol) =================================================================== --- branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tuttiProtocol (rev 0) +++ branches/tutti-3.4.x/tutti-service/src/test/resources/pupitri/evo-5060.tuttiProtocol 2014-05-13 12:11:02 UTC (rev 1758) @@ -0,0 +1,81 @@ +id: c6ee2088-9720-46c0-b8d2-8f21c902676f +name: Protocole EVHOE 2013 +benthos: +comment: Protocole pour les tests 2013 avec Jean Jacques Rivoalen +gearUseFeaturePmfmId: +- 131 +- 828 +- 884 +- 965 +lengthClassesPmfmId: +- 306 +- 622 +- 307 +- 302 +- 299 +- 1394 +- 1417 +- 1425 +- 1426 +- 1427 +- 283 +- 284 +- 285 +- 294 +- 295 +- 300 +- 301 +- 304 +- 318 +- 319 +- 322 +- 323 +- 661 +- 662 +species: +- !SpeciesProtocol + id: 2a8122cf-d238-4820-a7b9-eacaf1f302bd + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1551 + speciesSurveyCode: MERLMNG + weightEnabled: true +- !SpeciesProtocol + id: 0de3f5c9-0ca9-4a7c-84aa-323d9eaa7f7f + countIfNoFrequencyEnabled: true + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 872 + speciesSurveyCode: ACAN-PEL + weightEnabled: true +- !SpeciesProtocol + id: ddffa4c9-cbb5-447f-a829-e2ac0cfea0f5 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1732 + speciesSurveyCode: ACANPAL + weightEnabled: true +vesselUseFeaturePmfmId: +- 173 +- 194 +- 230 +- 782 +- 843 +- 844 +- 846 +- 847 +- 848 +- 849 +- 850 +- 851 +- 857 +- 858 +- 859 +- 861 +- 862 +- 863 +- 881 +- 882 +- 883 \ No newline at end of file