1 package fr.ifremer.tutti.persistence.entities.referential;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import com.google.common.base.Function;
28 import com.google.common.base.Preconditions;
29 import com.google.common.base.Predicate;
30 import com.google.common.collect.Maps;
31 import com.google.common.collect.Multimap;
32 import com.google.common.collect.Multimaps;
33 import org.apache.commons.lang3.StringUtils;
34 import org.nuiton.jaxx.application.ApplicationBusinessException;
35
36 import java.util.Comparator;
37 import java.util.Map;
38
39 import static org.nuiton.i18n.I18n.t;
40
41 public class Speciess extends AbstractSpeciess {
42
43 public static final Predicate<Species> IS_TEMPORARY = Speciess::isTemporary;
44
45
46
47
48
49
50
51
52 public static boolean isTemporary(Species species) {
53
54 Preconditions.checkNotNull(species);
55 Preconditions.checkNotNull(species.getId());
56
57 return TuttiReferentialEntities.isStatusTemporary(species) && isTemporaryId(species.getIdAsInt());
58
59 }
60
61
62
63
64
65
66
67
68 public static boolean isTemporaryId(Integer id) {
69
70 Preconditions.checkNotNull(id);
71 return id < 0;
72
73 }
74
75 public static final Comparator<Species> SPECIES_BY_NAME_COMPARATOR = (o1, o2) -> {
76 if (o1 == null) {
77 return -1;
78 }
79 if (o2 == null) {
80 return 1;
81 }
82 return o1.getName().compareTo(o2.getName());
83 };
84
85 public static final Function<Species, String> GET_REFERECE_TAXON_ID = input -> String.valueOf(input.getReferenceTaxonId());
86
87 public static final Function<Species, Integer> GET_REFERECE_TAXON_ID_AS_INT = Species::getReferenceTaxonId;
88
89 public static final Function<Species, String> GET_REF_TAX_CODE = input -> String.valueOf(input.getRefTaxCode());
90
91 public static final Function<Species, String> GET_SURVEY_CODE = input -> String.valueOf(input.getSurveyCode());
92
93 public static final Function<Species, String> GET_NAME = Species::getName;
94
95
96
97
98
99
100
101
102
103
104
105
106 public static Map<String, Species> splitReferenceSpeciesByReferenceTaxonId(Iterable<Species> list) {
107
108 for (Species species : list) {
109 Preconditions.checkArgument(species.isReferenceTaxon(), "L'espèce " + species.getId() + " n'est pas référente.");
110 }
111
112 return Maps.uniqueIndex(list, GET_REFERECE_TAXON_ID);
113 }
114
115 public static Multimap<String, Species> splitByReferenceTaxonId(Iterable<Species> list) {
116 return Multimaps.index(list, GET_REFERECE_TAXON_ID);
117 }
118
119 public static Multimap<String, Species> splitByRefTaxCode(Iterable<Species> list) {
120 return Multimaps.index(list, GET_REF_TAX_CODE);
121 }
122
123 public static Multimap<String, Species> splitBySurveyCode(Iterable<Species> list) {
124 return Multimaps.index(list, GET_SURVEY_CODE);
125 }
126
127
128
129
130
131
132
133 public static String getSurveyCodeOrRefTaxCode(Species species) {
134 String code = species.getSurveyCode();
135
136 if (code == null) {
137
138
139 code = species.getRefTaxCode();
140 }
141
142 if (StringUtils.isEmpty(code)) {
143
144
145 throw new ApplicationBusinessException(t("tutti.persistence.error.species.withNoSurveyCodeOrRefTaxCode", species.getReferenceTaxonId(), species.getName()));
146
147 }
148
149 return code;
150 }
151 }