1 package fr.ifremer.tutti.service.protocol;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.collect.Sets;
26 import fr.ifremer.tutti.persistence.entities.protocol.Rtps;
27 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
28 import fr.ifremer.tutti.persistence.entities.referential.Species;
29 import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel;
30 import fr.ifremer.tutti.service.csv.ForeignKeyParserFormatter;
31 import fr.ifremer.tutti.service.csv.StringParserFormatter;
32 import fr.ifremer.tutti.service.csv.TuttiCsvUtil;
33 import org.nuiton.csv.Common;
34 import org.nuiton.csv.ImportRuntimeException;
35
36 import java.text.ParseException;
37 import java.util.Map;
38 import java.util.Set;
39
40 import static org.nuiton.i18n.I18n.t;
41
42
43
44
45
46
47
48 public class SpeciesRowModel extends AbstractTuttiImportExportModel<SpeciesRow> {
49
50 public static SpeciesRowModel forExport(char separator) {
51
52 SpeciesRowModel result = new SpeciesRowModel(separator);
53 result.newColumnForExport(SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID, Common.INTEGER);
54 result.newColumnForExport(SpeciesRow.PROPERTY_SPECIES_REF_TAX_CODE);
55 result.newColumnForExport(SpeciesRow.PROPERTY_SPECIES_NAME);
56 result.newColumnForExport(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE);
57 result.newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_ID);
58 result.newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_PARAMETER_NAME);
59 result.newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_MATRIX_NAME);
60 result.newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_FRACTION_NAME);
61 result.newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_METHOD_NAME);
62 result.newColumnForExport(SpeciesRow.PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, TuttiCsvUtil.INTEGER_LIST_PARSER_FORMATTER);
63 result.newColumnForExport(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
64 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_MALE_A, Common.DOUBLE);
65 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_MALE_B, Common.FLOAT);
66 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_FEMALE_A, Common.DOUBLE);
67 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_FEMALE_B, Common.FLOAT);
68 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_UNDEFINED_A, Common.DOUBLE);
69 result.newColumnForExport(SpeciesRow.PROPERTY_RTP_UNDEFINED_B, Common.FLOAT);
70 return result;
71 }
72
73 public static SpeciesRowModel forImport(char separator,
74 Map<String, Caracteristic> caracteristicMap,
75 Map<String, Species> speciesMap) {
76
77 SpeciesRowModel result = new SpeciesRowModel(separator);
78 result.newMandatoryColumn(
79 SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID,
80 SpeciesRow.PROPERTY_SPECIES,
81 new ForeignKeyParserFormatter<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) {
82
83 Set<Integer> taxonIds = Sets.newHashSet();
84
85 @Override
86 public Species parse(String value) throws ParseException {
87 Species species = super.parse(value);
88 Integer referenceTaxonId = species.getReferenceTaxonId();
89 if (taxonIds.contains(referenceTaxonId)) {
90
91
92 throw new ImportRuntimeException(t("tutti.service.protocol.import.taxonUsed.error", referenceTaxonId));
93 }
94 taxonIds.add(referenceTaxonId);
95 return species;
96 }
97 });
98
99 result.newOptionalColumn(SpeciesRow.PROPERTY_SPECIES_REF_TAX_CODE);
100 result.newOptionalColumn(SpeciesRow.PROPERTY_SPECIES_NAME);
101
102 result.newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_ID,
103 SpeciesRow.PROPERTY_LENGTH_STEP_PMFM,
104 Caracteristic.class,
105 Caracteristic.PROPERTY_ID,
106 caracteristicMap);
107
108 result.newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_PARAMETER_NAME);
109 result.newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_MATRIX_NAME);
110 result.newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_FRACTION_NAME);
111 result.newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_METHOD_NAME);
112 result.newIgnoredColumn(SpeciesRow.PROPERTY_CALCIFY_SAMPLE_ENABLED);
113 result.newIgnoredColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED);
114
115
116
117 result.newMandatoryColumn(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE, new StringParserFormatter(null, true));
118 result.newMandatoryColumn(SpeciesRow.PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, TuttiCsvUtil.INTEGER_LIST_PARSER_FORMATTER);
119 result.newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN);
120 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_MALE_A, Common.DOUBLE);
121 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_MALE_B, Common.FLOAT);
122 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_FEMALE_A, Common.DOUBLE);
123 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_FEMALE_B, Common.FLOAT);
124 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_UNDEFINED_A, Common.DOUBLE);
125 result.newOptionalColumn(SpeciesRow.PROPERTY_RTP_UNDEFINED_B, Common.FLOAT);
126 return result;
127 }
128
129 public SpeciesRowModel(char separator) {
130 super(separator);
131 }
132
133 @Override
134 public SpeciesRow newEmptyInstance() {
135 SpeciesRow speciesRow = new SpeciesRow();
136 speciesRow.setRtpMale(Rtps.newRtp());
137 speciesRow.setRtpFemale(Rtps.newRtp());
138 speciesRow.setRtpUndefined(Rtps.newRtp());
139 return speciesRow;
140 }
141
142 }