This is an automated email from the git hooks/post-receive script. New commit to branch feature/importBigfin in repository tutti. See http://git.codelutin.com/tutti.git commit fabfbef0a0cd9685928109692f26aeb3d68613ad Merge: 483e0de 3513ff5 Author: Kevin Morin <morin@codelutin.com> Date: Mon Sep 22 15:19:01 2014 +0200 Merge remote-tracking branch 'origin/develop' into feature/importBigfin Conflicts: tutti-persistence/src/main/java/fr/ifremer/adagio/core/dao/referential/pmfm/QualitativeValueId2.java tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties .gitignore | 3 +- README.txt | 12 +- pom.xml | 64 ++- src/site/rst/dbversions.rst | 2 + src/site/rst/update.rst.vm | 47 +- src/update/tutti-application-dev.properties | 66 --- src/update/tutti-application.properties | 4 - .../core/dao/referential/pmfm/MatrixId2.java | 195 ------- .../core/dao/referential/pmfm/ObjectTypeCode2.java | 274 --------- .../adagio/core/dao/referential/pmfm/PmfmId2.java | 621 +++++---------------- .../dao/referential/pmfm/QualitativeValueId2.java | 251 --------- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 101 +--- .../fr/ifremer/tutti/TuttiConfigurationOption.java | 9 +- .../tutti/persistence/TuttiPersistenceImpl.java | 6 +- .../persistence/TuttiPersistenceNoDbImpl.java | 6 +- .../tutti/persistence/entities/TuttiEntities.java | 3 +- .../entities/protocol/TuttiProtocols.java | 19 +- .../AccidentalBatchPersistenceServiceImpl.java | 7 +- .../service/AttachmentPersistenceService.java | 8 +- .../service/AttachmentPersistenceServiceImpl.java | 8 +- .../service/CatchBatchPersistenceServiceImpl.java | 9 +- .../service/CruisePersistenceServiceImpl.java | 17 +- .../FishingOperationPersistenceServiceImpl.java | 77 ++- ...dualObservationBatchPersistenceServiceImpl.java | 4 +- .../service/ReferentialPersistenceServiceImpl.java | 45 +- .../service/util/BatchPersistenceHelper.java | 70 +-- .../persistence/service/util/BatchTreeHelper.java | 74 +-- .../service/util/MeasurementPersistenceHelper.java | 8 +- .../service/util/SamplePersistenceHelper.java | 4 +- .../tutti/persistence/test/DatabaseResource.java | 64 +-- .../main/java/fr/ifremer/tutti/util/DateTimes.java | 70 +++ ...ervice.technical.sanity.task.DatabaseSanityTask | 2 - ...ro.specific.ReferentialSynchroSpecificTableTask | 2 - .../i18n/tutti-persistence_en_GB.properties | 49 +- .../i18n/tutti-persistence_fr_FR.properties | 51 +- .../resources/tutti-db-enumerations.properties | 13 +- .../src/main/xmi/tutti-persistence.zargo | Bin 56716 -> 56700 bytes .../AttachmentPersistenceServiceWriteTest.java | 12 +- .../BenthosBatchPersistenceServiceReadTest.java | 4 +- .../BenthosBatchPersistenceServiceWriteTest.java | 20 +- .../SpeciesBatchPersistenceServiceReadTest.java | 4 +- .../SpeciesBatchPersistenceServiceWriteTest.java | 20 +- .../ifremer/tutti/service/PersistenceService.java | 8 +- .../service/catches/WeightComputingService.java | 5 +- ...rvice.java => WeightComputingService.java.orig} | 11 +- .../catches/multipost/MultiPostExportService.java | 14 +- .../catches/multipost/MultiPostImportService.java | 16 +- .../service/export/generic/CatchExportModel.java | 41 +- .../service/export/generic/OperationExportRow.java | 4 +- .../service/psionimport/PsionImportModel.java | 42 +- .../service/psionimport/PsionImportService.java | 42 +- .../pupitri/PupitriImportExportService.java | 10 +- .../fr/ifremer/tutti/service/pupitri/Signs.java | 17 +- .../ifremer/tutti/service/pupitri/SpeciesRow.java | 42 +- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 5 +- .../service/bigfin/BigfinImportServiceTest.java | 30 +- .../psionimport/PsionImportServiceTest.java | 4 +- .../test/resources/bigfin/importbigfin-valid.csv | 60 +- tutti-ui-swing/pom.xml | 4 + .../src/main/filtered-resources/tutti.config | 3 +- tutti-ui-swing/src/main/help/fr/dbMapping.html | 4 +- .../ui/swing/TuttiApplicationUpdaterCallBack.java | 17 + .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 12 + .../tutti/ui/swing/action/AbstractTuttiAction.java | 17 + .../tutti/ui/swing/action/ImportPupitriAction.java | 4 +- .../ui/swing/action/NewFishingOperationAction.java | 1 + .../ui/swing/action/RenameBenthosBatchAction.java | 8 +- .../ui/swing/action/RenameSpeciesBatchAction.java | 8 +- .../ui/swing/action/SelectOtherBenthosAction.java | 4 +- .../ui/swing/action/SelectOtherSpeciesAction.java | 3 +- .../action/SelectSpeciesForBenthosBatchAction.java | 3 +- ...SpeciesForIndividualObservationBatchAction.java | 3 +- .../action/SelectSpeciesForSpeciesBatchAction.java | 3 +- .../category/EditSampleCategoryModelUIModel.java | 4 +- .../swing/content/config/TuttiConfigUIHandler.java | 9 +- .../ui/swing/content/cruise/EditCruiseUIModel.java | 6 +- .../operation/EditFishingOperationUIHandler.java | 25 +- .../operation/EditFishingOperationUIModel.java | 6 +- .../operation/catches/EditCatchesUIModel.java | 15 +- .../operation/catches/SampleCategoryAble.java | 2 + .../catches/SampleCategoryColumnIdentifier.java | 7 + .../accidental/AccidentalBatchRowModel.java | 6 +- .../create/CreateAccidentalBatchUIHandler.java | 18 +- .../catches/benthos/BenthosBatchRowModel.java | 23 +- .../catches/benthos/BenthosBatchTableModel.java | 16 +- .../catches/benthos/BenthosBatchUIHandler.java | 34 +- .../create/CreateBenthosBatchUIHandler.java | 12 - .../frequency/BenthosFrequencyCellComponent.java | 1 + .../frequency/BenthosFrequencyRowModel.java | 5 + .../benthos/frequency/BenthosFrequencyUI.css | 14 +- .../benthos/frequency/BenthosFrequencyUI.jaxx | 5 +- .../frequency/BenthosFrequencyUIHandler.java | 5 +- .../benthos/frequency/BenthosFrequencyUIModel.java | 83 ++- .../IndividualObservationBatchRowModel.java | 6 +- .../CreateIndividualObservationBatchUIHandler.java | 19 +- .../marinelitter/MarineLitterBatchRowModel.java | 6 +- .../create/CreateMarineLitterBatchUIHandler.java | 19 +- .../catches/species/SpeciesBatchRowModel.java | 25 +- .../catches/species/SpeciesBatchTableModel.java | 16 +- .../catches/species/SpeciesBatchUIHandler.java | 33 +- .../create/CreateSpeciesBatchUIHandler.java | 12 - .../frequency/SpeciesFrequencyCellComponent.java | 1 + .../frequency/SpeciesFrequencyRowModel.java | 7 +- .../species/frequency/SpeciesFrequencyUI.css | 14 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 5 +- .../frequency/SpeciesFrequencyUIHandler.java | 31 +- .../species/frequency/SpeciesFrequencyUIModel.java | 83 ++- .../content/protocol/EditProtocolUIHandler.java | 4 +- .../util/attachment/AttachmentModelAware.java | 4 +- .../swing/util/editor/TuttiLocationTableCell.java | 4 +- .../ui/swing/util/editor/VesselTableCell.java | 4 +- .../ui/swing/util/species/SelectSpeciesUI.jaxx | 5 +- .../swing/util/species/SelectSpeciesUIHandler.java | 18 +- .../BenthosFrequencyUIModel-error-validation.xml | 11 + ...BenthosFrequencyUIModel-warning-validation.xml} | 31 +- .../SpeciesFrequencyUIModel-error-validation.xml | 11 + ...SpeciesFrequencyUIModel-warning-validation.xml} | 31 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 5 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 11 +- 120 files changed, 1146 insertions(+), 2337 deletions(-) diff --cc tutti-service/src/test/java/fr/ifremer/tutti/service/bigfin/BigfinImportServiceTest.java index 035d440,0000000..2539627 mode 100644,000000..100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/bigfin/BigfinImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/bigfin/BigfinImportServiceTest.java @@@ -1,187 -1,0 +1,199 @@@ +package fr.ifremer.tutti.service.bigfin; + +import com.google.common.base.Predicate; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId2; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; +import fr.ifremer.tutti.TuttiConfigurationOption; +import fr.ifremer.tutti.persistence.ProgressionModel; +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.SpeciesAbleBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchs; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +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.jaxx.application.ApplicationBusinessException; ++import sun.reflect.annotation.ExceptionProxy; + +import java.io.File; +import java.io.IOException; +import java.util.List; + ++import static org.nuiton.i18n.I18n.t; ++ +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class BigfinImportServiceTest { + + @ClassRule - public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbExport"); ++ public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbMedits"); + + /** Logger. */ + private static final Log log = LogFactory.getLog(BigfinImportServiceTest.class); + - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; ++ public static final String PROGRAM_ID = "CAM-MEDITS"; + - public static final String OPERATION_1_ID = "100112"; ++ public static final String CRUISE_ID = "100001"; + - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; ++ public static final String OPERATION_1_ID = "100106"; + + protected BigfinImportService service; + + protected PersistenceService persistenceService; + + protected ServiceDbResource.DataContext dataContext; + + protected ProgressionModel progressionModel; + + protected File dataDirectory; + + protected Predicate<SpeciesAbleBatch> vracPredicate; + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + File protocol = dbResource.copyClassPathResource("bigfin/protocol.tuttiProtocol", "protocol.tuttiProtocol"); + dbResource.getConfig().getApplicationConfig().setOption(TuttiConfigurationOption.DB_PROTOCOL_DIRECTORY.getKey(), protocol.getParentFile().getAbsolutePath()); + serviceContext.getDataContext().setProtocolId("protocol"); + + dbResource.openDataContext(); + + persistenceService = serviceContext.getService(PersistenceService.class); + service = serviceContext.getService(BigfinImportService.class); + + progressionModel = new ProgressionModel(); + progressionModel.setTotal(9); + - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, OPERATION_2_ID, OPERATION_1_ID, OPERATION_3_ID); ++ dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 1, OPERATION_1_ID); + + vracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate(PmfmId2.SORTED_UNSORTED.getValue(), QualitativeValueId.VRAC.getValue()); + } + + @Test + public void importValid() throws IOException { + + File importFile = dbResource.copyClassPathResource("bigfin/importbigfin-valid.csv", "importbigfin-valid.csv"); + + FishingOperation operation = dataContext.operations.get(1); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); + for (SpeciesBatch speciesBatch : rootSpeciesBatch.getChildren()) { + persistenceService.deleteSpeciesBatch(speciesBatch.getId()); + } + + BigfinImportResult importResult = service.importFile(importFile, operation, catchBatch); + + int nbFrequenciesAdded = importResult.getNbFrequenciesImported(); + List<String> fatals = importResult.getFatalErrors(); + List<String> errors = importResult.getErrors(); + + if (log.isInfoEnabled()) { + log.info("Frequencies Imported: " + nbFrequenciesAdded); + log.info("Fatals: " + fatals.size()); + log.info("Errors: " + errors.size()); + } + + int nbNewFrequencies = 3; + Assert.assertEquals(nbNewFrequencies, nbFrequenciesAdded); + Assert.assertEquals(0, fatals.size()); + Assert.assertEquals(0, errors.size()); + + // no batch imported + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); + +// int totalSortedBatchs = 0; +// int totalUnsortedBatchs = 0; +// for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { +// +// boolean sorted = vracPredicate.apply(speciesBatch); +// +// if (sorted) { +// totalSortedBatchs++; +// } else { +// totalUnsortedBatchs++; +// } +// } +// +// Assert.assertEquals(nbNewSortedBatchs, totalSortedBatchs); +// Assert.assertEquals(nbNewUnsortedBatchs, totalUnsortedBatchs); + } + + @Test + public void importInvalid() throws IOException { + + File importFile = dbResource.copyClassPathResource("bigfin/importbigfin-invalid.csv", "importbigfin-invalid.csv"); + + FishingOperation operation = dataContext.operations.get(1); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); + for (SpeciesBatch speciesBatch : rootSpeciesBatch.getChildren()) { + persistenceService.deleteSpeciesBatch(speciesBatch.getId()); + } + + BigfinImportResult importResult = service.importFile(importFile, operation, catchBatch); + + int nbFrequenciesAdded = importResult.getNbFrequenciesImported(); + List<String> fatals = importResult.getFatalErrors(); + List<String> errors = importResult.getErrors(); + + if (log.isInfoEnabled()) { + log.info("Frequencies Imported: " + nbFrequenciesAdded); + log.info("Fatals: " + fatals.size()); + log.info("Errors: " + errors.size()); + } + + int nbNewFrequencies = 0; + int nbFatals = 3; + int nbErrors = 0; + Assert.assertEquals(nbNewFrequencies, nbFrequenciesAdded); + Assert.assertEquals(nbFatals, fatals.size()); + Assert.assertEquals(nbErrors, errors.size()); + + // no batch imported + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); + +// int totalSortedBatchs = 0; +// for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { +// +// boolean sorted = vracPredicate.apply(speciesBatch); +// +// if (sorted) { +// totalSortedBatchs++; +// } else { +// totalUnsortedBatchs++; +// } +// } + +// Assert.assertEquals(nbFrequenciesAdded, totalSortedBatchs); ++ ++ ++ TuttiServiceContext serviceContext = dbResource.getServiceContext(); ++ serviceContext.getDataContext().resetProtocol(); ++ ++ boolean failIfNoProtocol = false; ++ try { ++ service.importFile(importFile, operation, catchBatch); ++ } catch (ApplicationBusinessException e) { ++ failIfNoProtocol = true; ++ } ++ Assert.assertTrue(failIfNoProtocol); + } +} diff --cc tutti-service/src/test/resources/bigfin/importbigfin-valid.csv index 66cd72b,0000000..72e68c9 mode 100644,000000..100644 --- a/tutti-service/src/test/resources/bigfin/importbigfin-valid.csv +++ b/tutti-service/src/test/resources/bigfin/importbigfin-valid.csv @@@ -1,31 -1,0 +1,31 @@@ +Record_id;length(mm);weight(g);species;cruise;station;pan;Dt;sz class;gender;text - 0;98;250;ARISFOL;THALASSA;1;VB;05/31/14 20:20;1;Not set;libre - 1;123;360;ARISFOL;THALASSA;1;VB;05/31/14 20:20;1;Not set; - 2;185;215;ARISFOL;THALASSA;1;VB;05/31/14 20:20;1;Not set; - 3;101;145;ARISFOL;THALASSA;1;VB;05/31/14 20:20;1;Not set; - 5;90;256;ARISFOL;THALASSA;1;VB;05/31/14 20:20;2;Not set; - 6;131;258;ARISFOL;THALASSA;1;VB;05/31/14 20:20;2;Not set; - 7;168;365;ARISFOL;THALASSA;1;VB;05/31/14 20:20;2;Not set; - 8;165;324;ARISFOL;THALASSA;1;VB;05/31/14 20:20;2;Not set; - 9;136;124;ARISFOL;THALASSA;1;VB;05/31/14 20:20;2;Not set; - 10;145;241;ARISFOL;THALASSA;1;VB;05/31/14 20:21;2;Not set; - 11;125;256;ARISFOL;THALASSA;1;VB;05/31/14 20:22;2;Not set; - 12;650;0;ARITANT;THALASSA;1;VB;05/31/14 20:23;0;M; - 13;654;0;ARITANT;THALASSA;1;VB;05/31/14 20:24;0;M; - 14;521;0;ARITANT;THALASSA;1;VB;05/31/14 20:25;0;F; - 15;587;0;ARITANT;THALASSA;1;VB;05/31/14 20:26;0;F; - 16;456;0;ARITANT;THALASSA;1;VB;05/31/14 20:27;0;M; - 17;562;0;ARITANT;THALASSA;1;VB;05/31/14 20:28;0;F; - 18;562;0;ARITANT;THALASSA;1;VB;05/31/14 20:29;0;F; - 19;125;1025;TRACTRU;THALASSA;;VB;05/31/14 20:30;0;Not set; - 20;145;0;TRACTRU;THALASSA;;VB;05/31/14 20:31;0;Not set; - 21;102;0;TRACTRU;THALASSA;;VB;05/31/14 20:32;0;Not set; - 22;96;0;TRACTRU;THALASSA;;VB;05/31/14 20:33;0;Not set; - 23;84;0;TRACTRU;THALASSA;;VB;05/31/14 20:34;0;Not set; - 24;84;0;TRACTRU;THALASSA;;VB;05/31/14 20:35;0;Not set; - 25;132;0;TRACTRU;THALASSA;;VB;05/31/14 20:36;0;Not set; - 26;105;0;TRACTRU;THALASSA;;VB;05/31/14 20:37;0;Not set; - 27;80;0;TRACTRU;THALASSA;;VB;05/31/14 20:38;0;Not set; - 28;96;0;TRACTRU;THALASSA;;VB;05/31/14 20:39;0;Not set; - 29;87;0;TRACTRU;THALASSA;;VB;05/31/14 20:40;0;Not set; - 30;785;1240;DICE-LAB;THALASSA;1;VB;05/31/14 20:41;2;M; ++0;98;250;RAJAMON;;1;VB;05/31/14 20:20;1;Not set;libre ++1;123;360;RAJAMON;;1;VB;05/31/14 20:20;1;Not set; ++2;185;215;RAJAMON;;1;VB;05/31/14 20:20;1;Not set; ++3;101;145;RAJAMON;;1;VB;05/31/14 20:20;1;Not set; ++5;90;256;RAJAMON;;1;VB;05/31/14 20:20;2;Not set; ++6;131;258;RAJAMON;;1;VB;05/31/14 20:20;2;Not set; ++7;168;365;RAJAMON;;1;VB;05/31/14 20:20;2;Not set; ++8;165;324;RAJAMON;;1;VB;05/31/14 20:20;2;Not set; ++9;136;124;RAJAMON;;1;VB;05/31/14 20:20;2;Not set; ++10;145;241;RAJAMON;;1;VB;05/31/14 20:21;2;Not set; ++11;125;256;RAJAMON;;1;VB;05/31/14 20:22;2;Not set; ++12;650;0;DICE-LAB;;1;VB;05/31/14 20:23;0;M; ++13;654;0;DICELAB;;1;VB;05/31/14 20:24;0;M; ++14;521;0;DICELAB;;1;VB;05/31/14 20:25;0;F; ++15;587;0;DICELAB;;1;VB;05/31/14 20:26;0;F; ++16;456;0;DICELAB;;1;VB;05/31/14 20:27;0;M; ++17;562;0;DICELAB;;1;VB;05/31/14 20:28;0;F; ++18;562;0;DICELAB;;1;VB;05/31/14 20:29;0;F; ++19;125;1025;TRACTRU;;;VB;05/31/14 20:30;0;Not set; ++20;145;0;TRACTRU;;;VB;05/31/14 20:31;0;Not set; ++21;102;0;TRACTRU;;;VB;05/31/14 20:32;0;Not set; ++22;96;0;TRACTRU;;;VB;05/31/14 20:33;0;Not set; ++23;84;0;TRACTRU;;;VB;05/31/14 20:34;0;Not set; ++24;84;0;TRACTRU;;;VB;05/31/14 20:35;0;Not set; ++25;132;0;TRACTRU;;;VB;05/31/14 20:36;0;Not set; ++26;105;0;TRACTRU;;;VB;05/31/14 20:37;0;Not set; ++27;80;0;TRACTRU;;;VB;05/31/14 20:38;0;Not set; ++28;96;0;TRACTRU;;;VB;05/31/14 20:39;0;Not set; ++29;87;0;TRACTRU;;;VB;05/31/14 20:40;0;Not set; ++30;785;1240;DICE-LAB;;1;VB;05/31/14 20:41;2;M;HV -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.