001// license-header java merge-point
002//
003// Attention: Generated code! Do not modify by hand!
004// Generated by: hibernate/HibernateEntity.vsl in andromda-hibernate-cartridge.
005//
006package fr.ifremer.adagio.core.dao.data.sample;
007
008/*
009 * #%L
010 * SIH-Adagio :: Core
011 * $Id:$
012 * $HeadURL:$
013 * %%
014 * Copyright (C) 2012 - 2014 Ifremer
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Affero General Public License as published by
018 * the Free Software Foundation, either version 3 of the License, or
019 * (at your option) any later version.
020 * 
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Public License for more details.
025 * 
026 * You should have received a copy of the GNU Affero General Public License
027 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
028 * #L%
029 */
030
031import fr.ifremer.adagio.core.dao.administration.programStrategy.Program;
032import fr.ifremer.adagio.core.dao.administration.user.Department;
033import fr.ifremer.adagio.core.dao.administration.user.Person;
034import fr.ifremer.adagio.core.dao.data.batch.Batch;
035import fr.ifremer.adagio.core.dao.data.fishingArea.FishingArea;
036import fr.ifremer.adagio.core.dao.data.measure.SampleMeasurement;
037import fr.ifremer.adagio.core.dao.data.operation.FishingOperation;
038import fr.ifremer.adagio.core.dao.referential.QualityFlag;
039import fr.ifremer.adagio.core.dao.referential.pmfm.Matrix;
040import fr.ifremer.adagio.core.dao.referential.pmfm.Unit;
041import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon;
042import fr.ifremer.adagio.core.dao.referential.taxon.TaxonGroup;
043import java.io.Serializable;
044import java.sql.Timestamp;
045import java.util.Collection;
046import java.util.Date;
047import java.util.HashSet;
048
049/**
050 * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
051 * d'un échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
052 * pour analyse ou dénombrement.
053 * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un débarquement
054 * ou à une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de
055 * provenance).
056 * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le support
057 * est, par exemple :
058 * - crustacé (crevette...)
059 * - poisson (merlu, sardine...)
060 * - gastéropode (bigorneau, littorine...)
061 * - echinoderme (oursin...)
062 * - etc.
063 * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de plusieurs
064 * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
065 * pourra identifié l'individu concerné par la mesure, par une numéro din'dividu.
066 * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
067 * prélèvement, permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour
068 * la saisie des lectures d'age, etc..
069 * Par exemple de prélèvement :
070 * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes afin de
071 * réaliser une lecture d'age.
072 * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
073 * - etc.
074 */
075// HibernateEntity.vsl annotations merge-point
076public abstract class Sample
077    implements Serializable, Comparable<Sample>
078{
079    /**
080     * The serial version UID of this class. Needed for serialization.
081     */
082    private static final long serialVersionUID = -4679812335657343627L;
083
084    // Generate 13 attributes
085    private Integer id;
086
087    /**
088     * Identifiant de l'échantillon. Généré par le système.
089     * @return this.id Integer
090     */
091    public Integer getId()
092    {
093        return this.id;
094    }
095
096    /**
097     * Identifiant de l'échantillon. Généré par le système.
098     * @param idIn Integer
099     */
100    public void setId(Integer idIn)
101    {
102        this.id = idIn;
103    }
104
105    private String label;
106
107    /**
108     * Mnémonique du prélèvement. Par exemple, il peut s'agir d'un code propre à chaque programme :
109     * pour les marées observée, par exemple, il s'agira d'une étiquette permettant d'identifier
110     * l'échantillon sur le terrain puis en laboratoire.
111     * Autant que possible, le mnémonique devra etre unique pour tous le système, ou à défaut unique
112     * au sein de la marée, du débarquement, de la vente ou de la campagne.
113     * Nomenclature retenue à l'issu des spécifications Allegro V3 :
114     * <date>_<initiales>_<lieu>_<G|S>_<numéro>
115     * Avec :
116     * - <date> : date de l’observation au format AAAMMJJ. La date est issue (suivant la donnée mère
117     * rattachée) :
118     * * de la date de début de l’opération de pêche ou du groupe d’opérations (si période du groupe
119     * d’opération n’a pas été renseigné : prendre la date de début de la marée)
120     * * ou de la date de débarquement,
121     * * ou de la date de la vente.
122     * - <initiales> : il s’agit des initiales déjà saisit par l’utilisateur (cf variante
123     * précédente).
124     * - <lieu> : mnémonique du lieu d’observation, si présent, ou libellé sinon. Le lieu
125     * d’observation est issu (suivant la donnée mère rattachée) :
126     * * pour une opération de pêche ou un groupe d’opérations, il s’agit du port de départ de la
127     * marée,
128     * * pour un débarquement, du lieu de débarquement
129     * * pour une vente, du lieu de la vente
130     * - <G|S> : suivant la donnée mère rattachée :
131     * * ‘G’ (=Ground) si donnée mère rattachée est un débarquement ou une vente ;
132     * * ‘S’ (=Sea) si donnée mère rattachée est une opération de pêche ou à une groupe
133     * d’opérations.
134     * - <numéro> : Il s’agit d’un numéro au format NNN (sur trois caractère. Exemple : « 001 »),
135     * auto-incrémentée (valeur maximale connue + 1) de manière à être unique au sein de (suivant la
136     * donnée mère rattachée) :
137     * * la marée, si la donnée mère rattachée est une opération de pêche ou un groupe d’opérations
138     * * ou du débarquement,
139     * * ou de la vente
140     * @return this.label String
141     */
142    public String getLabel()
143    {
144        return this.label;
145    }
146
147    /**
148     * Mnémonique du prélèvement. Par exemple, il peut s'agir d'un code propre à chaque programme :
149     * pour les marées observée, par exemple, il s'agira d'une étiquette permettant d'identifier
150     * l'échantillon sur le terrain puis en laboratoire.
151     * Autant que possible, le mnémonique devra etre unique pour tous le système, ou à défaut unique
152     * au sein de la marée, du débarquement, de la vente ou de la campagne.
153     * Nomenclature retenue à l'issu des spécifications Allegro V3 :
154     * <date>_<initiales>_<lieu>_<G|S>_<numéro>
155     * Avec :
156     * - <date> : date de l’observation au format AAAMMJJ. La date est issue (suivant la donnée mère
157     * rattachée) :
158     * * de la date de début de l’opération de pêche ou du groupe d’opérations (si période du groupe
159     * d’opération n’a pas été renseigné : prendre la date de début de la marée)
160     * * ou de la date de débarquement,
161     * * ou de la date de la vente.
162     * - <initiales> : il s’agit des initiales déjà saisit par l’utilisateur (cf variante
163     * précédente).
164     * - <lieu> : mnémonique du lieu d’observation, si présent, ou libellé sinon. Le lieu
165     * d’observation est issu (suivant la donnée mère rattachée) :
166     * * pour une opération de pêche ou un groupe d’opérations, il s’agit du port de départ de la
167     * marée,
168     * * pour un débarquement, du lieu de débarquement
169     * * pour une vente, du lieu de la vente
170     * - <G|S> : suivant la donnée mère rattachée :
171     * * ‘G’ (=Ground) si donnée mère rattachée est un débarquement ou une vente ;
172     * * ‘S’ (=Sea) si donnée mère rattachée est une opération de pêche ou à une groupe
173     * d’opérations.
174     * - <numéro> : Il s’agit d’un numéro au format NNN (sur trois caractère. Exemple : « 001 »),
175     * auto-incrémentée (valeur maximale connue + 1) de manière à être unique au sein de (suivant la
176     * donnée mère rattachée) :
177     * * la marée, si la donnée mère rattachée est une opération de pêche ou un groupe d’opérations
178     * * ou du débarquement,
179     * * ou de la vente
180     * @param labelIn String
181     */
182    public void setLabel(String labelIn)
183    {
184        this.label = labelIn;
185    }
186
187    private Date sampleDate;
188
189    /**
190     * Jour du prélèvement (heure optionnelle).
191     * @return this.sampleDate Date
192     */
193    public Date getSampleDate()
194    {
195        return this.sampleDate;
196    }
197
198    /**
199     * Jour du prélèvement (heure optionnelle).
200     * @param sampleDateIn Date
201     */
202    public void setSampleDate(Date sampleDateIn)
203    {
204        this.sampleDate = sampleDateIn;
205    }
206
207    private Short individualCount;
208
209    /**
210     * Nombre d'individus constituant l'échantillon.
211     * @return this.individualCount Short
212     */
213    public Short getIndividualCount()
214    {
215        return this.individualCount;
216    }
217
218    /**
219     * Nombre d'individus constituant l'échantillon.
220     * @param individualCountIn Short
221     */
222    public void setIndividualCount(Short individualCountIn)
223    {
224        this.individualCount = individualCountIn;
225    }
226
227    private Float size;
228
229    /**
230     * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
231     * aussi s'agir du nombre d'individus entrant dans l'homogénat.
232     * @return this.size Float
233     */
234    public Float getSize()
235    {
236        return this.size;
237    }
238
239    /**
240     * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
241     * aussi s'agir du nombre d'individus entrant dans l'homogénat.
242     * @param sizeIn Float
243     */
244    public void setSize(Float sizeIn)
245    {
246        this.size = sizeIn;
247    }
248
249    
250
251    /**
252     * Etat de synchronisation (en cours, terminé, en attente de synchro, supprimé). Seulement
253     * visible dans la base locale.
254     * @return this.synchronizationStatus String
255     */
256    
257    
258
259    /**
260     * Etat de synchronisation (en cours, terminé, en attente de synchro, supprimé). Seulement
261     * visible dans la base locale.
262     * @param synchronizationStatusIn String
263     */
264    
265    
266
267    private String comments;
268
269    /**
270     * Commentaire libre concernant l'échantillon.
271     * @return this.comments String
272     */
273    public String getComments()
274    {
275        return this.comments;
276    }
277
278    /**
279     * Commentaire libre concernant l'échantillon.
280     * @param commentsIn String
281     */
282    public void setComments(String commentsIn)
283    {
284        this.comments = commentsIn;
285    }
286
287    private Date creationDate;
288
289    /**
290     * 
291     * @return this.creationDate Date
292     */
293    public Date getCreationDate()
294    {
295        return this.creationDate;
296    }
297
298    /**
299     * 
300     * @param creationDateIn Date
301     */
302    public void setCreationDate(Date creationDateIn)
303    {
304        this.creationDate = creationDateIn;
305    }
306
307    private Date controlDate;
308
309    /**
310     * 
311     * @return this.controlDate Date
312     */
313    public Date getControlDate()
314    {
315        return this.controlDate;
316    }
317
318    /**
319     * 
320     * @param controlDateIn Date
321     */
322    public void setControlDate(Date controlDateIn)
323    {
324        this.controlDate = controlDateIn;
325    }
326
327    private Date validationDate;
328
329    /**
330     * 
331     * @return this.validationDate Date
332     */
333    public Date getValidationDate()
334    {
335        return this.validationDate;
336    }
337
338    /**
339     * 
340     * @param validationDateIn Date
341     */
342    public void setValidationDate(Date validationDateIn)
343    {
344        this.validationDate = validationDateIn;
345    }
346
347    private Date qualificationDate;
348
349    /**
350     * 
351     * @return this.qualificationDate Date
352     */
353    public Date getQualificationDate()
354    {
355        return this.qualificationDate;
356    }
357
358    /**
359     * 
360     * @param qualificationDateIn Date
361     */
362    public void setQualificationDate(Date qualificationDateIn)
363    {
364        this.qualificationDate = qualificationDateIn;
365    }
366
367    private String qualificationComments;
368
369    /**
370     * 
371     * @return this.qualificationComments String
372     */
373    public String getQualificationComments()
374    {
375        return this.qualificationComments;
376    }
377
378    /**
379     * 
380     * @param qualificationCommentsIn String
381     */
382    public void setQualificationComments(String qualificationCommentsIn)
383    {
384        this.qualificationComments = qualificationCommentsIn;
385    }
386
387    private Timestamp updateDate;
388
389    /**
390     * 
391     * @return this.updateDate Timestamp
392     */
393    public Timestamp getUpdateDate()
394    {
395        return this.updateDate;
396    }
397
398    /**
399     * 
400     * @param updateDateIn Timestamp
401     */
402    public void setUpdateDate(Timestamp updateDateIn)
403    {
404        this.updateDate = updateDateIn;
405    }
406
407    // Generate 14 associations
408    private Collection<FishingArea> fishingAreas = new HashSet<FishingArea>();
409
410    /**
411     * Zone de peche du prélèvement (utilisé surtout dans le cas d'un prélèvement hors
412     * marée/débarquement ou vente - exemple : prélèvement en poissonnerie)
413     * @return this.fishingAreas Collection<FishingArea>
414     */
415    public Collection<FishingArea> getFishingAreas()
416    {
417        return this.fishingAreas;
418    }
419
420    /**
421     * Zone de peche du prélèvement (utilisé surtout dans le cas d'un prélèvement hors
422     * marée/débarquement ou vente - exemple : prélèvement en poissonnerie)
423     * @param fishingAreasIn Collection<FishingArea>
424     */
425    public void setFishingAreas(Collection<FishingArea> fishingAreasIn)
426    {
427        this.fishingAreas = fishingAreasIn;
428    }
429
430    /**
431     * Zone de peche du prélèvement (utilisé surtout dans le cas d'un prélèvement hors
432     * marée/débarquement ou vente - exemple : prélèvement en poissonnerie)
433     * @param elementToAdd FishingArea
434     * @return <tt>true</tt> if this collection changed as a result of the
435     *         call
436     */
437    public boolean addFishingAreas(FishingArea elementToAdd)
438    {
439        return this.fishingAreas.add(elementToAdd);
440    }
441
442    /**
443     * Zone de peche du prélèvement (utilisé surtout dans le cas d'un prélèvement hors
444     * marée/débarquement ou vente - exemple : prélèvement en poissonnerie)
445     * @param elementToRemove FishingArea
446     * @return <tt>true</tt> if this collection changed as a result of the
447     *         call
448     */
449    public boolean removeFishingAreas(FishingArea elementToRemove)
450    {
451        return this.fishingAreas.remove(elementToRemove);
452    }
453
454    private Unit sizeUnit;
455
456    /**
457     * Unité associée à la valeur de la taille du prélèvement.
458     * @return this.sizeUnit Unit
459     */
460    public Unit getSizeUnit()
461    {
462        return this.sizeUnit;
463    }
464
465    /**
466     * Unité associée à la valeur de la taille du prélèvement.
467     * @param sizeUnitIn Unit
468     */
469    public void setSizeUnit(Unit sizeUnitIn)
470    {
471        this.sizeUnit = sizeUnitIn;
472    }
473
474    private Department recorderDepartment;
475
476    /**
477     * Service d'appartenance d'une personne.
478     * Il peut s'agir des départements et service de l'Ifremer, ou bien des entreprises, services
479     * extérieurs (sous-traitants, etc.).
480     * REMARQUE : nous en aurons besoin en v2, pour l'administration des personnes (rechercher une
481     * personne, gérer les sous-traitants, etc.), mais aussi pour identifier le service effectuant
482     * l’analyse d’un résultat de mesure.
483     * Nombre de lignes : 60
484     * @return this.recorderDepartment Department
485     */
486    public Department getRecorderDepartment()
487    {
488        return this.recorderDepartment;
489    }
490
491    /**
492     * Service d'appartenance d'une personne.
493     * Il peut s'agir des départements et service de l'Ifremer, ou bien des entreprises, services
494     * extérieurs (sous-traitants, etc.).
495     * REMARQUE : nous en aurons besoin en v2, pour l'administration des personnes (rechercher une
496     * personne, gérer les sous-traitants, etc.), mais aussi pour identifier le service effectuant
497     * l’analyse d’un résultat de mesure.
498     * Nombre de lignes : 60
499     * @param recorderDepartmentIn Department
500     */
501    public void setRecorderDepartment(Department recorderDepartmentIn)
502    {
503        this.recorderDepartment = recorderDepartmentIn;
504    }
505
506    private Collection<Sample> childSamples = new HashSet<Sample>();
507
508    /**
509     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
510     * d'un
511     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
512     * pour
513     * analyse ou dénombrement.
514     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
515     * débarquement ou à
516     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
517     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
518     * support
519     * est, par exemple :
520     * - crustacé (crevette...)
521     * - poisson (merlu, sardine...)
522     * - gastéropode (bigorneau, littorine...)
523     * - echinoderme (oursin...)
524     * - etc.
525     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
526     * plusieurs
527     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
528     * pourra
529     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
530     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
531     * prélèvement,
532     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
533     * des
534     * lectures d'age, etc..
535     * Par exemple de prélèvement :
536     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
537     * afin de
538     * réaliser une lecture d'age.
539     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
540     * - etc.
541     * @return this.childSamples Collection<Sample>
542     */
543    public Collection<Sample> getChildSamples()
544    {
545        return this.childSamples;
546    }
547
548    /**
549     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
550     * d'un
551     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
552     * pour
553     * analyse ou dénombrement.
554     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
555     * débarquement ou à
556     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
557     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
558     * support
559     * est, par exemple :
560     * - crustacé (crevette...)
561     * - poisson (merlu, sardine...)
562     * - gastéropode (bigorneau, littorine...)
563     * - echinoderme (oursin...)
564     * - etc.
565     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
566     * plusieurs
567     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
568     * pourra
569     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
570     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
571     * prélèvement,
572     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
573     * des
574     * lectures d'age, etc..
575     * Par exemple de prélèvement :
576     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
577     * afin de
578     * réaliser une lecture d'age.
579     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
580     * - etc.
581     * @param childSamplesIn Collection<Sample>
582     */
583    public void setChildSamples(Collection<Sample> childSamplesIn)
584    {
585        this.childSamples = childSamplesIn;
586    }
587
588    /**
589     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
590     * d'un
591     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
592     * pour
593     * analyse ou dénombrement.
594     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
595     * débarquement ou à
596     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
597     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
598     * support
599     * est, par exemple :
600     * - crustacé (crevette...)
601     * - poisson (merlu, sardine...)
602     * - gastéropode (bigorneau, littorine...)
603     * - echinoderme (oursin...)
604     * - etc.
605     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
606     * plusieurs
607     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
608     * pourra
609     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
610     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
611     * prélèvement,
612     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
613     * des
614     * lectures d'age, etc..
615     * Par exemple de prélèvement :
616     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
617     * afin de
618     * réaliser une lecture d'age.
619     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
620     * - etc.
621     * @param elementToAdd Sample
622     * @return <tt>true</tt> if this collection changed as a result of the
623     *         call
624     */
625    public boolean addChildSamples(Sample elementToAdd)
626    {
627        return this.childSamples.add(elementToAdd);
628    }
629
630    /**
631     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
632     * d'un
633     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
634     * pour
635     * analyse ou dénombrement.
636     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
637     * débarquement ou à
638     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
639     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
640     * support
641     * est, par exemple :
642     * - crustacé (crevette...)
643     * - poisson (merlu, sardine...)
644     * - gastéropode (bigorneau, littorine...)
645     * - echinoderme (oursin...)
646     * - etc.
647     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
648     * plusieurs
649     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
650     * pourra
651     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
652     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
653     * prélèvement,
654     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
655     * des
656     * lectures d'age, etc..
657     * Par exemple de prélèvement :
658     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
659     * afin de
660     * réaliser une lecture d'age.
661     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
662     * - etc.
663     * @param elementToRemove Sample
664     * @return <tt>true</tt> if this collection changed as a result of the
665     *         call
666     */
667    public boolean removeChildSamples(Sample elementToRemove)
668    {
669        return this.childSamples.remove(elementToRemove);
670    }
671
672    private Sample parentSample;
673
674    /**
675     * Parent sample. Use in MerluMed.
676     * Ex : un poisson peut avoir dans sont estomac plusieurs autres poissons.
677     * @return this.parentSample Sample
678     */
679    public Sample getParentSample()
680    {
681        return this.parentSample;
682    }
683
684    /**
685     * Parent sample. Use in MerluMed.
686     * Ex : un poisson peut avoir dans sont estomac plusieurs autres poissons.
687     * @param parentSampleIn Sample
688     */
689    public void setParentSample(Sample parentSampleIn)
690    {
691        this.parentSample = parentSampleIn;
692    }
693
694    private Person recorderPerson;
695
696    /**
697     * <html>
698     * <head>
699     * <style>
700     * p {padding:0px; margin:0px;}
701     * </style>
702     * </head>
703     * <body>
704     * <p>
705     * Personne liées aux données : utilisateur du système, ou observateurs,
706     * responsable de données, etc.
707     * </p>
708     * <p>
709     * </p>
710     * <p>
711     * Les personnes liées aux activités professionnelles de pêche sont plutôt
712     * gérer dans <i>VesselPerson</i>.
713     * </p>
714     * <p>
715     * </p>
716     * <p>
717     * Nombre de lignes : 100
718     * </p>
719     * </body>
720     * </html>
721     * @return this.recorderPerson Person
722     */
723    public Person getRecorderPerson()
724    {
725        return this.recorderPerson;
726    }
727
728    /**
729     * <html>
730     * <head>
731     * <style>
732     * p {padding:0px; margin:0px;}
733     * </style>
734     * </head>
735     * <body>
736     * <p>
737     * Personne liées aux données : utilisateur du système, ou observateurs,
738     * responsable de données, etc.
739     * </p>
740     * <p>
741     * </p>
742     * <p>
743     * Les personnes liées aux activités professionnelles de pêche sont plutôt
744     * gérer dans <i>VesselPerson</i>.
745     * </p>
746     * <p>
747     * </p>
748     * <p>
749     * Nombre de lignes : 100
750     * </p>
751     * </body>
752     * </html>
753     * @param recorderPersonIn Person
754     */
755    public void setRecorderPerson(Person recorderPersonIn)
756    {
757        this.recorderPerson = recorderPersonIn;
758    }
759
760    private FishingOperation fishingOperation;
761
762    /**
763     * Opération de prélèvement à laquelle est rattaché l'échantillon analysé.
764     * @return this.fishingOperation FishingOperation
765     */
766    public FishingOperation getFishingOperation()
767    {
768        return this.fishingOperation;
769    }
770
771    /**
772     * Opération de prélèvement à laquelle est rattaché l'échantillon analysé.
773     * @param fishingOperationIn FishingOperation
774     */
775    public void setFishingOperation(FishingOperation fishingOperationIn)
776    {
777        this.fishingOperation = fishingOperationIn;
778    }
779
780    private Collection<SampleMeasurement> sampleMeasurements = new HashSet<SampleMeasurement>();
781
782    /**
783     * Valeur mesurée ou analysée sur un individu (résultats de mesures sur individu) appartenant à
784     * un
785     * prélèvement effectué lors d'un échantillonnage biologique, lors d'une marée, d'un vente ou
786     * d'un
787     * débarquement observé. Les observations sur le prélèvement sont souvent menées en laboratoire,
788     * à
789     * terre.
790     * @return this.sampleMeasurements Collection<SampleMeasurement>
791     */
792    public Collection<SampleMeasurement> getSampleMeasurements()
793    {
794        return this.sampleMeasurements;
795    }
796
797    /**
798     * Valeur mesurée ou analysée sur un individu (résultats de mesures sur individu) appartenant à
799     * un
800     * prélèvement effectué lors d'un échantillonnage biologique, lors d'une marée, d'un vente ou
801     * d'un
802     * débarquement observé. Les observations sur le prélèvement sont souvent menées en laboratoire,
803     * à
804     * terre.
805     * @param sampleMeasurementsIn Collection<SampleMeasurement>
806     */
807    public void setSampleMeasurements(Collection<SampleMeasurement> sampleMeasurementsIn)
808    {
809        this.sampleMeasurements = sampleMeasurementsIn;
810    }
811
812    /**
813     * Valeur mesurée ou analysée sur un individu (résultats de mesures sur individu) appartenant à
814     * un
815     * prélèvement effectué lors d'un échantillonnage biologique, lors d'une marée, d'un vente ou
816     * d'un
817     * débarquement observé. Les observations sur le prélèvement sont souvent menées en laboratoire,
818     * à
819     * terre.
820     * @param elementToAdd SampleMeasurement
821     * @return <tt>true</tt> if this collection changed as a result of the
822     *         call
823     */
824    public boolean addSampleMeasurements(SampleMeasurement elementToAdd)
825    {
826        return this.sampleMeasurements.add(elementToAdd);
827    }
828
829    /**
830     * Valeur mesurée ou analysée sur un individu (résultats de mesures sur individu) appartenant à
831     * un
832     * prélèvement effectué lors d'un échantillonnage biologique, lors d'une marée, d'un vente ou
833     * d'un
834     * débarquement observé. Les observations sur le prélèvement sont souvent menées en laboratoire,
835     * à
836     * terre.
837     * @param elementToRemove SampleMeasurement
838     * @return <tt>true</tt> if this collection changed as a result of the
839     *         call
840     */
841    public boolean removeSampleMeasurements(SampleMeasurement elementToRemove)
842    {
843        return this.sampleMeasurements.remove(elementToRemove);
844    }
845
846    private TaxonGroup taxonGroup;
847
848    /**
849     * Groupe de taxon (généralement espèce commerciale) caractéristant l'échantillon (optionnel)
850     * @return this.taxonGroup TaxonGroup
851     */
852    public TaxonGroup getTaxonGroup()
853    {
854        return this.taxonGroup;
855    }
856
857    /**
858     * Groupe de taxon (généralement espèce commerciale) caractéristant l'échantillon (optionnel)
859     * @param taxonGroupIn TaxonGroup
860     */
861    public void setTaxonGroup(TaxonGroup taxonGroupIn)
862    {
863        this.taxonGroup = taxonGroupIn;
864    }
865
866    private Matrix matrix;
867
868    /**
869     * Support de l'échantillon.
870     * @return this.matrix Matrix
871     */
872    public Matrix getMatrix()
873    {
874        return this.matrix;
875    }
876
877    /**
878     * Support de l'échantillon.
879     * @param matrixIn Matrix
880     */
881    public void setMatrix(Matrix matrixIn)
882    {
883        this.matrix = matrixIn;
884    }
885
886    private QualityFlag qualityFlag;
887
888    /**
889     * Niveau de qualité de la donnée.
890     * "Non qualifiée" par défaut
891     * @return this.qualityFlag QualityFlag
892     */
893    public QualityFlag getQualityFlag()
894    {
895        return this.qualityFlag;
896    }
897
898    /**
899     * Niveau de qualité de la donnée.
900     * "Non qualifiée" par défaut
901     * @param qualityFlagIn QualityFlag
902     */
903    public void setQualityFlag(QualityFlag qualityFlagIn)
904    {
905        this.qualityFlag = qualityFlagIn;
906    }
907
908    private Batch batch;
909
910    /**
911     * Lot auquel appartient l'échantillon analysé (optionnel).
912     * @return this.batch Batch
913     */
914    public Batch getBatch()
915    {
916        return this.batch;
917    }
918
919    /**
920     * Lot auquel appartient l'échantillon analysé (optionnel).
921     * @param batchIn Batch
922     */
923    public void setBatch(Batch batchIn)
924    {
925        this.batch = batchIn;
926    }
927
928    private ReferenceTaxon referenceTaxon;
929
930    /**
931     * Taxon (espèce scientifique) caractéristant l'échantillon (optionnel)
932     * @return this.referenceTaxon ReferenceTaxon
933     */
934    public ReferenceTaxon getReferenceTaxon()
935    {
936        return this.referenceTaxon;
937    }
938
939    /**
940     * Taxon (espèce scientifique) caractéristant l'échantillon (optionnel)
941     * @param referenceTaxonIn ReferenceTaxon
942     */
943    public void setReferenceTaxon(ReferenceTaxon referenceTaxonIn)
944    {
945        this.referenceTaxon = referenceTaxonIn;
946    }
947
948    private Program program;
949
950    /**
951     * Programme d'observation à l'origine d'une collecte de données.
952     * Désigne les activités qui sont à l'origine de la collecte d'un ensemble cohérent de données,
953     * que ce
954     * soit pour des collectes continues (marées observées en mer, SIPA) ou pour des études limitées
955     * dans
956     * le temps. La quantité de données rattachées à un programme peut être variable, selon qu'il
957     * s'agit
958     * d'une activité longue ou intensive, ou d'une opération plus ponctuelle (étude) mais toujours
959     * mise en
960     * œuvre selon un schéma décidé à l'avance.
961     * Exemple de programmes d'observations :
962     * - SIH-OBSMER (marées observées en mer)
963     * - SIH-STATPECHE (enquete d'activité et d'effort...)
964     * - SIPA : données déclaratives transmises par la DPMA
965     * - VMS : données satellitaires
966     * - OFIMER : données du SI de l'OFIMER
967     * @return this.program Program
968     */
969    public Program getProgram()
970    {
971        return this.program;
972    }
973
974    /**
975     * Programme d'observation à l'origine d'une collecte de données.
976     * Désigne les activités qui sont à l'origine de la collecte d'un ensemble cohérent de données,
977     * que ce
978     * soit pour des collectes continues (marées observées en mer, SIPA) ou pour des études limitées
979     * dans
980     * le temps. La quantité de données rattachées à un programme peut être variable, selon qu'il
981     * s'agit
982     * d'une activité longue ou intensive, ou d'une opération plus ponctuelle (étude) mais toujours
983     * mise en
984     * œuvre selon un schéma décidé à l'avance.
985     * Exemple de programmes d'observations :
986     * - SIH-OBSMER (marées observées en mer)
987     * - SIH-STATPECHE (enquete d'activité et d'effort...)
988     * - SIPA : données déclaratives transmises par la DPMA
989     * - VMS : données satellitaires
990     * - OFIMER : données du SI de l'OFIMER
991     * @param programIn Program
992     */
993    public void setProgram(Program programIn)
994    {
995        this.program = programIn;
996    }
997
998    /**
999     * Returns <code>true</code> if the argument is an Sample instance and all identifiers for this entity
1000     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
1001     */
1002    @Override
1003    public boolean equals(Object object)
1004    {
1005        if (this == object)
1006        {
1007            return true;
1008        }
1009        if (!(object instanceof Sample))
1010        {
1011            return false;
1012        }
1013        final Sample that = (Sample)object;
1014        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
1015        {
1016            return false;
1017        }
1018        return true;
1019    }
1020
1021    /**
1022     * Returns a hash code based on this entity's identifiers.
1023     */
1024    @Override
1025    public int hashCode()
1026    {
1027        int hashCode = 0;
1028        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
1029
1030        return hashCode;
1031    }
1032
1033    /**
1034     * Constructs new instances of {@link Sample}.
1035     */
1036    public static final class Factory
1037    {
1038        /**
1039         * Constructs a new instance of {@link Sample}.
1040         * @return new SampleImpl()
1041         */
1042        public static Sample newInstance()
1043        {
1044            return new SampleImpl();
1045        }
1046
1047        /**
1048         * Constructs a new instance of {@link Sample}, taking all required and/or
1049         * read-only properties as arguments, except for identifiers.
1050         * @param label String
1051         * @param synchronizationStatus String
1052         * @param creationDate Date
1053         * @param updateDate Timestamp
1054         * @param recorderDepartment Department
1055         * @param matrix Matrix
1056         * @param qualityFlag QualityFlag
1057         * @param program Program
1058         * @return newInstance
1059         */
1060        public static Sample newInstance(String label,  Date creationDate, Timestamp updateDate, Department recorderDepartment, Matrix matrix, QualityFlag qualityFlag, Program program)
1061        {
1062            final Sample entity = new SampleImpl();
1063            entity.setLabel(label);
1064            
1065            entity.setCreationDate(creationDate);
1066            entity.setUpdateDate(updateDate);
1067            entity.setRecorderDepartment(recorderDepartment);
1068            entity.setMatrix(matrix);
1069            entity.setQualityFlag(qualityFlag);
1070            entity.setProgram(program);
1071            return entity;
1072        }
1073
1074        /**
1075         * Constructs a new instance of {@link Sample}, taking all possible properties
1076         * (except the identifier(s))as arguments.
1077         * @param label String
1078         * @param sampleDate Date
1079         * @param individualCount Short
1080         * @param size Float
1081         * @param synchronizationStatus String
1082         * @param comments String
1083         * @param creationDate Date
1084         * @param controlDate Date
1085         * @param validationDate Date
1086         * @param qualificationDate Date
1087         * @param qualificationComments String
1088         * @param updateDate Timestamp
1089         * @param fishingAreas Collection<FishingArea>
1090         * @param sizeUnit Unit
1091         * @param recorderDepartment Department
1092         * @param childSamples Collection<Sample>
1093         * @param parentSample Sample
1094         * @param recorderPerson Person
1095         * @param fishingOperation FishingOperation
1096         * @param sampleMeasurements Collection<SampleMeasurement>
1097         * @param taxonGroup TaxonGroup
1098         * @param matrix Matrix
1099         * @param qualityFlag QualityFlag
1100         * @param batch Batch
1101         * @param referenceTaxon ReferenceTaxon
1102         * @param program Program
1103         * @return newInstance Sample
1104         */
1105        public static Sample newInstance(String label, Date sampleDate, Short individualCount, Float size,  String comments, Date creationDate, Date controlDate, Date validationDate, Date qualificationDate, String qualificationComments, Timestamp updateDate, Collection<FishingArea> fishingAreas, Unit sizeUnit, Department recorderDepartment, Collection<Sample> childSamples, Sample parentSample, Person recorderPerson, FishingOperation fishingOperation, Collection<SampleMeasurement> sampleMeasurements, TaxonGroup taxonGroup, Matrix matrix, QualityFlag qualityFlag, Batch batch, ReferenceTaxon referenceTaxon, Program program)
1106        {
1107            final Sample entity = new SampleImpl();
1108            entity.setLabel(label);
1109            entity.setSampleDate(sampleDate);
1110            entity.setIndividualCount(individualCount);
1111            entity.setSize(size);
1112            
1113            entity.setComments(comments);
1114            entity.setCreationDate(creationDate);
1115            entity.setControlDate(controlDate);
1116            entity.setValidationDate(validationDate);
1117            entity.setQualificationDate(qualificationDate);
1118            entity.setQualificationComments(qualificationComments);
1119            entity.setUpdateDate(updateDate);
1120            entity.setFishingAreas(fishingAreas);
1121            entity.setSizeUnit(sizeUnit);
1122            entity.setRecorderDepartment(recorderDepartment);
1123            entity.setChildSamples(childSamples);
1124            entity.setParentSample(parentSample);
1125            entity.setRecorderPerson(recorderPerson);
1126            entity.setFishingOperation(fishingOperation);
1127            entity.setSampleMeasurements(sampleMeasurements);
1128            entity.setTaxonGroup(taxonGroup);
1129            entity.setMatrix(matrix);
1130            entity.setQualityFlag(qualityFlag);
1131            entity.setBatch(batch);
1132            entity.setReferenceTaxon(referenceTaxon);
1133            entity.setProgram(program);
1134            return entity;
1135        }
1136    }
1137
1138    /**
1139     * @see Comparable#compareTo
1140     */
1141    public int compareTo(Sample o)
1142    {
1143        int cmp = 0;
1144        if (this.getId() != null)
1145        {
1146            cmp = this.getId().compareTo(o.getId());
1147        }
1148        else
1149        {
1150            if (this.getLabel() != null)
1151            {
1152                cmp = (cmp != 0 ? cmp : this.getLabel().compareTo(o.getLabel()));
1153            }
1154            if (this.getSampleDate() != null)
1155            {
1156                cmp = (cmp != 0 ? cmp : this.getSampleDate().compareTo(o.getSampleDate()));
1157            }
1158            if (this.getIndividualCount() != null)
1159            {
1160                cmp = (cmp != 0 ? cmp : this.getIndividualCount().compareTo(o.getIndividualCount()));
1161            }
1162            if (this.getSize() != null)
1163            {
1164                cmp = (cmp != 0 ? cmp : this.getSize().compareTo(o.getSize()));
1165            }
1166            
1167            
1168            if (this.getComments() != null)
1169            {
1170                cmp = (cmp != 0 ? cmp : this.getComments().compareTo(o.getComments()));
1171            }
1172            if (this.getCreationDate() != null)
1173            {
1174                cmp = (cmp != 0 ? cmp : this.getCreationDate().compareTo(o.getCreationDate()));
1175            }
1176            if (this.getControlDate() != null)
1177            {
1178                cmp = (cmp != 0 ? cmp : this.getControlDate().compareTo(o.getControlDate()));
1179            }
1180            if (this.getValidationDate() != null)
1181            {
1182                cmp = (cmp != 0 ? cmp : this.getValidationDate().compareTo(o.getValidationDate()));
1183            }
1184            if (this.getQualificationDate() != null)
1185            {
1186                cmp = (cmp != 0 ? cmp : this.getQualificationDate().compareTo(o.getQualificationDate()));
1187            }
1188            if (this.getQualificationComments() != null)
1189            {
1190                cmp = (cmp != 0 ? cmp : this.getQualificationComments().compareTo(o.getQualificationComments()));
1191            }
1192            if (this.getUpdateDate() != null)
1193            {
1194                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
1195            }
1196        }
1197        return cmp;
1198    }
1199// HibernateEntity.vsl merge-point
1200// Sample.java merge-point
1201}