Tutti-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
February 2015
- 2 participants
- 95 discussions
This is an automated email from the git hooks/post-receive script.
New change to branch feature/6688 in repository tutti.
See http://git.codelutin.com/tutti.git
from 177d344 refs #6612 add Serie_Id on each csv file
new c923a9f fix Cruises.equals method
new 1497a43 Introduce an object to persist while importing
new 0ac8b0d convert gears to geraWithOriginalOrder to avoid Class cast exceptions
new c3bbf77 improve caracteristic value parser
new 16e39ff validate cruise
new 1121f0c validate gear caracteristics
new 5a199fa improve API + persist cruises and gear caracteristics
The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit 5a199fa8fbb3ef24ede52c37b5be93001f8bf033
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:25:45 2015 +0100
improve API + persist cruises and gear caracteristics
commit 1121f0c644e849fafd02af2618521bb6a6158fe7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:25:01 2015 +0100
validate gear caracteristics
commit 16e39ffa22995d7855889e911dd19e30f2d2f9c4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:24:36 2015 +0100
validate cruise
commit c3bbf77070c9acaa91b6c84b6f479ff659fd7a07
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:24:05 2015 +0100
improve caracteristic value parser
commit 0ac8b0d3231b9c874566b4021180771d22a455d2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:23:33 2015 +0100
convert gears to geraWithOriginalOrder to avoid Class cast exceptions
commit 1497a431aca41546e316ffea72df2c1622fc8ff6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 10:22:51 2015 +0100
Introduce an object to persist while importing
commit c923a9fdfe2b4171c5d5a44afea70ee2a73097bc
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 19 09:07:48 2015 +0100
fix Cruises.equals method
Summary of changes:
.../tutti/persistence/entities/data/Cruises.java | 13 ++-
.../referential/GearWithOriginalRankOrders.java | 21 ++++-
.../csv/CaracteristicValueParseException.java | 46 ++++++++++
.../csv/CaracteristicValueParserFormatter.java | 5 ++
.../genericformat/GenericFormatImportContext.java | 96 +++++++++++++++++++-
.../genericformat/GenericFormatImportService.java | 100 +++++++++++----------
.../GenericformatImportPersitenceHelper.java | 66 ++++++++++++++
...on.java => CruiseAlreadyImportedException.java} | 6 +-
...Exception.java => CruiseNotFoundException.java} | 9 +-
.../consumer/CsvConsumerForGearCaracteristic.java | 61 ++++++++++++-
.../consumer/CsvConsumerForSurvey.java | 28 +++++-
.../consumer/GearNotFoundInCruiseException.java | 47 ++++++++++
.../genericformat/csv/GearCaracteristicModel.java | 6 +-
.../genericformat/csv/GearCaracteristicRow.java | 18 +++-
.../producer/CsvProducerForGearCaracteristics.java | 1 +
.../resources/i18n/tutti-service_fr_FR.properties | 7 +-
.../genericFormat/empty/gearCaracteristics.csv | 2 +
.../test/resources/genericFormat/empty/survey.csv | 2 +-
18 files changed, 460 insertions(+), 74 deletions(-)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueParseException.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java
copy tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/{CruiseAlreadyExistException.java => CruiseAlreadyImportedException.java} (78%)
copy tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/{CruiseAlreadyExistException.java => CruiseNotFoundException.java} (62%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
7
This is an automated email from the git hooks/post-receive script.
New change to branch feature/6688 in repository tutti.
See http://git.codelutin.com/tutti.git
at 177d344 refs #6612 add Serie_Id on each csv file
No new revisions were added by this update.
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from e68e5ae amélioration de l'export générique (meilleur découpage de l'export + progression plus fluide)
new 177d344 refs #6612 add Serie_Id on each csv file
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit 177d344dc35f05b4c0ffd578ef724c773f7f79ac
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 18 18:55:14 2015 +0100
refs #6612 add Serie_Id on each csv file
Summary of changes:
.../genericformat/csv/AccidentalCatchModel.java | 2 +
.../service/genericformat/csv/CatchModel.java | 2 +
.../genericformat/csv/GearCaracteristicModel.java | 2 +
.../csv/IndividualObservationModel.java | 2 +
.../genericformat/csv/MarineLitterModel.java | 2 +
.../service/genericformat/csv/OperationModel.java | 2 +
.../service/genericformat/csv/ParameterModel.java | 2 +
.../GenericFormatExportServiceTest.java | 256 +++++++--------------
.../genericFormat/empty/accidentalCatch.csv | 2 +-
.../test/resources/genericFormat/empty/catch.csv | 2 +-
.../genericFormat/empty/gearCaracteristics.csv | 2 +-
.../genericFormat/empty/individualObservation.csv | 2 +-
.../resources/genericFormat/empty/marineLitter.csv | 2 +-
.../resources/genericFormat/empty/operation.csv | 2 +-
.../resources/genericFormat/empty/parameter.csv | 2 +-
15 files changed, 99 insertions(+), 185 deletions(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
1
This is an automated email from the git hooks/post-receive script.
New change to branch feature/5823 in repository tutti.
See http://git.codelutin.com/tutti.git
was 259cbfd ajout du champ vrac trié
The revisions that were on this branch are still contained in
other references; therefore, this change does not discard any commits
from the repository.
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from f88907d fix loading protocol, remove too much stuff
new 56a11f0 pas de write si pas de données
new e68e5ae amélioration de l'export générique (meilleur découpage de l'export + progression plus fluide)
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit e68e5aea927242ad2b0f5b5a1442c398d515db6b
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 18 15:30:47 2015 +0100
amélioration de l'export générique (meilleur découpage de l'export + progression plus fluide)
commit 56a11f04f53b263398585d80d27760c50232cd50
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 18 15:29:37 2015 +0100
pas de write si pas de données
Summary of changes:
.../service/catches/WeightComputingService.java | 97 ----
.../fr/ifremer/tutti/service/csv/CsvProducer.java | 14 +-
.../genericformat/GenericFormatExportContext.java | 62 ++-
.../GenericFormatExportOperationContext.java | 74 +++
.../genericformat/GenericFormatExportService.java | 497 +++++++++++----------
.../resources/i18n/tutti-service_en_GB.properties | 7 +
.../resources/i18n/tutti-service_fr_FR.properties | 17 +-
.../GenericFormatExportServiceTest.java | 59 ++-
.../action/ExportGenericFormatCruiseAction.java | 12 +-
.../ExportGenericFormatProgramCruisesAction.java | 11 +-
.../resources/i18n/tutti-ui-swing_en_GB.properties | 2 +
.../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +
12 files changed, 463 insertions(+), 391 deletions(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
2
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from aa9e693 fixes #6677 [TECH] Assainissement de l'utilisation des codes campagnes dans les taxons Merge branch 'feature/6677' into develop
new f88907d fix loading protocol, remove too much stuff
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit f88907d5b108eaf2dc7227408587c8e5eb4874ce
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 18 09:38:45 2015 +0100
fix loading protocol, remove too much stuff
Summary of changes:
.../fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
1
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from 1012fd7 fix launcher version
new 730f20d ajout de l'objet TaxonCache
new 2f8a884 centralisation des méthodes utiles sur le protocol
new 653c2f8 -mproduire une erreur si le code espèce n'existe pas
new d9ebd30 utilisation des méthodes utilitaire du protocol
new 1f32a0c suppression SpeciesMap (remplacé par TaxonCache)
new adc517f utilisation des méthodes utilitaires du protocol
new d5580b6 utilisation de TaxonCache dans les handler d'ui
new bf3128e utilisation TaxonCache dans les services
new aa9e693 fixes #6677 [TECH] Assainissement de l'utilisation des codes campagnes dans les taxons Merge branch 'feature/6677' into develop
The 9 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit aa9e69329444b67f0ced7a9b0d55ffd6d59c7682
Merge: 1012fd7 bf3128e
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:53:36 2015 +0100
fixes #6677 [TECH] Assainissement de l'utilisation des codes campagnes dans les taxons
Merge branch 'feature/6677' into develop
commit bf3128ec0c789a547ba14f4392657ccc9727cffd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:50:58 2015 +0100
utilisation TaxonCache dans les services
commit d5580b6d1ec38fe5d8b235ef85aa9f5735aadc8f
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:50:19 2015 +0100
utilisation de TaxonCache dans les handler d'ui
commit adc517ffc3eb6be7893d52448fbe528d295b2bd8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:49:55 2015 +0100
utilisation des méthodes utilitaires du protocol
commit 1f32a0cfc0eafbdc57fdc2051882cbf7fd543809
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:48:25 2015 +0100
suppression SpeciesMap (remplacé par TaxonCache)
commit d9ebd307154b8d0029f722d9f19d642edaf943cf
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:44:59 2015 +0100
utilisation des méthodes utilitaire du protocol
commit 653c2f88cb1df90b3ab7a5641a41037db274ad31
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:44:16 2015 +0100
-mproduire une erreur si le code espèce n'existe pas
commit 2f8a884e515abe1dd24810acf52d75f99c6d02d9
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:43:51 2015 +0100
centralisation des méthodes utiles sur le protocol
commit 730f20da6b2e8ba8b6c6b620afa8e24b987b6c89
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Feb 17 16:42:54 2015 +0100
ajout de l'objet TaxonCache
Summary of changes:
.../tutti/persistence/TuttiPersistenceImpl.java | 39 +----
.../entities/protocol/TuttiProtocols.java | 140 +++++++++++++----
.../persistence/entities/referential/Speciess.java | 12 ++
.../entities/referential/TaxonCache.java | 101 ++++++++++++
.../entities/referential/TaxonCaches.java | 105 +++++++++++++
.../i18n/tutti-persistence_en_GB.properties | 1 +
.../i18n/tutti-persistence_fr_FR.properties | 1 +
.../ifremer/tutti/service/PersistenceService.java | 174 +--------------------
.../java/fr/ifremer/tutti/service/SpeciesMap.java | 147 -----------------
.../fr/ifremer/tutti/service/TuttiDataContext.java | 12 +-
.../export/pdf/CatchesPdfExportService.java | 163 +++++++------------
.../sumatra/CatchesSumatraExportService.java | 96 +++++++++---
.../toconfirmreport/ToConfirmReportService.java | 18 ++-
.../service/psionimport/PsionImportService.java | 10 +-
.../service/pupitri/PupitriImportService.java | 73 +++------
.../ui/swing/action/ImportProtocolAction.java | 65 +++-----
.../frequency/BenthosFrequencyUIHandler.java | 30 ++--
.../CreateIndividualObservationBatchUIHandler.java | 18 +--
.../frequency/SpeciesFrequencyUIHandler.java | 43 ++---
19 files changed, 568 insertions(+), 680 deletions(-)
create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/TaxonCache.java
create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/TaxonCaches.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/SpeciesMap.java
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
9
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from 2317940 fixes #6612: [EXPORT GENERIQUE] Consolidation de l’export générique (merge into develop)
new 1012fd7 fix launcher version
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit 1012fd7cf7246a73568264f01886ada48424d89c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 20:52:51 2015 +0100
fix launcher version
Summary of changes:
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
1
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
from 2cbb96b Specifications version 5.2
new e9f3ca6 - ajout de l'export de fichiers techniques (protocol, reférentiels temporaires) - amélioration du packaging - nettoyage de code
new 9ff4adc suppression d'un service obsolete
new 44d8d32 Ajout d'une méthode pour obtenir directement la liste des référentiels temporaires (aussi utilisé pour l'export générique)
new 380246f ajout traductions pour export des fichiers techniques lors de l'export generique
new a4943ca use new API
new 55bd07d utilisation de methode de service pour creer le modele de progression
new 26f5e75 suppression de code mort
new de12bb0 ajout de methodes utilitaires sur les entities
new 844ccd4 ajout des methodes getAllGears et getAllVessel sur PersistenceService
new 5eff240 introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/bigfin/csv
new 17d0b67 nettoyage export generique et debut d'implatation de l'import generique
new 586a67d introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/csv et utilisation
new 679c814 introduce csv package + clean code
new 427c9fe - introduce CsvProducer API - use it also for referential export - move TuttiCsvUtil to his new csv package
new f2d8893 utilisation label du pays à la place de son libellé
new f409b58 correction du nom du fichier d'export
new 7aefa1d normalisation nom colonne sur les taxons
new f7d688e ajout gearRankOrder sur export des caractéristiques des engins
new 9a4b1ab ajout parser formatter de Short -a deplacer dans nuiton-csv
new a0db8aa fix i18n
new ad5140d revue de comment on export les navires associés
new 045aa84 renommage formater
new dcf7654 ajout EnginRankOrder + renommage formatters
new eec1890 uniformisation des colonnes de l'export + ajout d'EnginRankOrder
new 6492f78 no more need of decoratorService to export vessels
new e03f99d - add Benthos column on catch export - clean code
new 9b885ba use more precise function name
new cacb25e - introduce technical parser formatter - introduce none technical formatter for all entities used in generic ie (if anything need to be modified, let's do it in formatter but not in model)
new 1462d44 remover unused method + add shortcut other one
new 80507ac use same parser formatter + clean multipost code
new c311d9c remove not used export model
new 8debd31 add technical column + finish import model definition
new dff04e6 revert Speciess modification (see commit 9b885ba813850b9fc816e604210b8ee1ccbf2e5d)
new 6d806d4 add a nice precondition to be sure to use always a list of referent species while invoking the method Speciess#splitReferenceSpeciesByReferenceTaxonId
new 282106f fix full name function
new 6347e72 can have null caracteristic to export
new c53c640 fix column names
new 008a8b1 add sample category export + fix species export (do not use id but referenceTaxonId)
new d03e0b3 check cruises for program export + improve export shared code
new 0057c45 fix when adding total to progression model
new 7005b0c better API
new dc315ea introduce CsvConsumer
new 15694c0 use CsvConsumer API for referential import + improve then import code
new 059f692 -madd import usefull method to get a rwo all errors
new c05dbc0 rename generic format actions
new f08120f improve CsvProducer API
new d2f57a7 fix tests
new 78a89c7 introduce GenericFormatArchive object
new f186460 use GenericFormatArchive object
new fb5d240 add Cruises.equals method
new b1b5135 introduce generic format import service and some of his objects
new 6447002 prove consumer api for referentiel import
new 793f6f3 CsvConsumer is abstract
new 4186ce5 can add check errors on ImportRow
new 2847669 sampleCategoryModel is in input context
new c921cea expose cruise
new 56fdeb2 review referentiel import API
new d183c76 add a method to get next available protocol names
new d7cb746 continue import
new fc0efde use nuiton-csv
new 1f18450 move to CsvConsumer some API
new 4260acc unify parser formatter
new 1b62195 fix missing API
new fbf064c remove from TuttiCsvUtil (push to nuiton-csv
new 092414d fix new formatters
new 500e4d3 finalize import - export model
new 2f6db55 add once for all a unique method to know if an id is temporary
new 5170fca split import referential method in add and update method introduce link referential concept (for generic import)
new 90316a1 fix some tests
new fb06996 fix some lost code :(
new 5ff652a fix queries
new 0a96398 revue des imports de référentiels
new 1214c50 normalize export service classes
new 578969e add a referential import result object for generic format import
new adc7f2c normalize generic format import service classes
new b085910 - introduce id translation map for temporary referentials - reformat package
new 8d955c1 add persistence service method to get first available protocol name
new f22fe99 translate taxon ids in protocol if required
new 6062cb5 validate sample category model
new 4520b67 do not create directory, already done
new 8383c87 load program in data context
new c54286e compute nb step in export
new 86352e5 fix NPE when adding errors with no field
new 90d5975 adapt caracteristt parser (pass directly list of caracteristic to use)
new 50033a9 improve archive object
new 27daf67 - normalize entity list parser formatter - make samplecategorymodel import ok - survey are ok to be imported now - start writting test of import
new 49c9951 fix NPE if no referential import done
new c76757f fix test data
new 00f53fb fix test data
new 956cc40 fix path
new f455a89 fix bad path
new 7452db3 fix gear export
new 30aad20 add referential import result
new 65950d7 rename i18n
new aba3d82 add generic format import
new f2a00b8 fix i18n keys
new fac0aa9 fix i18n
new 2317940 fixes #6612: [EXPORT GENERIQUE] Consolidation de l’export générique (merge into develop)
The 98 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.
Detailed log of new commits:
commit 2317940a78ced0bf3d22f1d13047666a1cfc5b56
Merge: 2cbb96b fac0aa9
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 14:24:11 2015 +0100
fixes #6612: [EXPORT GENERIQUE] Consolidation de l’export générique (merge into develop)
commit fac0aa97e9fff2861c2a4276e6650a1965b69efd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 14:10:17 2015 +0100
fix i18n
commit f2a00b8071986b4dec4578a43c43b5a294243662
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 10:00:09 2015 +0100
fix i18n keys
commit aba3d82acb8e41984ffb9b16801c1937b2ccf86d
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 09:59:48 2015 +0100
add generic format import
commit 65950d7df53c3dddfa5c1510f8db0621d0ccd385
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 09:58:55 2015 +0100
rename i18n
commit 30aad201e2c52c51a8109478adf16a8bc485be86
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 09:58:37 2015 +0100
add referential import result
commit 7452db3e521b8d72025edeb74fc92fe36bedc365
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Feb 16 09:58:13 2015 +0100
fix gear export
commit f455a8963f17c5cf17005ef2e98e5e64abfbde07
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 21:09:29 2015 +0100
fix bad path
commit 956cc4049b02a07833b1399cfe9d0ec7e8bb2408
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 21:03:24 2015 +0100
fix path
commit 00f53fbd1feee8492cbfe6c6cac7b3e1d46626dd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 21:03:17 2015 +0100
fix test data
commit c76757f545feadeff37f7441b21183e70391ceb8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:57:22 2015 +0100
fix test data
commit 49c99512344c3d67d190e1761f886a54230c7be0
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:57:05 2015 +0100
fix NPE if no referential import done
commit 27daf67ccf5b0743ea72a453cb29d8ecb9e7780e
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:36:27 2015 +0100
- normalize entity list parser formatter
- make samplecategorymodel import ok
- survey are ok to be imported now
- start writting test of import
commit 50033a981808ce7d029339c4ba82b859347bdc7c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:35:56 2015 +0100
improve archive object
commit 90d5975acadafd083b64e9a2af4bce77fa8d06af
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:35:29 2015 +0100
adapt caracteristt parser (pass directly list of caracteristic to use)
commit 86352e5060ca55439349ed38c1d575bda145b3e9
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 20:34:53 2015 +0100
fix NPE when adding errors with no field
commit c54286e4bdbf78eaf0da0b39d22f9cce4c5354fa
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 18:13:05 2015 +0100
compute nb step in export
commit 8383c87d58b77e8c6582ce8a57a939a8790580d3
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 18:12:42 2015 +0100
load program in data context
commit 4520b672c1e3a389fafa654fac6211e65cb6f2d4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 18:12:21 2015 +0100
do not create directory, already done
commit 6062cb57a68f49b73c84d84d455b8355fe219b09
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 17:36:58 2015 +0100
validate sample category model
commit f22fe9958c352e5c3335fafba6a099cffe74fc34
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 17:36:43 2015 +0100
translate taxon ids in protocol if required
commit 8d955c135c8390bfb591becc2172eb788a860f36
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 17:35:59 2015 +0100
add persistence service method to get first available protocol name
commit b08591081082678e8bad85a2c6ff801ce14e4bc6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 16:41:32 2015 +0100
- introduce id translation map for temporary referentials
- reformat package
commit adc7f2c4835235fdf8539e3b3a8caf674dca62a2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 16:12:45 2015 +0100
normalize generic format import service classes
commit 578969e92ad0a316fe38a8da119a37330053f475
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 16:12:18 2015 +0100
add a referential import result object for generic format import
commit 1214c508f3a98dd2194b522db3e61aa57c552d7a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 16:11:07 2015 +0100
normalize export service classes
commit 0a96398164ff57d06f5ba95e132e119ea57ed266
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 14:44:28 2015 +0100
revue des imports de référentiels
commit 5ff652aa3a3825cd53d77e7bb8294bc86dba46ca
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 14:29:32 2015 +0100
fix queries
commit fb06996978cd37ecb364a1929335ece4ddbf1b3a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 14:12:41 2015 +0100
fix some lost code :(
commit 90316a170b7b17a2f629603b972f456dc1f98f6d
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 13:51:16 2015 +0100
fix some tests
commit 5170fca59d28077ef7475496af637ac790a78379
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 13:49:24 2015 +0100
split import referential method in add and update method
introduce link referential concept (for generic import)
commit 2f6db5584931f8335b4e655c4594d595aeba5d92
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 15 13:13:12 2015 +0100
add once for all a unique method to know if an id is temporary
commit 500e4d33a9eee17c97481a5be9c027541fc45f23
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 15:04:49 2015 +0100
finalize import - export model
commit 092414df66bd18b589d0efd7a4d8183e30fdfec5
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 15:04:26 2015 +0100
fix new formatters
commit fbf064cb1e43ad9787ae1ec0a855e2e9bb73b5d4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 15:03:53 2015 +0100
remove from TuttiCsvUtil (push to nuiton-csv
commit 1b621953462ec9a63dee55ea85a136f5237b7260
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 15:03:34 2015 +0100
fix missing API
commit 4260acc555b312891f1eafcedc5a702eab064103
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 13:57:27 2015 +0100
unify parser formatter
commit 1f18450ac8909d765524118436f2d9e299d3a133
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 13:56:51 2015 +0100
move to CsvConsumer some API
commit fc0efdedcd87cef29cd293879e92383cee226dbf
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 14 13:53:53 2015 +0100
use nuiton-csv
commit d7cb746d6ab0f7b9e5d7fa9138e9acb6ddd513f6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 13 17:29:20 2015 +0100
continue import
commit d183c76b3145ee52b172f8ee2a9a6e6c895f1db8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 15:41:30 2015 +0100
add a method to get next available protocol names
commit 56fdeb2198eeeda98d82c7766384ec3e19e6b631
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 15:13:05 2015 +0100
review referentiel import API
commit c921cea30a11ca5f631300f6b8206b71036de921
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 09:55:06 2015 +0100
expose cruise
commit 2847669cbcb2585f21370eba0009c4cb299c48b5
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 09:54:53 2015 +0100
sampleCategoryModel is in input context
commit 4186ce5788db96a386965a74a84d02534b235e4e
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 09:53:57 2015 +0100
can add check errors on ImportRow
commit 793f6f381b772a11c22a627b675ecbc4451850f0
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 12 09:53:20 2015 +0100
CsvConsumer is abstract
commit 6447002c2cc1849bdc7b655be32af73e974c9db7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 19:26:33 2015 +0100
prove consumer api for referentiel import
commit b1b5135b8c0eb018166eed43d985872e50884b68
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 18:01:57 2015 +0100
introduce generic format import service and some of his objects
commit fb5d24027e7e697fcf7aadc43b24100d46e2ab92
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 18:01:27 2015 +0100
add Cruises.equals method
commit f1864602216b86467b25091fa596f2bd2acd349a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 18:01:07 2015 +0100
use GenericFormatArchive object
commit 78a89c71bbec3d708938460948ae7cfdd6d4e68c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:59:33 2015 +0100
introduce GenericFormatArchive object
commit d2f57a7146e6024bb9a6c84d775af77115909ff6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:59:16 2015 +0100
fix tests
commit f08120feab492a69d25d0867ebdd2ede91976745
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:26:03 2015 +0100
improve CsvProducer API
commit c05dbc0ac563438dd5cd11d3eae1a6224f09a8cc
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:25:10 2015 +0100
rename generic format actions
commit 059f692fa244e324c482d0758daae8a14e8e90ec
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:24:40 2015 +0100
-madd import usefull method to get a rwo all errors
commit 15694c03dd51d50c41a15c2b7d4149b7d9547d35
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:23:01 2015 +0100
use CsvConsumer API for referential import + improve then import code
commit dc315eae9731d9b4ba0640a47f9f84437704c4f4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 17:22:03 2015 +0100
introduce CsvConsumer
commit 7005b0c7b4f76d477c4a94410e58757486a2cfcd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 11:54:46 2015 +0100
better API
commit 0057c45c377d33fd1268cd73a5bc82a176d9b03d
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Feb 11 11:54:24 2015 +0100
fix when adding total to progression model
commit d03e0b366e478a2f23fd8a197bc2babd4074277a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 19:41:58 2015 +0100
check cruises for program export + improve export shared code
commit 008a8b14aa660cc152b3b6e8639e87b87ecf979d
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 19:40:46 2015 +0100
add sample category export + fix species export (do not use id but referenceTaxonId)
commit c53c64074af7f0bc2e57034bb29c9c9462b8cca7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 19:39:09 2015 +0100
fix column names
commit 6347e72175a471332f153c8cd438a89ae9928cbd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 19:38:50 2015 +0100
can have null caracteristic to export
commit 282106fb7132dff75549c9b03e5598164f442e2b
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 19:38:37 2015 +0100
fix full name function
commit 6d806d43415d0cbfda67c24b0f269ec0ae5391e8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 16:23:36 2015 +0100
add a nice precondition to be sure to use always a list of referent species while invoking the method Speciess#splitReferenceSpeciesByReferenceTaxonId
commit dff04e67512eeace72e35c697df41db387a3cfeb
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 16:10:52 2015 +0100
revert Speciess modification (see commit 9b885ba813850b9fc816e604210b8ee1ccbf2e5d)
commit 8debd31b3416d061c1be75f7f5e3d66af3ff1104
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 15:48:10 2015 +0100
add technical column + finish import model definition
commit c311d9cb189b8ad3755c4514232c2f8ceaf3aac3
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 15:46:34 2015 +0100
remove not used export model
commit 80507ac0d36bdbba8459d21b5104bd4805b086f6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 14:44:45 2015 +0100
use same parser formatter + clean multipost code
commit 1462d44a5cbba96dcdaea6feff9e056d264e0382
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 14:05:07 2015 +0100
remover unused method + add shortcut other one
commit cacb25e8648c06879e493a0c30093aec9a5c561c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 13:08:00 2015 +0100
- introduce technical parser formatter
- introduce none technical formatter for all entities used in generic ie (if anything need to be modified, let's do it in formatter but not in model)
commit 9b885ba813850b9fc816e604210b8ee1ccbf2e5d
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sun Feb 8 13:04:12 2015 +0100
use more precise function name
commit e03f99d6701a6885a089618a0866c12b99e69ed7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 14:54:36 2015 +0100
- add Benthos column on catch export
- clean code
commit 6492f787d0230ff0e6414fb0caa9ab0e063995d5
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 14:54:10 2015 +0100
no more need of decoratorService to export vessels
commit eec189066c1cc644f2aa7da533e8fc2dbf828dbe
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 13:18:34 2015 +0100
uniformisation des colonnes de l'export + ajout d'EnginRankOrder
commit dcf765468d1965a290b5fa72c57015c761746758
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 13:04:06 2015 +0100
ajout EnginRankOrder + renommage formatters
commit 045aa840dbbb8f4911f1f56e3d31a2706744e37c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:58:47 2015 +0100
renommage formater
commit ad5140dbfe91dd0b6fc2cbe3da2abc4b8b72f7d9
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:58:25 2015 +0100
revue de comment on export les navires associés
commit a0db8aaff50181ace7eabdb8ea2b90318093f1f6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:46:42 2015 +0100
fix i18n
commit 9a4b1ab1fdf7407884290f83fcf5bb14755a84b1
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:45:32 2015 +0100
ajout parser formatter de Short -a deplacer dans nuiton-csv
commit f7d688ea7040074825a146dd54f8da27ebcb7363
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:44:55 2015 +0100
ajout gearRankOrder sur export des caractéristiques des engins
commit 7aefa1dd9c54657dd45df36febc8740b2130297f
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:38:53 2015 +0100
normalisation nom colonne sur les taxons
commit f409b58b4a96dfda17f6e1fb1ca94ac9d53b85bc
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:38:30 2015 +0100
correction du nom du fichier d'export
commit f2d889327cf4a81b149575f488973b3393634c56
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Sat Feb 7 12:38:09 2015 +0100
utilisation label du pays à la place de son libellé
commit 427c9fe38f45da69c98aca7e918aeb51ec29d775
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 19:37:29 2015 +0100
- introduce CsvProducer API
- use it also for referential export
- move TuttiCsvUtil to his new csv package
commit 679c8148204f5ff850059f4456eeb48277df2de8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 18:48:12 2015 +0100
introduce csv package + clean code
commit 586a67d59f3f820507a6cb8a53f780ff5501bbc2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:43:22 2015 +0100
introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/csv et utilisation
commit 17d0b679f464bd13a97ca2aa2402d30711a835b2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:42:36 2015 +0100
nettoyage export generique et debut d'implatation de l'import generique
commit 5eff240d4115ea326d8bc0d676370c432342e5c6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:41:32 2015 +0100
introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/bigfin/csv
commit 844ccd4ba3238ddb19347b08d57b012530b52fd8
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:40:55 2015 +0100
ajout des methodes getAllGears et getAllVessel sur PersistenceService
commit de12bb09ef5772dc6dba69af2dd627edb070d628
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:39:41 2015 +0100
ajout de methodes utilitaires sur les entities
commit 26f5e75dd2521a1e369ed7184add2b66133c4db4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:39:07 2015 +0100
suppression de code mort
commit 55bd07d222f1689ac8a4842f4804b64162643971
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:32:14 2015 +0100
utilisation de methode de service pour creer le modele de progression
commit a4943cac04bb47f893e68a589159168b20c074c4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:31:39 2015 +0100
use new API
commit 380246f742538220e9ed8e5a68f3485768f4215a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:31:01 2015 +0100
ajout traductions pour export des fichiers techniques lors de l'export generique
commit 44d8d3213f4314e384a883fb5b206f635ff7e866
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:29:46 2015 +0100
Ajout d'une méthode pour obtenir directement la liste des référentiels temporaires (aussi utilisé pour l'export générique)
commit 9ff4adc0d7b40ea7cc538ccffd2287a130849a2a
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:29:32 2015 +0100
suppression d'un service obsolete
commit e9f3ca61642bbc918f5a255ffff5c5f22c2a75a4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu Feb 5 12:28:23 2015 +0100
- ajout de l'export de fichiers techniques (protocol, reférentiels temporaires)
- amélioration du packaging
- nettoyage de code
Summary of changes:
pom.xml | 2 +-
.../tutti/persistence/TuttiPersistenceImpl.java | 63 +-
.../persistence/TuttiPersistenceNoDbImpl.java | 53 +-
.../tutti/persistence/entities/TuttiEntities.java | 21 -
.../tutti/persistence/entities/data/Cruises.java | 13 +
.../tutti/persistence/entities/data/Programs.java | 21 +
.../entities/protocol/TuttiProtocols.java | 40 +
.../CaracteristicQualitativeValues.java | 23 +-
.../persistence/entities/referential/Gears.java | 27 +-
.../persistence/entities/referential/Persons.java | 28 +-
.../persistence/entities/referential/Speciess.java | 44 +-
.../entities/referential/TuttiLocations.java | 33 +
.../persistence/entities/referential/Vessels.java | 47 +-
.../service/ProtocolPersistenceService.java | 11 +
.../service/ProtocolPersistenceServiceImpl.java | 20 +
.../referential/GearPersistenceService.java | 29 +-
.../referential/GearPersistenceServiceImpl.java | 102 +-
.../referential/PersonPersistenceService.java | 29 +-
.../referential/PersonPersistenceServiceImpl.java | 108 ++-
.../referential/SpeciesPersistenceService.java | 29 +-
.../referential/SpeciesPersistenceServiceImpl.java | 86 +-
.../referential/VesselPersistenceService.java | 29 +-
.../referential/VesselPersistenceServiceImpl.java | 99 +-
.../src/main/resources/queries-failsafe.hbm.xml | 106 +-
.../entities/protocol/TuttiProtocolsTest.java | 21 +-
.../GearPersistenceServiceWriteTest.java | 4 +-
.../PersonPersistenceServiceWriteTest.java | 4 +-
.../SpeciesPersistenceServiceReadTest.java | 2 +-
.../SpeciesPersistenceServiceWriteTest.java | 4 +-
.../VesselPersistenceServiceWriteTest.java | 4 +-
.../ifremer/tutti/service/PdfGeneratorService.java | 2 +-
.../ifremer/tutti/service/PersistenceService.java | 77 +-
.../fr/ifremer/tutti/service/TuttiCsvUtil.java | 942 ------------------
.../service/bigfin/csv/BigfinDataRowModel.java | 4 +-
.../AbstractFishingOperationRowModel.java | 5 +-
.../catches/multipost/AccidentalCatchRowModel.java | 51 +-
.../catches/multipost/AttachmentRowModel.java | 5 +-
.../catches/multipost/CaracteristicRowModel.java | 21 +-
.../catches/multipost/CatchBatchRowModel.java | 2 +-
.../catches/multipost/CatchFrequencyRowModel.java | 23 +-
.../service/catches/multipost/CatchRowModel.java | 35 +-
.../catches/multipost/CatchWeightsRowModel.java | 12 +-
.../multipost/IndividualObservationRowModel.java | 32 +-
.../catches/multipost/MarineLitterRowModel.java | 35 +-
.../multipost/MarineLitterWeightRowModel.java | 5 +-
.../catches/multipost/MultiPostImportService.java | 97 +-
.../csv/AbstractTuttiImportExportModel.java | 63 ++
.../service/csv/AbstractTuttiImportModel.java | 28 +
.../tutti/service/csv/BeanIndexNullableGetter.java | 50 +
.../tutti/service/csv/BeanNullableGetter.java | 39 +
.../tutti/service/csv/BeanPropertyFormatter.java | 37 +
.../service/csv/CaracteristicParserFormatter.java | 46 +
.../csv/CaracteristicValueParserFormatter.java | 114 +++
.../tutti/service/csv/CountryFormatter.java | 23 +
.../fr/ifremer/tutti/service/csv/CsvComsumer.java | 107 +++
.../fr/ifremer/tutti/service/csv/CsvProducer.java | 58 ++
.../csv/EntityListParserFormatterSupport.java | 52 +
.../tutti/service/csv/EntityNotFoundException.java | 39 +
.../service/csv/EntityParserFormatterSupport.java | 107 +++
.../service/csv/EnumByNameParserFormatter.java | 50 +
.../FishingOperationLocationParserFormatter.java | 49 +
.../csv/FishingOperationStrataParserFormatter.java | 49 +
.../FishingOperationSubStrataParserFormatter.java | 49 +
.../service/csv/ForeignKeyListParserFormatter.java | 68 ++
.../service/csv/ForeignKeyParserFormatter.java | 57 ++
.../tutti/service/csv/GearListParserFormatter.java | 25 +
.../tutti/service/csv/GearParserFormatter.java | 63 ++
.../tutti/service/csv/HarbourParserFormatter.java | 48 +
.../tutti/service/csv/ImportModelWithHeader.java | 13 +
.../service/csv/IntegerListParserFormatter.java | 43 +
.../service/csv/PersonListParserFormatter.java | 25 +
.../tutti/service/csv/PersonParserFormatter.java | 60 ++
.../tutti/service/csv/ProgramParserFormatter.java | 46 +
.../tutti/service/csv/ProgramZoneFormatter.java | 23 +
.../tutti/service/csv/SpeciesParserFormatter.java | 75 ++
.../tutti/service/csv/StringParserFormatter.java | 30 +
.../fr/ifremer/tutti/service/csv/TuttiCsvUtil.java | 225 +++++
.../tutti/service/csv/TuttiRepeatableExport.java | 25 +
.../service/csv/VesselListParserFormatter.java | 25 +
.../tutti/service/csv/VesselParserFormatter.java | 63 ++
.../export/generic/AccidentalCatchExportModel.java | 167 ----
.../generic/GearCaracteristicExportModel.java | 74 --
.../generic/IndividualObservationExportModel.java | 145 ---
.../export/generic/MarineLitterExportModel.java | 82 --
.../export/generic/OperationExportModel.java | 143 ---
.../export/generic/ParameterExportModel.java | 92 --
.../service/export/generic/SpeciesExportModel.java | 75 --
.../service/export/generic/SurveyExportModel.java | 68 --
.../service/export/generic/TuttiExportService.java | 1014 --------------------
.../service/export/sumatra/CatchRowModel.java | 7 +-
.../genericformat/GenericFormatArchive.java | 415 ++++++++
.../genericformat/GenericFormatExportContext.java | 252 +++++
.../GenericFormatExportOperationContext.java | 206 ++++
.../genericformat/GenericFormatExportService.java | 820 ++++++++++++++++
.../genericformat/GenericFormatImportContext.java | 139 +++
.../GenericFormatImportEntityParserFactory.java | 187 ++++
.../genericformat/GenericFormatImportRequest.java | 73 ++
.../genericformat/GenericFormatImportResult.java | 104 ++
.../genericformat/GenericFormatImportService.java | 552 +++++++++++
.../GenericFormatReferentialImportResult.java | 122 +++
.../consumer/CruiseAlreadyExistException.java | 32 +
.../consumer/CruiseNotValidException.java | 58 ++
.../consumer/CsvConsumerForAccidentalCatch.java | 37 +
.../consumer/CsvConsumerForCatch.java | 39 +
.../consumer/CsvConsumerForGearCaracteristic.java | 38 +
.../CsvConsumerForIndividualObservation.java | 38 +
.../consumer/CsvConsumerForMarineLitter.java | 38 +
.../consumer/CsvConsumerForOperation.java | 38 +
.../consumer/CsvConsumerForParameter.java | 38 +
.../consumer/CsvConsumerForSampleCategory.java | 79 ++
.../consumer/CsvConsumerForSurvey.java | 56 ++
.../genericformat/csv/AccidentalCatchModel.java | 119 +++
.../csv/AccidentalCatchRow.java} | 4 +-
.../service/genericformat/csv/CatchModel.java | 216 +++++
.../csv/CatchRow.java} | 34 +-
.../csv}/ExportSampleCategory.java | 2 +-
.../genericformat/csv/GearCaracteristicModel.java | 107 +++
.../csv/GearCaracteristicRow.java} | 20 +-
.../csv/IndividualObservationModel.java | 120 +++
.../csv/IndividualObservationRow.java} | 4 +-
.../genericformat/csv/MarineLitterModel.java | 117 +++
.../csv/MarineLitterRow.java} | 4 +-
.../service/genericformat/csv/OperationModel.java | 268 ++++++
.../csv/OperationRow.java} | 97 +-
.../service/genericformat/csv/ParameterModel.java | 105 ++
.../csv/ParameterRow.java} | 4 +-
.../genericformat/csv/SampleCategoryModel.java | 61 ++
.../genericformat/csv/SampleCategoryRow.java | 56 ++
.../genericformat/csv/SpeciesExportModel.java | 65 ++
.../csv}/SpeciesExportRow.java | 2 +-
.../service/genericformat/csv/SurveyModel.java | 128 +++
.../csv/SurveyRow.java} | 64 +-
.../producer/CsvProducerForAccidentalCatch.java | 115 +++
.../producer/CsvProducerForCatch.java} | 325 +++----
.../producer/CsvProducerForGearCaracteristics.java | 50 +
.../CsvProducerForIndividualObservation.java | 100 ++
.../producer/CsvProducerForMarineLitter.java | 49 +
.../producer/CsvProducerForOperation.java | 35 +
.../producer/CsvProducerForParameter.java | 62 ++
.../producer/CsvProducerForSampleCategory.java | 40 +
.../producer/CsvProducerForSpecies.java | 100 ++
.../producer/CsvProducerForSurvey.java | 32 +
.../operationimport/ImportFromColumnFileModel.java | 19 +-
.../service/protocol/CaracteristicRowModel.java | 5 +-
.../tutti/service/protocol/SpeciesRowModel.java | 17 +-
.../service/pupitri/PupitriImportService.java | 4 +-
.../service/pupitri/csv/CarrouselRowModel.java | 5 +-
.../tutti/service/pupitri/csv/SpeciesRowModel.java | 4 +-
.../tutti/service/pupitri/csv/TrunkRowModel.java | 5 +-
...stResult.java => ReferentialImportRequest.java} | 33 +-
.../referential/ReferentialImportResult.java | 38 +-
.../referential/ReferentialImportService.java | 752 ---------------
.../ReferentialTemporaryGearService.java | 209 ++--
.../ReferentialTemporaryPersonService.java | 204 ++--
.../ReferentialTemporarySpeciesService.java | 200 ++--
.../ReferentialTemporaryVesselService.java | 200 +---
.../consumer/CsvConsumerForTemporaryGear.java | 198 ++++
.../consumer/CsvConsumerForTemporaryPerson.java | 195 ++++
.../consumer/CsvConsumerForTemporarySpecies.java | 200 ++++
.../consumer/CsvConsumerForTemporaryVessel.java | 199 ++++
.../service/referential/{ => csv}/GearModel.java | 54 +-
.../service/referential/{ => csv}/GearRow.java | 2 +-
.../service/referential/{ => csv}/PersonModel.java | 54 +-
.../service/referential/{ => csv}/PersonRow.java | 10 +-
.../referential/{ => csv}/SpeciesModel.java | 54 +-
.../service/referential/{ => csv}/SpeciesRow.java | 2 +-
.../TemporaryReferentialEntityIdParser.java | 19 +-
.../service/referential/{ => csv}/VesselModel.java | 59 +-
.../service/referential/{ => csv}/VesselRow.java | 2 +-
.../producer/CsvProducerForTemporaryGear.java | 38 +
.../producer/CsvProducerForTemporaryPerson.java | 38 +
.../producer/CsvProducerForTemporarySpecies.java | 38 +
.../producer/CsvProducerForTemporaryVessel.java | 38 +
.../tutti/service/report/ReportService.java | 4 +-
.../resources/i18n/tutti-service_en_GB.properties | 105 +-
.../resources/i18n/tutti-service_fr_FR.properties | 106 +-
.../ifremer/tutti/service/ServiceDbResource.java | 15 +-
.../export/generic/TuttiExportServiceTest.java | 505 ----------
.../GenericFormatExportService2Test.java} | 8 +-
.../GenericFormatExportServiceAno5804Test.java} | 8 +-
.../GenericFormatExportServiceTest.java | 548 +++++++++++
.../GenericFormatImportServiceTest.java | 80 ++
.../pupitri/PupitriImportServiceAno5079Test.java | 2 +-
.../ReferentialTemporaryExportServiceTest.java | 3 +
.../ReferentialTemporaryGearServiceTest.java | 8 +-
.../ReferentialTemporaryPersonServiceTest.java | 4 +-
.../ReferentialTemporarySpeciesServiceTest.java | 12 +-
.../ReferentialTemporaryVesselServiceTest.java | 6 +-
.../genericFormat/empty/accidentalCatch.csv | 1 +
.../test/resources/genericFormat/empty/catch.csv | 1 +
.../genericFormat/empty/gearCaracteristics.csv | 1 +
.../genericFormat/empty/individualObservation.csv | 1 +
.../resources/genericFormat/empty/marineLitter.csv | 1 +
.../resources/genericFormat/empty/operation.csv | 1 +
.../resources/genericFormat/empty/parameter.csv | 1 +
.../genericFormat/empty/protocol.tuttiProtocol | 81 ++
.../genericFormat/empty/sampleCategory.csv | 6 +
.../test/resources/genericFormat/empty/survey.csv | 2 +
.../genericFormat/empty/temporaryPersons.csv | 4 +
.../genericFormat/empty/temporarySpecies.csv | 9 +
.../genericFormat/empty/temporaryVessels.csv | 1 +
.../filtered-resources/tutti-help-fr.properties | 3 +-
.../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 11 +-
.../tutti/ui/swing/action/AbstractTuttiAction.java | 3 +-
...n.java => ExportGenericFormatCruiseAction.java} | 32 +-
...> ExportGenericFormatProgramCruisesAction.java} | 38 +-
.../ui/swing/action/ExportProtocolAction.java | 2 +-
.../ImportGenericFormatProgramCruisesAction.java | 105 ++
.../ui/swing/action/ImportProtocolAction.java | 7 +-
.../action/OpenReplaceTemporaryGearUIAction.java | 3 +-
.../action/OpenReplaceTemporaryVesselUIAction.java | 3 +-
.../action/SelectSpeciesForBenthosBatchAction.java | 2 +-
...SpeciesForIndividualObservationBatchAction.java | 2 +-
.../action/SelectSpeciesForSpeciesBatchAction.java | 2 +-
.../tutti/ui/swing/content/home/SelectCruiseUI.css | 14 +-
.../ui/swing/content/home/SelectCruiseUI.jaxx | 1 +
.../content/protocol/EditProtocolUIHandler.java | 5 +-
.../content/protocol/EditProtocolUIModel.java | 10 +-
.../ManageTemporaryReferentialUIHandler.java | 17 +-
.../GearCaracteristicListCellRenderer.java | 2 +-
.../resources/i18n/tutti-ui-swing_en_GB.properties | 10 +
.../resources/i18n/tutti-ui-swing_fr_FR.properties | 10 +
222 files changed, 11259 insertions(+), 5499 deletions(-)
create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Programs.java
create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/TuttiLocations.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CountryFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CsvComsumer.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CsvProducer.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EntityListParserFormatterSupport.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EntityNotFoundException.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EntityParserFormatterSupport.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearListParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/IntegerListParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/PersonListParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/PersonParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramZoneFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiCsvUtil.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselListParserFormatter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParserFormatter.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/AccidentalCatchExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/GearCaracteristicExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/IndividualObservationExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/MarineLitterExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/ParameterExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/SpeciesExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/SurveyExportModel.java
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/TuttiExportService.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportContext.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportOperationContext.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/AccidentalCatchModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/AccidentalCatchExportRow.java => genericformat/csv/AccidentalCatchRow.java} (96%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/CatchModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/CatchExportRow.java => genericformat/csv/CatchRow.java} (89%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic => genericformat/csv}/ExportSampleCategory.java (98%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/GearCaracteristicModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/GearCaracteristicExportRow.java => genericformat/csv/GearCaracteristicRow.java} (83%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/IndividualObservationModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/IndividualObservationExportRow.java => genericformat/csv/IndividualObservationRow.java} (96%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/MarineLitterModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/MarineLitterExportRow.java => genericformat/csv/MarineLitterRow.java} (96%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/OperationExportRow.java => genericformat/csv/OperationRow.java} (84%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/ParameterModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/ParameterExportRow.java => genericformat/csv/ParameterRow.java} (96%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryModel.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryRow.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SpeciesExportModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic => genericformat/csv}/SpeciesExportRow.java (96%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SurveyModel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/SurveyExportRow.java => genericformat/csv/SurveyRow.java} (66%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForAccidentalCatch.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/{export/generic/CatchExportModel.java => genericformat/producer/CsvProducerForCatch.java} (56%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForGearCaracteristics.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForIndividualObservation.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForMarineLitter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForOperation.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForParameter.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSampleCategory.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSpecies.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSurvey.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ImportRequestResult.java => ReferentialImportRequest.java} (76%)
delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/GearModel.java (60%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/GearRow.java (98%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/PersonModel.java (57%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/PersonRow.java (92%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/SpeciesModel.java (55%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/SpeciesRow.java (97%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/TemporaryReferentialEntityIdParser.java (67%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/VesselModel.java (62%)
rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ => csv}/VesselRow.java (98%)
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryGear.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryPerson.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporarySpecies.java
create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryVessel.java
delete mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java
rename tutti-service/src/test/java/fr/ifremer/tutti/service/{export/generic/TuttiExportService2Test.java => genericformat/GenericFormatExportService2Test.java} (98%)
rename tutti-service/src/test/java/fr/ifremer/tutti/service/{export/generic/TuttiExportServiceAno5804Test.java => genericformat/GenericFormatExportServiceAno5804Test.java} (92%)
create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceTest.java
create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/accidentalCatch.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/catch.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/gearCaracteristics.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/individualObservation.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/marineLitter.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/operation.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/parameter.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/protocol.tuttiProtocol
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/sampleCategory.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/survey.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/temporaryPersons.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/temporarySpecies.csv
create mode 100644 tutti-service/src/test/resources/genericFormat/empty/temporaryVessels.csv
rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportCruiseAction.java => ExportGenericFormatCruiseAction.java} (69%)
rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportProgramAction.java => ExportGenericFormatProgramCruisesAction.java} (68%)
create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportGenericFormatProgramCruisesAction.java
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
88
12/98: introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/csv et utilisation
by codelutin.com scm 16 Feb '15
by codelutin.com scm 16 Feb '15
16 Feb '15
This is an automated email from the git hooks/post-receive script.
New commit to branch develop in repository tutti.
See http://git.codelutin.com/tutti.git
commit 586a67d59f3f820507a6cb8a53f780ff5501bbc2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Fri Feb 6 09:43:22 2015 +0100
introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/csv et utilisation
---
.../fr/ifremer/tutti/service/TuttiCsvUtil.java | 732 +--------------------
.../AbstractFishingOperationRowModel.java | 3 +-
.../catches/multipost/AccidentalCatchRowModel.java | 3 +-
.../catches/multipost/AttachmentRowModel.java | 4 +-
.../catches/multipost/CaracteristicRowModel.java | 3 +-
.../catches/multipost/CatchFrequencyRowModel.java | 3 +-
.../service/catches/multipost/CatchRowModel.java | 3 +-
.../multipost/IndividualObservationRowModel.java | 3 +-
.../catches/multipost/MarineLitterRowModel.java | 3 +-
.../service/csv/AbstractTuttiExportModel.java | 59 ++
.../csv/AbstractTuttiImportExportModel.java | 97 +++
.../service/csv/AbstractTuttiImportModel.java | 28 +
.../tutti/service/csv/BeanIndexNullableGetter.java | 50 ++
.../tutti/service/csv/BeanNullableGetter.java | 39 ++
.../tutti/service/csv/BeanPropertyFormatter.java | 37 ++
.../tutti/service/csv/CaracteristicParser.java | 43 ++
.../service/csv/CaracteristicValueFormatter.java | 43 ++
.../service/csv/DecoratorPropertyFormatter.java | 37 ++
.../service/csv/EnumByNameParserFormatter.java | 50 ++
.../csv/FishingOperationLocationParser.java | 56 ++
.../service/csv/FishingOperationStrataParser.java | 56 ++
.../csv/FishingOperationSubStrataParser.java | 56 ++
.../tutti/service/csv/ForeignKeyListValue.java | 70 ++
.../ifremer/tutti/service/csv/ForeignKeyValue.java | 59 ++
.../fr/ifremer/tutti/service/csv/GearParser.java | 46 ++
.../ifremer/tutti/service/csv/HarbourParser.java | 43 ++
.../tutti/service/csv/ImportModelWithHeader.java | 13 +
.../tutti/service/csv/ListGearFormatter.java | 30 +
.../tutti/service/csv/ListIntegerFormatter.java | 43 ++
.../tutti/service/csv/ListPersonFormatter.java | 30 +
.../tutti/service/csv/ListPersonParser.java | 51 ++
.../tutti/service/csv/ListVesselFormatter.java | 37 ++
.../tutti/service/csv/ListVesselParser.java | 59 ++
.../ifremer/tutti/service/csv/ProgramParser.java | 43 ++
.../ifremer/tutti/service/csv/SpeciesParser.java | 47 ++
.../tutti/service/csv/StringParserFormatter.java | 30 +
.../tutti/service/csv/TuttiRepeatableExport.java | 25 +
.../ifremer/tutti/service/csv/VesselFormatter.java | 25 +
.../fr/ifremer/tutti/service/csv/VesselParser.java | 50 ++
.../service/export/sumatra/CatchRowModel.java | 3 +-
.../operationimport/ImportFromColumnFileModel.java | 3 +-
.../service/protocol/CaracteristicRowModel.java | 3 +-
.../tutti/service/protocol/SpeciesRowModel.java | 9 +-
.../service/pupitri/PupitriImportService.java | 4 +-
.../service/pupitri/csv/CarrouselRowModel.java | 3 +-
.../tutti/service/pupitri/csv/SpeciesRowModel.java | 4 +-
.../tutti/service/pupitri/csv/TrunkRowModel.java | 3 +-
.../tutti/service/referential/GearModel.java | 3 +-
.../tutti/service/referential/PersonModel.java | 3 +-
.../tutti/service/referential/SpeciesModel.java | 3 +-
.../tutti/service/referential/VesselModel.java | 3 +-
51 files changed, 1423 insertions(+), 730 deletions(-)
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
index d93c9d1..4b472f2 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
@@ -22,48 +22,33 @@ package fr.ifremer.tutti.service;
* #L%
*/
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import fr.ifremer.tutti.persistence.entities.TuttiEntities;
-import fr.ifremer.tutti.persistence.entities.TuttiEntity;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.Person;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import fr.ifremer.tutti.persistence.entities.referential.Speciess;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import fr.ifremer.tutti.service.csv.BeanPropertyFormatter;
+import fr.ifremer.tutti.service.csv.CaracteristicValueFormatter;
+import fr.ifremer.tutti.service.csv.DecoratorPropertyFormatter;
+import fr.ifremer.tutti.service.csv.ListGearFormatter;
+import fr.ifremer.tutti.service.csv.ListIntegerFormatter;
+import fr.ifremer.tutti.service.csv.ListPersonFormatter;
+import fr.ifremer.tutti.service.csv.ListVesselFormatter;
+import fr.ifremer.tutti.service.csv.TuttiRepeatableExport;
+import fr.ifremer.tutti.service.csv.VesselFormatter;
import fr.ifremer.tutti.util.Weights;
-import org.apache.commons.beanutils.BeanUtilsBean;
-import org.apache.commons.beanutils.NestedNullException;
-import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.lang3.StringUtils;
import org.nuiton.csv.Common;
import org.nuiton.csv.ExportModel;
-import org.nuiton.csv.ExportableColumn;
-import org.nuiton.csv.ImportRuntimeException;
import org.nuiton.csv.ValueFormatter;
-import org.nuiton.csv.ValueGetter;
import org.nuiton.csv.ValueParserFormatter;
-import org.nuiton.csv.ext.AbstractExportModel;
-import org.nuiton.csv.ext.AbstractImportExportModel;
-import org.nuiton.csv.ext.AbstractImportModel;
-import org.nuiton.csv.ext.RepeatableExport;
import org.nuiton.decorator.Decorator;
import java.io.Serializable;
-import java.io.Writer;
-import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
import static org.nuiton.i18n.I18n.t;
@@ -146,7 +131,13 @@ public class TuttiCsvUtil extends Common {
}
};
- public static final ValueFormatter<String> COMMENT_FORMATTER = new ValueFormatter<String>() {
+ public static final ValueParserFormatter<String> COMMENT_PARSER_FORMATTER = new ValueParserFormatter<String>() {
+
+ @Override
+ public String parse(String value) throws ParseException {
+ return value == null ? "" : value.replaceAll("@@", "\n");
+ }
+
@Override
public String format(String value) {
return value == null ? "" : value.replaceAll("\n", "@@");
@@ -215,177 +206,6 @@ public class TuttiCsvUtil extends Common {
public static final ValueParserFormatter<Date> TIME = new DateValue("HH:mm");
- public static abstract class AbstractTuttiImportExportModel<M> extends AbstractImportExportModel<M> {
-
- public AbstractTuttiImportExportModel(char separator) {
- super(separator);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
- return newColumnForExportByDecorator(headerName, propertyName, decorator, null);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
- DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
- return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) {
- return newColumnForExport(headerName, propertyName, formatterPropertyName, null);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) {
- BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue);
- return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
- }
-
- public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public void newSpeciesForeignKeyColumn(String propertyName, String foreignKeyName, List<Species> species) {
- if (species == null) {
- species = Lists.newArrayList();
- }
- Map<String, Species> universe = Speciess.splitByTaxonId(species);
- newForeignKeyColumn(propertyName, Species.class, foreignKeyName, universe);
- }
-
- public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, List<E> list) {
- if (list == null) {
- list = Lists.newArrayList();
- }
-// Map<String, E> universe = Maps.uniqueIndex(list, TuttiEntities.GET_ID);
- Map<String, E> universe = TuttiEntities.splitById(list);
- newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
- return new ForeignKeyValue<E>(type, propertyName, universe);
- }
-
- public void newNotExistingValueColumn(String propertyName, Set<String> universe) {
- newNotExistingValueColumn(propertyName, propertyName, universe);
- }
-
- public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe) {
- newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe));
- }
-
- public void newNotExistingValueColumn(String propertyName, Set<String> universe, String errorMessage) {
- newNotExistingValueColumn(propertyName, propertyName, universe, errorMessage);
- }
-
- public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe, String errorMessage) {
- newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe, errorMessage));
- }
- }
-
- public static abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> {
-
- public AbstractTuttiImportModel(char separator) {
- super(separator);
- }
-
- public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
- return new ForeignKeyValue<E>(type, propertyName, universe);
- }
-
- public <E extends TuttiEntity> void newForeignKeyListColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(headerName, propertyName, newForeignKeyListValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> void newForeignKeyListColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
- newMandatoryColumn(propertyName, propertyName, newForeignKeyListValue(entityType, foreignKeyName, universe));
- }
-
- public <E extends TuttiEntity> ForeignKeyListValue<E> newForeignKeyListValue(Class<E> type, String propertyName, Map<String, E> universe) {
- return new ForeignKeyListValue<E>(type, propertyName, universe);
- }
-
- public void newNotExistingValueColumn(String propertyName, Set<String> universe) {
- newNotExistingValueColumn(propertyName, propertyName, universe);
- }
-
- public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe) {
- newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe));
- }
-
- public void newNotExistingValueColumn(String propertyName, Set<String> universe, String errorMessage) {
- newNotExistingValueColumn(propertyName, propertyName, universe, errorMessage);
- }
-
- public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe, String errorMessage) {
- newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe, errorMessage));
- }
- }
-
- public static abstract class AbstractTuttiExportModel<M> extends AbstractExportModel<M> {
-
- public AbstractTuttiExportModel(char separator) {
- super(separator);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
- return newColumnForExportByDecorator(headerName, propertyName, decorator, null);
- }
-
- public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
- DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, "");
- return newNullableColumnForExport(headerName, propertyName, valueFormatter);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
- DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
- return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) {
- return newColumnForExport(headerName, propertyName, formatterPropertyName, null);
- }
-
- public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) {
- BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue);
- return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
- }
-
- public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
- return new ForeignKeyValue<E>(type, propertyName, universe);
- }
-
- public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) {
- return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter);
- }
-
- public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName, String nullValue) {
- return newNullableColumnForExport(headerName, propertyName, newStringParserFormatter2(nullValue, true));
- }
-
- public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) {
- return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING);
- }
-
- public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) {
- return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter);
- }
-
- public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) {
- return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING);
- }
- }
-
public static ValueParserFormatter<Float> WEIGHT_PARSER_FORMATTER = new FloatParserFormatter(null, true) {
@Override
@@ -404,539 +224,41 @@ public class TuttiCsvUtil extends Common {
}
};
- public static ValueParserFormatter<String> newStringParserFormatter2(String defaultValue, boolean nullAllowed) {
- return new StringParserFormatter2(defaultValue, nullAllowed);
- }
-
- public static class StringParserFormatter2 extends Common.NullableParserFormatter<String> {
-
- public StringParserFormatter2(String defaultValue, boolean nullAllowed) {
- super(defaultValue, nullAllowed);
- }
-
- @Override
- public String format(String value) {
- String str;
- if (value == null) {
- str = defaultValue;
- } else {
- str = String.valueOf(value);
- }
- return str;
- }
-
- @Override
- protected String parseNoneEmptyValue(String value) {
- return value;
- }
- }
-
- public static class StringParserFormatter extends Common.NullableParserFormatter<String> {
-
- public StringParserFormatter(String defaultValue, boolean nullAllowed) {
- super(defaultValue, nullAllowed);
- }
-
- @Override
- public String format(String value) {
- String str = "";
- if (value != null) {
- str = String.valueOf(value);
- }
- return str;
- }
+ public static final ValueParserFormatter<Date> YEAR = new DateValue("yyyy");
- @Override
- protected String parseNoneEmptyValue(String value) {
- return value;
- }
- }
+ public static final ValueFormatter<Serializable> CARACTERISTIC_VALUE_FORMATTER = new CaracteristicValueFormatter();
- public static class VesselFormatter implements ValueFormatter<Vessel> {
+ public static final ValueFormatter<Vessel> VESSEL_VALUE_FORMATTER = new VesselFormatter();
+ public static final ValueFormatter<List<Person>> LIST_PERSON_FORMATTER = new ListPersonFormatter();
- @Override
- public String format(Vessel value) {
- String result = "";
- if (value != null) {
- result = value.getRegistrationCode();
- if (result == null) {
- result = value.getInternationalRegistrationCode();
- }
- }
- return result;
- }
- }
-
- /**
- * @param <E>
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
- public static class ForeignKeyValue<E extends TuttiEntity> implements ValueParserFormatter<E> {
-
- protected final String propertyName;
-
- protected final Class<E> entityType;
-
- protected final Map<String, E> universe;
-
- public ForeignKeyValue(Class<E> entityType,
- String propertyName,
- Map<String, E> universe) {
- this.entityType = entityType;
- this.propertyName = propertyName;
- this.universe = universe;
- }
-
- @Override
- public E parse(String value) throws ParseException {
- E result = null;
- if (StringUtils.isNotBlank(value)) {
-
- // get entity from universe
- result = universe.get(value);
-
- if (result == null) {
-
- // can not find entity this is a big problem for us...
- throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value));
- }
- }
- return result;
- }
-
- @Override
- public String format(E e) {
- String value = "";
- if (e != null) {
- value = e.getId();
- }
- return value;
- }
- }
-
- /**
- * @param <E>
- * @author kmorin <morin(a)codelutin.com>
- * @since 3.10
- */
- public static class ForeignKeyListValue<E extends TuttiEntity> implements ValueParserFormatter<List<E>> {
-
- public static final String LIST_SEPARATOR = ",";
-
- protected final String propertyName;
-
- protected final Class<E> entityType;
-
- protected final Map<String, E> universe;
-
- public ForeignKeyListValue(Class<E> entityType,
- String propertyName,
- Map<String, E> universe) {
- this.entityType = entityType;
- this.propertyName = propertyName;
- this.universe = universe;
- }
-
- @Override
- public List<E> parse(String value) throws ParseException {
- List<E> result = new ArrayList<E>();
- if (StringUtils.isNotBlank(value)) {
-
- String[] ids = value.split(LIST_SEPARATOR);
- for (String id : ids) {
- // get entity from universe
- E entity = universe.get(id);
-
- if (entity == null) {
-
- // can not find entity this is a big problem for us...
- throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, id));
- }
-
- result.add(entity);
- }
- }
- return result;
- }
-
- @Override
- public String format(List<E> e) {
- List<String> ids = new ArrayList<String>();
- for (E entity : e) {
- if (entity != null) {
- ids.add(entity.getId());
- }
- }
- return StringUtils.join(ids, LIST_SEPARATOR);
- }
- }
-
- public static class BeanNullableGetter<E, T> implements ValueGetter<E, T> {
-
- protected String propertyName;
-
- BeanNullableGetter(String propertyName) {
- this.propertyName = propertyName;
- }
-
- @Override
- public T get(E object) throws Exception {
- T value;
- try {
- value = (T) PropertyUtils.getProperty(object, propertyName);
- } catch (NestedNullException e) {
- value = null;
- } catch (InvocationTargetException e) {
- if (e.getCause() instanceof NullPointerException) {
- value = null;
- } else {
- throw e;
- }
- }
- return value;
- }
- }
-
- public static class BeanIndexNullableGetter<E, T> implements ValueGetter<E, T> {
-
- protected String collectionName;
-
- protected int order;
-
- protected String propertyName;
-
- BeanIndexNullableGetter(String collectionName, int order, String suffix) {
- this.collectionName = collectionName;
- this.order = order;
- this.propertyName = collectionName + "[" + order + "]." + suffix;
-
- }
-
- @Override
- public T get(E object) throws Exception {
- T value = null;
- try {
- Collection c = (Collection) PropertyUtils.getProperty(object, collectionName);
- if (c != null && order < c.size()) {
- value = (T) PropertyUtils.getProperty(object, propertyName);
- }
- } catch (NestedNullException e) {
- value = null;
- } catch (InvocationTargetException e) {
- if (e.getCause() instanceof NullPointerException) {
- value = null;
- } else {
- throw e;
- }
- }
- return value;
- }
- }
-
- /**
- * @author tchemit <chemit(a)codelutin.com>
- * @since 1.0
- */
- public static class NotExistingKeyValue implements ValueParserFormatter<String> {
-
- protected final String propertyName;
-
- protected final Set<String> existingValues;
-
- protected final String errorMessage;
-
- public NotExistingKeyValue(
- String propertyName,
- Set<String> universe) {
- this(propertyName, universe, "tutti.service.csv.parse.entityAlreadyDefined");
- }
-
- public NotExistingKeyValue(
- String propertyName,
- Set<String> universe,
- String errorMessage) {
- this.propertyName = propertyName;
- this.existingValues = universe;
- this.errorMessage = errorMessage;
- }
-
- @Override
- public String parse(String value) throws ParseException {
- if (StringUtils.isNotBlank(value)) {
-
- if (existingValues.contains(value)) {
-
- // entity already defined
- throw new ImportRuntimeException(t(errorMessage, propertyName, value));
- }
- }
- return value;
- }
-
- @Override
- public String format(String e) {
- return e;
- }
- }
-
- public static final ValueParserFormatter<Date> YEAR =
- new DateValue("yyyy");
-
- public static final ValueFormatter<Serializable> CARACTERISTIC_VALUE_FORMATTER =
- new CaracteristicValueFormatter();
-
- public static final ValueFormatter<Vessel> VESSEL_VALUE_FORMATTER =
- new VesselFormatter();
-
- public static final ValueFormatter<List<Person>> LIST_PERSON_FORMATTER =
- new ListPersonValueFormatter();
-
- public static ListVesselValueFormatter newListVesselFormatter(Decorator<Vessel> decorator) {
- return new ListVesselValueFormatter(decorator);
+ public static ListVesselFormatter newListVesselFormatter(Decorator<Vessel> decorator) {
+ return new ListVesselFormatter(decorator);
}
public static final ValueParserFormatter<List<Integer>> LIST_INTEGER_PARSER_FORMATTER =
- new ListIntegerValueFormatter();
+ new ListIntegerFormatter();
- public static final ValueFormatter<List<Gear>> LIST_GEAR_FORMATTER =
- new ListGearValueFormatter();
+ public static final ValueFormatter<List<Gear>> LIST_GEAR_FORMATTER = new ListGearFormatter();
- public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName,
- String defaultNullValue) {
+ public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName, String defaultNullValue) {
return new BeanPropertyFormatter<E>(propertyName, defaultNullValue);
}
- public static class BeanPropertyFormatter<E> implements ValueFormatter<E> {
-
- protected final String defaultNullValue;
-
- protected String propertyName;
-
- BeanPropertyFormatter(String propertyName, String defaultNullValue) {
- this.propertyName = propertyName;
- this.defaultNullValue = defaultNullValue;
- }
-
- @Override
- public String format(E value) {
- if (value == null) {
- return defaultNullValue;
- }
- try {
- return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName);
- } catch (Exception e) {
- throw new ImportRuntimeException(t("tutti.service.cvs.format.error"), e);//"Could not format value"
- }
- }
- }
-
- public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator,
- String defaultNullValue) {
+ public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator, String defaultNullValue) {
return new DecoratorPropertyFormatter<E>(decorator, defaultNullValue);
}
- public static class DecoratorPropertyFormatter<E> implements ValueFormatter<E> {
-
- protected final String defaultNullValue;
-
- protected Decorator<E> decorator;
-
- DecoratorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) {
- this.decorator = decorator;
- this.defaultNullValue = defaultNullValue;
- }
-
- @Override
- public String format(E value) {
- if (value == null) {
- return defaultNullValue;
- }
- try {
- return decorator.toString(value);
- } catch (Exception e) {
- throw new ImportRuntimeException(t("tutti.service.cvs.format.error", value), e);
- }
- }
- }
-
public static <E> TuttiRepeatableExport<E> newRepeatableExport(ExportModel<E> model) {
return new TuttiRepeatableExport<E>(model);
}
- public static class TuttiRepeatableExport<E> extends RepeatableExport<E> {
-
- public TuttiRepeatableExport(ExportModel<E> model) {
- super(model, Collections.<E>emptyList(), true);
- }
-
- public void write(Iterable<E> data, Writer writer) throws Exception {
- this.data = data;
- write(writer);
- }
- }
-
public static <E extends Enum<E>> ValueParserFormatter<E> newEnumByNameParserFormatter(Class<E> enumType, boolean mandatory) {
- return new EnumByNameParserFormatter<E>(enumType, mandatory);
- }
-
- public static class EnumByNameParserFormatter<E extends Enum<E>> implements ValueParserFormatter<E> {
-
-
- private final Class<E> enumType;
-
- private final boolean mandatory;
-
- public EnumByNameParserFormatter(Class<E> enumType, boolean mandatory) {
- this.enumType = enumType;
- this.mandatory = mandatory;
- }
-
- @Override
- public E parse(String value) throws ParseException {
- E result;
- if (StringUtils.isBlank(value)) {
- result = null;
- } else {
- result = Enum.valueOf(enumType, value);
- }
- if (mandatory && result == null) {
- throw new NullPointerException(t("tutti.service.cvs.mandatory.value"));
- }
- return result;
- }
-
- @Override
- public String format(E date) {
- String value = "";
- if (date != null) {
- value = date.name();
- }
- return value;
- }
- }
-
- protected static class CaracteristicValueFormatter implements ValueFormatter<Serializable> {
-
- ValueParserFormatter<Integer> integerDelegate = INTEGER;
-
- ValueParserFormatter<Float> floatDelegate = FLOAT;
-
- ValueParserFormatter<String> textDelegate = STRING;
-
- @Override
- public String format(Serializable value) {
- if (value == null) {
- return "NA";
- }
- if (value instanceof Float) {
- return floatDelegate.format((Float) value);
- }
- if (value instanceof Integer) {
- return integerDelegate.format((Integer) value);
- }
- if (value instanceof String) {
- return textDelegate.format((String) value);
- }
- // qualitive value
- CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value;
- String result = qv.getDescription(); // description contaisn name - description from db
- return result;
- }
- }
-
- protected static class ListIntegerValueFormatter implements ValueParserFormatter<List<Integer>> {
-
- @Override
- public String format(List<Integer> value) {
- List<String> decoratedValues =
- Lists.transform(value, new Function<Integer, String>() {
- @Override
- public String apply(Integer input) {
- return input.toString();
- }
- });
- return Joiner.on('|').join(decoratedValues);
- }
-
- @Override
- public List<Integer> parse(String value) throws ParseException {
- List<Integer> result = Lists.newArrayList();
- if (StringUtils.isNotBlank(value)) {
- String[] split = value.split("\\s*\\|\\s*");
- for (String string : split) {
- result.add(Integer.valueOf(string));
- }
- }
- return result;
- }
- }
-
- protected static class ListPersonValueFormatter implements ValueFormatter<List<Person>> {
-
- @Override
- public String format(List<Person> value) {
- List<String> decoratedValues =
- Lists.transform(value, new Function<Person, String>() {
- @Override
- public String apply(Person input) {
- return input.getFirstName() + ' ' + input.getLastName();
- }
- });
- return Joiner.on('|').join(decoratedValues);
- }
- }
-
- protected static class ListGearValueFormatter implements ValueFormatter<List<Gear>> {
-
- @Override
- public String format(List<Gear> value) {
- List<String> decoratedValues =
- Lists.transform(value, new Function<Gear, String>() {
- @Override
- public String apply(Gear input) {
- return input.getName();
- }
- });
- return Joiner.on('|').join(decoratedValues);
- }
- }
-
- protected static class ListVesselValueFormatter implements ValueFormatter<List<Vessel>> {
-
- final Decorator<Vessel> decorator;
-
- public ListVesselValueFormatter(Decorator<Vessel> decorator) {
- this.decorator = decorator;
- }
-
- @Override
- public String format(List<Vessel> value) {
- List<String> decoratedValues =
- Lists.transform(value, new Function<Vessel, String>() {
- @Override
- public String apply(Vessel input) {
- return decorator.toString(input);
- }
- });
- return Joiner.on('|').join(decoratedValues);
- }
+ return new fr.ifremer.tutti.service.csv.EnumByNameParserFormatter<E>(enumType, mandatory);
}
protected TuttiCsvUtil() {
// no instance
}
- /**
- * @param <M>
- */
- public static abstract class ImportModelWithHeader<M> extends AbstractTuttiImportModel<M> {
-
- protected ImportModelWithHeader(char separator) {
- super(separator);
- }
-
- public abstract String[] getHeader();
- }
}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java
index f64ee16..ad7b73b 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java
@@ -23,13 +23,14 @@ package fr.ifremer.tutti.service.catches.multipost;
*/
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
/**
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.3.1
*/
public abstract class AbstractFishingOperationRowModel<FO extends AbstractFishingOperationRow>
- extends TuttiCsvUtil.AbstractTuttiImportExportModel<FO> {
+ extends AbstractTuttiImportExportModel<FO> {
public AbstractFishingOperationRowModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java
index 4e713d8..85f4704 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java
@@ -26,6 +26,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -35,7 +36,7 @@ import java.util.List;
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class AccidentalCatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AccidentalCatchRow> {
+public class AccidentalCatchRowModel extends AbstractTuttiImportExportModel<AccidentalCatchRow> {
public AccidentalCatchRowModel(char separator) {
this(separator, null, null, null, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
index 3a3dd2d..0014bb2 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
@@ -22,7 +22,7 @@ package fr.ifremer.tutti.service.catches.multipost;
* #L%
*/
-import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import org.nuiton.csv.ValueFormatter;
import org.nuiton.csv.ValueParser;
@@ -33,7 +33,7 @@ import java.text.ParseException;
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.2
*/
-public class AttachmentRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AttachmentRow> {
+public class AttachmentRowModel extends AbstractTuttiImportExportModel<AttachmentRow> {
public AttachmentRowModel(char separator) {
this(separator, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java
index fe8ecb2..b849953 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -31,7 +32,7 @@ import java.util.List;
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.3
*/
-public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> {
+public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> {
public CaracteristicRowModel(char separator) {
this(separator, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
index 323cdbc..2039484 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -33,7 +34,7 @@ import java.util.List;
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class CatchFrequencyRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchFrequencyRow> {
+public class CatchFrequencyRowModel extends AbstractTuttiImportExportModel<CatchFrequencyRow> {
public CatchFrequencyRowModel(char separator) {
this(separator, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
index ae7f0d6..54e1594 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -33,7 +34,7 @@ import java.util.List;
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchRow> {
+public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> {
public CatchRowModel(char separator) {
this(separator, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java
index e2951e8..e6a1773 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java
@@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.catches.multipost;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -34,7 +35,7 @@ import java.util.List;
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class IndividualObservationRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<IndividualObservationRow> {
+public class IndividualObservationRowModel extends AbstractTuttiImportExportModel<IndividualObservationRow> {
public IndividualObservationRowModel(char separator) {
this(separator, null, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java
index 4fe5ea8..d42c79a 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.List;
@@ -31,7 +32,7 @@ import java.util.List;
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class MarineLitterRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<MarineLitterRow> {
+public class MarineLitterRowModel extends AbstractTuttiImportExportModel<MarineLitterRow> {
public MarineLitterRowModel(char separator) {
this(separator, null, null);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java
new file mode 100644
index 0000000..eab7599
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java
@@ -0,0 +1,59 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.csv.ExportableColumn;
+import org.nuiton.csv.ValueFormatter;
+import org.nuiton.csv.ext.AbstractExportModel;
+import org.nuiton.decorator.Decorator;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public abstract class AbstractTuttiExportModel<M> extends AbstractExportModel<M> {
+
+ public AbstractTuttiExportModel(char separator) {
+ super(separator);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
+ return newColumnForExportByDecorator(headerName, propertyName, decorator, null);
+ }
+
+ public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
+ DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, "");
+ return newNullableColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
+ DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, defaultNullValue);
+ return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) {
+ return newColumnForExport(headerName, propertyName, formatterPropertyName, null);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) {
+ BeanPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newBeanFormatter(formatterPropertyName, defaultNullValue);
+ return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) {
+ return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter);
+ }
+
+ public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) {
+ return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING);
+ }
+
+ public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) {
+ return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter);
+ }
+
+ public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) {
+ return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java
new file mode 100644
index 0000000..75a7ae2
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java
@@ -0,0 +1,97 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.TuttiEntity;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.persistence.entities.referential.Speciess;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.csv.ExportableColumn;
+import org.nuiton.csv.ValueFormatter;
+import org.nuiton.csv.ext.AbstractImportExportModel;
+import org.nuiton.decorator.Decorator;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public abstract class AbstractTuttiImportExportModel<M> extends AbstractImportExportModel<M> {
+
+ public AbstractTuttiImportExportModel(char separator) {
+ super(separator);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
+ return newColumnForExportByDecorator(headerName, propertyName, decorator, null);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
+ DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, defaultNullValue);
+ return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) {
+ return newColumnForExport(headerName, propertyName, formatterPropertyName, null);
+ }
+
+ public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) {
+ BeanPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newBeanFormatter(formatterPropertyName, defaultNullValue);
+ return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
+ newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
+ }
+
+ public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) {
+ newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
+ }
+
+ public void newSpeciesForeignKeyColumn(String propertyName, String foreignKeyName, List<Species> species) {
+ if (species == null) {
+ species = Lists.newArrayList();
+ }
+ Map<String, Species> universe = Speciess.splitByTaxonId(species);
+ newForeignKeyColumn(propertyName, Species.class, foreignKeyName, universe);
+ }
+
+ public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, List<E> list) {
+ if (list == null) {
+ list = Lists.newArrayList();
+ }
+// Map<String, E> universe = Maps.uniqueIndex(list, TuttiEntities.GET_ID);
+ Map<String, E> universe = TuttiEntities.splitById(list);
+ newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe));
+ }
+
+ public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
+ return new ForeignKeyValue<E>(type, propertyName, universe);
+ }
+
+ public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) {
+ return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter);
+ }
+
+ public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) {
+ return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING);
+ }
+
+ public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) {
+ DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, "");
+ return newNullableColumnForExport(headerName, propertyName, valueFormatter);
+ }
+
+ public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) {
+ return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter);
+ }
+
+ public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) {
+ return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING);
+ }
+
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java
new file mode 100644
index 0000000..19093f9
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java
@@ -0,0 +1,28 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.TuttiEntity;
+import org.nuiton.csv.ext.AbstractImportModel;
+
+import java.util.Map;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> {
+
+ public AbstractTuttiImportModel(char separator) {
+ super(separator);
+ }
+
+ public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) {
+ return new ForeignKeyValue<E>(type, propertyName, universe);
+ }
+
+ public <E extends TuttiEntity> ForeignKeyListValue<E> newForeignKeyListValue(Class<E> type, String propertyName, Map<String, E> universe) {
+ return new ForeignKeyListValue<E>(type, propertyName, universe);
+ }
+
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java
new file mode 100644
index 0000000..d51b573
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java
@@ -0,0 +1,50 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.apache.commons.beanutils.NestedNullException;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.nuiton.csv.ValueGetter;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class BeanIndexNullableGetter<E, T> implements ValueGetter<E, T> {
+
+ protected String collectionName;
+
+ protected int order;
+
+ protected String propertyName;
+
+ BeanIndexNullableGetter(String collectionName, int order, String suffix) {
+ this.collectionName = collectionName;
+ this.order = order;
+ this.propertyName = collectionName + "[" + order + "]." + suffix;
+
+ }
+
+ @Override
+ public T get(E object) throws Exception {
+ T value = null;
+ try {
+ Collection c = (Collection) PropertyUtils.getProperty(object, collectionName);
+ if (c != null && order < c.size()) {
+ value = (T) PropertyUtils.getProperty(object, propertyName);
+ }
+ } catch (NestedNullException e) {
+ value = null;
+ } catch (InvocationTargetException e) {
+ if (e.getCause() instanceof NullPointerException) {
+ value = null;
+ } else {
+ throw e;
+ }
+ }
+ return value;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java
new file mode 100644
index 0000000..f06d10f
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java
@@ -0,0 +1,39 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.apache.commons.beanutils.NestedNullException;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.nuiton.csv.ValueGetter;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class BeanNullableGetter<E, T> implements ValueGetter<E, T> {
+
+ protected String propertyName;
+
+ BeanNullableGetter(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ @Override
+ public T get(E object) throws Exception {
+ T value;
+ try {
+ value = (T) PropertyUtils.getProperty(object, propertyName);
+ } catch (NestedNullException e) {
+ value = null;
+ } catch (InvocationTargetException e) {
+ if (e.getCause() instanceof NullPointerException) {
+ value = null;
+ } else {
+ throw e;
+ }
+ }
+ return value;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java
new file mode 100644
index 0000000..2824fe0
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java
@@ -0,0 +1,37 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.apache.commons.beanutils.BeanUtilsBean;
+import org.nuiton.csv.ImportRuntimeException;
+import org.nuiton.csv.ValueFormatter;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class BeanPropertyFormatter<E> implements ValueFormatter<E> {
+
+ protected final String defaultNullValue;
+
+ protected String propertyName;
+
+ public BeanPropertyFormatter(String propertyName, String defaultNullValue) {
+ this.propertyName = propertyName;
+ this.defaultNullValue = defaultNullValue;
+ }
+
+ @Override
+ public String format(E value) {
+ if (value == null) {
+ return defaultNullValue;
+ }
+ try {
+ return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName);
+ } catch (Exception e) {
+ throw new ImportRuntimeException(t("tutti.service.cvs.format.error"), e);//"Could not format value"
+ }
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java
new file mode 100644
index 0000000..7e27c22
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java
@@ -0,0 +1,43 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class CaracteristicParser implements ValueParser<Caracteristic> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Caracteristic> caracteristicsById;
+
+ public CaracteristicParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public Caracteristic parse(String value) throws ParseException {
+
+ if (caracteristicsById == null) {
+ List<Caracteristic> caracteristics = persistenceService.getAllCaracteristic();
+ caracteristicsById = TuttiEntities.splitById(caracteristics);
+ }
+ Caracteristic caracteristic = caracteristicsById.get(value);
+
+ if (caracteristic == null) {
+ throw new ParseException("Could not found a caracteristic with id " + value, 0);
+ }
+ return caracteristic;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java
new file mode 100644
index 0000000..6ba8f5f
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java
@@ -0,0 +1,43 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import org.nuiton.csv.Common;
+import org.nuiton.csv.ValueFormatter;
+import org.nuiton.csv.ValueParserFormatter;
+
+import java.io.Serializable;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class CaracteristicValueFormatter implements ValueFormatter<Serializable> {
+
+ ValueParserFormatter<Integer> integerDelegate = Common.INTEGER;
+
+ ValueParserFormatter<Float> floatDelegate = Common.FLOAT;
+
+ ValueParserFormatter<String> textDelegate = Common.STRING;
+
+ @Override
+ public String format(Serializable value) {
+ if (value == null) {
+ return "NA";
+ }
+ if (value instanceof Float) {
+ return floatDelegate.format((Float) value);
+ }
+ if (value instanceof Integer) {
+ return integerDelegate.format((Integer) value);
+ }
+ if (value instanceof String) {
+ return textDelegate.format((String) value);
+ }
+ // qualitive value
+ CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value;
+ String result = qv.getDescription(); // description contaisn name - description from db
+ return result;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java
new file mode 100644
index 0000000..b290585
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java
@@ -0,0 +1,37 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.nuiton.csv.ImportRuntimeException;
+import org.nuiton.csv.ValueFormatter;
+import org.nuiton.decorator.Decorator;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class DecoratorPropertyFormatter<E> implements ValueFormatter<E> {
+
+ protected final String defaultNullValue;
+
+ protected Decorator<E> decorator;
+
+ public DecoratorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) {
+ this.decorator = decorator;
+ this.defaultNullValue = defaultNullValue;
+ }
+
+ @Override
+ public String format(E value) {
+ if (value == null) {
+ return defaultNullValue;
+ }
+ try {
+ return decorator.toString(value);
+ } catch (Exception e) {
+ throw new ImportRuntimeException(t("tutti.service.cvs.format.error", value), e);
+ }
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java
new file mode 100644
index 0000000..d8d2513
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java
@@ -0,0 +1,50 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.csv.ValueParserFormatter;
+
+import java.text.ParseException;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class EnumByNameParserFormatter<E extends Enum<E>> implements ValueParserFormatter<E> {
+
+
+ private final Class<E> enumType;
+
+ private final boolean mandatory;
+
+ public EnumByNameParserFormatter(Class<E> enumType, boolean mandatory) {
+ this.enumType = enumType;
+ this.mandatory = mandatory;
+ }
+
+ @Override
+ public E parse(String value) throws ParseException {
+ E result;
+ if (StringUtils.isBlank(value)) {
+ result = null;
+ } else {
+ result = Enum.valueOf(enumType, value);
+ }
+ if (mandatory && result == null) {
+ throw new NullPointerException(t("tutti.service.cvs.mandatory.value"));
+ }
+ return result;
+ }
+
+ @Override
+ public String format(E date) {
+ String value = "";
+ if (date != null) {
+ value = date.name();
+ }
+ return value;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java
new file mode 100644
index 0000000..c7a6018
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java
@@ -0,0 +1,56 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class FishingOperationLocationParser implements ValueParser<TuttiLocation> {
+
+ private final PersistenceService persistenceService;
+
+ private final String zoneId;
+
+ private Map<String, TuttiLocation> locationsByName;
+
+ public FishingOperationLocationParser(PersistenceService persistenceService, String zoneId) {
+ this.persistenceService = persistenceService;
+ this.zoneId = zoneId;
+ }
+
+ @Override
+ public TuttiLocation parse(String value) throws ParseException {
+
+ if (locationsByName == null) {
+ List<TuttiLocation> locations = persistenceService.getAllFishingOperationLocation(zoneId, null, null);
+ locationsByName = TuttiLocations.splitByName(locations);
+ }
+ TuttiLocation location;
+ if ("NA".equals(value)) {
+
+ location = null;
+
+ } else {
+
+ location = locationsByName.get(value);
+
+ if (location == null) {
+ throw new ParseException("Could not found a fishing operation location with name " + value, 0);
+ }
+
+ }
+
+ return location;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java
new file mode 100644
index 0000000..a9cb4bd
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java
@@ -0,0 +1,56 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class FishingOperationStrataParser implements ValueParser<TuttiLocation> {
+
+ private final PersistenceService persistenceService;
+
+ private final String zoneId;
+
+ private Map<String, TuttiLocation> locationsByName;
+
+ public FishingOperationStrataParser(PersistenceService persistenceService, String zoneId) {
+ this.persistenceService = persistenceService;
+ this.zoneId = zoneId;
+ }
+
+ @Override
+ public TuttiLocation parse(String value) throws ParseException {
+
+ if (locationsByName == null) {
+ List<TuttiLocation> locations = persistenceService.getAllFishingOperationStrata(zoneId);
+ locationsByName = TuttiLocations.splitByName(locations);
+ }
+ TuttiLocation location;
+ if ("NA".equals(value)) {
+
+ location = null;
+
+ } else {
+
+ location = locationsByName.get(value);
+
+ if (location == null) {
+ throw new ParseException("Could not found a fishing operation stata with name " + value, 0);
+ }
+
+ }
+
+ return location;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java
new file mode 100644
index 0000000..058d88c
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java
@@ -0,0 +1,56 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class FishingOperationSubStrataParser implements ValueParser<TuttiLocation> {
+
+ private final PersistenceService persistenceService;
+
+ private final String zoneId;
+
+ private Map<String, TuttiLocation> locationsByName;
+
+ public FishingOperationSubStrataParser(PersistenceService persistenceService, String zoneId) {
+ this.persistenceService = persistenceService;
+ this.zoneId = zoneId;
+ }
+
+ @Override
+ public TuttiLocation parse(String value) throws ParseException {
+
+ if (locationsByName == null) {
+ List<TuttiLocation> locations = persistenceService.getAllFishingOperationSubStrata(zoneId, null);
+ locationsByName = TuttiLocations.splitByName(locations);
+ }
+ TuttiLocation location;
+ if ("NA".equals(value)) {
+
+ location = null;
+
+ } else {
+
+ location = locationsByName.get(value);
+
+ if (location == null) {
+ throw new ParseException("Could not found a fishing operation subStata with name " + value, 0);
+ }
+
+ }
+
+ return location;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java
new file mode 100644
index 0000000..7242e35
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java
@@ -0,0 +1,70 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.TuttiEntity;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.csv.ImportRuntimeException;
+import org.nuiton.csv.ValueParserFormatter;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * @param <E>
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 3.10
+ */
+public class ForeignKeyListValue<E extends TuttiEntity> implements ValueParserFormatter<List<E>> {
+
+ public static final String LIST_SEPARATOR = ",";
+
+ protected final String propertyName;
+
+ protected final Class<E> entityType;
+
+ protected final Map<String, E> universe;
+
+ public ForeignKeyListValue(Class<E> entityType,
+ String propertyName,
+ Map<String, E> universe) {
+ this.entityType = entityType;
+ this.propertyName = propertyName;
+ this.universe = universe;
+ }
+
+ @Override
+ public List<E> parse(String value) throws ParseException {
+ List<E> result = new ArrayList<E>();
+ if (StringUtils.isNotBlank(value)) {
+
+ String[] ids = value.split(LIST_SEPARATOR);
+ for (String id : ids) {
+ // get entity from universe
+ E entity = universe.get(id);
+
+ if (entity == null) {
+
+ // can not find entity this is a big problem for us...
+ throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, id));
+ }
+
+ result.add(entity);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public String format(List<E> e) {
+ List<String> ids = new ArrayList<String>();
+ for (E entity : e) {
+ if (entity != null) {
+ ids.add(entity.getId());
+ }
+ }
+ return StringUtils.join(ids, LIST_SEPARATOR);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java
new file mode 100644
index 0000000..9bc5bb8
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java
@@ -0,0 +1,59 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.TuttiEntity;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.csv.ImportRuntimeException;
+import org.nuiton.csv.ValueParserFormatter;
+
+import java.text.ParseException;
+import java.util.Map;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * @param <E>
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class ForeignKeyValue<E extends TuttiEntity> implements ValueParserFormatter<E> {
+
+ protected final String propertyName;
+
+ protected final Class<E> entityType;
+
+ protected final Map<String, E> universe;
+
+ public ForeignKeyValue(Class<E> entityType,
+ String propertyName,
+ Map<String, E> universe) {
+ this.entityType = entityType;
+ this.propertyName = propertyName;
+ this.universe = universe;
+ }
+
+ @Override
+ public E parse(String value) throws ParseException {
+ E result = null;
+ if (StringUtils.isNotBlank(value)) {
+
+ // get entity from universe
+ result = universe.get(value);
+
+ if (result == null) {
+
+ // can not find entity this is a big problem for us...
+ throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value));
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public String format(E e) {
+ String value = "";
+ if (e != null) {
+ value = e.getId();
+ }
+ return value;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java
new file mode 100644
index 0000000..228e3ae
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java
@@ -0,0 +1,46 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Gears;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class GearParser implements ValueParser<Gear> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Gear> gearsByName;
+
+ private boolean mandatory;
+
+ public GearParser(PersistenceService persistenceService, boolean mandatory) {
+ this.persistenceService = persistenceService;
+ this.mandatory = mandatory;
+ }
+
+ @Override
+ public Gear parse(String value) throws ParseException {
+
+ if (gearsByName == null) {
+ List<Gear> gears = persistenceService.getAllGear();
+ gearsByName = Gears.splitByName(gears);
+ }
+ Gear gear = gearsByName.get(value);
+
+ if (gear == null && mandatory) {
+ throw new ParseException("Could not found a gear with name " + value, 0);
+ }
+ return gear;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java
new file mode 100644
index 0000000..cd61338
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java
@@ -0,0 +1,43 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
+import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class HarbourParser implements ValueParser<TuttiLocation> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, TuttiLocation> locationsByName;
+
+ public HarbourParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public TuttiLocation parse(String value) throws ParseException {
+
+ if (locationsByName == null) {
+ List<TuttiLocation> locations = persistenceService.getAllHarbour();
+ locationsByName = TuttiLocations.splitByName(locations);
+ }
+ TuttiLocation location = locationsByName.get(value);
+
+ if (location == null) {
+ throw new ParseException("Could not found a harbour with name " + value, 0);
+ }
+ return location;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java
new file mode 100644
index 0000000..d11cc66
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java
@@ -0,0 +1,13 @@
+package fr.ifremer.tutti.service.csv;
+
+/**
+ * @param <M>
+ */
+public abstract class ImportModelWithHeader<M> extends AbstractTuttiImportModel<M> {
+
+ protected ImportModelWithHeader(char separator) {
+ super(separator);
+ }
+
+ public abstract String[] getHeader();
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java
new file mode 100644
index 0000000..cec4f1f
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java
@@ -0,0 +1,30 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import org.nuiton.csv.ValueFormatter;
+
+import java.util.List;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class ListGearFormatter implements ValueFormatter<List<Gear>> {
+
+ @Override
+ public String format(List<Gear> value) {
+ List<String> decoratedValues =
+ Lists.transform(value, new Function<Gear, String>() {
+ @Override
+ public String apply(Gear input) {
+ return input.getName();
+ }
+ });
+ return Joiner.on('|').join(decoratedValues);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java
new file mode 100644
index 0000000..a915cf5
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java
@@ -0,0 +1,43 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.csv.ValueParserFormatter;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class ListIntegerFormatter implements ValueParserFormatter<List<Integer>> {
+
+ @Override
+ public String format(List<Integer> value) {
+ List<String> decoratedValues =
+ Lists.transform(value, new Function<Integer, String>() {
+ @Override
+ public String apply(Integer input) {
+ return input.toString();
+ }
+ });
+ return Joiner.on('|').join(decoratedValues);
+ }
+
+ @Override
+ public List<Integer> parse(String value) throws ParseException {
+ List<Integer> result = Lists.newArrayList();
+ if (StringUtils.isNotBlank(value)) {
+ String[] split = value.split("\\s*\\|\\s*");
+ for (String string : split) {
+ result.add(Integer.valueOf(string));
+ }
+ }
+ return result;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java
new file mode 100644
index 0000000..ce6f749
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java
@@ -0,0 +1,30 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.referential.Person;
+import org.nuiton.csv.ValueFormatter;
+
+import java.util.List;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class ListPersonFormatter implements ValueFormatter<List<Person>> {
+
+ @Override
+ public String format(List<Person> value) {
+ List<String> decoratedValues =
+ Lists.transform(value, new Function<Person, String>() {
+ @Override
+ public String apply(Person input) {
+ return input.getFirstName() + ' ' + input.getLastName();
+ }
+ });
+ return Joiner.on('|').join(decoratedValues);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java
new file mode 100644
index 0000000..32d2e95
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java
@@ -0,0 +1,51 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.Person;
+import fr.ifremer.tutti.persistence.entities.referential.Persons;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class ListPersonParser implements ValueParser<List<Person>> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Person> personsByFullName;
+
+ public ListPersonParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public List<Person> parse(String value) throws ParseException {
+
+ if (personsByFullName == null) {
+ List<Person> allPerson = persistenceService.getAllPerson();
+ personsByFullName = Persons.splitByFullName(allPerson);
+ }
+
+ List<Person> persons = new ArrayList<>();
+ String[] fullNames = value.split("|");
+ for (String fullName : fullNames) {
+ Person person = personsByFullName.get(fullName);
+
+ if (person == null) {
+ throw new ParseException("Could not found a person with name " + value, 0);
+ }
+ persons.add(person);
+ }
+
+ return persons;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java
new file mode 100644
index 0000000..e5ad93c
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java
@@ -0,0 +1,37 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import org.nuiton.csv.ValueFormatter;
+import org.nuiton.decorator.Decorator;
+
+import java.util.List;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class ListVesselFormatter implements ValueFormatter<List<Vessel>> {
+
+ final Decorator<Vessel> decorator;
+
+ public ListVesselFormatter(Decorator<Vessel> decorator) {
+ this.decorator = decorator;
+ }
+
+ @Override
+ public String format(List<Vessel> value) {
+ List<String> decoratedValues =
+ Lists.transform(value, new Function<Vessel, String>() {
+ @Override
+ public String apply(Vessel input) {
+ return decorator.toString(input);
+ }
+ });
+ return Joiner.on('|').join(decoratedValues);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java
new file mode 100644
index 0000000..8ecf44e
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java
@@ -0,0 +1,59 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import fr.ifremer.tutti.persistence.entities.referential.Vessels;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class ListVesselParser implements ValueParser<List<Vessel>> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Vessel> vesselsByRegistrationCode;
+
+ private Map<String, Vessel> vesselsByInternalRegistrationCode;
+
+ public ListVesselParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public List<Vessel> parse(String value) throws ParseException {
+
+ if (vesselsByRegistrationCode == null) {
+ List<Vessel> allVessels = persistenceService.getAllVessel();
+ vesselsByRegistrationCode = Vessels.splitByRegistrationCode(allVessels);
+ vesselsByInternalRegistrationCode = Vessels.splitByInternationalRegistrationCode(allVessels);
+ }
+
+ List<Vessel> vessels = new ArrayList<>();
+ String[] immatriculations = value.split("|");
+ for (String immatriculation : immatriculations) {
+
+ Vessel vessel = vesselsByRegistrationCode.get(immatriculation);
+
+ if (vessel == null) {
+ vessel = vesselsByInternalRegistrationCode.get(immatriculation);
+ }
+
+ if (vessel == null) {
+ throw new ParseException("Could not found a vessel with registrationCode " + value + ", neither with internationalRegistrationCode", 0);
+ }
+ vessels.add(vessel);
+ }
+
+ return vessels;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java
new file mode 100644
index 0000000..11d64f8
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java
@@ -0,0 +1,43 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.data.Programs;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since 3.13
+*/
+public class ProgramParser implements ValueParser<Program> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Program> programsByName;
+
+ public ProgramParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public Program parse(String value) throws ParseException {
+
+ if (programsByName == null) {
+ List<Program> allProgram = persistenceService.getAllProgram();
+ programsByName = Programs.splitByName(allProgram);
+ }
+ Program program = programsByName.get(value);
+
+ if (program == null) {
+ throw new ParseException("Could not found a program with name " + value, 0);
+ }
+ return program;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java
new file mode 100644
index 0000000..494c9f4
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java
@@ -0,0 +1,47 @@
+package fr.ifremer.tutti.service.csv;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Multimap;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.persistence.entities.referential.Speciess;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class SpeciesParser implements ValueParser<Species> {
+
+ private final PersistenceService persistenceService;
+
+ private Multimap<String, Species> speciesByReferenceTaxonId;
+
+ public SpeciesParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public Species parse(String value) throws ParseException {
+
+ if (speciesByReferenceTaxonId == null) {
+ List<Species> gears = persistenceService.getAllReferentSpecies();
+ speciesByReferenceTaxonId = Speciess.splitByReferenceTaxonId(gears);
+ }
+ Collection<Species> specieses = speciesByReferenceTaxonId.get(value);
+
+ if (CollectionUtils.isEmpty(specieses)) {
+ throw new ParseException("Could not found a species with referenceTaxonId " + value, 0);
+ }
+ Species species = Iterables.get(specieses, 0);
+ return species;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java
new file mode 100644
index 0000000..f3aae34
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java
@@ -0,0 +1,30 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.nuiton.csv.Common;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class StringParserFormatter extends Common.NullableParserFormatter<String> {
+
+ public StringParserFormatter(String defaultValue, boolean nullAllowed) {
+ super(defaultValue, nullAllowed);
+ }
+
+ @Override
+ public String format(String value) {
+ String str = "";
+ if (value != null) {
+ str = String.valueOf(value);
+ }
+ return str;
+ }
+
+ @Override
+ protected String parseNoneEmptyValue(String value) {
+ return value;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java
new file mode 100644
index 0000000..6431400
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java
@@ -0,0 +1,25 @@
+package fr.ifremer.tutti.service.csv;
+
+import org.nuiton.csv.ExportModel;
+import org.nuiton.csv.ext.RepeatableExport;
+
+import java.io.Writer;
+import java.util.Collections;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class TuttiRepeatableExport<E> extends RepeatableExport<E> {
+
+ public TuttiRepeatableExport(ExportModel<E> model) {
+ super(model, Collections.<E>emptyList(), true);
+ }
+
+ public void write(Iterable<E> data, Writer writer) throws Exception {
+ this.data = data;
+ write(writer);
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java
new file mode 100644
index 0000000..a355239
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java
@@ -0,0 +1,25 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import org.nuiton.csv.ValueFormatter;
+
+/**
+* Created on 2/5/15.
+*
+* @author Tony Chemit - chemit(a)codelutin.com
+* @since XXX
+*/
+public class VesselFormatter implements ValueFormatter<Vessel> {
+
+ @Override
+ public String format(Vessel value) {
+ String result = "";
+ if (value != null) {
+ result = value.getRegistrationCode();
+ if (result == null) {
+ result = value.getInternationalRegistrationCode();
+ }
+ }
+ return result;
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java
new file mode 100644
index 0000000..f8d3ea8
--- /dev/null
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java
@@ -0,0 +1,50 @@
+package fr.ifremer.tutti.service.csv;
+
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import fr.ifremer.tutti.persistence.entities.referential.Vessels;
+import fr.ifremer.tutti.service.PersistenceService;
+import org.nuiton.csv.ValueParser;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 2/5/15.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 3.13
+ */
+public class VesselParser implements ValueParser<Vessel> {
+
+ private final PersistenceService persistenceService;
+
+ private Map<String, Vessel> vesselsByRegistrationCode;
+
+ private Map<String, Vessel> vesselsByInternalRegistrationCode;
+
+ public VesselParser(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ @Override
+ public Vessel parse(String value) throws ParseException {
+
+ if (vesselsByRegistrationCode == null) {
+ List<Vessel> allVessels = persistenceService.getAllVessel();
+ vesselsByRegistrationCode = Vessels.splitByRegistrationCode(allVessels);
+ vesselsByInternalRegistrationCode = Vessels.splitByInternationalRegistrationCode(allVessels);
+ }
+ Vessel vessel = vesselsByRegistrationCode.get(value);
+
+ if (vessel == null) {
+ vessel = vesselsByInternalRegistrationCode.get(value);
+ }
+
+ if (vessel == null) {
+ throw new ParseException("Could not found a vessel with registrationCode " + value + ", neither with internationalRegistrationCode", 0);
+ }
+ return vessel;
+
+ }
+}
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java
index 1ee8c5c..f606a43 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.export.sumatra;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import fr.ifremer.tutti.service.export.ExportBatchEntry;
import static org.nuiton.i18n.I18n.t;
@@ -32,7 +33,7 @@ import static org.nuiton.i18n.I18n.t;
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.0
*/
-public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchRow> {
+public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> {
public CatchRowModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java
index 954bdfc..5388ac2 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java
@@ -41,6 +41,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.service.TuttiCsvUtil;
import fr.ifremer.tutti.service.TuttiDataContext;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportModel;
import org.apache.commons.lang3.StringUtils;
import org.nuiton.csv.ValueParser;
import org.nuiton.csv.ValueSetter;
@@ -60,7 +61,7 @@ import java.util.Set;
* @author Kevin Morin - morin(a)codelutin.com
* @since 3.10
*/
-public class ImportFromColumnFileModel extends TuttiCsvUtil.AbstractTuttiImportModel<FishingOperation> {
+public class ImportFromColumnFileModel extends AbstractTuttiImportModel<FishingOperation> {
private final FishingOperation fishingOperation;
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java
index febdde8..d98e97e 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java
@@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.protocol;
import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import java.util.Map;
@@ -34,7 +35,7 @@ import java.util.Map;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> {
+public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> {
public CaracteristicRowModel(char separator, Map<String, Caracteristic> caracteristicMap) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
index dfaa4d3..6b18ac1 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java
@@ -26,6 +26,9 @@ import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
+import fr.ifremer.tutti.service.csv.ForeignKeyValue;
+import fr.ifremer.tutti.service.csv.StringParserFormatter;
import org.nuiton.csv.Common;
import org.nuiton.csv.ImportRuntimeException;
@@ -41,7 +44,7 @@ import static org.nuiton.i18n.I18n.t;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> {
+public class SpeciesRowModel extends AbstractTuttiImportExportModel<SpeciesRow> {
public SpeciesRowModel(char separator,
Map<String, Caracteristic> caracteristicMap,
@@ -53,7 +56,7 @@ public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel
newMandatoryColumn(
SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID,
SpeciesRow.PROPERTY_SPECIES,
- new TuttiCsvUtil.ForeignKeyValue<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) {
+ new ForeignKeyValue<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) {
Set<Integer> taxonIds = Sets.newHashSet();
@@ -85,7 +88,7 @@ public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel
newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_FRACTION_NAME);
newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_METHOD_NAME);
- newMandatoryColumn(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE, new TuttiCsvUtil.StringParserFormatter(null, true));
+ newMandatoryColumn(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE, new StringParserFormatter(null, true));
newMandatoryColumn(SpeciesRow.PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, TuttiCsvUtil.LIST_INTEGER_PARSER_FORMATTER);
newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
newMandatoryColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java
index 82e99c2..4979838 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java
@@ -45,9 +45,9 @@ import fr.ifremer.tutti.service.AbstractTuttiService;
import fr.ifremer.tutti.service.DecoratorService;
import fr.ifremer.tutti.service.PdfGeneratorService;
import fr.ifremer.tutti.service.PersistenceService;
-import fr.ifremer.tutti.service.TuttiCsvUtil;
import fr.ifremer.tutti.service.TuttiDataContext;
import fr.ifremer.tutti.service.TuttiServiceContext;
+import fr.ifremer.tutti.service.csv.ImportModelWithHeader;
import fr.ifremer.tutti.service.pupitri.csv.CarrouselRow;
import fr.ifremer.tutti.service.pupitri.csv.CarrouselRowModel;
import fr.ifremer.tutti.service.pupitri.csv.TrunkRow;
@@ -562,7 +562,7 @@ public class PupitriImportService extends AbstractTuttiService {
return batch;
}
- protected File createFileWithHeaders(TuttiCsvUtil.ImportModelWithHeader<?> model,
+ protected File createFileWithHeaders(ImportModelWithHeader<?> model,
File file) {
File fileWithHeaders = new File(FileUtils.getTempDirectory(), file.getName());
String headers = StringUtils.join(model.getHeader(), model.getSeparator());
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java
index 5a49850..a4c9dac 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java
@@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.pupitri.csv;
*/
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.ImportModelWithHeader;
import fr.ifremer.tutti.service.pupitri.BoxType;
import fr.ifremer.tutti.service.pupitri.Directions;
import fr.ifremer.tutti.service.pupitri.Signs;
@@ -35,7 +36,7 @@ import java.text.ParseException;
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.2
*/
-public class CarrouselRowModel extends TuttiCsvUtil.ImportModelWithHeader<CarrouselRow> {
+public class CarrouselRowModel extends ImportModelWithHeader<CarrouselRow> {
public CarrouselRowModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java
index d354398..8daa3d1 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java
@@ -22,13 +22,13 @@ package fr.ifremer.tutti.service.pupitri.csv;
* #L%
*/
-import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiExportModel;
/**
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.2
*/
-public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiExportModel<SpeciesRow> {
+public class SpeciesRowModel extends AbstractTuttiExportModel<SpeciesRow> {
public SpeciesRowModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java
index cc72b2d..cf367d7 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java
@@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.pupitri.csv;
*/
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.ImportModelWithHeader;
import fr.ifremer.tutti.service.pupitri.Directions;
import org.nuiton.csv.Common;
@@ -30,7 +31,7 @@ import org.nuiton.csv.Common;
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.2
*/
-public class TrunkRowModel extends TuttiCsvUtil.ImportModelWithHeader<TrunkRow> {
+public class TrunkRowModel extends ImportModelWithHeader<TrunkRow> {
public TrunkRowModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java
index 9ef9c6b..1025ca6 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import org.nuiton.csv.Common;
import static org.nuiton.i18n.I18n.n;
@@ -34,7 +35,7 @@ import static org.nuiton.i18n.I18n.n;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<GearRow> {
+public class GearModel extends AbstractTuttiImportExportModel<GearRow> {
public GearModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java
index bb11c1e..2e134f9 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential;
import fr.ifremer.tutti.persistence.entities.referential.Person;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import static org.nuiton.i18n.I18n.n;
@@ -33,7 +34,7 @@ import static org.nuiton.i18n.I18n.n;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<PersonRow> {
+public class PersonModel extends AbstractTuttiImportExportModel<PersonRow> {
public PersonModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java
index ebfe0db..19c395e 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java
@@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import static org.nuiton.i18n.I18n.n;
@@ -33,7 +34,7 @@ import static org.nuiton.i18n.I18n.n;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> {
+public class SpeciesModel extends AbstractTuttiImportExportModel<SpeciesRow> {
public SpeciesModel(char separator) {
super(separator);
diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java
index 5c14ed9..0faac49 100644
--- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java
+++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java
@@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.referential;
import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.service.TuttiCsvUtil;
+import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
import org.apache.commons.lang3.StringUtils;
import org.nuiton.csv.Common;
@@ -36,7 +37,7 @@ import static org.nuiton.i18n.I18n.t;
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
*/
-public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<VesselRow> {
+public class VesselModel extends AbstractTuttiImportExportModel<VesselRow> {
public VesselModel(char separator) {
super(separator);
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0