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