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.data.sample;
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.program.Program;
30 import fr.ifremer.quadrige2.core.dao.administration.user.Department;
31 import fr.ifremer.quadrige2.core.dao.data.samplingoperation.SamplingOperation;
32 import fr.ifremer.quadrige2.core.dao.referential.QualityFlag;
33 import fr.ifremer.quadrige2.core.dao.referential.Unit;
34 import fr.ifremer.quadrige2.core.dao.referential.pmfm.Matrix;
35 import fr.ifremer.quadrige2.core.dao.referential.taxon.ReferenceTaxon;
36 import fr.ifremer.quadrige2.core.dao.referential.taxon.TaxonGroup;
37 import java.io.Serializable;
38 import java.sql.Timestamp;
39 import java.util.Collection;
40 import java.util.Date;
41 import java.util.HashSet;
42
43 /**
44 * Liste les échantillons prélevés lors d'un passage sur un lieu de surveillance.
45 */
46 // HibernateEntity.vsl annotations merge-point
47 public abstract class Sample
48 implements Serializable, Comparable<Sample>
49 {
50 /**
51 * The serial version UID of this class. Needed for serialization.
52 */
53 private static final long serialVersionUID = 8025414281931891516L;
54
55 // Generate 12 attributes
56 private Integer sampleId;
57
58 /**
59 * Identifiant interne de l'échantillon
60 * @return this.sampleId Integer
61 */
62 public Integer getSampleId()
63 {
64 return this.sampleId;
65 }
66
67 /**
68 * Identifiant interne de l'échantillon
69 * @param sampleIdIn Integer
70 */
71 public void setSampleId(Integer sampleIdIn)
72 {
73 this.sampleId = sampleIdIn;
74 }
75
76 private String sampleLb;
77
78 /**
79 * Mmnémonique de l'échantillon
80 * @return this.sampleLb String
81 */
82 public String getSampleLb()
83 {
84 return this.sampleLb;
85 }
86
87 /**
88 * Mmnémonique de l'échantillon
89 * @param sampleLbIn String
90 */
91 public void setSampleLb(String sampleLbIn)
92 {
93 this.sampleLb = sampleLbIn;
94 }
95
96 private Double sampleNumberIndiv;
97
98 /**
99 * Nombre d'individus constituant l'échantillon. Ce nombre permet de connaître le nombre
100 * d'individus constituant la grille de saisie.
101 * @return this.sampleNumberIndiv Double
102 */
103 public Double getSampleNumberIndiv()
104 {
105 return this.sampleNumberIndiv;
106 }
107
108 /**
109 * Nombre d'individus constituant l'échantillon. Ce nombre permet de connaître le nombre
110 * d'individus constituant la grille de saisie.
111 * @param sampleNumberIndivIn Double
112 */
113 public void setSampleNumberIndiv(Double sampleNumberIndivIn)
114 {
115 this.sampleNumberIndiv = sampleNumberIndivIn;
116 }
117
118 private Float sampleSize;
119
120 /**
121 * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
122 * aussi s'agir du nombre d'individus entrant dans l'homogénat.
123 * @return this.sampleSize Float
124 */
125 public Float getSampleSize()
126 {
127 return this.sampleSize;
128 }
129
130 /**
131 * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
132 * aussi s'agir du nombre d'individus entrant dans l'homogénat.
133 * @param sampleSizeIn Float
134 */
135 public void setSampleSize(Float sampleSizeIn)
136 {
137 this.sampleSize = sampleSizeIn;
138 }
139
140 private String sampleCm;
141
142 /**
143 * Commentaire de l'échantillon
144 * @return this.sampleCm String
145 */
146 public String getSampleCm()
147 {
148 return this.sampleCm;
149 }
150
151 /**
152 * Commentaire de l'échantillon
153 * @param sampleCmIn String
154 */
155 public void setSampleCm(String sampleCmIn)
156 {
157 this.sampleCm = sampleCmIn;
158 }
159
160 private Date sampleControlDt;
161
162 /**
163 * Date de contrôle de l'échantillon
164 * @return this.sampleControlDt Date
165 */
166 public Date getSampleControlDt()
167 {
168 return this.sampleControlDt;
169 }
170
171 /**
172 * Date de contrôle de l'échantillon
173 * @param sampleControlDtIn Date
174 */
175 public void setSampleControlDt(Date sampleControlDtIn)
176 {
177 this.sampleControlDt = sampleControlDtIn;
178 }
179
180 private Date sampleValidDt;
181
182 /**
183 * Date de validation de l'échantillon
184 * @return this.sampleValidDt Date
185 */
186 public Date getSampleValidDt()
187 {
188 return this.sampleValidDt;
189 }
190
191 /**
192 * Date de validation de l'échantillon
193 * @param sampleValidDtIn Date
194 */
195 public void setSampleValidDt(Date sampleValidDtIn)
196 {
197 this.sampleValidDt = sampleValidDtIn;
198 }
199
200 private Date sampleQualifDt;
201
202 /**
203 * Date de qualification de l'échantillon
204 * @return this.sampleQualifDt Date
205 */
206 public Date getSampleQualifDt()
207 {
208 return this.sampleQualifDt;
209 }
210
211 /**
212 * Date de qualification de l'échantillon
213 * @param sampleQualifDtIn Date
214 */
215 public void setSampleQualifDt(Date sampleQualifDtIn)
216 {
217 this.sampleQualifDt = sampleQualifDtIn;
218 }
219
220 private String sampleQualifCm;
221
222 /**
223 * Commentaire de qualification
224 * @return this.sampleQualifCm String
225 */
226 public String getSampleQualifCm()
227 {
228 return this.sampleQualifCm;
229 }
230
231 /**
232 * Commentaire de qualification
233 * @param sampleQualifCmIn String
234 */
235 public void setSampleQualifCm(String sampleQualifCmIn)
236 {
237 this.sampleQualifCm = sampleQualifCmIn;
238 }
239
240 private String sampleScope;
241
242 /**
243 * Vrai si l'étape de qualification est globale, faux si des éléments fils ou résultats n'ont
244 * pas la même étape
245 * @return this.sampleScope String
246 */
247 public String getSampleScope()
248 {
249 return this.sampleScope;
250 }
251
252 /**
253 * Vrai si l'étape de qualification est globale, faux si des éléments fils ou résultats n'ont
254 * pas la même étape
255 * @param sampleScopeIn String
256 */
257 public void setSampleScope(String sampleScopeIn)
258 {
259 this.sampleScope = sampleScopeIn;
260 }
261
262 private String sampleHasMeas;
263
264 /**
265 * Vrai si l'élément a des résultats de mesure, dénombrement ou fichier
266 * @return this.sampleHasMeas String
267 */
268 public String getSampleHasMeas()
269 {
270 return this.sampleHasMeas;
271 }
272
273 /**
274 * Vrai si l'élément a des résultats de mesure, dénombrement ou fichier
275 * @param sampleHasMeasIn String
276 */
277 public void setSampleHasMeas(String sampleHasMeasIn)
278 {
279 this.sampleHasMeas = sampleHasMeasIn;
280 }
281
282 private Timestamp updateDt;
283
284 /**
285 * Date de modification de l'objet, mise à jour par le système
286 * @return this.updateDt Timestamp
287 */
288 public Timestamp getUpdateDt()
289 {
290 return this.updateDt;
291 }
292
293 /**
294 * Date de modification de l'objet, mise à jour par le système
295 * @param updateDtIn Timestamp
296 */
297 public void setUpdateDt(Timestamp updateDtIn)
298 {
299 this.updateDt = updateDtIn;
300 }
301
302 // Generate 11 associations
303 private QualityFlag qualityFlag;
304
305 /**
306 * Liste des niveaux de qualification.
307 * @return this.qualityFlag QualityFlag
308 */
309 public QualityFlag getQualityFlag()
310 {
311 return this.qualityFlag;
312 }
313
314 /**
315 * Liste des niveaux de qualification.
316 * @param qualityFlagIn QualityFlag
317 */
318 public void setQualityFlag(QualityFlag qualityFlagIn)
319 {
320 this.qualityFlag = qualityFlagIn;
321 }
322
323 private TaxonGroup taxonGroup;
324
325 /**
326 * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
327 * @return this.taxonGroup TaxonGroup
328 */
329 public TaxonGroup getTaxonGroup()
330 {
331 return this.taxonGroup;
332 }
333
334 /**
335 * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
336 * @param taxonGroupIn TaxonGroup
337 */
338 public void setTaxonGroup(TaxonGroup taxonGroupIn)
339 {
340 this.taxonGroup = taxonGroupIn;
341 }
342
343 private Unit sizeUnit;
344
345 /**
346 * Liste l'ensemble des unités de mesure.
347 * @return this.sizeUnit Unit
348 */
349 public Unit getSizeUnit()
350 {
351 return this.sizeUnit;
352 }
353
354 /**
355 * Liste l'ensemble des unités de mesure.
356 * @param sizeUnitIn Unit
357 */
358 public void setSizeUnit(Unit sizeUnitIn)
359 {
360 this.sizeUnit = sizeUnitIn;
361 }
362
363 private Collection<Program> programs = new HashSet<Program>();
364
365 /**
366 * Activités à l'origine de la collecte d'un ensemble cohérent de données.
367 * @return this.programs Collection<Program>
368 */
369 public Collection<Program> getPrograms()
370 {
371 return this.programs;
372 }
373
374 /**
375 * Activités à l'origine de la collecte d'un ensemble cohérent de données.
376 * @param programsIn Collection<Program>
377 */
378 public void setPrograms(Collection<Program> programsIn)
379 {
380 this.programs = programsIn;
381 }
382
383 /**
384 * Activités à l'origine de la collecte d'un ensemble cohérent de données.
385 * @param elementToAdd Program
386 * @return <tt>true</tt> if this collection changed as a result of the
387 * call
388 */
389 public boolean addPrograms(Program elementToAdd)
390 {
391 return this.programs.add(elementToAdd);
392 }
393
394 /**
395 * Activités à l'origine de la collecte d'un ensemble cohérent de données.
396 * @param elementToRemove Program
397 * @return <tt>true</tt> if this collection changed as a result of the
398 * call
399 */
400 public boolean removePrograms(Program elementToRemove)
401 {
402 return this.programs.remove(elementToRemove);
403 }
404
405 private Department recorderDepartment;
406
407 /**
408 * Liste les départements ou services auxquels sont rattachés les agents
409 * @return this.recorderDepartment Department
410 */
411 public Department getRecorderDepartment()
412 {
413 return this.recorderDepartment;
414 }
415
416 /**
417 * Liste les départements ou services auxquels sont rattachés les agents
418 * @param recorderDepartmentIn Department
419 */
420 public void setRecorderDepartment(Department recorderDepartmentIn)
421 {
422 this.recorderDepartment = recorderDepartmentIn;
423 }
424
425 private SamplingOperation samplingOperation;
426
427 /**
428 * Liste les prélévements effectués lors d'un passage.
429 * @return this.samplingOperation SamplingOperation
430 */
431 public SamplingOperation getSamplingOperation()
432 {
433 return this.samplingOperation;
434 }
435
436 /**
437 * Liste les prélévements effectués lors d'un passage.
438 * @param samplingOperationIn SamplingOperation
439 */
440 public void setSamplingOperation(SamplingOperation samplingOperationIn)
441 {
442 this.samplingOperation = samplingOperationIn;
443 }
444
445 private Matrix matrix;
446
447 /**
448 * Support utilisé pour mesurer un paramètre.
449 * @return this.matrix Matrix
450 */
451 public Matrix getMatrix()
452 {
453 return this.matrix;
454 }
455
456 /**
457 * Support utilisé pour mesurer un paramètre.
458 * @param matrixIn Matrix
459 */
460 public void setMatrix(Matrix matrixIn)
461 {
462 this.matrix = matrixIn;
463 }
464
465 private ReferenceTaxon referenceTaxon;
466
467 /**
468 * Liste des taxons qui sont la référence.
469 * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
470 * et ne
471 * plus l'être par la suite.
472 * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
473 * référents à un moment mais ne peuvent plus l'être par la suite.
474 * Le fonctionnement dans la table TAXON_NAME est le suivant :
475 * - REF_TAXON_ID est toujours renseigné
476 * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
477 * s'agit d'un
478 * taxon virtuel)
479 * - sinon c'est un synonyme
480 * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
481 * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
482 * NB : c'était le comportement initialement prévu.
483 * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
484 * le taxon
485 * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
486 * et les
487 * résultats qu'il pouvait avoir).
488 * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
489 * 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
490 * alors
491 * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
492 * synonymes, résultats...
493 * 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
494 * qui
495 * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
496 * pour
497 * R2 est nécessaire
498 * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
499 * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
500 * référents
501 * @return this.referenceTaxon ReferenceTaxon
502 */
503 public ReferenceTaxon getReferenceTaxon()
504 {
505 return this.referenceTaxon;
506 }
507
508 /**
509 * Liste des taxons qui sont la référence.
510 * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
511 * et ne
512 * plus l'être par la suite.
513 * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
514 * référents à un moment mais ne peuvent plus l'être par la suite.
515 * Le fonctionnement dans la table TAXON_NAME est le suivant :
516 * - REF_TAXON_ID est toujours renseigné
517 * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
518 * s'agit d'un
519 * taxon virtuel)
520 * - sinon c'est un synonyme
521 * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
522 * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
523 * NB : c'était le comportement initialement prévu.
524 * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
525 * le taxon
526 * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
527 * et les
528 * résultats qu'il pouvait avoir).
529 * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
530 * 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
531 * alors
532 * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
533 * synonymes, résultats...
534 * 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
535 * qui
536 * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
537 * pour
538 * R2 est nécessaire
539 * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
540 * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
541 * référents
542 * @param referenceTaxonIn ReferenceTaxon
543 */
544 public void setReferenceTaxon(ReferenceTaxon referenceTaxonIn)
545 {
546 this.referenceTaxon = referenceTaxonIn;
547 }
548
549 /**
550 * Returns <code>true</code> if the argument is an Sample instance and all identifiers for this entity
551 * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
552 */
553 @Override
554 public boolean equals(Object object)
555 {
556 if (this == object)
557 {
558 return true;
559 }
560 if (!(object instanceof Sample))
561 {
562 return false;
563 }
564 final Sample that = (Sample)object;
565 if (this.sampleId == null || that.getSampleId() == null || !this.sampleId.equals(that.getSampleId()))
566 {
567 return false;
568 }
569 return true;
570 }
571
572 /**
573 * Returns a hash code based on this entity's identifiers.
574 */
575 @Override
576 public int hashCode()
577 {
578 int hashCode = 0;
579 hashCode = 29 * hashCode + (this.sampleId == null ? 0 : this.sampleId.hashCode());
580
581 return hashCode;
582 }
583
584 /**
585 * Constructs new instances of {@link Sample}.
586 */
587 public static final class Factory
588 {
589 /**
590 * Constructs a new instance of {@link Sample}.
591 * @return new SampleImpl()
592 */
593 public static Sample newInstance()
594 {
595 return new SampleImpl();
596 }
597
598 /**
599 * Constructs a new instance of {@link Sample}, taking all required and/or
600 * read-only properties as arguments, except for identifiers.
601 * @param updateDt Timestamp
602 * @param qualityFlag QualityFlag
603 * @param recorderDepartment Department
604 * @param samplingOperation SamplingOperation
605 * @param matrix Matrix
606 * @return newInstance
607 */
608 public static Sample newInstance(Timestamp updateDt, QualityFlag qualityFlag, Department recorderDepartment, SamplingOperation samplingOperation, Matrix matrix)
609 {
610 final Sample entity = new SampleImpl();
611 entity.setUpdateDt(updateDt);
612 entity.setQualityFlag(qualityFlag);
613 entity.setRecorderDepartment(recorderDepartment);
614 entity.setSamplingOperation(samplingOperation);
615 entity.setMatrix(matrix);
616 return entity;
617 }
618
619 /**
620 * Constructs a new instance of {@link Sample}, taking all possible properties
621 * (except the identifier(s))as arguments.
622 * @param sampleLb String
623 * @param sampleNumberIndiv Double
624 * @param sampleSize Float
625 * @param sampleCm String
626 * @param sampleControlDt Date
627 * @param sampleValidDt Date
628 * @param sampleQualifDt Date
629 * @param sampleQualifCm String
630 * @param sampleScope String
631 * @param sampleHasMeas String
632 * @param updateDt Timestamp
633 * @param qualityFlag QualityFlag
634 * @param taxonGroup TaxonGroup
635 * @param sizeUnit Unit
636 * @param programs Collection<Program>
637 * @param recorderDepartment Department
638 * @param samplingOperation SamplingOperation
639 * @param matrix Matrix
640 * @param referenceTaxon ReferenceTaxon
641 * @return newInstance Sample
642 */
643 public static Sample newInstance(String sampleLb, Double sampleNumberIndiv, Float sampleSize, String sampleCm, Date sampleControlDt, Date sampleValidDt, Date sampleQualifDt, String sampleQualifCm, String sampleScope, String sampleHasMeas, Timestamp updateDt, QualityFlag qualityFlag, TaxonGroup taxonGroup, Unit sizeUnit, Collection<Program> programs, Department recorderDepartment, SamplingOperation samplingOperation, Matrix matrix, ReferenceTaxon referenceTaxon)
644 {
645 final Sample entity = new SampleImpl();
646 entity.setSampleLb(sampleLb);
647 entity.setSampleNumberIndiv(sampleNumberIndiv);
648 entity.setSampleSize(sampleSize);
649 entity.setSampleCm(sampleCm);
650 entity.setSampleControlDt(sampleControlDt);
651 entity.setSampleValidDt(sampleValidDt);
652 entity.setSampleQualifDt(sampleQualifDt);
653 entity.setSampleQualifCm(sampleQualifCm);
654 entity.setSampleScope(sampleScope);
655 entity.setSampleHasMeas(sampleHasMeas);
656 entity.setUpdateDt(updateDt);
657 entity.setQualityFlag(qualityFlag);
658 entity.setTaxonGroup(taxonGroup);
659 entity.setSizeUnit(sizeUnit);
660 entity.setPrograms(programs);
661 entity.setRecorderDepartment(recorderDepartment);
662 entity.setSamplingOperation(samplingOperation);
663 entity.setMatrix(matrix);
664 entity.setReferenceTaxon(referenceTaxon);
665 return entity;
666 }
667 }
668
669 /**
670 * @see Comparable#compareTo
671 */
672 public int compareTo(Sample o)
673 {
674 int cmp = 0;
675 if (this.getSampleId() != null)
676 {
677 cmp = this.getSampleId().compareTo(o.getSampleId());
678 }
679 else
680 {
681 if (this.getSampleLb() != null)
682 {
683 cmp = (cmp != 0 ? cmp : this.getSampleLb().compareTo(o.getSampleLb()));
684 }
685 if (this.getSampleNumberIndiv() != null)
686 {
687 cmp = (cmp != 0 ? cmp : this.getSampleNumberIndiv().compareTo(o.getSampleNumberIndiv()));
688 }
689 if (this.getSampleSize() != null)
690 {
691 cmp = (cmp != 0 ? cmp : this.getSampleSize().compareTo(o.getSampleSize()));
692 }
693 if (this.getSampleCm() != null)
694 {
695 cmp = (cmp != 0 ? cmp : this.getSampleCm().compareTo(o.getSampleCm()));
696 }
697 if (this.getSampleControlDt() != null)
698 {
699 cmp = (cmp != 0 ? cmp : this.getSampleControlDt().compareTo(o.getSampleControlDt()));
700 }
701 if (this.getSampleValidDt() != null)
702 {
703 cmp = (cmp != 0 ? cmp : this.getSampleValidDt().compareTo(o.getSampleValidDt()));
704 }
705 if (this.getSampleQualifDt() != null)
706 {
707 cmp = (cmp != 0 ? cmp : this.getSampleQualifDt().compareTo(o.getSampleQualifDt()));
708 }
709 if (this.getSampleQualifCm() != null)
710 {
711 cmp = (cmp != 0 ? cmp : this.getSampleQualifCm().compareTo(o.getSampleQualifCm()));
712 }
713 if (this.getSampleScope() != null)
714 {
715 cmp = (cmp != 0 ? cmp : this.getSampleScope().compareTo(o.getSampleScope()));
716 }
717 if (this.getSampleHasMeas() != null)
718 {
719 cmp = (cmp != 0 ? cmp : this.getSampleHasMeas().compareTo(o.getSampleHasMeas()));
720 }
721 if (this.getUpdateDt() != null)
722 {
723 cmp = (cmp != 0 ? cmp : this.getUpdateDt().compareTo(o.getUpdateDt()));
724 }
725 }
726 return cmp;
727 }
728 // HibernateEntity.vsl merge-point
729 // Sample.java merge-point
730 }