branch develop updated (88fd133 -> 00a5751)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from 88fd133 Livrable #8291 Mauvais éditeur sur le code de prélèvement new e6f692b fix i18n typos new ecba160 Ajout nouvelle méthode pour créer des CPSD new cdafea2 Pourquoi moi ? le code écrit n'est jamais consulté :() new 9d494d9 On arrête d'utiliser guava en faveur de java 8 new 01f13d8 On recharge les ui après avoir charge le modèle new 4869f1a o Revue des imports du protocole (pas tout, pas le temps...) o Nettoyage code o Bien importer les maturités + autres caractéristiques lors d'un import de caractéristiques sur le procole (See #8302, #8301) new 9ec9d2e Introduction d'un nouveau service qui fait les import-exports des caractéristiques du protocole + correction import/export maturités (See #8301) new 00a5751 Livrable #8301 Livrable #8302 Merge branch 'feature/8302' into develop The 8 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 00a57515f451e3aecffb54892180a744a5728c5a Merge: 88fd133 9ec9d2e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 16:49:32 2016 +0200 Livrable #8301 Livrable #8302 Merge branch 'feature/8302' into develop commit 9ec9d2e72efb59d121bb628cc4f51650f9add071 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 16:49:22 2016 +0200 Introduction d'un nouveau service qui fait les import-exports des caractéristiques du protocole + correction import/export maturités (See #8301) commit 4869f1ae5b17d222175b20c3347e0eb6cf0de7b2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:59:38 2016 +0200 o Revue des imports du protocole (pas tout, pas le temps...) o Nettoyage code o Bien importer les maturités + autres caractéristiques lors d'un import de caractéristiques sur le procole (See #8302, #8301) commit 01f13d8f11132ee6cb87234987cdd867f4c12504 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:55:19 2016 +0200 On recharge les ui après avoir charge le modèle commit 9d494d93f8758b71067dd50d3bc0b34c6e2d08ee Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:54:28 2016 +0200 On arrête d'utiliser guava en faveur de java 8 commit cdafea28a57c9d9d14ed545c90e6060c84c29672 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:49:21 2016 +0200 Pourquoi moi ? le code écrit n'est jamais consulté :() commit ecba1604ca4807d753f077ae948aff2f3841f712 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:48:52 2016 +0200 Ajout nouvelle méthode pour créer des CPSD commit e6f692bbfa4a4c096efbdf0a9ad2036c554eb702 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue May 10 22:16:36 2016 +0200 fix i18n typos Summary of changes: .../CalcifiedPiecesSamplingDefinitions.java | 7 + .../protocol/CaracteristicMappingRows.java | 7 +- .../entities/protocol/CaracteristicType.java | 1 + .../entities/protocol/SpeciesProtocols.java | 20 +- .../entities/protocol/TuttiProtocols.java | 58 +-- ...ormatter.java => StringSetParserFormatter.java} | 24 +- .../fr/ifremer/tutti/service/csv/TuttiCsvUtil.java | 3 + .../FishingOperationImportService.java | 4 +- .../tutti/service/protocol/CaracteristicRow.java | 12 + .../service/protocol/CaracteristicRowModel.java | 60 ++- .../ProtocolCaracteristicsImportExportService.java | 259 +++++++++++ .../protocol/ProtocolImportExportService.java | 481 ++++++++------------- .../service/pupitri/PupitriImportService.java | 38 +- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + ...tocolCaracteristicsImportExportServiceTest.java | 149 +++++++ .../protocol/ProtocolImportExportServiceTest.java | 167 ++++--- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 5 + .../actions/ExportAllCaracteristicAction.java | 7 +- .../actions/ExportProtocolCaracteristicAction.java | 14 +- .../actions/ImportProtocolCaracteristicAction.java | 38 +- .../actions/LoadProtocolImportColumnsAction.java | 4 +- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 +- 23 files changed, 853 insertions(+), 511 deletions(-) copy tutti-service/src/main/java/fr/ifremer/tutti/service/csv/{IntegerListParserFormatter.java => StringSetParserFormatter.java} (65%) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportService.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportServiceTest.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e6f692bbfa4a4c096efbdf0a9ad2036c554eb702 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue May 10 22:16:36 2016 +0200 fix i18n typos --- .../src/main/resources/i18n/tutti-ui-swing_fr_FR.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 2d7bd5c..3aeebf5 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1500,7 +1500,7 @@ tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.mnemonic=T tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.tip=Ne recopier que les tailles, pas les poids tutti.editSpeciesFrequencies.field.frequencyMode.autoGen=Génération des classes tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic=G -tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip=\=Mode où toutes les classes de taille sont générées +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip=Mode où toutes les classes de taille sont générées tutti.editSpeciesFrequencies.field.frequencyMode.rafale=Mode "rafale" tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic=l tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) @@ -1658,7 +1658,7 @@ tutti.flash.info.caracteristic.imported.in.protocol=Caractéristiques importées tutti.flash.info.caracteristicMapping.remove.from.protocol=Les caractéristiques ont été retirées du protocole. tutti.flash.info.caractristic.exported.from.protocol=Caractéristiques du protocole exportées dans le fichier <strong>%s</strong>. tutti.flash.info.cps.exported.from.protocol=Algorithme de prélèvement du protocole exporté dans le fichier <strong>%s</strong>. -tutti.flash.info.cps.imported.in.protocol=\=Algorithme de prélèvement importé dans le protocole depuis le fichier <strong>%s</strong>. +tutti.flash.info.cps.imported.in.protocol=Algorithme de prélèvement importé dans le protocole depuis le fichier <strong>%s</strong>. tutti.flash.info.cruiseCreated=La campagne <strong>%s</strong> a été créée. tutti.flash.info.cruiseSaved=La campagne <strong>%s</strong> a été enregistrée. tutti.flash.info.db.closed=La base <strong>%s</strong> est fermée. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit ecba1604ca4807d753f077ae948aff2f3841f712 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:48:52 2016 +0200 Ajout nouvelle méthode pour créer des CPSD --- .../entities/protocol/CalcifiedPiecesSamplingDefinitions.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CalcifiedPiecesSamplingDefinitions.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CalcifiedPiecesSamplingDefinitions.java index a3571ce..9c6eb4a 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CalcifiedPiecesSamplingDefinitions.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CalcifiedPiecesSamplingDefinitions.java @@ -24,6 +24,8 @@ package fr.ifremer.tutti.persistence.entities.protocol; * #L% */ +import org.nuiton.util.beans.Binder; + public class CalcifiedPiecesSamplingDefinitions extends AbstractCalcifiedPiecesSamplingDefinitions { public static boolean isOperationValueUpperMax(CalcifiedPiecesSamplingDefinition cpsDef, int value) { @@ -42,4 +44,9 @@ public class CalcifiedPiecesSamplingDefinitions extends AbstractCalcifiedPiecesS return max != null && max > 0 && value > max; } + public static <BeanType extends CalcifiedPiecesSamplingDefinition, Source> BeanType newCalcifiedPiecesSamplingDefinition(Source source, Binder<Source, BeanType> binder) { + BeanType result = (BeanType) newCalcifiedPiecesSamplingDefinition(); + binder.copy(source, result); + return result; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit cdafea28a57c9d9d14ed545c90e6060c84c29672 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:49:21 2016 +0200 Pourquoi moi ? le code écrit n'est jamais consulté :() --- .../ifremer/tutti/persistence/entities/protocol/CaracteristicType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicType.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicType.java index a0ed8d3..7c422a7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicType.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicType.java @@ -31,6 +31,7 @@ package fr.ifremer.tutti.persistence.entities.protocol; public enum CaracteristicType { LENGTH_STEP, + MATURITY, VESSEL_USE_FEATURE, GEAR_USE_FEATURE, INDIVIDUAL_OBSERVATION; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 9d494d93f8758b71067dd50d3bc0b34c6e2d08ee Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:54:28 2016 +0200 On arrête d'utiliser guava en faveur de java 8 --- .../protocol/CaracteristicMappingRows.java | 7 +-- .../entities/protocol/SpeciesProtocols.java | 20 ++++---- .../entities/protocol/TuttiProtocols.java | 58 ++++++++-------------- 3 files changed, 31 insertions(+), 54 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicMappingRows.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicMappingRows.java index 78f6f1d..20523a0 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicMappingRows.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/CaracteristicMappingRows.java @@ -29,12 +29,7 @@ import com.google.common.base.Predicate; public class CaracteristicMappingRows extends AbstractCaracteristicMappingRows { - public static final Function<CaracteristicMappingRow, String> GET_PMFM_ID = new Function<CaracteristicMappingRow, String>() { - @Override - public String apply(CaracteristicMappingRow caracteristicMappingRow) { - return caracteristicMappingRow.getPmfmId(); - } - }; + public static final Function<CaracteristicMappingRow, String> GET_PMFM_ID = CaracteristicMappingRow::getPmfmId; public static class TabPredicate implements Predicate<CaracteristicMappingRow> { private final CaracteristicType type; diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/SpeciesProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/SpeciesProtocols.java index a1ddd0e..04abd54 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/SpeciesProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/SpeciesProtocols.java @@ -24,29 +24,29 @@ package fr.ifremer.tutti.persistence.entities.protocol; * #L% */ -import com.google.common.base.Function; -import com.google.common.base.Predicate; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import java.util.List; +import java.util.function.Predicate; public class SpeciesProtocols extends AbstractSpeciesProtocols { - public static Function<SpeciesProtocol, String> GET_SURVEY_CODE = SpeciesProtocol::getSpeciesSurveyCode; + public static Predicate<SpeciesProtocol> speciesProtocolWhoseCategoryIsMandatoryPredicate(Caracteristic caracteristic) { + return new SpeciesProtocolWhoseCategoryIsMandatoryPredicate(caracteristic); + } - public static class SpeciesProtocolWhoseCategoryIsMandatoryPredicate implements Predicate<SpeciesProtocol> { + private static class SpeciesProtocolWhoseCategoryIsMandatoryPredicate implements Predicate<SpeciesProtocol> { - private final Caracteristic caracteristic; + private final Integer caracteristicId; - public SpeciesProtocolWhoseCategoryIsMandatoryPredicate(Caracteristic caracteristic) { - this.caracteristic = caracteristic; + SpeciesProtocolWhoseCategoryIsMandatoryPredicate(Caracteristic caracteristic) { + this.caracteristicId = caracteristic.getIdAsInt(); } @Override - public boolean apply(SpeciesProtocol input) { + public boolean test(SpeciesProtocol input) { List<Integer> mandatorySampleCategoryId = input.getMandatorySampleCategoryId(); - return mandatorySampleCategoryId != null - && mandatorySampleCategoryId.contains(caracteristic.getIdAsInt()); + return mandatorySampleCategoryId != null && mandatorySampleCategoryId.contains(caracteristicId); } } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 80c3a2e..085f320 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -25,11 +25,9 @@ package fr.ifremer.tutti.persistence.entities.protocol; import com.esotericsoftware.yamlbeans.YamlConfig; import com.esotericsoftware.yamlbeans.YamlReader; import com.esotericsoftware.yamlbeans.YamlWriter; -import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.io.Files; @@ -61,10 +59,10 @@ import org.nuiton.util.beans.BinderFactory; import java.io.BufferedWriter; import java.io.File; import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -93,7 +91,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { BufferedWriter fileWriter = null; try { - fileWriter = Files.newWriter(file, Charsets.UTF_8); + fileWriter = Files.newWriter(file, StandardCharsets.UTF_8); YamlWriter writer = new YamlWriter(fileWriter, createConfig()); writer.write(protocol); writer.close(); @@ -109,7 +107,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { TuttiProtocol result; Reader fileReader = null; try { - fileReader = Files.newReader(file, Charsets.UTF_8); + fileReader = Files.newReader(file, StandardCharsets.UTF_8); YamlReader reader = new YamlReader(fileReader, createConfig()); result = reader.read(typeOfTuttiProtocol()); fileReader.close(); @@ -133,7 +131,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { if (!result.isBenthosEmpty()) { for (SpeciesProtocol speciesProtocol : result.getBenthos()) { List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); - List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); + List<Integer> mandatorySampleCategoryIdInteger = new ArrayList<>(); for (Object o : mandatorySampleCategoryId) { mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); } @@ -145,7 +143,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { if (!result.isSpeciesEmpty()) { for (SpeciesProtocol speciesProtocol : result.getSpecies()) { List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); - List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); + List<Integer> mandatorySampleCategoryIdInteger = new ArrayList<>(); for (Object o : mandatorySampleCategoryId) { mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); } @@ -224,7 +222,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { Reader fileReader = null; try { - fileReader = Files.newReader(file, Charsets.UTF_8); + fileReader = Files.newReader(file, StandardCharsets.UTF_8); YamlReader reader = new YamlReader(fileReader, createConfigV1()); TuttiProtocol1 result = reader.read(TuttiProtocolBean1.class); fileReader.close(); @@ -240,7 +238,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { Reader fileReader = null; try { - fileReader = Files.newReader(file, Charsets.UTF_8); + fileReader = Files.newReader(file, StandardCharsets.UTF_8); YamlReader reader = new YamlReader(fileReader, createConfigV2()); TuttiProtocol2 result = reader.read(TuttiProtocolBean2.class); fileReader.close(); @@ -256,7 +254,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { Reader fileReader = null; try { - fileReader = Files.newReader(file, Charsets.UTF_8); + fileReader = Files.newReader(file, StandardCharsets.UTF_8); YamlReader reader = new YamlReader(fileReader, createConfigV3()); TuttiProtocol3 result = reader.read(TuttiProtocolBean3.class); fileReader.close(); @@ -314,7 +312,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { public static String getBadCategoriesMessage(Set<Integer> badCategories, Decorator<Caracteristic> decorator, TuttiPersistence persistenceService) { - List<String> badCategoriesStr = Lists.newArrayList(); + List<String> badCategoriesStr = new ArrayList<>(); for (Integer id : badCategories) { String caracteristicStr; @@ -337,11 +335,11 @@ public class TuttiProtocols extends AbstractTuttiProtocols { Binder<TuttiProtocol1, TuttiProtocol2> binder = BinderFactory.newBinder(TuttiProtocol1.class, TuttiProtocol2.class); binder.copy(tuttiProtocol1, result); if (!tuttiProtocol1.isSpeciesEmpty()) { - result.setSpecies(Lists.<SpeciesProtocol>newArrayList()); + result.setSpecies(new ArrayList<>()); Binder<SpeciesProtocol1, SpeciesProtocol> binderSpecies = BinderFactory.newBinder(SpeciesProtocol1.class, SpeciesProtocol.class); for (SpeciesProtocol1 speciesProtocol1 : tuttiProtocol1.getSpecies()) { SpeciesProtocol row = SpeciesProtocols.newSpeciesProtocol(); - row.setMandatorySampleCategoryId(Lists.<Integer>newArrayList()); + row.setMandatorySampleCategoryId(new ArrayList<>()); binderSpecies.copy(speciesProtocol1, row); if (speciesProtocol1.isAgeEnabled()) { row.addMandatorySampleCategoryId(PmfmId.AGE.getValue()); @@ -359,11 +357,11 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } } if (!tuttiProtocol1.isBenthosEmpty()) { - result.setBenthos(Lists.<SpeciesProtocol>newArrayList()); + result.setBenthos(new ArrayList<>()); Binder<SpeciesProtocol1, SpeciesProtocol> binderSpecies = BinderFactory.newBinder(SpeciesProtocol1.class, SpeciesProtocol.class); for (SpeciesProtocol1 speciesProtocol1 : tuttiProtocol1.getBenthos()) { SpeciesProtocol row = SpeciesProtocols.newSpeciesProtocol(); - row.setMandatorySampleCategoryId(Lists.<Integer>newArrayList()); + row.setMandatorySampleCategoryId(new ArrayList<>()); binderSpecies.copy(speciesProtocol1, row); if (speciesProtocol1.isAgeEnabled()) { row.addMandatorySampleCategoryId(PmfmId.AGE.getValue()); @@ -414,21 +412,21 @@ public class TuttiProtocols extends AbstractTuttiProtocols { binder.copy(tuttiProtocol3, result); if (!tuttiProtocol3.isSpeciesEmpty()) { - result.setSpecies(Lists.<SpeciesProtocol>newArrayList()); + result.setSpecies(new ArrayList<>()); Binder<SpeciesProtocol3, SpeciesProtocol> binderSpecies = BinderFactory.newBinder(SpeciesProtocol3.class, SpeciesProtocol.class); for (SpeciesProtocol3 speciesProtocol3 : tuttiProtocol3.getSpecies()) { SpeciesProtocol row = SpeciesProtocols.newSpeciesProtocol(); - row.setMandatorySampleCategoryId(Lists.<Integer>newArrayList()); + row.setMandatorySampleCategoryId(new ArrayList<>()); binderSpecies.copy(speciesProtocol3, row); result.addSpecies(row); } } if (!tuttiProtocol3.isBenthosEmpty()) { - result.setBenthos(Lists.<SpeciesProtocol>newArrayList()); + result.setBenthos(new ArrayList<>()); Binder<SpeciesProtocol3, SpeciesProtocol> binderSpecies = BinderFactory.newBinder(SpeciesProtocol3.class, SpeciesProtocol.class); for (SpeciesProtocol3 speciesProtocol3 : tuttiProtocol3.getBenthos()) { SpeciesProtocol row = SpeciesProtocols.newSpeciesProtocol(); - row.setMandatorySampleCategoryId(Lists.<Integer>newArrayList()); + row.setMandatorySampleCategoryId(new ArrayList<>()); binderSpecies.copy(speciesProtocol3, row); result.addBenthos(row); } @@ -710,7 +708,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { public static String getBadSpeciesMessage(Map<Integer, String> speciesProtocolNotFound) { - List<String> badCategoriesStr = Lists.newArrayList(); + List<String> badCategoriesStr = new ArrayList<>(); for (Map.Entry<Integer, String> id : speciesProtocolNotFound.entrySet()) { badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>"); } @@ -720,7 +718,7 @@ public class TuttiProtocols extends AbstractTuttiProtocols { public static String getBadBenthosMessage(Map<Integer, String> benthosProtocolNotFound) { - List<String> badCategoriesStr = Lists.newArrayList(); + List<String> badCategoriesStr = new ArrayList<>(); for (Map.Entry<Integer, String> id : benthosProtocolNotFound.entrySet()) { badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>"); } @@ -728,25 +726,9 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } - public static Collection<String> getSurveyCodeWhoseCategoryIsMandatory(TuttiProtocol protocol, - final Caracteristic caracteristic) { - - Preconditions.checkNotNull(caracteristic); - - Collection<String> surveyCodes = new HashSet<>(); - - if (protocol != null) { - Collection<SpeciesProtocol> speciesProtocols = Collections2.filter(protocol.getSpecies(), - new SpeciesProtocols.SpeciesProtocolWhoseCategoryIsMandatoryPredicate(caracteristic)); - - surveyCodes.addAll(Collections2.transform(speciesProtocols, SpeciesProtocols.GET_SURVEY_CODE)); - } - - return surveyCodes; - } - public static boolean matchProgramId(TuttiProtocol protocol, String programId) { Preconditions.checkNotNull(protocol, "Protocol can't be null."); return Objects.equals(programId, protocol.getProgramId()); } + } \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 01f13d8f11132ee6cb87234987cdd867f4c12504 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:55:19 2016 +0200 On recharge les ui après avoir charge le modèle --- .../actions/ImportProtocolCaracteristicAction.java | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java index 1282984..073f393 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java @@ -23,8 +23,10 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; @@ -33,6 +35,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.File; +import java.util.Collections; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -49,6 +53,7 @@ public class ImportProtocolCaracteristicAction extends LongActionSupport<EditPro LogFactory.getLog(ImportProtocolCaracteristicAction.class); private File file; + protected TuttiProtocol protocol; public ImportProtocolCaracteristicAction(EditProtocolUIHandler handler) { super(handler, true); @@ -89,27 +94,36 @@ public class ImportProtocolCaracteristicAction extends LongActionSupport<EditPro EditProtocolUIModel model = getModel(); // bind to a protocol - TuttiProtocol protocol = model.toEntity(); + protocol = model.toEntity(); - ProtocolImportExportService service = - getContext().getTuttiProtocolImportExportService(); + ProtocolImportExportService service = getContext().getTuttiProtocolImportExportService(); - service.importProtocolCaracteristic(file, - protocol, - model.getAllCaracteristic()); + service.importProtocolCaracteristic(file, protocol, model.getAllCaracteristic()); + + } + + @Override + public void postSuccessAction() { + + super.postSuccessAction(); handler.addDoubleListListeners(); try { // rebind to model - model.fromEntity(protocol); + getModel().fromEntity(protocol); } finally { handler.removeDoubleListListeners(); } - sendMessage( - t("tutti.flash.info.caracteristic.imported.in.protocol", - file)); + List<CaracteristicMappingRow> caracteristicMapping = protocol.getCaracteristicMapping(); + List<EditProtocolCaracteristicsRowModel> caracteristicsRowModels = getHandler().toProtocolCaracteristicRows(caracteristicMapping); + getModel().setCaracteristicMappingRows(Collections.emptyList()); + getModel().setCaracteristicMappingRows(caracteristicsRowModels); + getHandler().getCaracteristicMappingTableModel().setRows(caracteristicsRowModels); + + sendMessage(t("tutti.flash.info.caracteristic.imported.in.protocol", file)); } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 4869f1ae5b17d222175b20c3347e0eb6cf0de7b2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 09:59:38 2016 +0200 o Revue des imports du protocole (pas tout, pas le temps...) o Nettoyage code o Bien importer les maturités + autres caractéristiques lors d'un import de caractéristiques sur le procole (See #8302, #8301) --- .../protocol/ProtocolImportExportService.java | 498 +++++++++++++-------- .../service/pupitri/PupitriImportService.java | 38 +- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + 4 files changed, 335 insertions(+), 203 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java index fd0b43e..305d03a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java @@ -22,20 +22,18 @@ package fr.ifremer.tutti.service.protocol; * #L% */ -import com.google.common.base.Charsets; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; -import com.google.common.collect.TreeMultimap; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinitions; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; +import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristic; +import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristics; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; @@ -45,7 +43,6 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.AbstractTuttiService; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; @@ -60,16 +57,20 @@ import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.nuiton.i18n.I18n.t; @@ -99,66 +100,76 @@ public class ProtocolImportExportService extends AbstractTuttiService { log.info("Will import protocol caracteristic from file: " + file); } - Multimap<CaracteristicType, String> ids = TreeMultimap.create(); - - CaracteristicRowModel csvModel = - new CaracteristicRowModel(getCsvSeparator(), - caracteristicMap); + List<String> lengthClassesPmfmIds = new ArrayList<>(protocol.getLengthClassesPmfmId()); + List<String> individualObservationPmfmId = new ArrayList<>(protocol.getIndividualObservationPmfmId()); + Map<String, MaturityCaracteristic> maturityCaracteristics = new LinkedHashMap<>(); + if (!protocol.isMaturityCaracteristicsEmpty()) { + maturityCaracteristics.putAll(Maps.uniqueIndex(protocol.getMaturityCaracteristics(), MaturityCaracteristic::getId)); + } - Reader reader = Files.newReader(file, Charsets.UTF_8); - try { + Map<String, CaracteristicMappingRow> rowsByCaracteristicId = new LinkedHashMap<>(); + if (!protocol.isCaracteristicMappingEmpty()) { + rowsByCaracteristicId.putAll(Maps.uniqueIndex(protocol.getCaracteristicMapping(), CaracteristicMappingRow::getPmfmId)); + } - Import<CaracteristicRow> importer = - Import.newImport(csvModel, reader); + try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { - try { + CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); + try (Import<CaracteristicRow> importer = Import.newImport(csvModel, reader)) { for (CaracteristicRow bean : importer) { CaracteristicType caracteristicType = bean.getPmfmType(); Caracteristic caracteristic = bean.getPmfm(); String id = caracteristic.getId(); - ids.put(caracteristicType, id); + switch (caracteristicType) { + + case INDIVIDUAL_OBSERVATION: + individualObservationPmfmId.add(id); + break; + case LENGTH_STEP: + lengthClassesPmfmIds.add(id); + break; + case MATURITY: + MaturityCaracteristic maturityCaracteristic = maturityCaracteristics.get(id); + if (maturityCaracteristic==null) { + maturityCaracteristic = MaturityCaracteristics.newMaturityCaracteristic(); + maturityCaracteristic.setId(id); + maturityCaracteristics.put(id, maturityCaracteristic); + } + break; + + case VESSEL_USE_FEATURE: + case GEAR_USE_FEATURE: + CaracteristicMappingRow row = rowsByCaracteristicId.get(id); + if (row == null) { + row = new CaracteristicMappingRowBean(); + row.setPmfmId(id); + row.setTab(caracteristicType.name()); + rowsByCaracteristicId.put(id, row); + } + break; + + } + } - importer.close(); - } finally { - IOUtils.closeQuietly(importer); + } - reader.close(); + } catch (ImportRuntimeException e) { throw e; } catch (Exception e) { throw new ImportRuntimeException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e); - } finally { - - IOUtils.closeQuietly(reader); - } - - protocol.setLengthClassesPmfmId( - mergeIds(protocol.getLengthClassesPmfmId(), - ids.get(CaracteristicType.LENGTH_STEP)) - ); - - protocol.setIndividualObservationPmfmId( - mergeIds(protocol.getIndividualObservationPmfmId(), - ids.get(CaracteristicType.INDIVIDUAL_OBSERVATION)) - ); - - List<CaracteristicMappingRow> caracteristicMapping = protocol.getCaracteristicMapping(); - if (caracteristicMapping == null) { - caracteristicMapping = new ArrayList<>(); } - Map<String, CaracteristicMappingRow> rowsByCaracteristicId = - new HashMap<>(Maps.uniqueIndex(caracteristicMapping, CaracteristicMappingRow::getPmfmId)); - - mergeCaracteristicMappingRows(ids, rowsByCaracteristicId, CaracteristicType.GEAR_USE_FEATURE); - mergeCaracteristicMappingRows(ids, rowsByCaracteristicId, CaracteristicType.VESSEL_USE_FEATURE); + protocol.setLengthClassesPmfmId(lengthClassesPmfmIds); + protocol.setIndividualObservationPmfmId(individualObservationPmfmId); + protocol.setMaturityCaracteristics(new ArrayList<>(maturityCaracteristics.values())); protocol.setCaracteristicMapping(new ArrayList<>(rowsByCaracteristicId.values())); + } - public void exportAllCaracteristic(File file, - Map<String, Caracteristic> caracteristicMap) { + public void exportAllCaracteristic(File file, Map<String, Caracteristic> caracteristicMap) { if (log.isInfoEnabled()) { log.info("Will export all caracteristics to file: " + file); @@ -167,24 +178,18 @@ public class ProtocolImportExportService extends AbstractTuttiService { PmfmIdToCaracteristicRowFunction function = new PmfmIdToCaracteristicRowFunction(caracteristicMap); - List<CaracteristicRow> rows = Lists.transform( - Lists.newArrayList(caracteristicMap.keySet()), function); + List<CaracteristicRow> rows = caracteristicMap.keySet().stream().map(function).collect(Collectors.toList()); - CaracteristicRowModel csvModel = - new CaracteristicRowModel(getCsvSeparator(), - caracteristicMap); + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { - BufferedWriter writer = null; - try { - writer = Files.newWriter(file, Charsets.UTF_8); + CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); Export export = Export.newExport(csvModel, rows); export.write(writer); - writer.close(); + } catch (Exception e) { throw new ImportRuntimeException(t("tutti.service.protocol.export.caracteristics.all.error", file), e); - } finally { - IOUtils.closeQuietly(writer); } + } public void exportProtocolCaracteristic(File file, @@ -195,44 +200,61 @@ public class ProtocolImportExportService extends AbstractTuttiService { log.info("Will export all caracteristics to file: " + file); } - PmfmIdToCaracteristicRowFunction function = - new PmfmIdToCaracteristicRowFunction(caracteristicMap); + List<CaracteristicRow> rows = getProtocolCaracteristicRowsToExport(protocol, caracteristicMap); + + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { + + CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); + Export export = Export.newExport(csvModel, rows); + export.write(writer); + + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.protocol.export.caracteristics.protocol.error", protocol.getName(), file), e); + } + } - List<CaracteristicRow> rows = Lists.newArrayList(); + private List<CaracteristicRow> getCaracteristicRows(CaracteristicType caracteristicType, Stream<String> ids, PmfmIdToCaracteristicRowFunction function) { + + return ids.map(function) + .map(s -> { + s.setPmfmType(caracteristicType); + return s; + }) + .collect(Collectors.toList()); + } + + private CaracteristicRow getCaracteristicRow(CaracteristicType caracteristicType, String id, PmfmIdToCaracteristicRowFunction function) { + CaracteristicRow row = function.apply(id); + row.setPmfmType(caracteristicType); + return row; + } + + private List<CaracteristicRow> getProtocolCaracteristicRowsToExport(TuttiProtocol protocol, Map<String, Caracteristic> caracteristicMap) { + + List<CaracteristicRow> rows = new ArrayList<>(); + + PmfmIdToCaracteristicRowFunction function = new PmfmIdToCaracteristicRowFunction(caracteristicMap); if (!protocol.isLengthClassesPmfmIdEmpty()) { - function.setType(CaracteristicType.LENGTH_STEP); + rows.addAll(getCaracteristicRows(CaracteristicType.LENGTH_STEP, protocol.getLengthClassesPmfmId().stream(), function)); + } - rows.addAll(Lists.transform(protocol.getLengthClassesPmfmId(), function)); + if (!protocol.isMaturityCaracteristicsEmpty()) { + rows.addAll(getCaracteristicRows(CaracteristicType.MATURITY, protocol.getMaturityCaracteristics().stream().map(MaturityCaracteristic::getId), function)); } if (!protocol.isCaracteristicMappingEmpty()) { for (CaracteristicMappingRow mappingRow : protocol.getCaracteristicMapping()) { - function.setType(CaracteristicType.valueOf(mappingRow.getTab())); - rows.add(function.apply(mappingRow.getPmfmId())); - } - } - if (!protocol.isIndividualObservationPmfmIdEmpty()) { + rows.add(getCaracteristicRow(CaracteristicType.valueOf(mappingRow.getTab()), mappingRow.getPmfmId(), function)); - function.setType(CaracteristicType.INDIVIDUAL_OBSERVATION); - rows.addAll(Lists.transform(protocol.getIndividualObservationPmfmId(), function)); + } } - CaracteristicRowModel csvModel = - new CaracteristicRowModel(getCsvSeparator(), - caracteristicMap); - BufferedWriter writer = null; - try { - writer = Files.newWriter(file, Charsets.UTF_8); - Export export = Export.newExport(csvModel, rows); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.protocol.export.caracteristics.protocol.error", protocol.getName(), file), e); - } finally { - IOUtils.closeQuietly(writer); + if (!protocol.isIndividualObservationPmfmIdEmpty()) { + rows.addAll(getCaracteristicRows(CaracteristicType.INDIVIDUAL_OBSERVATION, protocol.getIndividualObservationPmfmId().stream(), function)); } + return rows; } public List<Species> importProtocolSpecies(File file, @@ -246,7 +268,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { List<Species> result = new ArrayList<>(); - Map<Integer, SpeciesProtocol> ids = Maps.newLinkedHashMap(); + Map<Integer, SpeciesProtocol> ids = new LinkedHashMap<>(); if (!protocol.isSpeciesEmpty()) { @@ -258,7 +280,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { } - Map<Integer, SpeciesProtocol> benthosIds = Maps.newLinkedHashMap(); + Map<Integer, SpeciesProtocol> benthosIds = new LinkedHashMap<>(); if (!protocol.isBenthosEmpty()) { @@ -269,10 +291,9 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - SpeciesRowModel csvModel = SpeciesRowModel.forImport(getCsvSeparator(), caracteristicMap, speciesMap); - - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { + SpeciesRowModel csvModel = SpeciesRowModel.forImport(getCsvSeparator(), caracteristicMap, speciesMap); try (Import<SpeciesRow> importer = Import.newImport(csvModel, reader)) { Binder<SpeciesRow, SpeciesProtocol> binder = @@ -296,7 +317,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { sp = SpeciesProtocols.newSpeciesProtocol(); } binder.copy(bean, sp); - sp.setMandatorySampleCategoryId(Lists.newArrayList(bean.getMandatorySampleCategoryId())); + sp.setMandatorySampleCategoryId(new ArrayList<>(bean.getMandatorySampleCategoryId())); cleanRptData(sp); @@ -305,7 +326,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - List<SpeciesProtocol> values = Lists.newArrayList(ids.values()); + List<SpeciesProtocol> values = new ArrayList<>(ids.values()); protocol.setSpecies(values); return result; @@ -319,10 +340,10 @@ public class ProtocolImportExportService extends AbstractTuttiService { } /** - * @param file file to import - * @param protocol existing protocol + * @param file file to import + * @param protocol existing protocol * @param caracteristicMap dictonnary of caracteristics - * @param speciesMap dictionnary of species + * @param speciesMap dictionnary of species * @return The list of the species is not imported because they are already in the species */ public List<Species> importProtocolBenthos(File file, @@ -336,7 +357,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { List<Species> result = new ArrayList<>(); - Map<Integer, SpeciesProtocol> ids = Maps.newLinkedHashMap(); + Map<Integer, SpeciesProtocol> ids = new LinkedHashMap<>(); if (!protocol.isBenthosEmpty()) { @@ -347,7 +368,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - Map<Integer, SpeciesProtocol> speciesIds = Maps.newLinkedHashMap(); + Map<Integer, SpeciesProtocol> speciesIds = new LinkedHashMap<>(); if (!protocol.isSpeciesEmpty()) { @@ -358,10 +379,9 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - SpeciesRowModel csvModel = SpeciesRowModel.forImport(getCsvSeparator(), caracteristicMap, speciesMap); - - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { + SpeciesRowModel csvModel = SpeciesRowModel.forImport(getCsvSeparator(), caracteristicMap, speciesMap); try (Import<SpeciesRow> importer = Import.newImport(csvModel, reader)) { Binder<SpeciesRow, SpeciesProtocol> binder = @@ -392,7 +412,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - List<SpeciesProtocol> values = Lists.newArrayList(ids.values()); + List<SpeciesProtocol> values = new ArrayList<>(ids.values()); protocol.setBenthos(values); } @@ -412,7 +432,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { List<String> result = new ArrayList<>(headers.length); for (String header : headers) { if ((header.startsWith("\"") && header.endsWith("\"")) || - (header.startsWith("'") && header.endsWith("'"))) { + (header.startsWith("'") && header.endsWith("'"))) { header = header.substring(1, header.length() - 1); } result.add(header); @@ -430,16 +450,24 @@ public class ProtocolImportExportService extends AbstractTuttiService { log.info("Will export species to file: " + file); } - List<SpeciesRow> rows = Lists.newArrayList(); + List<SpeciesRow> rows; + + if (CollectionUtils.isEmpty(protocol)) { + + rows = null; + + } else { + + rows = protocol.stream().map(new SpeciesProtocolToSpeciesRowFunction(caracteristicMap, speciesMap)).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(protocol)) { - rows = Lists.transform(protocol, new SpeciesProtocolToSpeciesRowFunction(caracteristicMap, speciesMap)); } - SpeciesRowModel csvModel = SpeciesRowModel.forExport(getCsvSeparator()); - try (BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8)) { + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { + + SpeciesRowModel csvModel = SpeciesRowModel.forExport(getCsvSeparator()); Export export = Export.newExport(csvModel, rows); export.write(writer); + } catch (Exception e) { throw new ApplicationTechnicalException(t("tutti.service.protocol.export.species.error", file), e); } @@ -453,27 +481,35 @@ public class ProtocolImportExportService extends AbstractTuttiService { log.info("Will export benthos to file: " + file); } - List<SpeciesRow> rows = Lists.newArrayList(); + List<SpeciesRow> rows; + + if (CollectionUtils.isEmpty(protocol)) { + + rows = null; + + } else { + + rows = protocol.stream().map(new SpeciesProtocolToSpeciesRowFunction(caracteristicMap, speciesMap)).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(protocol)) { - rows = Lists.transform(protocol, new SpeciesProtocolToSpeciesRowFunction(caracteristicMap, speciesMap)); } - SpeciesRowModel csvModel = SpeciesRowModel.forExport(getCsvSeparator()); - try (BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8)) { + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { + + SpeciesRowModel csvModel = SpeciesRowModel.forExport(getCsvSeparator()); Export export = Export.newExport(csvModel, rows); export.write(writer); + } catch (Exception e) { throw new ApplicationTechnicalException(t("tutti.service.protocol.export.benthos.error", file), e); } } /** - * @param file file to import - * @param protocol existing protocol + * @param file file to import + * @param protocol existing protocol * @param allSpecies dictionnary of species * @return The list of the species is not imported because they are already in the species - * or not in the protocol species + * or not in the protocol species */ public Set<Species> importCalcifiedPiecesSamplings(File file, TuttiProtocol protocol, @@ -485,71 +521,129 @@ public class ProtocolImportExportService extends AbstractTuttiService { Set<Species> result = new HashSet<>(); - CalcifiedPiecesSamplingRowModel csvModel = CalcifiedPiecesSamplingRowModel.forImport(getCsvSeparator(), allSpecies); - - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { + CalcifiedPiecesSamplingRowModel csvModel = CalcifiedPiecesSamplingRowModel.forImport(getCsvSeparator(), allSpecies); try (Import<CalcifiedPiecesSamplingRow> importer = Import.newImport(csvModel, reader)) { - Collection<SpeciesProtocol> availableSpeciesProtocol = new ArrayList<>(); - if (!protocol.isSpeciesEmpty()) { - availableSpeciesProtocol.addAll(protocol.getSpecies()); - } - if (!protocol.isBenthosEmpty()) { - availableSpeciesProtocol.addAll(protocol.getBenthos()); - } - - Map<Integer, SpeciesProtocol>availableSpeciesProtocolMap = - availableSpeciesProtocol.stream() - .filter(SpeciesProtocol::isCalcifiedPiecesSamplingDefinitionEmpty) - .collect(Collectors.toMap(SpeciesProtocol::getSpeciesReferenceTaxonId, - java.util.function.Function.identity())); + Binder<CalcifiedPiecesSamplingRow, CalcifiedPiecesSamplingDefinition> binder = + BinderFactory.newBinder(CalcifiedPiecesSamplingRow.class, CalcifiedPiecesSamplingDefinition.class); + Map<Integer, SpeciesProtocol> availableSpeciesProtocolMap = availableSpeciesProtocolMap(protocol); - Multimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> cpsDefBTSpecies = ArrayListMultimap.create(); + // contient les définitions sans maturité définie groupées par leur espèce du protocole + ArrayListMultimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinitionsWithoutMaturity = ArrayListMultimap.create(); + // contient les définitions avec une maturité définie à vrai groupées par leur espèce du protocole + ArrayListMultimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinitionsWithTrueMaturity = ArrayListMultimap.create(); + // contient les définitions avec une maturité définie à faux groupées par leur espèce du protocole + ArrayListMultimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinitionsWithFalseMaturity = ArrayListMultimap.create(); - Binder<CalcifiedPiecesSamplingRow, CalcifiedPiecesSamplingDefinition> binder = - BinderFactory.newBinder(CalcifiedPiecesSamplingRow.class, CalcifiedPiecesSamplingDefinition.class); + // les espèces du protocole liés à des définitions avec ET sans maturité (ce qui est interdit) + Set<SpeciesProtocol> speciesProtocolsWithAndWithoutMaturity = new LinkedHashSet<>(); for (CalcifiedPiecesSamplingRow bean : importer) { Species species = bean.getSpecies(); - Integer id = species.getReferenceTaxonId(); - SpeciesProtocol sp = availableSpeciesProtocolMap.get(id); + if (result.contains(species)) { + + // already done + continue; + } + + SpeciesProtocol speciesProtocol = availableSpeciesProtocolMap.get(species.getReferenceTaxonId()); + + if (speciesProtocol == null) { - if (sp == null || sp.getLengthStepPmfmId() == null) { + if (log.isDebugEnabled()) { + log.debug("Skip species: " + species + ", not found in protocol."); + } result.add(species); + continue; - } else { + } - CalcifiedPiecesSamplingDefinition cpsDef = - CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(); + if (speciesProtocol.getLengthStepPmfmId() == null) { - binder.copy(bean, cpsDef); + if (log.isDebugEnabled()) { + log.debug("Skip species: " + species + ", found in protocol, but with no length class."); + } + result.add(species); + continue; - cpsDefBTSpecies.put(sp, cpsDef); } - } - cpsDefBTSpecies.keySet().forEach(speciesProtocol -> { + Multimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinitions; + + CalcifiedPiecesSamplingDefinition definition = CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(bean, binder); + + Boolean maturity = definition.getMaturity(); - Integer refTaxId = speciesProtocol.getSpeciesReferenceTaxonId(); - List<CalcifiedPiecesSamplingDefinition> cpsDefs = new ArrayList<>(cpsDefBTSpecies.get(speciesProtocol)); + if (maturity == null) { - if (cpsDefs.stream().allMatch(cpsDef -> cpsDef.getMaturity() == null)) { - checkCpfDefsValidity(refTaxId, cpsDefs); + if (log.isDebugEnabled()) { + log.debug("On species: " + species + ", add definition with no maturity defined (" + definition + ")"); + } + + calcifiedPiecesSamplingDefinitions = calcifiedPiecesSamplingDefinitionsWithoutMaturity; - } else if (!cpsDefs.stream().allMatch(cpsDef -> cpsDef.getMaturity() != null)) { - throw new ImportRuntimeException(t("tutti.service.protocol.import.cps.maturity.error", refTaxId)); + if (calcifiedPiecesSamplingDefinitionsWithTrueMaturity.containsKey(speciesProtocol) || + calcifiedPiecesSamplingDefinitionsWithFalseMaturity.containsKey(speciesProtocol)) { + + // espèce déjà référencé comme avec maturité renseigné, on marque l'espèce + speciesProtocolsWithAndWithoutMaturity.add(speciesProtocol); + } } else { - checkCpfDefsValidity(refTaxId, cpsDefs.stream().filter(CalcifiedPiecesSamplingDefinition::getMaturity).collect(Collectors.toList())); - checkCpfDefsValidity(refTaxId, cpsDefs.stream().filter(cpsDef -> !cpsDef.getMaturity()).collect(Collectors.toList())); + + if (calcifiedPiecesSamplingDefinitionsWithoutMaturity.containsKey(speciesProtocol)) { + + // espèce déjà référencé comme sans maturité renseignée, on marque l'espèce + speciesProtocolsWithAndWithoutMaturity.add(speciesProtocol); + } + + if (maturity) { + + if (log.isDebugEnabled()) { + log.debug("On species: " + species + ", add definition with maturity defined to True (" + definition + ")"); + } + + calcifiedPiecesSamplingDefinitions = calcifiedPiecesSamplingDefinitionsWithTrueMaturity; + } else { + + if (log.isDebugEnabled()) { + log.debug("On species: " + species + ", add definition with maturity defined to False (" + definition + ")"); + } + calcifiedPiecesSamplingDefinitions = calcifiedPiecesSamplingDefinitionsWithFalseMaturity; + } } - speciesProtocol.setCalcifiedPiecesSamplingDefinition(cpsDefs); - }); + calcifiedPiecesSamplingDefinitions.put(speciesProtocol, definition); + + } + + if (!speciesProtocolsWithAndWithoutMaturity.isEmpty()) { + + // on a trouvé des espèces invalide vis-vis de la maturité + // i.e des espèces ayant des définitions avec et sans maturité + String badSpecies = speciesProtocolsWithAndWithoutMaturity.stream() + .map(speciesProtocol -> { + String speciesToString = speciesProtocol.getSpeciesReferenceTaxonId() + ""; + if (speciesProtocol.getSpeciesSurveyCode() != null) { + speciesToString += " (" + speciesProtocol.getSpeciesSurveyCode() + " )"; + } + return speciesToString; + }) + .collect(Collectors.joining("", "<li>", "</li>")); + throw new ImportRuntimeException(t("tutti.service.protocol.import.cps.speciesWithMaturityAndWithoutMaturity.error", badSpecies)); + + } + + Comparator<CalcifiedPiecesSamplingDefinition> definitionsComparator = Comparator.comparing(CalcifiedPiecesSamplingDefinition::getMinSize); + + checkCpfDefinitionsValidity(definitionsComparator, calcifiedPiecesSamplingDefinitionsWithoutMaturity); + checkCpfDefinitionsValidity(definitionsComparator, calcifiedPiecesSamplingDefinitionsWithTrueMaturity); + checkCpfDefinitionsValidity(definitionsComparator, calcifiedPiecesSamplingDefinitionsWithFalseMaturity); } @@ -570,7 +664,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { log.info("Will export cps to file: " + file); } - List<CalcifiedPiecesSamplingRow> rows = Lists.newArrayList(); + List<CalcifiedPiecesSamplingRow> rows = new ArrayList<>(); Binder<CalcifiedPiecesSamplingDefinition, CalcifiedPiecesSamplingRow> binder = BinderFactory.newBinder(CalcifiedPiecesSamplingDefinition.class, CalcifiedPiecesSamplingRow.class); @@ -591,9 +685,9 @@ public class ProtocolImportExportService extends AbstractTuttiService { }); }); + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { - CalcifiedPiecesSamplingRowModel csvModel = CalcifiedPiecesSamplingRowModel.forExport(getCsvSeparator()); - try (BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8)) { + CalcifiedPiecesSamplingRowModel csvModel = CalcifiedPiecesSamplingRowModel.forExport(getCsvSeparator()); Export export = Export.newExport(csvModel, rows); export.write(writer); @@ -606,30 +700,19 @@ public class ProtocolImportExportService extends AbstractTuttiService { return context.getConfig().getCsvSeparator(); } - protected List<String> mergeIds(Collection<String> fromProtocol, Collection<String> fromImport) { - List<String> result = Lists.newArrayList(); - - if (CollectionUtils.isNotEmpty(fromProtocol)) { - fromProtocol.stream().filter(s -> !result.contains(s)).forEach(result::add); - } - fromImport.stream().filter(s -> !result.contains(s)).forEach(result::add); - return result; - } - - - protected void mergeCaracteristicMappingRows(Multimap<CaracteristicType, String> ids, - Map<String, CaracteristicMappingRow> rowsByCaracteristicId, - CaracteristicType type) { - for (String id : ids.get(type)) { - CaracteristicMappingRow row = rowsByCaracteristicId.get(id); - if (row == null) { - row = new CaracteristicMappingRowBean(); - row.setPmfmId(id); - rowsByCaracteristicId.put(id, row); - } - row.setTab(type.name()); - } - } +// protected void mergeCaracteristicMappingRows(Multimap<CaracteristicType, String> ids, +// Map<String, CaracteristicMappingRow> rowsByCaracteristicId, +// CaracteristicType type) { +// for (String id : ids.get(type)) { +// CaracteristicMappingRow row = rowsByCaracteristicId.get(id); +// if (row == null) { +// row = new CaracteristicMappingRowBean(); +// row.setPmfmId(id); +// rowsByCaracteristicId.put(id, row); +// } +// row.setTab(type.name()); +// } +// } protected void cleanRptData(SpeciesProtocol sp) { if (sp.withRtpMale()) { @@ -652,26 +735,51 @@ public class ProtocolImportExportService extends AbstractTuttiService { } } - protected void checkCpfDefsValidity(Integer referenceTaxonId, List<CalcifiedPiecesSamplingDefinition> cpsDefs) { - cpsDefs.sort(Comparator.comparing(CalcifiedPiecesSamplingDefinition::getMinSize)); - - Integer min = -1; - for (CalcifiedPiecesSamplingDefinition cpfDef : cpsDefs) { - if (cpfDef.getMinSize() != min + 1) { - throw new ImportRuntimeException(t("tutti.service.protocol.import.cps.interval.error", - referenceTaxonId, - cpfDef.getMaturity(), - min, - cpfDef.getMinSize())); + protected void checkCpfDefinitionsValidity(Comparator<CalcifiedPiecesSamplingDefinition> definitionsComparator, ArrayListMultimap<SpeciesProtocol, CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinitions) { + + calcifiedPiecesSamplingDefinitions.asMap().forEach((speciesProtocol, unsortedDefinitions) -> { + + List<CalcifiedPiecesSamplingDefinition> sortedDefinitions = new ArrayList<>(unsortedDefinitions); + sortedDefinitions.sort(definitionsComparator); + + Integer min = -1; + for (CalcifiedPiecesSamplingDefinition definition : sortedDefinitions) { + if (definition.getMinSize() != min + 1) { + + throw new ImportRuntimeException(t("tutti.service.protocol.import.cps.interval.error", + speciesProtocol.getSpeciesReferenceTaxonId(), + definition.getMaturity(), + min, + definition.getMinSize())); + } + min = definition.getMaxSize(); } - min = cpfDef.getMaxSize(); + + speciesProtocol.setCalcifiedPiecesSamplingDefinition(sortedDefinitions); + + }); + + } + + private Map<Integer, SpeciesProtocol> availableSpeciesProtocolMap(TuttiProtocol protocol) { + + Collection<SpeciesProtocol> availableSpeciesProtocol = new ArrayList<>(); + if (!protocol.isSpeciesEmpty()) { + availableSpeciesProtocol.addAll(protocol.getSpecies()); + } + if (!protocol.isBenthosEmpty()) { + availableSpeciesProtocol.addAll(protocol.getBenthos()); } + + return availableSpeciesProtocol.stream() + .filter(SpeciesProtocol::isCalcifiedPiecesSamplingDefinitionEmpty) + .collect(Collectors.toMap(SpeciesProtocol::getSpeciesReferenceTaxonId, Function.identity())); + + } private static class PmfmIdToCaracteristicRowFunction implements Function<String, CaracteristicRow> { - private CaracteristicType type; - private final Map<String, Caracteristic> caracteristicMap; public PmfmIdToCaracteristicRowFunction(Map<String, Caracteristic> caracteristicMap) { @@ -684,13 +792,9 @@ public class ProtocolImportExportService extends AbstractTuttiService { Preconditions.checkNotNull(caracteristic, "Could not find a caracteristic with id: " + input); CaracteristicRow result = new CaracteristicRow(); result.setPmfm(caracteristic); - result.setPmfmType(type); return result; } - public void setType(CaracteristicType type) { - this.type = type; - } } private static class SpeciesProtocolToSpeciesRowFunction implements Function<SpeciesProtocol, SpeciesRow> { @@ -721,7 +825,7 @@ public class ProtocolImportExportService extends AbstractTuttiService { } result.setSpecies(species); // always use a copy of list - result.setMandatorySampleCategoryId(Lists.newArrayList(input.getMandatorySampleCategoryId())); + result.setMandatorySampleCategoryId(new ArrayList<>(input.getMandatorySampleCategoryId())); return result; } } 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 28b0e9f..d388980 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 @@ -36,8 +36,9 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; @@ -59,7 +60,6 @@ import fr.ifremer.tutti.service.pupitri.csv.TrunkRowModel; import fr.ifremer.tutti.service.pupitri.report.PupitriImportReportModel; import fr.ifremer.tutti.service.pupitri.report.PupitriImportReportRow; import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.util.Weights; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -78,9 +78,13 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -514,13 +518,13 @@ public class PupitriImportService extends AbstractTuttiService { // especes à sexer Collection<String> surveyCodesToSex = - TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, - persistenceService.getSexCaracteristic()); + getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSexCaracteristic()); // especes à trier par taille Collection<String> surveyCodesToSize = - TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, - persistenceService.getSizeCategoryCaracteristic()); + getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSizeCategoryCaracteristic()); // especes à sexer et trier par taille Collection<String> surveyCodesToSexAndSize = CollectionUtils.intersection(surveyCodesToSex, surveyCodesToSize); @@ -674,4 +678,26 @@ public class PupitriImportService extends AbstractTuttiService { return fileWithHeaders; } + + private Collection<String> getSurveyCodeWhoseCategoryIsMandatory(TuttiProtocol protocol, Caracteristic caracteristic) { + + Objects.requireNonNull(caracteristic); + + Collection<String> surveyCodes; + + if (protocol == null) { + + surveyCodes = new HashSet<>(); + + } else { + + Predicate<SpeciesProtocol> predicate = SpeciesProtocols.speciesProtocolWhoseCategoryIsMandatoryPredicate(caracteristic); + Collection<SpeciesProtocol> speciesProtocols = protocol.getSpecies().stream().filter(predicate).collect(Collectors.toSet()); + + surveyCodes = speciesProtocols.stream().map(SpeciesProtocol::getSpeciesSurveyCode).collect(Collectors.toSet()); + + } + + return surveyCodes; + } } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 810d8ea..d7f82a5 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -261,6 +261,7 @@ tutti.service.protocol.import.benthos.error= tutti.service.protocol.import.cps.error= tutti.service.protocol.import.cps.interval.error= tutti.service.protocol.import.cps.maturity.error= +tutti.service.protocol.import.cps.speciesWithMaturityAndWithoutMaturity.error= tutti.service.protocol.import.species.error= tutti.service.protocol.import.taxonUsed.error= tutti.service.psion.import.attachment.comment= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 9b0cc67..5240ede 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -310,6 +310,7 @@ tutti.service.protocol.import.benthos.error=Erreur lors de l'import du benthos d tutti.service.protocol.import.cps.error=Erreur lors de l'import de l'algorithme de prélèvements des pièces calcifiées dans le protocole %s depuis le fichier %s tutti.service.protocol.import.cps.interval.error=Erreur sur la ligne espèces %s (%s) taille minimale attendue \: %s, réelle \: %s tutti.service.protocol.import.cps.maturity.error=Erreur sur la maturité pour l'espèces %s +tutti.service.protocol.import.cps.speciesWithMaturityAndWithoutMaturity.error=<html><body>Les espèces suivantes sont utilisées dans des définitions avec et sans maturité ce qui n'est pas autorisé \: <ul>%s</ul></body></html> tutti.service.protocol.import.species.error=Erreur lors de l'import des espèces du protocole %1s du fichier %2s tutti.service.protocol.import.taxonUsed.error=Le taxon référent d'id %s est déjà utilisé tutti.service.psion.import.attachment.comment=Import Psion du %s -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 9ec9d2e72efb59d121bb628cc4f51650f9add071 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 16:49:22 2016 +0200 Introduction d'un nouveau service qui fait les import-exports des caractéristiques du protocole + correction import/export maturités (See #8301) --- .../service/csv/StringSetParserFormatter.java | 58 +++++ .../fr/ifremer/tutti/service/csv/TuttiCsvUtil.java | 3 + .../FishingOperationImportService.java | 4 +- .../tutti/service/protocol/CaracteristicRow.java | 12 + .../service/protocol/CaracteristicRowModel.java | 60 +++-- .../ProtocolCaracteristicsImportExportService.java | 259 +++++++++++++++++++++ .../protocol/ProtocolImportExportService.java | 223 ------------------ ...tocolCaracteristicsImportExportServiceTest.java | 149 ++++++++++++ .../protocol/ProtocolImportExportServiceTest.java | 167 +++++++------ .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 5 + .../actions/ExportAllCaracteristicAction.java | 7 +- .../actions/ExportProtocolCaracteristicAction.java | 14 +- .../actions/ImportProtocolCaracteristicAction.java | 6 +- .../actions/LoadProtocolImportColumnsAction.java | 4 +- 14 files changed, 621 insertions(+), 350 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringSetParserFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringSetParserFormatter.java new file mode 100644 index 0000000..9bfad7f --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringSetParserFormatter.java @@ -0,0 +1,58 @@ +package fr.ifremer.tutti.service.csv; + +/* + * #%L + * Tutti :: Service + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2015 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ValueParserFormatter; + +import java.text.ParseException; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.5.1 + */ +public class StringSetParserFormatter implements ValueParserFormatter<Set<String>> { + + @Override + public String format(Set<String> value) { + return value.stream().collect(Collectors.joining("|")); + } + + @Override + public Set<String> parse(String value) throws ParseException { + Set<String> result = new LinkedHashSet<>(); + if (StringUtils.isNotBlank(value)) { + String[] split = value.split("\\s*\\|\\s*"); + Collections.addAll(result, split); + } + return result; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiCsvUtil.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiCsvUtil.java index 4e906e6..fd912e5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiCsvUtil.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiCsvUtil.java @@ -37,6 +37,7 @@ import org.nuiton.csv.ValueParserFormatter; import java.io.Serializable; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -209,6 +210,8 @@ public class TuttiCsvUtil extends Common { public static final ValueParserFormatter<List<Integer>> INTEGER_LIST_PARSER_FORMATTER = new IntegerListParserFormatter(); + public static final ValueParserFormatter<Set<String>> STRING_SET_PARSER_FORMATTER = new StringSetParserFormatter(); + public static <E extends Enum<E>> ValueParserFormatter<E> newEnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { return new fr.ifremer.tutti.service.csv.EnumByNameParserFormatter<>(enumType, mandatory); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/FishingOperationImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/FishingOperationImportService.java index 2b41bb8..5cdd365 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/FishingOperationImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/FishingOperationImportService.java @@ -33,7 +33,7 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiDataContext; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.AbstractImportErrorInfo; import org.nuiton.csv.Import2; @@ -75,7 +75,7 @@ public class FishingOperationImportService extends AbstractTuttiService { public void importCaracteristicsFromColumnFile(File columnsFile, FishingOperation fishingoperation) throws ImportFromColumnFileInvalidRowException, ImportFromColumnFileFishingOperationNotFoundException, ImportFromColumnFileMissingHeaderException, IOException { // Get import file headers - List<String> headers =getService(ProtocolImportExportService.class).loadProtocolCaracteristicsImportColumns(columnsFile); + List<String> headers =getService(ProtocolCaracteristicsImportExportService.class).loadProtocolCaracteristicsImportColumns(columnsFile); // Create import model ImportFromColumnFileModel importModel = new ImportFromColumnFileModel(';', new HashSet<>(headers), persistenceService, dataContext, fishingoperation); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRow.java index 3558c26..7b38ae9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRow.java @@ -25,6 +25,8 @@ import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; /** * Bean used as a row for import of {@link Caracteristic}. @@ -50,10 +52,14 @@ public class CaracteristicRow implements Serializable { public static final String PROPERTY_PMFM = "pmfm"; + public static final String PROPERTY_MATURE_STATE_IDS = "matureStateIds";; + protected CaracteristicType pmfmType; protected Caracteristic pmfm; + protected Set<String> matureStateIds = new LinkedHashSet<>(); + public Caracteristic getPmfm() { return pmfm; } @@ -90,5 +96,11 @@ public class CaracteristicRow implements Serializable { return getPmfm().getFractionName(); } + public Set<String> getMatureStateIds() { + return matureStateIds; + } + public void setMatureStateIds(Set<String> matureStateIds) { + this.matureStateIds = matureStateIds; + } } 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 5380f0e..d45a1ff 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 @@ -24,8 +24,8 @@ 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.csv.TuttiCsvUtil; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; import java.util.Map; @@ -37,34 +37,44 @@ import java.util.Map; */ public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> { - public CaracteristicRowModel(char separator, Map<String, Caracteristic> caracteristicMap) { - super(separator); + public static CaracteristicRowModel forImport(char separator, Map<String, Caracteristic> caracteristicMap) { + + CaracteristicRowModel result = new CaracteristicRowModel(separator); + + result.newForeignKeyColumn(CaracteristicRow.PROPERTY_PMFM_ID, + CaracteristicRow.PROPERTY_PMFM, + Caracteristic.class, + Caracteristic.PROPERTY_ID, + caracteristicMap); + + result.newMandatoryColumn(CaracteristicRow.PROPERTY_PMFM_TYPE, + CaracteristicRow.PROPERTY_PMFM_TYPE, + TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); - // import definition + result.newMandatoryColumn(CaracteristicRow.PROPERTY_MATURE_STATE_IDS, TuttiCsvUtil.STRING_SET_PARSER_FORMATTER); - newForeignKeyColumn(CaracteristicRow.PROPERTY_PMFM_ID, - CaracteristicRow.PROPERTY_PMFM, - Caracteristic.class, - Caracteristic.PROPERTY_ID, - caracteristicMap); + result.newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); + result.newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); + result.newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_FRACTION_NAME); + result.newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_METHOD_NAME); - newMandatoryColumn(CaracteristicRow.PROPERTY_PMFM_TYPE, - CaracteristicRow.PROPERTY_PMFM_TYPE, - TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); + return result; - newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); - newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); - newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_FRACTION_NAME); - newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_METHOD_NAME); + } + + public static CaracteristicRowModel forExport(char separator) { + + CaracteristicRowModel result = new CaracteristicRowModel(separator); - // export definition + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_ID); + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_TYPE, TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_FRACTION_NAME); + result.newColumnForExport(CaracteristicRow.PROPERTY_PMFM_METHOD_NAME); + result.newColumnForExport(CaracteristicRow.PROPERTY_MATURE_STATE_IDS, TuttiCsvUtil.STRING_SET_PARSER_FORMATTER); + return result; - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_ID); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_TYPE, TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_FRACTION_NAME); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_METHOD_NAME); } @Override @@ -72,4 +82,8 @@ public class CaracteristicRowModel extends AbstractTuttiImportExportModel<Caract return new CaracteristicRow(); } + private CaracteristicRowModel(char separator) { + super(separator); + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportService.java new file mode 100644 index 0000000..0152f9f --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportService.java @@ -0,0 +1,259 @@ +package fr.ifremer.tutti.service.protocol; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; +import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristic; +import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristics; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.AbstractTuttiService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ext.CsvReaders; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 11/05/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.5.1 + */ +public class ProtocolCaracteristicsImportExportService extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ProtocolCaracteristicsImportExportService.class); + + public void importProtocolCaracteristic(File file, + TuttiProtocol protocol, + Map<String, Caracteristic> caracteristicMap) throws IOException { + if (log.isInfoEnabled()) { + log.info("Will import protocol caracteristic from file: " + file); + } + + List<String> lengthClassesPmfmIds = new ArrayList<>(protocol.getLengthClassesPmfmId()); + List<String> individualObservationPmfmId = new ArrayList<>(protocol.getIndividualObservationPmfmId()); + Map<String, MaturityCaracteristic> maturityCaracteristics = new LinkedHashMap<>(); + if (!protocol.isMaturityCaracteristicsEmpty()) { + maturityCaracteristics.putAll(Maps.uniqueIndex(protocol.getMaturityCaracteristics(), MaturityCaracteristic::getId)); + } + + Map<String, CaracteristicMappingRow> rowsByCaracteristicId = new LinkedHashMap<>(); + if (!protocol.isCaracteristicMappingEmpty()) { + rowsByCaracteristicId.putAll(Maps.uniqueIndex(protocol.getCaracteristicMapping(), CaracteristicMappingRow::getPmfmId)); + } + + try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { + + CaracteristicRowModel csvModel = CaracteristicRowModel.forImport(getCsvSeparator(), caracteristicMap); + try (Import<CaracteristicRow> importer = Import.newImport(csvModel, reader)) { + + for (CaracteristicRow bean : importer) { + + CaracteristicType caracteristicType = bean.getPmfmType(); + Caracteristic caracteristic = bean.getPmfm(); + String id = caracteristic.getId(); + switch (caracteristicType) { + + case INDIVIDUAL_OBSERVATION: + individualObservationPmfmId.add(id); + break; + case LENGTH_STEP: + lengthClassesPmfmIds.add(id); + break; + case MATURITY: + MaturityCaracteristic maturityCaracteristic = maturityCaracteristics.get(id); + if (maturityCaracteristic == null) { + maturityCaracteristic = MaturityCaracteristics.newMaturityCaracteristic(); + maturityCaracteristic.setId(id); + maturityCaracteristic.setMatureStateIds(bean.getMatureStateIds()); + maturityCaracteristics.put(id, maturityCaracteristic); + } + break; + + case VESSEL_USE_FEATURE: + case GEAR_USE_FEATURE: + CaracteristicMappingRow row = rowsByCaracteristicId.get(id); + if (row == null) { + row = new CaracteristicMappingRowBean(); + row.setPmfmId(id); + row.setTab(caracteristicType.name()); + rowsByCaracteristicId.put(id, row); + } + break; + + } + + } + + } + + } catch (ImportRuntimeException e) { + throw e; + } catch (Exception e) { + throw new ImportRuntimeException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e); + } + + protocol.setLengthClassesPmfmId(lengthClassesPmfmIds); + protocol.setIndividualObservationPmfmId(individualObservationPmfmId); + protocol.setMaturityCaracteristics(new ArrayList<>(maturityCaracteristics.values())); + protocol.setCaracteristicMapping(new ArrayList<>(rowsByCaracteristicId.values())); + + } + + public void exportAllCaracteristic(File file, Map<String, Caracteristic> caracteristicMap) { + + if (log.isInfoEnabled()) { + log.info("Will export all caracteristics to file: " + file); + } + + PmfmIdToCaracteristicRowFunction function = new PmfmIdToCaracteristicRowFunction(caracteristicMap); + + List<CaracteristicRow> rows = caracteristicMap.keySet().stream().map(function).collect(Collectors.toList()); + + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { + + CaracteristicRowModel csvModel = CaracteristicRowModel.forExport(getCsvSeparator()); + Export export = Export.newExport(csvModel, rows); + export.write(writer); + + } catch (Exception e) { + throw new ImportRuntimeException(t("tutti.service.protocol.export.caracteristics.all.error", file), e); + } + + } + + public void exportProtocolCaracteristic(File file, + TuttiProtocol protocol, + Map<String, Caracteristic> caracteristicMap) { + + if (log.isInfoEnabled()) { + log.info("Will export all caracteristics to file: " + file); + } + + List<CaracteristicRow> rows = new ArrayList<>(); + + PmfmIdToCaracteristicRowFunction function = new PmfmIdToCaracteristicRowFunction(caracteristicMap); + + if (!protocol.isLengthClassesPmfmIdEmpty()) { + for (String pmfmId : protocol.getLengthClassesPmfmId()) { + + CaracteristicRow row = getCaracteristicRow(CaracteristicType.LENGTH_STEP, pmfmId, function); + rows.add(row); + + } + } + + if (!protocol.isIndividualObservationPmfmIdEmpty()) { + for (String pmfmId : protocol.getIndividualObservationPmfmId()) { + + CaracteristicRow row = getCaracteristicRow(CaracteristicType.INDIVIDUAL_OBSERVATION, pmfmId, function); + rows.add(row); + + } + + } + + if (!protocol.isMaturityCaracteristicsEmpty()) { + + for (MaturityCaracteristic maturityCaracteristic : protocol.getMaturityCaracteristics()) { + + CaracteristicRow row = getCaracteristicRow(CaracteristicType.MATURITY, maturityCaracteristic.getId(), function); + if (!maturityCaracteristic.isMatureStateIdsEmpty()) { + row.setMatureStateIds(new LinkedHashSet<>(maturityCaracteristic.getMatureStateIds())); + } + rows.add(row); + + } + + } + + if (!protocol.isCaracteristicMappingEmpty()) { + for (CaracteristicMappingRow mappingRow : protocol.getCaracteristicMapping()) { + + CaracteristicRow row = getCaracteristicRow(CaracteristicType.valueOf(mappingRow.getTab()), mappingRow.getPmfmId(), function); + rows.add(row); + + } + } + + try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { + + CaracteristicRowModel csvModel = CaracteristicRowModel.forExport(getCsvSeparator()); + Export export = Export.newExport(csvModel, rows); + export.write(writer); + + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.protocol.export.caracteristics.protocol.error", protocol.getName(), file), e); + } + } + + public List<String> loadProtocolCaracteristicsImportColumns(File columnsFile) throws IOException { + + String[] headers = CsvReaders.getHeader(columnsFile, ';'); + List<String> result = new ArrayList<>(headers.length); + for (String header : headers) { + if ((header.startsWith("\"") && header.endsWith("\"")) || + (header.startsWith("'") && header.endsWith("'"))) { + header = header.substring(1, header.length() - 1); + } + result.add(header); + } + Collections.sort(result); + return result; + + } + + private CaracteristicRow getCaracteristicRow(CaracteristicType caracteristicType, String id, PmfmIdToCaracteristicRowFunction function) { + CaracteristicRow row = function.apply(id); + row.setPmfmType(caracteristicType); + return row; + } + + + private static class PmfmIdToCaracteristicRowFunction implements Function<String, CaracteristicRow> { + + private final Map<String, Caracteristic> caracteristicMap; + + public PmfmIdToCaracteristicRowFunction(Map<String, Caracteristic> caracteristicMap) { + this.caracteristicMap = caracteristicMap; + } + + @Override + public CaracteristicRow apply(String input) { + Caracteristic caracteristic = caracteristicMap.get(input); + Preconditions.checkNotNull(caracteristic, "Could not find a caracteristic with id: " + input); + CaracteristicRow result = new CaracteristicRow(); + result.setPmfm(caracteristic); + return result; + } + + } + + private char getCsvSeparator() { + return context.getConfig().getCsvSeparator(); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java index 305d03a..72b619d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java @@ -24,16 +24,10 @@ package fr.ifremer.tutti.service.protocol; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinitions; -import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; -import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; -import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; -import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristic; -import fr.ifremer.tutti.persistence.entities.protocol.MaturityCaracteristics; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; @@ -48,19 +42,16 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; import org.nuiton.csv.Import; import org.nuiton.csv.ImportRuntimeException; -import org.nuiton.csv.ext.CsvReaders; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.io.BufferedWriter; import java.io.File; -import java.io.IOException; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.LinkedHashMap; @@ -70,7 +61,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; import static org.nuiton.i18n.I18n.t; @@ -93,170 +83,6 @@ public class ProtocolImportExportService extends AbstractTuttiService { return TuttiProtocols.fromFile(file); } - public void importProtocolCaracteristic(File file, - TuttiProtocol protocol, - Map<String, Caracteristic> caracteristicMap) throws IOException { - if (log.isInfoEnabled()) { - log.info("Will import protocol caracteristic from file: " + file); - } - - List<String> lengthClassesPmfmIds = new ArrayList<>(protocol.getLengthClassesPmfmId()); - List<String> individualObservationPmfmId = new ArrayList<>(protocol.getIndividualObservationPmfmId()); - Map<String, MaturityCaracteristic> maturityCaracteristics = new LinkedHashMap<>(); - if (!protocol.isMaturityCaracteristicsEmpty()) { - maturityCaracteristics.putAll(Maps.uniqueIndex(protocol.getMaturityCaracteristics(), MaturityCaracteristic::getId)); - } - - Map<String, CaracteristicMappingRow> rowsByCaracteristicId = new LinkedHashMap<>(); - if (!protocol.isCaracteristicMappingEmpty()) { - rowsByCaracteristicId.putAll(Maps.uniqueIndex(protocol.getCaracteristicMapping(), CaracteristicMappingRow::getPmfmId)); - } - - try (Reader reader = Files.newReader(file, StandardCharsets.UTF_8)) { - - CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); - try (Import<CaracteristicRow> importer = Import.newImport(csvModel, reader)) { - - for (CaracteristicRow bean : importer) { - - CaracteristicType caracteristicType = bean.getPmfmType(); - Caracteristic caracteristic = bean.getPmfm(); - String id = caracteristic.getId(); - switch (caracteristicType) { - - case INDIVIDUAL_OBSERVATION: - individualObservationPmfmId.add(id); - break; - case LENGTH_STEP: - lengthClassesPmfmIds.add(id); - break; - case MATURITY: - MaturityCaracteristic maturityCaracteristic = maturityCaracteristics.get(id); - if (maturityCaracteristic==null) { - maturityCaracteristic = MaturityCaracteristics.newMaturityCaracteristic(); - maturityCaracteristic.setId(id); - maturityCaracteristics.put(id, maturityCaracteristic); - } - break; - - case VESSEL_USE_FEATURE: - case GEAR_USE_FEATURE: - CaracteristicMappingRow row = rowsByCaracteristicId.get(id); - if (row == null) { - row = new CaracteristicMappingRowBean(); - row.setPmfmId(id); - row.setTab(caracteristicType.name()); - rowsByCaracteristicId.put(id, row); - } - break; - - } - - } - - } - - } catch (ImportRuntimeException e) { - throw e; - } catch (Exception e) { - throw new ImportRuntimeException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e); - } - - protocol.setLengthClassesPmfmId(lengthClassesPmfmIds); - protocol.setIndividualObservationPmfmId(individualObservationPmfmId); - protocol.setMaturityCaracteristics(new ArrayList<>(maturityCaracteristics.values())); - protocol.setCaracteristicMapping(new ArrayList<>(rowsByCaracteristicId.values())); - - } - - public void exportAllCaracteristic(File file, Map<String, Caracteristic> caracteristicMap) { - - if (log.isInfoEnabled()) { - log.info("Will export all caracteristics to file: " + file); - } - - PmfmIdToCaracteristicRowFunction function = - new PmfmIdToCaracteristicRowFunction(caracteristicMap); - - List<CaracteristicRow> rows = caracteristicMap.keySet().stream().map(function).collect(Collectors.toList()); - - try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { - - CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); - Export export = Export.newExport(csvModel, rows); - export.write(writer); - - } catch (Exception e) { - throw new ImportRuntimeException(t("tutti.service.protocol.export.caracteristics.all.error", file), e); - } - - } - - public void exportProtocolCaracteristic(File file, - TuttiProtocol protocol, - Map<String, Caracteristic> caracteristicMap) { - - if (log.isInfoEnabled()) { - log.info("Will export all caracteristics to file: " + file); - } - - List<CaracteristicRow> rows = getProtocolCaracteristicRowsToExport(protocol, caracteristicMap); - - try (BufferedWriter writer = Files.newWriter(file, StandardCharsets.UTF_8)) { - - CaracteristicRowModel csvModel = new CaracteristicRowModel(getCsvSeparator(), caracteristicMap); - Export export = Export.newExport(csvModel, rows); - export.write(writer); - - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.protocol.export.caracteristics.protocol.error", protocol.getName(), file), e); - } - } - - private List<CaracteristicRow> getCaracteristicRows(CaracteristicType caracteristicType, Stream<String> ids, PmfmIdToCaracteristicRowFunction function) { - - return ids.map(function) - .map(s -> { - s.setPmfmType(caracteristicType); - return s; - }) - .collect(Collectors.toList()); - } - - private CaracteristicRow getCaracteristicRow(CaracteristicType caracteristicType, String id, PmfmIdToCaracteristicRowFunction function) { - CaracteristicRow row = function.apply(id); - row.setPmfmType(caracteristicType); - return row; - } - - private List<CaracteristicRow> getProtocolCaracteristicRowsToExport(TuttiProtocol protocol, Map<String, Caracteristic> caracteristicMap) { - - List<CaracteristicRow> rows = new ArrayList<>(); - - PmfmIdToCaracteristicRowFunction function = new PmfmIdToCaracteristicRowFunction(caracteristicMap); - - if (!protocol.isLengthClassesPmfmIdEmpty()) { - rows.addAll(getCaracteristicRows(CaracteristicType.LENGTH_STEP, protocol.getLengthClassesPmfmId().stream(), function)); - } - - if (!protocol.isMaturityCaracteristicsEmpty()) { - rows.addAll(getCaracteristicRows(CaracteristicType.MATURITY, protocol.getMaturityCaracteristics().stream().map(MaturityCaracteristic::getId), function)); - } - - if (!protocol.isCaracteristicMappingEmpty()) { - for (CaracteristicMappingRow mappingRow : protocol.getCaracteristicMapping()) { - - rows.add(getCaracteristicRow(CaracteristicType.valueOf(mappingRow.getTab()), mappingRow.getPmfmId(), function)); - - } - } - - if (!protocol.isIndividualObservationPmfmIdEmpty()) { - rows.addAll(getCaracteristicRows(CaracteristicType.INDIVIDUAL_OBSERVATION, protocol.getIndividualObservationPmfmId().stream(), function)); - } - return rows; - } - public List<Species> importProtocolSpecies(File file, TuttiProtocol protocol, Map<String, Caracteristic> caracteristicMap, @@ -426,22 +252,6 @@ public class ProtocolImportExportService extends AbstractTuttiService { return result; } - public List<String> loadProtocolCaracteristicsImportColumns(File columnsFile) throws IOException { - - String[] headers = CsvReaders.getHeader(columnsFile, ';'); - List<String> result = new ArrayList<>(headers.length); - for (String header : headers) { - if ((header.startsWith("\"") && header.endsWith("\"")) || - (header.startsWith("'") && header.endsWith("'"))) { - header = header.substring(1, header.length() - 1); - } - result.add(header); - } - Collections.sort(result); - return result; - - } - public void exportProtocolSpecies(File file, List<SpeciesProtocol> protocol, Map<String, Caracteristic> caracteristicMap, @@ -700,20 +510,6 @@ public class ProtocolImportExportService extends AbstractTuttiService { return context.getConfig().getCsvSeparator(); } -// protected void mergeCaracteristicMappingRows(Multimap<CaracteristicType, String> ids, -// Map<String, CaracteristicMappingRow> rowsByCaracteristicId, -// CaracteristicType type) { -// for (String id : ids.get(type)) { -// CaracteristicMappingRow row = rowsByCaracteristicId.get(id); -// if (row == null) { -// row = new CaracteristicMappingRowBean(); -// row.setPmfmId(id); -// rowsByCaracteristicId.put(id, row); -// } -// row.setTab(type.name()); -// } -// } - protected void cleanRptData(SpeciesProtocol sp) { if (sp.withRtpMale()) { Rtp rtpMale = sp.getRtpMale(); @@ -778,25 +574,6 @@ public class ProtocolImportExportService extends AbstractTuttiService { } - private static class PmfmIdToCaracteristicRowFunction implements Function<String, CaracteristicRow> { - - private final Map<String, Caracteristic> caracteristicMap; - - public PmfmIdToCaracteristicRowFunction(Map<String, Caracteristic> caracteristicMap) { - this.caracteristicMap = caracteristicMap; - } - - @Override - public CaracteristicRow apply(String input) { - Caracteristic caracteristic = caracteristicMap.get(input); - Preconditions.checkNotNull(caracteristic, "Could not find a caracteristic with id: " + input); - CaracteristicRow result = new CaracteristicRow(); - result.setPmfm(caracteristic); - return result; - } - - } - private static class SpeciesProtocolToSpeciesRowFunction implements Function<SpeciesProtocol, SpeciesRow> { private final Map<String, Species> speciesMap; diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportServiceTest.java new file mode 100644 index 0000000..17d3c0e --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolCaracteristicsImportExportServiceTest.java @@ -0,0 +1,149 @@ +package fr.ifremer.tutti.service.protocol; + +import com.google.common.base.Charsets; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristics; +import fr.ifremer.tutti.service.ServiceDbResource; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.csv.ImportRuntimeException; + +import java.io.File; +import java.util.Map; + +import static fr.ifremer.tutti.service.protocol.ProtocolImportExportServiceTest.ALL_CARACTERISTIC_FILE_CONTENT; +import static fr.ifremer.tutti.service.protocol.ProtocolImportExportServiceTest.PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT; +import static fr.ifremer.tutti.service.protocol.ProtocolImportExportServiceTest.PROTOCOL_CARACTERISTIC_FILE_CONTENT; + +/** + * Created on 11/05/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ProtocolCaracteristicsImportExportServiceTest { + + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); + + protected ProtocolCaracteristicsImportExportService service; + + protected File datadirectory; + + @Before + public void setUp() throws Exception { + + dbResource.getConfig().setCsvSeparator(';'); + + service = dbResource.getServiceContext().getService(ProtocolCaracteristicsImportExportService.class); + + datadirectory = dbResource.getConfig().getDataDirectory(); + } + + @Test + public void importProtocolCaracteristic() throws Exception { + + File file = new File(datadirectory, "importProtocolCaracteristic.csv"); + + Files.createParentDirs(file); + + Files.write(PROTOCOL_CARACTERISTIC_FILE_CONTENT, file, Charsets.UTF_8); + + TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); + Map<String, Caracteristic> caracteristicMap = createCaracteristics(); + + service.importProtocolCaracteristic(file, protocol, caracteristicMap); + + Assert.assertEquals(Lists.newArrayList("1"), + protocol.getLengthClassesPmfmId()); + Assert.assertEquals(Lists.newArrayList( + TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), + TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) + ), + protocol.getCaracteristicMapping()); + Assert.assertEquals(Lists.newArrayList("4"), + protocol.getIndividualObservationPmfmId()); + } + + @Test(expected = ImportRuntimeException.class) + public void importProtocolCaracteristicMissingCaracteristicType() throws Exception { + + File file = new File(datadirectory, "importProtocolCaracteristicMissingCaracteristicType.csv"); + + Files.createParentDirs(file); + + Files.write(PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT, file, Charsets.UTF_8); + + TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); + Map<String, Caracteristic> caracteristicMap = createCaracteristics(); + + service.importProtocolCaracteristic(file, protocol, caracteristicMap); + } + + @Test + public void exportProtocolCaracteristic() throws Exception { + + File file = new File(datadirectory, "exportProtocolCaracteristic.csv"); + + Files.createParentDirs(file); + + Map<String, Caracteristic> caracteristicMap = createCaracteristics(); + TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); + + protocol.setLengthClassesPmfmId(Lists.newArrayList("1")); + protocol.setCaracteristicMapping(Lists.newArrayList( + TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), + TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) + )); + protocol.setIndividualObservationPmfmId(Lists.newArrayList("4")); + + Assert.assertFalse(file.exists()); + service.exportProtocolCaracteristic(file, protocol, caracteristicMap); + + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(PROTOCOL_CARACTERISTIC_FILE_CONTENT, exportFileToString); + } + + @Test + public void exportAllCaracteristic() throws Exception { + + File file = new File(datadirectory, "exportAllCaracteristic.csv"); + + Files.createParentDirs(file); + + Map<String, Caracteristic> caracteristicMap = createCaracteristics(); + + Assert.assertFalse(file.exists()); + service.exportAllCaracteristic(file, caracteristicMap); + + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(ALL_CARACTERISTIC_FILE_CONTENT, exportFileToString); + } + + protected Map<String, Caracteristic> createCaracteristics() { + Map<String, Caracteristic> result = Maps.newTreeMap(); + for (int i = 1; i < 6; i++) { + Caracteristic c = Caracteristics.newCaracteristic(); + c.setId("" + i); + c.setParameterName("parameterName" + i); + c.setMatrixName("matrixName" + i); + c.setFractionName("fractionName" + i); + c.setMethodName("methodName" + i); + result.put(i + "", c); + } + return result; + } + +} \ No newline at end of file diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java index e663643..4ab96b0 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java @@ -41,7 +41,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.nuiton.csv.ImportRuntimeException; import java.io.File; import java.util.Map; @@ -370,89 +369,89 @@ public class ProtocolImportExportServiceTest { Assert.assertEquals(33f, b2.getRtpFemale().getB(), 0.01); } - //FIXME - @Test - public void importProtocolCaracteristic() throws Exception { - - File file = new File(datadirectory, "importProtocolCaracteristic.csv"); - - Files.createParentDirs(file); - - Files.write(PROTOCOL_CARACTERISTIC_FILE_CONTENT, file, Charsets.UTF_8); - - TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); - Map<String, Caracteristic> caracteristicMap = createCaracteristics(); - - service.importProtocolCaracteristic(file, protocol, caracteristicMap); - - Assert.assertEquals(Lists.newArrayList("1"), - protocol.getLengthClassesPmfmId()); - Assert.assertEquals(Lists.newArrayList( - TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), - TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) - ), - protocol.getCaracteristicMapping()); - Assert.assertEquals(Lists.newArrayList("4"), - protocol.getIndividualObservationPmfmId()); - } - - @Test(expected = ImportRuntimeException.class) - public void importProtocolCaracteristicMissingCaracteristicType() throws Exception { - - File file = new File(datadirectory, "importProtocolCaracteristicMissingCaracteristicType.csv"); - - Files.createParentDirs(file); - - Files.write(PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT, file, Charsets.UTF_8); - - TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); - Map<String, Caracteristic> caracteristicMap = createCaracteristics(); - - service.importProtocolCaracteristic(file, protocol, caracteristicMap); - } - @Test - public void exportProtocolCaracteristic() throws Exception { - - File file = new File(datadirectory, "exportProtocolCaracteristic.csv"); - - Files.createParentDirs(file); - - Map<String, Caracteristic> caracteristicMap = createCaracteristics(); - TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); - - protocol.setLengthClassesPmfmId(Lists.newArrayList("1")); - protocol.setCaracteristicMapping(Lists.newArrayList( - TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), - TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) - )); - protocol.setIndividualObservationPmfmId(Lists.newArrayList("4")); - - Assert.assertFalse(file.exists()); - service.exportProtocolCaracteristic(file, protocol, caracteristicMap); - - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(PROTOCOL_CARACTERISTIC_FILE_CONTENT, exportFileToString); - } - - @Test - public void exportAllCaracteristic() throws Exception { - - File file = new File(datadirectory, "exportAllCaracteristic.csv"); - - Files.createParentDirs(file); - - Map<String, Caracteristic> caracteristicMap = createCaracteristics(); - - Assert.assertFalse(file.exists()); - service.exportAllCaracteristic(file, caracteristicMap); - - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(ALL_CARACTERISTIC_FILE_CONTENT, exportFileToString); - } +// //FIXME +// @Test +// public void importProtocolCaracteristic() throws Exception { +// +// File file = new File(datadirectory, "importProtocolCaracteristic.csv"); +// +// Files.createParentDirs(file); +// +// Files.write(PROTOCOL_CARACTERISTIC_FILE_CONTENT, file, Charsets.UTF_8); +// +// TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); +// Map<String, Caracteristic> caracteristicMap = createCaracteristics(); +// +// service.importProtocolCaracteristic(file, protocol, caracteristicMap); +// +// Assert.assertEquals(Lists.newArrayList("1"), +// protocol.getLengthClassesPmfmId()); +// Assert.assertEquals(Lists.newArrayList( +// TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), +// TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) +// ), +// protocol.getCaracteristicMapping()); +// Assert.assertEquals(Lists.newArrayList("4"), +// protocol.getIndividualObservationPmfmId()); +// } +// +// @Test(expected = ImportRuntimeException.class) +// public void importProtocolCaracteristicMissingCaracteristicType() throws Exception { +// +// File file = new File(datadirectory, "importProtocolCaracteristicMissingCaracteristicType.csv"); +// +// Files.createParentDirs(file); +// +// Files.write(PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT, file, Charsets.UTF_8); +// +// TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); +// Map<String, Caracteristic> caracteristicMap = createCaracteristics(); +// +// service.importProtocolCaracteristic(file, protocol, caracteristicMap); +// } +// @Test +// public void exportProtocolCaracteristic() throws Exception { +// +// File file = new File(datadirectory, "exportProtocolCaracteristic.csv"); +// +// Files.createParentDirs(file); +// +// Map<String, Caracteristic> caracteristicMap = createCaracteristics(); +// TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); +// +// protocol.setLengthClassesPmfmId(Lists.newArrayList("1")); +// protocol.setCaracteristicMapping(Lists.newArrayList( +// TuttiProtocols.caracteristicMappingRow("2", CaracteristicType.VESSEL_USE_FEATURE), +// TuttiProtocols.caracteristicMappingRow("3", CaracteristicType.GEAR_USE_FEATURE) +// )); +// protocol.setIndividualObservationPmfmId(Lists.newArrayList("4")); +// +// Assert.assertFalse(file.exists()); +// service.exportProtocolCaracteristic(file, protocol, caracteristicMap); +// +// Assert.assertTrue(file.exists()); +// +// String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); +// Assert.assertEquals(PROTOCOL_CARACTERISTIC_FILE_CONTENT, exportFileToString); +// } +// +// @Test +// public void exportAllCaracteristic() throws Exception { +// +// File file = new File(datadirectory, "exportAllCaracteristic.csv"); +// +// Files.createParentDirs(file); +// +// Map<String, Caracteristic> caracteristicMap = createCaracteristics(); +// +// Assert.assertFalse(file.exists()); +// service.exportAllCaracteristic(file, caracteristicMap); +// +// Assert.assertTrue(file.exists()); +// +// String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); +// Assert.assertEquals(ALL_CARACTERISTIC_FILE_CONTENT, exportFileToString); +// } @Test public void importProtocolSpecies() throws Exception { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 9206978..e650447 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -48,6 +48,7 @@ import fr.ifremer.tutti.service.export.toconfirmreport.ToConfirmReportService; import fr.ifremer.tutti.service.genericformat.GenericFormatExportService; import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; import fr.ifremer.tutti.service.operationimport.FishingOperationImportService; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import fr.ifremer.tutti.service.psionimport.PsionImportService; import fr.ifremer.tutti.service.pupitri.PupitriExportService; @@ -690,6 +691,10 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage return serviceContext.getService(ProtocolImportExportService.class); } + public ProtocolCaracteristicsImportExportService getProtocolCaracteristicsImportExportService() { + return serviceContext.getService(ProtocolCaracteristicsImportExportService.class); + } + public PupitriImportService getPupitriImportService() { return serviceContext.getService(PupitriImportService.class); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportAllCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportAllCaracteristicAction.java index a638635..2d9fc1e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportAllCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportAllCaracteristicAction.java @@ -23,11 +23,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -87,8 +87,7 @@ public class ExportAllCaracteristicAction extends LongActionSupport<EditProtocol } // export protocol caracteristics - ProtocolImportExportService service = - getContext().getTuttiProtocolImportExportService(); + ProtocolCaracteristicsImportExportService service = getContext().getProtocolCaracteristicsImportExportService(); service.exportAllCaracteristic(file, getModel().getAllCaracteristic()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java index 6efc909..8c26d66 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java @@ -24,11 +24,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -91,14 +91,10 @@ public class ExportProtocolCaracteristicAction extends LongActionSupport<EditPro TuttiProtocol protocol = getModel().toEntity(); // export protocol caracteristics - ProtocolImportExportService service = - getContext().getTuttiProtocolImportExportService(); + ProtocolCaracteristicsImportExportService service = getContext().getProtocolCaracteristicsImportExportService(); - service.exportProtocolCaracteristic(file, - protocol, - getModel().getAllCaracteristic()); + service.exportProtocolCaracteristic(file, protocol, getModel().getAllCaracteristic()); - sendMessage(t("tutti.flash.info.caractristic.exported.from.protocol", - file)); + sendMessage(t("tutti.flash.info.caractristic.exported.from.protocol", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java index 073f393..fe129ef 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java @@ -25,12 +25,12 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -96,7 +96,7 @@ public class ImportProtocolCaracteristicAction extends LongActionSupport<EditPro // bind to a protocol protocol = model.toEntity(); - ProtocolImportExportService service = getContext().getTuttiProtocolImportExportService(); + ProtocolCaracteristicsImportExportService service = getContext().getProtocolCaracteristicsImportExportService(); service.importProtocolCaracteristic(file, protocol, model.getAllCaracteristic()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/LoadProtocolImportColumnsAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/LoadProtocolImportColumnsAction.java index e4c9b5e..e8bdfea 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/LoadProtocolImportColumnsAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/LoadProtocolImportColumnsAction.java @@ -24,7 +24,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; * #L% */ -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.protocol.ProtocolCaracteristicsImportExportService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; @@ -70,7 +70,7 @@ public class LoadProtocolImportColumnsAction extends LongActionSupport<EditProto @Override public void doAction() throws Exception { - ProtocolImportExportService service = getContext().getTuttiProtocolImportExportService(); + ProtocolCaracteristicsImportExportService service = getContext().getProtocolCaracteristicsImportExportService(); List<String> columns = service.loadProtocolCaracteristicsImportColumns(columnsFile); if (log.isInfoEnabled()) { log.info("Detected columns: "+columns); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 00a57515f451e3aecffb54892180a744a5728c5a Merge: 88fd133 9ec9d2e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 11 16:49:32 2016 +0200 Livrable #8301 Livrable #8302 Merge branch 'feature/8302' into develop .../CalcifiedPiecesSamplingDefinitions.java | 7 + .../protocol/CaracteristicMappingRows.java | 7 +- .../entities/protocol/CaracteristicType.java | 1 + .../entities/protocol/SpeciesProtocols.java | 20 +- .../entities/protocol/TuttiProtocols.java | 58 +-- .../service/csv/StringSetParserFormatter.java | 58 +++ .../fr/ifremer/tutti/service/csv/TuttiCsvUtil.java | 3 + .../FishingOperationImportService.java | 4 +- .../tutti/service/protocol/CaracteristicRow.java | 12 + .../service/protocol/CaracteristicRowModel.java | 60 ++- .../ProtocolCaracteristicsImportExportService.java | 259 +++++++++++ .../protocol/ProtocolImportExportService.java | 481 ++++++++------------- .../service/pupitri/PupitriImportService.java | 38 +- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + ...tocolCaracteristicsImportExportServiceTest.java | 149 +++++++ .../protocol/ProtocolImportExportServiceTest.java | 167 ++++--- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 5 + .../actions/ExportAllCaracteristicAction.java | 7 +- .../actions/ExportProtocolCaracteristicAction.java | 14 +- .../actions/ImportProtocolCaracteristicAction.java | 38 +- .../actions/LoadProtocolImportColumnsAction.java | 4 +- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 +- 23 files changed, 900 insertions(+), 498 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm