1 // license-header java merge-point
2 //
3 // Attention: Generated code! Do not modify by hand!
4 // Generated by: hibernate/HibernateEntity.vsl in andromda-hibernate-cartridge.
5 //
6 package fr.ifremer.quadrige3.core.dao.administration.strategy;
7
8 /*-
9 * #%L
10 * Quadrige3 Core :: Client API
11 * %%
12 * Copyright (C) 2017 - 2024 Ifremer
13 * %%
14 * This program is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Affero General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU Affero General Public License
25 * along with this program. If not, see <http://www.gnu.org/licenses/>.
26 * #L%
27 */
28 import fr.ifremer.quadrige3.core.dao.administration.user.Department;
29 import fr.ifremer.quadrige3.core.dao.referential.Frequency;
30 import fr.ifremer.quadrige3.core.dao.referential.monitoringLocation.MonitoringLocation;
31 import fr.ifremer.quadrige3.core.dao.referential.taxon.ReferenceTaxon;
32 import fr.ifremer.quadrige3.core.dao.referential.taxon.TaxonGroup;
33 import java.io.Serializable;
34 import java.sql.Timestamp;
35 import java.util.Collection;
36 import java.util.HashSet;
37
38 /**
39 * Identifie les conditions d'application locale de la stratégie pour une période donnée.
40 */
41 // HibernateEntity.vsl annotations merge-point
42 public abstract class AppliedStrategy
43 implements Serializable, Comparable<AppliedStrategy>
44 {
45 /**
46 * The serial version UID of this class. Needed for serialization.
47 */
48 private static final long serialVersionUID = 5163852483680502024L;
49
50 // Generate 2 attributes
51 private Integer appliedStratId;
52
53 /**
54 *
55 * @return this.appliedStratId Integer
56 */
57 public Integer getAppliedStratId()
58 {
59 return this.appliedStratId;
60 }
61
62 /**
63 *
64 * @param appliedStratIdIn Integer
65 */
66 public void setAppliedStratId(Integer appliedStratIdIn)
67 {
68 this.appliedStratId = appliedStratIdIn;
69 }
70
71 private Timestamp updateDt;
72
73 /**
74 * Date de modification de l'objet, mise à jour par le système
75 * @return this.updateDt Timestamp
76 */
77 public Timestamp getUpdateDt()
78 {
79 return this.updateDt;
80 }
81
82 /**
83 * Date de modification de l'objet, mise à jour par le système
84 * @param updateDtIn Timestamp
85 */
86 public void setUpdateDt(Timestamp updateDtIn)
87 {
88 this.updateDt = updateDtIn;
89 }
90
91 // Generate 8 associations
92 private TaxonGroup taxonGroup;
93
94 /**
95 * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
96 * @return this.taxonGroup TaxonGroup
97 */
98 public TaxonGroup getTaxonGroup()
99 {
100 return this.taxonGroup;
101 }
102
103 /**
104 * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
105 * @param taxonGroupIn TaxonGroup
106 */
107 public void setTaxonGroup(TaxonGroup taxonGroupIn)
108 {
109 this.taxonGroup = taxonGroupIn;
110 }
111
112 private ReferenceTaxon referenceTaxon;
113
114 /**
115 * Liste des taxons qui sont la référence.
116 * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
117 * et ne
118 * plus l'être par la suite.
119 * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
120 * référents à un moment mais ne peuvent plus l'être par la suite.
121 * Le fonctionnement dans la table TAXON_NAME est le suivant :
122 * - REF_TAXON_ID est toujours renseigné
123 * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
124 * s'agit d'un
125 * taxon virtuel)
126 * - sinon c'est un synonyme
127 * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
128 * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
129 * NB : c'était le comportement initialement prévu.
130 * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
131 * le taxon
132 * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
133 * et les
134 * résultats qu'il pouvait avoir).
135 * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
136 * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
137 * alors
138 * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
139 * synonymes, résultats...
140 * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
141 * qui
142 * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
143 * pour
144 * R2 est nécessaire
145 * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
146 * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
147 * référents
148 * @return this.referenceTaxon ReferenceTaxon
149 */
150 public ReferenceTaxon getReferenceTaxon()
151 {
152 return this.referenceTaxon;
153 }
154
155 /**
156 * Liste des taxons qui sont la référence.
157 * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
158 * et ne
159 * plus l'être par la suite.
160 * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
161 * référents à un moment mais ne peuvent plus l'être par la suite.
162 * Le fonctionnement dans la table TAXON_NAME est le suivant :
163 * - REF_TAXON_ID est toujours renseigné
164 * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
165 * s'agit d'un
166 * taxon virtuel)
167 * - sinon c'est un synonyme
168 * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
169 * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
170 * NB : c'était le comportement initialement prévu.
171 * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
172 * le taxon
173 * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
174 * et les
175 * résultats qu'il pouvait avoir).
176 * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
177 * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
178 * alors
179 * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
180 * synonymes, résultats...
181 * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
182 * qui
183 * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
184 * pour
185 * R2 est nécessaire
186 * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
187 * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
188 * référents
189 * @param referenceTaxonIn ReferenceTaxon
190 */
191 public void setReferenceTaxon(ReferenceTaxon referenceTaxonIn)
192 {
193 this.referenceTaxon = referenceTaxonIn;
194 }
195
196 private Collection<AppliedPeriod> appliedPeriods = new HashSet<AppliedPeriod>();
197
198 /**
199 * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
200 * @return this.appliedPeriods Collection<AppliedPeriod>
201 */
202 public Collection<AppliedPeriod> getAppliedPeriods()
203 {
204 return this.appliedPeriods;
205 }
206
207 /**
208 * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
209 * @param appliedPeriodsIn Collection<AppliedPeriod>
210 */
211 public void setAppliedPeriods(Collection<AppliedPeriod> appliedPeriodsIn)
212 {
213 this.appliedPeriods = appliedPeriodsIn;
214 }
215
216 /**
217 * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
218 * @param elementToAdd AppliedPeriod
219 * @return <tt>true</tt> if this collection changed as a result of the
220 * call
221 */
222 public boolean addAppliedPeriods(AppliedPeriod elementToAdd)
223 {
224 return this.appliedPeriods.add(elementToAdd);
225 }
226
227 /**
228 * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
229 * @param elementToRemove AppliedPeriod
230 * @return <tt>true</tt> if this collection changed as a result of the
231 * call
232 */
233 public boolean removeAppliedPeriods(AppliedPeriod elementToRemove)
234 {
235 return this.appliedPeriods.remove(elementToRemove);
236 }
237
238 private MonitoringLocation monitoringLocation;
239
240 /**
241 * Liste les lieux associés aux programmes de surveillance.
242 * @return this.monitoringLocation MonitoringLocation
243 */
244 public MonitoringLocation getMonitoringLocation()
245 {
246 return this.monitoringLocation;
247 }
248
249 /**
250 * Liste les lieux associés aux programmes de surveillance.
251 * @param monitoringLocationIn MonitoringLocation
252 */
253 public void setMonitoringLocation(MonitoringLocation monitoringLocationIn)
254 {
255 this.monitoringLocation = monitoringLocationIn;
256 }
257
258 private Strategy strategy;
259
260 /**
261 * Définie les paramètres à mesurer dans un programme particulier.
262 * @return this.strategy Strategy
263 */
264 public Strategy getStrategy()
265 {
266 return this.strategy;
267 }
268
269 /**
270 * Définie les paramètres à mesurer dans un programme particulier.
271 * @param strategyIn Strategy
272 */
273 public void setStrategy(Strategy strategyIn)
274 {
275 this.strategy = strategyIn;
276 }
277
278 private Frequency frequency;
279
280 /**
281 * Liste des fréquences d'application des stratégies.
282 * @return this.frequency Frequency
283 */
284 public Frequency getFrequency()
285 {
286 return this.frequency;
287 }
288
289 /**
290 * Liste des fréquences d'application des stratégies.
291 * @param frequencyIn Frequency
292 */
293 public void setFrequency(Frequency frequencyIn)
294 {
295 this.frequency = frequencyIn;
296 }
297
298 private Department department;
299
300 /**
301 * Liste les départements ou services auxquels sont rattachés les agents
302 * @return this.department Department
303 */
304 public Department getDepartment()
305 {
306 return this.department;
307 }
308
309 /**
310 * Liste les départements ou services auxquels sont rattachés les agents
311 * @param departmentIn Department
312 */
313 public void setDepartment(Department departmentIn)
314 {
315 this.department = departmentIn;
316 }
317
318 private Collection<PmfmAppliedStrategy> pmfmAppliedStrategies = new HashSet<PmfmAppliedStrategy>();
319
320 /**
321 * PMSF associés à une stratégie pour un lieu données.
322 * @return this.pmfmAppliedStrategies Collection<PmfmAppliedStrategy>
323 */
324 public Collection<PmfmAppliedStrategy> getPmfmAppliedStrategies()
325 {
326 return this.pmfmAppliedStrategies;
327 }
328
329 /**
330 * PMSF associés à une stratégie pour un lieu données.
331 * @param pmfmAppliedStrategiesIn Collection<PmfmAppliedStrategy>
332 */
333 public void setPmfmAppliedStrategies(Collection<PmfmAppliedStrategy> pmfmAppliedStrategiesIn)
334 {
335 this.pmfmAppliedStrategies = pmfmAppliedStrategiesIn;
336 }
337
338 /**
339 * PMSF associés à une stratégie pour un lieu données.
340 * @param elementToAdd PmfmAppliedStrategy
341 * @return <tt>true</tt> if this collection changed as a result of the
342 * call
343 */
344 public boolean addPmfmAppliedStrategies(PmfmAppliedStrategy elementToAdd)
345 {
346 return this.pmfmAppliedStrategies.add(elementToAdd);
347 }
348
349 /**
350 * PMSF associés à une stratégie pour un lieu données.
351 * @param elementToRemove PmfmAppliedStrategy
352 * @return <tt>true</tt> if this collection changed as a result of the
353 * call
354 */
355 public boolean removePmfmAppliedStrategies(PmfmAppliedStrategy elementToRemove)
356 {
357 return this.pmfmAppliedStrategies.remove(elementToRemove);
358 }
359
360 /**
361 * Returns <code>true</code> if the argument is an AppliedStrategy instance and all identifiers for this entity
362 * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
363 */
364 @Override
365 public boolean equals(Object object)
366 {
367 if (this == object)
368 {
369 return true;
370 }
371 if (!(object instanceof AppliedStrategy))
372 {
373 return false;
374 }
375 final AppliedStrategy that = (AppliedStrategy)object;
376 if (this.appliedStratId == null || that.getAppliedStratId() == null || !this.appliedStratId.equals(that.getAppliedStratId()))
377 {
378 return false;
379 }
380 return true;
381 }
382
383 /**
384 * Returns a hash code based on this entity's identifiers.
385 */
386 @Override
387 public int hashCode()
388 {
389 int hashCode = 0;
390 hashCode = 29 * hashCode + (this.appliedStratId == null ? 0 : this.appliedStratId.hashCode());
391
392 return hashCode;
393 }
394
395 /**
396 * Constructs new instances of {@link AppliedStrategy}.
397 */
398 public static final class Factory
399 {
400 /**
401 * Constructs a new instance of {@link AppliedStrategy}.
402 * @return new AppliedStrategyImpl()
403 */
404 public static AppliedStrategy newInstance()
405 {
406 return new AppliedStrategyImpl();
407 }
408
409 /**
410 * Constructs a new instance of {@link AppliedStrategy}, taking all required and/or
411 * read-only properties as arguments, except for identifiers.
412 * @param monitoringLocation MonitoringLocation
413 * @param strategy Strategy
414 * @return newInstance
415 */
416 public static AppliedStrategy newInstance(MonitoringLocation monitoringLocation, Strategy strategy)
417 {
418 final AppliedStrategy entity = new AppliedStrategyImpl();
419 entity.setMonitoringLocation(monitoringLocation);
420 entity.setStrategy(strategy);
421 return entity;
422 }
423
424 /**
425 * Constructs a new instance of {@link AppliedStrategy}, taking all possible properties
426 * (except the identifier(s))as arguments.
427 * @param updateDt Timestamp
428 * @param taxonGroup TaxonGroup
429 * @param referenceTaxon ReferenceTaxon
430 * @param appliedPeriods Collection<AppliedPeriod>
431 * @param monitoringLocation MonitoringLocation
432 * @param strategy Strategy
433 * @param frequency Frequency
434 * @param department Department
435 * @param pmfmAppliedStrategies Collection<PmfmAppliedStrategy>
436 * @return newInstance AppliedStrategy
437 */
438 public static AppliedStrategy newInstance(Timestamp updateDt, TaxonGroup taxonGroup, ReferenceTaxon referenceTaxon, Collection<AppliedPeriod> appliedPeriods, MonitoringLocation monitoringLocation, Strategy strategy, Frequency frequency, Department department, Collection<PmfmAppliedStrategy> pmfmAppliedStrategies)
439 {
440 final AppliedStrategy entity = new AppliedStrategyImpl();
441 entity.setUpdateDt(updateDt);
442 entity.setTaxonGroup(taxonGroup);
443 entity.setReferenceTaxon(referenceTaxon);
444 entity.setAppliedPeriods(appliedPeriods);
445 entity.setMonitoringLocation(monitoringLocation);
446 entity.setStrategy(strategy);
447 entity.setFrequency(frequency);
448 entity.setDepartment(department);
449 entity.setPmfmAppliedStrategies(pmfmAppliedStrategies);
450 return entity;
451 }
452 }
453
454 /**
455 * @see Comparable#compareTo
456 */
457 public int compareTo(AppliedStrategy o)
458 {
459 int cmp = 0;
460 if (this.getAppliedStratId() != null)
461 {
462 cmp = this.getAppliedStratId().compareTo(o.getAppliedStratId());
463 }
464 else
465 {
466 if (this.getUpdateDt() != null)
467 {
468 cmp = (cmp != 0 ? cmp : this.getUpdateDt().compareTo(o.getUpdateDt()));
469 }
470 }
471 return cmp;
472 }
473 // HibernateEntity.vsl merge-point
474 // AppliedStrategy.java merge-point
475 }