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.operation;
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 com.vividsolutions.jts.geom.LineString;
032import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
033import fr.ifremer.adagio.core.dao.data.vessel.Vessel;
034import fr.ifremer.adagio.core.dao.data.vessel.feature.person.VesselPersonFeatures;
035import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.GearPhysicalFeatures;
036import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures;
037import fr.ifremer.adagio.core.dao.data.vessel.feature.use.VesselUseFeatures;
038import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPosition;
039import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPositionVMS;
040import fr.ifremer.adagio.core.dao.referential.QualityFlag;
041import java.io.Serializable;
042import java.util.Collection;
043import java.util.Date;
044import java.util.HashSet;
045
046/**
047 * Opération éffectuée dans le cadre d'une marée (observée en mer, observée au débarquement,
048 * campagne en mer,  marée déclarée, etc.).
049 * Une opération peut etre une opération de peche ou non. Par exemple, au cours de campagne à la
050 * mer, le navire peut déployer des engins de collecte de données environnementales (température,
051 * salinité, etc. ).
052 */
053// HibernateEntity.vsl annotations merge-point
054public abstract class Operation
055    implements Serializable, Comparable<Operation>
056{
057    /**
058     * The serial version UID of this class. Needed for serialization.
059     */
060    private static final long serialVersionUID = 4065992805884536005L;
061
062    // Generate 12 attributes
063    private Integer id;
064
065    /**
066     * Identifiant unique de l'opération.
067     * @return this.id Integer
068     */
069    public Integer getId()
070    {
071        return this.id;
072    }
073
074    /**
075     * Identifiant unique de l'opération.
076     * @param idIn Integer
077     */
078    public void setId(Integer idIn)
079    {
080        this.id = idIn;
081    }
082
083    private String name;
084
085    /**
086     * @deprecated - NE PLUS UTILISER
087     * Libellé de l'opération.
088     * REMARQUE : attribut absent des IHM. Présent pour les données historiques. Sans doute à
089     * supprimer dans l'avenir.
090     * @return this.name String
091     */
092    public String getName()
093    {
094        return this.name;
095    }
096
097    /**
098     * @deprecated - NE PLUS UTILISER
099     * Libellé de l'opération.
100     * REMARQUE : attribut absent des IHM. Présent pour les données historiques. Sans doute à
101     * supprimer dans l'avenir.
102     * @param nameIn String
103     */
104    public void setName(String nameIn)
105    {
106        this.name = nameIn;
107    }
108
109    private Short rankOrderOnPeriod;
110
111    /**
112     * Rang (de présentation) de l'opération, sur la période date début/fin.
113     * ATTENTION : Lorsque plusieurs opérations sont présentes sur la meme période, cela permet de
114     * les dissocier.
115     * C'est par exemple le cas des séquences de peches (opérations agrégées en Jour/Métier/Secteur)
116     * : plusieurs opérations peuvent etre sur le meme jour (avec des engin/secteur différents), il
117     * faut donc leur attribuer un rang, pour les distinguer. Ce rang peut etre celui de la
118     * déclaration du pecheur (ordre de saisie), ou bien un ordre quelconque.
119     * Dans Allegro, ce rang sera utilisé pour ordonner ces opérations entre elles, dans les listes
120     * qui les représentent. S'il est absent, seule la date de début est utilisée pour cela.
121     * @return this.rankOrderOnPeriod Short
122     */
123    public Short getRankOrderOnPeriod()
124    {
125        return this.rankOrderOnPeriod;
126    }
127
128    /**
129     * Rang (de présentation) de l'opération, sur la période date début/fin.
130     * ATTENTION : Lorsque plusieurs opérations sont présentes sur la meme période, cela permet de
131     * les dissocier.
132     * C'est par exemple le cas des séquences de peches (opérations agrégées en Jour/Métier/Secteur)
133     * : plusieurs opérations peuvent etre sur le meme jour (avec des engin/secteur différents), il
134     * faut donc leur attribuer un rang, pour les distinguer. Ce rang peut etre celui de la
135     * déclaration du pecheur (ordre de saisie), ou bien un ordre quelconque.
136     * Dans Allegro, ce rang sera utilisé pour ordonner ces opérations entre elles, dans les listes
137     * qui les représentent. S'il est absent, seule la date de début est utilisée pour cela.
138     * @param rankOrderOnPeriodIn Short
139     */
140    public void setRankOrderOnPeriod(Short rankOrderOnPeriodIn)
141    {
142        this.rankOrderOnPeriod = rankOrderOnPeriodIn;
143    }
144
145    private Date startDateTime;
146
147    /**
148     * Date/heure de début de l'opération
149     * @return this.startDateTime Date
150     */
151    public Date getStartDateTime()
152    {
153        return this.startDateTime;
154    }
155
156    /**
157     * Date/heure de début de l'opération
158     * @param startDateTimeIn Date
159     */
160    public void setStartDateTime(Date startDateTimeIn)
161    {
162        this.startDateTime = startDateTimeIn;
163    }
164
165    private Date endDateTime;
166
167    /**
168     * Date/heure de fin de l'opération
169     * @return this.endDateTime Date
170     */
171    public Date getEndDateTime()
172    {
173        return this.endDateTime;
174    }
175
176    /**
177     * Date/heure de fin de l'opération
178     * @param endDateTimeIn Date
179     */
180    public void setEndDateTime(Date endDateTimeIn)
181    {
182        this.endDateTime = endDateTimeIn;
183    }
184
185    private Boolean isMainOperation;
186
187    /**
188     * <html>
189     * <head>
190     * <style>
191     * p {padding:0px; margin:0px;}
192     * </style>
193     * </head>
194     * <body>
195     * <p>
196     * Indique s'il s'agit d'une opération ou d'un groupe d'opérations &quot;principal&quot;.
197     * </p>
198     * <p>
199     * Cela est utilisé notamment quand on ne connait que l'activité principale (le métier) d'un
200     * navire. On parle alors de métrier principal.
201     * <br>
202     * </p>
203     * <p>
204     * &#160;
205     * </p>
206     * <p>
207     * Généralement, cet atrribut est utilisé pour des groupes d'opérations (<i>rankOrderOnPerod is
208     * not null</i>), pour identifier sur la marée ou une journée de peche, le groupe d'opération
209     * portant le métier principal de la marée ou de la journée.
210     * </p>
211     * </body>
212     * </html>
213     * @return this.isMainOperation Boolean
214     */
215    public Boolean getIsMainOperation()
216    {
217        return this.isMainOperation;
218    }
219
220    /**
221     * <html>
222     * <head>
223     * <style>
224     * p {padding:0px; margin:0px;}
225     * </style>
226     * </head>
227     * <body>
228     * <p>
229     * Indique s'il s'agit d'une opération ou d'un groupe d'opérations &quot;principal&quot;.
230     * </p>
231     * <p>
232     * Cela est utilisé notamment quand on ne connait que l'activité principale (le métier) d'un
233     * navire. On parle alors de métrier principal.
234     * <br>
235     * </p>
236     * <p>
237     * &#160;
238     * </p>
239     * <p>
240     * Généralement, cet atrribut est utilisé pour des groupes d'opérations (<i>rankOrderOnPerod is
241     * not null</i>), pour identifier sur la marée ou une journée de peche, le groupe d'opération
242     * portant le métier principal de la marée ou de la journée.
243     * </p>
244     * </body>
245     * </html>
246     * @param isMainOperationIn Boolean
247     */
248    public void setIsMainOperation(Boolean isMainOperationIn)
249    {
250        this.isMainOperation = isMainOperationIn;
251    }
252
253    private LineString position;
254
255    /**
256     * Géométrie de l'opération.
257     * Ce champ est optionnel pour etre compatible avec uDIG/geotools.
258     * @return this.position LineString
259     */
260    public LineString getPosition()
261    {
262        return this.position;
263    }
264
265    /**
266     * Géométrie de l'opération.
267     * Ce champ est optionnel pour etre compatible avec uDIG/geotools.
268     * @param positionIn LineString
269     */
270    public void setPosition(LineString positionIn)
271    {
272        this.position = positionIn;
273    }
274
275    private String comments;
276
277    /**
278     * 
279     * @return this.comments String
280     */
281    public String getComments()
282    {
283        return this.comments;
284    }
285
286    /**
287     * 
288     * @param commentsIn String
289     */
290    public void setComments(String commentsIn)
291    {
292        this.comments = commentsIn;
293    }
294
295    private Date controlDate;
296
297    /**
298     * 
299     * @return this.controlDate Date
300     */
301    public Date getControlDate()
302    {
303        return this.controlDate;
304    }
305
306    /**
307     * 
308     * @param controlDateIn Date
309     */
310    public void setControlDate(Date controlDateIn)
311    {
312        this.controlDate = controlDateIn;
313    }
314
315    private Date validationDate;
316
317    /**
318     * 
319     * @return this.validationDate Date
320     */
321    public Date getValidationDate()
322    {
323        return this.validationDate;
324    }
325
326    /**
327     * 
328     * @param validationDateIn Date
329     */
330    public void setValidationDate(Date validationDateIn)
331    {
332        this.validationDate = validationDateIn;
333    }
334
335    private Date qualificationDate;
336
337    /**
338     * 
339     * @return this.qualificationDate Date
340     */
341    public Date getQualificationDate()
342    {
343        return this.qualificationDate;
344    }
345
346    /**
347     * 
348     * @param qualificationDateIn Date
349     */
350    public void setQualificationDate(Date qualificationDateIn)
351    {
352        this.qualificationDate = qualificationDateIn;
353    }
354
355    private String qualificationComments;
356
357    /**
358     * 
359     * @return this.qualificationComments String
360     */
361    public String getQualificationComments()
362    {
363        return this.qualificationComments;
364    }
365
366    /**
367     * 
368     * @param qualificationCommentsIn String
369     */
370    public void setQualificationComments(String qualificationCommentsIn)
371    {
372        this.qualificationComments = qualificationCommentsIn;
373    }
374
375    // Generate 11 associations
376    private Collection<VesselPersonFeatures> vesselPersonFeatures = new HashSet<VesselPersonFeatures>();
377
378    /**
379     * Utilisé par exemple pour stocker les saisisseurs d'une opération, dans les campagne à la mer.
380     * @return this.vesselPersonFeatures Collection<VesselPersonFeatures>
381     */
382    public Collection<VesselPersonFeatures> getVesselPersonFeatures()
383    {
384        return this.vesselPersonFeatures;
385    }
386
387    /**
388     * Utilisé par exemple pour stocker les saisisseurs d'une opération, dans les campagne à la mer.
389     * @param vesselPersonFeaturesIn Collection<VesselPersonFeatures>
390     */
391    public void setVesselPersonFeatures(Collection<VesselPersonFeatures> vesselPersonFeaturesIn)
392    {
393        this.vesselPersonFeatures = vesselPersonFeaturesIn;
394    }
395
396    /**
397     * Utilisé par exemple pour stocker les saisisseurs d'une opération, dans les campagne à la mer.
398     * @param elementToAdd VesselPersonFeatures
399     * @return <tt>true</tt> if this collection changed as a result of the
400     *         call
401     */
402    public boolean addVesselPersonFeatures(VesselPersonFeatures elementToAdd)
403    {
404        return this.vesselPersonFeatures.add(elementToAdd);
405    }
406
407    /**
408     * Utilisé par exemple pour stocker les saisisseurs d'une opération, dans les campagne à la mer.
409     * @param elementToRemove VesselPersonFeatures
410     * @return <tt>true</tt> if this collection changed as a result of the
411     *         call
412     */
413    public boolean removeVesselPersonFeatures(VesselPersonFeatures elementToRemove)
414    {
415        return this.vesselPersonFeatures.remove(elementToRemove);
416    }
417
418    private QualityFlag qualityFlag;
419
420    /**
421     * Niveau de qualité de la donnée.
422     * "Non qualifiée" par défaut
423     * @return this.qualityFlag QualityFlag
424     */
425    public QualityFlag getQualityFlag()
426    {
427        return this.qualityFlag;
428    }
429
430    /**
431     * Niveau de qualité de la donnée.
432     * "Non qualifiée" par défaut
433     * @param qualityFlagIn QualityFlag
434     */
435    public void setQualityFlag(QualityFlag qualityFlagIn)
436    {
437        this.qualityFlag = qualityFlagIn;
438    }
439
440    private Vessel vessel;
441
442    /**
443     * Navire, ou plus généralement un usager de la ressource.
444     * Peut etre un navire de peche professionnel ou non, un navire scientifique, un pêcheur à pied,
445     * un
446     * groupement de navires, etc.
447     * @return this.vessel Vessel
448     */
449    public Vessel getVessel()
450    {
451        return this.vessel;
452    }
453
454    /**
455     * Navire, ou plus généralement un usager de la ressource.
456     * Peut etre un navire de peche professionnel ou non, un navire scientifique, un pêcheur à pied,
457     * un
458     * groupement de navires, etc.
459     * @param vesselIn Vessel
460     */
461    public void setVessel(Vessel vesselIn)
462    {
463        this.vessel = vesselIn;
464    }
465
466    private Collection<OperationVesselAssociation> operationVesselAssociations = new HashSet<OperationVesselAssociation>();
467
468    /**
469     * Informations permet de décrire, par exemple la stratégie de répartition entre le navire
470     * observé et
471     * le navire associé pour l'opération.
472     * En effet, des navires travaillent en paires (ou en bœufs), par exemple pour tirer à deux un
473     * meme
474     * chalut.
475     * note : Il peut s'agir d'un navire temporaire.
476     * @return this.operationVesselAssociations Collection<OperationVesselAssociation>
477     */
478    public Collection<OperationVesselAssociation> getOperationVesselAssociations()
479    {
480        return this.operationVesselAssociations;
481    }
482
483    /**
484     * Informations permet de décrire, par exemple la stratégie de répartition entre le navire
485     * observé et
486     * le navire associé pour l'opération.
487     * En effet, des navires travaillent en paires (ou en bœufs), par exemple pour tirer à deux un
488     * meme
489     * chalut.
490     * note : Il peut s'agir d'un navire temporaire.
491     * @param operationVesselAssociationsIn Collection<OperationVesselAssociation>
492     */
493    public void setOperationVesselAssociations(Collection<OperationVesselAssociation> operationVesselAssociationsIn)
494    {
495        this.operationVesselAssociations = operationVesselAssociationsIn;
496    }
497
498    /**
499     * Informations permet de décrire, par exemple la stratégie de répartition entre le navire
500     * observé et
501     * le navire associé pour l'opération.
502     * En effet, des navires travaillent en paires (ou en bœufs), par exemple pour tirer à deux un
503     * meme
504     * chalut.
505     * note : Il peut s'agir d'un navire temporaire.
506     * @param elementToAdd OperationVesselAssociation
507     * @return <tt>true</tt> if this collection changed as a result of the
508     *         call
509     */
510    public boolean addOperationVesselAssociations(OperationVesselAssociation elementToAdd)
511    {
512        return this.operationVesselAssociations.add(elementToAdd);
513    }
514
515    /**
516     * Informations permet de décrire, par exemple la stratégie de répartition entre le navire
517     * observé et
518     * le navire associé pour l'opération.
519     * En effet, des navires travaillent en paires (ou en bœufs), par exemple pour tirer à deux un
520     * meme
521     * chalut.
522     * note : Il peut s'agir d'un navire temporaire.
523     * @param elementToRemove OperationVesselAssociation
524     * @return <tt>true</tt> if this collection changed as a result of the
525     *         call
526     */
527    public boolean removeOperationVesselAssociations(OperationVesselAssociation elementToRemove)
528    {
529        return this.operationVesselAssociations.remove(elementToRemove);
530    }
531
532    private Collection<GearUseFeatures> gearUseFeatures = new HashSet<GearUseFeatures>();
533
534    /**
535     * Paramètre de mise en oeuvre de l'engin durant une opération.
536     * Exemple de paramètre de mise en oeuvre:
537     * • nombre de boués,
538     * • type de panneau,
539     * • présence d'un racasseur,
540     * • nombre de casier.
541     * mais aussi :
542     * • profondeur moyenne de l'engin,
543     * • vitesse de traine moyenne
544     * • ouverture du chalut
545     * @return this.gearUseFeatures Collection<GearUseFeatures>
546     */
547    public Collection<GearUseFeatures> getGearUseFeatures()
548    {
549        return this.gearUseFeatures;
550    }
551
552    /**
553     * Paramètre de mise en oeuvre de l'engin durant une opération.
554     * Exemple de paramètre de mise en oeuvre:
555     * • nombre de boués,
556     * • type de panneau,
557     * • présence d'un racasseur,
558     * • nombre de casier.
559     * mais aussi :
560     * • profondeur moyenne de l'engin,
561     * • vitesse de traine moyenne
562     * • ouverture du chalut
563     * @param gearUseFeaturesIn Collection<GearUseFeatures>
564     */
565    public void setGearUseFeatures(Collection<GearUseFeatures> gearUseFeaturesIn)
566    {
567        this.gearUseFeatures = gearUseFeaturesIn;
568    }
569
570    /**
571     * Paramètre de mise en oeuvre de l'engin durant une opération.
572     * Exemple de paramètre de mise en oeuvre:
573     * • nombre de boués,
574     * • type de panneau,
575     * • présence d'un racasseur,
576     * • nombre de casier.
577     * mais aussi :
578     * • profondeur moyenne de l'engin,
579     * • vitesse de traine moyenne
580     * • ouverture du chalut
581     * @param elementToAdd GearUseFeatures
582     * @return <tt>true</tt> if this collection changed as a result of the
583     *         call
584     */
585    public boolean addGearUseFeatures(GearUseFeatures elementToAdd)
586    {
587        return this.gearUseFeatures.add(elementToAdd);
588    }
589
590    /**
591     * Paramètre de mise en oeuvre de l'engin durant une opération.
592     * Exemple de paramètre de mise en oeuvre:
593     * • nombre de boués,
594     * • type de panneau,
595     * • présence d'un racasseur,
596     * • nombre de casier.
597     * mais aussi :
598     * • profondeur moyenne de l'engin,
599     * • vitesse de traine moyenne
600     * • ouverture du chalut
601     * @param elementToRemove GearUseFeatures
602     * @return <tt>true</tt> if this collection changed as a result of the
603     *         call
604     */
605    public boolean removeGearUseFeatures(GearUseFeatures elementToRemove)
606    {
607        return this.gearUseFeatures.remove(elementToRemove);
608    }
609
610    private Collection<VesselUseFeatures> vesselUseFeatures = new HashSet<VesselUseFeatures>();
611
612    /**
613     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
614     * données de
615     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
616     * Par exemple, pour les donénes d'observation :
617     * • profondeur de mer au début de l'opération, en mètre,
618     * • profondeur de mer à la fin de l'opération, en mètre,
619     * • déroulement de l'opération (normal, anormal, etc.)
620     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
621     * • trait rectiligne (oui/non)
622     * • cout en gazoil,
623     * • nombre d'engin perdu,
624     * • cout des pertes,
625     * • etc.
626     * Par exemple, pour les données de déclaration :
627     * • temps de pêche,
628     * • temps de route (qui peut aussi etre calculé à l'exploitation),
629     * • nombre d'opérations,
630     * • etc.
631     * @return this.vesselUseFeatures Collection<VesselUseFeatures>
632     */
633    public Collection<VesselUseFeatures> getVesselUseFeatures()
634    {
635        return this.vesselUseFeatures;
636    }
637
638    /**
639     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
640     * données de
641     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
642     * Par exemple, pour les donénes d'observation :
643     * • profondeur de mer au début de l'opération, en mètre,
644     * • profondeur de mer à la fin de l'opération, en mètre,
645     * • déroulement de l'opération (normal, anormal, etc.)
646     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
647     * • trait rectiligne (oui/non)
648     * • cout en gazoil,
649     * • nombre d'engin perdu,
650     * • cout des pertes,
651     * • etc.
652     * Par exemple, pour les données de déclaration :
653     * • temps de pêche,
654     * • temps de route (qui peut aussi etre calculé à l'exploitation),
655     * • nombre d'opérations,
656     * • etc.
657     * @param vesselUseFeaturesIn Collection<VesselUseFeatures>
658     */
659    public void setVesselUseFeatures(Collection<VesselUseFeatures> vesselUseFeaturesIn)
660    {
661        this.vesselUseFeatures = vesselUseFeaturesIn;
662    }
663
664    /**
665     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
666     * données de
667     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
668     * Par exemple, pour les donénes d'observation :
669     * • profondeur de mer au début de l'opération, en mètre,
670     * • profondeur de mer à la fin de l'opération, en mètre,
671     * • déroulement de l'opération (normal, anormal, etc.)
672     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
673     * • trait rectiligne (oui/non)
674     * • cout en gazoil,
675     * • nombre d'engin perdu,
676     * • cout des pertes,
677     * • etc.
678     * Par exemple, pour les données de déclaration :
679     * • temps de pêche,
680     * • temps de route (qui peut aussi etre calculé à l'exploitation),
681     * • nombre d'opérations,
682     * • etc.
683     * @param elementToAdd VesselUseFeatures
684     * @return <tt>true</tt> if this collection changed as a result of the
685     *         call
686     */
687    public boolean addVesselUseFeatures(VesselUseFeatures elementToAdd)
688    {
689        return this.vesselUseFeatures.add(elementToAdd);
690    }
691
692    /**
693     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
694     * données de
695     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
696     * Par exemple, pour les donénes d'observation :
697     * • profondeur de mer au début de l'opération, en mètre,
698     * • profondeur de mer à la fin de l'opération, en mètre,
699     * • déroulement de l'opération (normal, anormal, etc.)
700     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
701     * • trait rectiligne (oui/non)
702     * • cout en gazoil,
703     * • nombre d'engin perdu,
704     * • cout des pertes,
705     * • etc.
706     * Par exemple, pour les données de déclaration :
707     * • temps de pêche,
708     * • temps de route (qui peut aussi etre calculé à l'exploitation),
709     * • nombre d'opérations,
710     * • etc.
711     * @param elementToRemove VesselUseFeatures
712     * @return <tt>true</tt> if this collection changed as a result of the
713     *         call
714     */
715    public boolean removeVesselUseFeatures(VesselUseFeatures elementToRemove)
716    {
717        return this.vesselUseFeatures.remove(elementToRemove);
718    }
719
720    private GearPhysicalFeatures gearPhysicalFeatures;
721
722    /**
723     * Caractéristiques physique de l'engin déployé au cours de l'opération.
724     * Si l'opération est une opération de prélèvement, l'engin est forcément d'un engin de peche.
725     * Exemple de caratéristiques physiques :
726     * • engin : OTB (Chalut)
727     * • longueur de la corde de dos
728     * • largeur du maillage
729     * • type de matériaux du fil
730     * @return this.gearPhysicalFeatures GearPhysicalFeatures
731     */
732    public GearPhysicalFeatures getGearPhysicalFeatures()
733    {
734        return this.gearPhysicalFeatures;
735    }
736
737    /**
738     * Caractéristiques physique de l'engin déployé au cours de l'opération.
739     * Si l'opération est une opération de prélèvement, l'engin est forcément d'un engin de peche.
740     * Exemple de caratéristiques physiques :
741     * • engin : OTB (Chalut)
742     * • longueur de la corde de dos
743     * • largeur du maillage
744     * • type de matériaux du fil
745     * @param gearPhysicalFeaturesIn GearPhysicalFeatures
746     */
747    public void setGearPhysicalFeatures(GearPhysicalFeatures gearPhysicalFeaturesIn)
748    {
749        this.gearPhysicalFeatures = gearPhysicalFeaturesIn;
750    }
751
752    private Collection<VesselPositionVMS> vesselPositionVMSs = new HashSet<VesselPositionVMS>();
753
754    /**
755     * Positions du navires durant l'opération (date/heure/latitute/longitude).
756     * La première position (en date/heure) correspond au début de l'opération.
757     * La dernière position (en date/heure) correspond à la fin de l'opération.
758     * @return this.vesselPositionVMSs Collection<VesselPositionVMS>
759     */
760    public Collection<VesselPositionVMS> getVesselPositionVMSs()
761    {
762        return this.vesselPositionVMSs;
763    }
764
765    /**
766     * Positions du navires durant l'opération (date/heure/latitute/longitude).
767     * La première position (en date/heure) correspond au début de l'opération.
768     * La dernière position (en date/heure) correspond à la fin de l'opération.
769     * @param vesselPositionVMSsIn Collection<VesselPositionVMS>
770     */
771    public void setVesselPositionVMSs(Collection<VesselPositionVMS> vesselPositionVMSsIn)
772    {
773        this.vesselPositionVMSs = vesselPositionVMSsIn;
774    }
775
776    /**
777     * Positions du navires durant l'opération (date/heure/latitute/longitude).
778     * La première position (en date/heure) correspond au début de l'opération.
779     * La dernière position (en date/heure) correspond à la fin de l'opération.
780     * @param elementToAdd VesselPositionVMS
781     * @return <tt>true</tt> if this collection changed as a result of the
782     *         call
783     */
784    public boolean addVesselPositionVMSs(VesselPositionVMS elementToAdd)
785    {
786        return this.vesselPositionVMSs.add(elementToAdd);
787    }
788
789    /**
790     * Positions du navires durant l'opération (date/heure/latitute/longitude).
791     * La première position (en date/heure) correspond au début de l'opération.
792     * La dernière position (en date/heure) correspond à la fin de l'opération.
793     * @param elementToRemove VesselPositionVMS
794     * @return <tt>true</tt> if this collection changed as a result of the
795     *         call
796     */
797    public boolean removeVesselPositionVMSs(VesselPositionVMS elementToRemove)
798    {
799        return this.vesselPositionVMSs.remove(elementToRemove);
800    }
801
802    private Collection<VesselPosition> vesselPositions = new HashSet<VesselPosition>();
803
804    /**
805     * 
806     * @return this.vesselPositions Collection<VesselPosition>
807     */
808    public Collection<VesselPosition> getVesselPositions()
809    {
810        return this.vesselPositions;
811    }
812
813    /**
814     * 
815     * @param vesselPositionsIn Collection<VesselPosition>
816     */
817    public void setVesselPositions(Collection<VesselPosition> vesselPositionsIn)
818    {
819        this.vesselPositions = vesselPositionsIn;
820    }
821
822    /**
823     * 
824     * @param elementToAdd VesselPosition
825     * @return <tt>true</tt> if this collection changed as a result of the
826     *         call
827     */
828    public boolean addVesselPositions(VesselPosition elementToAdd)
829    {
830        return this.vesselPositions.add(elementToAdd);
831    }
832
833    /**
834     * 
835     * @param elementToRemove VesselPosition
836     * @return <tt>true</tt> if this collection changed as a result of the
837     *         call
838     */
839    public boolean removeVesselPositions(VesselPosition elementToRemove)
840    {
841        return this.vesselPositions.remove(elementToRemove);
842    }
843
844    private FishingTrip fishingTrip;
845
846    /**
847     * Voyage en mer, ayant pour vocation une activité de peche (peut etre une campagnes halieutique
848     * ou une
849     * marée d'un navire professionnel, etc.)
850     * Un voyage peut représenter type de données :
851     * - Une marée observée (en mer, au débarquement), qui désigne une marée de pêche
852     * professionnelle au
853     * cours de laquelle des relevés sont effectués par un observateur.
854     * - Une marée déclarée. Principalement issue du log book électronique (flux SACAPT). Une marée
855     * déclarée peut etre un ensemble de marée ou de sous-ensembles de marée (Exemple de la fiche de
856     * peche)
857     * - une sortie effectuée lors d"une campagne scientifique
858     * @return this.fishingTrip FishingTrip
859     */
860    public FishingTrip getFishingTrip()
861    {
862        return this.fishingTrip;
863    }
864
865    /**
866     * Voyage en mer, ayant pour vocation une activité de peche (peut etre une campagnes halieutique
867     * ou une
868     * marée d'un navire professionnel, etc.)
869     * Un voyage peut représenter type de données :
870     * - Une marée observée (en mer, au débarquement), qui désigne une marée de pêche
871     * professionnelle au
872     * cours de laquelle des relevés sont effectués par un observateur.
873     * - Une marée déclarée. Principalement issue du log book électronique (flux SACAPT). Une marée
874     * déclarée peut etre un ensemble de marée ou de sous-ensembles de marée (Exemple de la fiche de
875     * peche)
876     * - une sortie effectuée lors d"une campagne scientifique
877     * @param fishingTripIn FishingTrip
878     */
879    public void setFishingTrip(FishingTrip fishingTripIn)
880    {
881        this.fishingTrip = fishingTripIn;
882    }
883
884    /**
885     * Returns <code>true</code> if the argument is an Operation instance and all identifiers for this entity
886     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
887     */
888    @Override
889    public boolean equals(Object object)
890    {
891        if (this == object)
892        {
893            return true;
894        }
895        if (!(object instanceof Operation))
896        {
897            return false;
898        }
899        final Operation that = (Operation)object;
900        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
901        {
902            return false;
903        }
904        return true;
905    }
906
907    /**
908     * Returns a hash code based on this entity's identifiers.
909     */
910    @Override
911    public int hashCode()
912    {
913        int hashCode = 0;
914        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
915
916        return hashCode;
917    }
918
919    /**
920     * Constructs new instances of {@link Operation}.
921     */
922    public static final class Factory
923    {
924        /**
925         * Constructs a new instance of {@link Operation}.
926         * @return new OperationImpl()
927         */
928        public static Operation newInstance()
929        {
930            return new OperationImpl();
931        }
932
933        /**
934         * Constructs a new instance of {@link Operation}, taking all required and/or
935         * read-only properties as arguments, except for identifiers.
936         * @param qualityFlag QualityFlag
937         * @param vessel Vessel
938         * @return newInstance
939         */
940        public static Operation newInstance(QualityFlag qualityFlag, Vessel vessel)
941        {
942            final Operation entity = new OperationImpl();
943            entity.setQualityFlag(qualityFlag);
944            entity.setVessel(vessel);
945            return entity;
946        }
947
948        /**
949         * Constructs a new instance of {@link Operation}, taking all possible properties
950         * (except the identifier(s))as arguments.
951         * @param name String
952         * @param rankOrderOnPeriod Short
953         * @param startDateTime Date
954         * @param endDateTime Date
955         * @param isMainOperation Boolean
956         * @param position LineString
957         * @param comments String
958         * @param controlDate Date
959         * @param validationDate Date
960         * @param qualificationDate Date
961         * @param qualificationComments String
962         * @param vesselPersonFeatures Collection<VesselPersonFeatures>
963         * @param qualityFlag QualityFlag
964         * @param vessel Vessel
965         * @param operationVesselAssociations Collection<OperationVesselAssociation>
966         * @param gearUseFeatures Collection<GearUseFeatures>
967         * @param vesselUseFeatures Collection<VesselUseFeatures>
968         * @param gearPhysicalFeatures GearPhysicalFeatures
969         * @param vesselPositionVMSs Collection<VesselPositionVMS>
970         * @param vesselPositions Collection<VesselPosition>
971         * @param fishingTrip FishingTrip
972         * @return newInstance Operation
973         */
974        public static Operation newInstance(String name, Short rankOrderOnPeriod, Date startDateTime, Date endDateTime, Boolean isMainOperation, LineString position, String comments, Date controlDate, Date validationDate, Date qualificationDate, String qualificationComments, Collection<VesselPersonFeatures> vesselPersonFeatures, QualityFlag qualityFlag, Vessel vessel, Collection<OperationVesselAssociation> operationVesselAssociations, Collection<GearUseFeatures> gearUseFeatures, Collection<VesselUseFeatures> vesselUseFeatures, GearPhysicalFeatures gearPhysicalFeatures, Collection<VesselPositionVMS> vesselPositionVMSs, Collection<VesselPosition> vesselPositions, FishingTrip fishingTrip)
975        {
976            final Operation entity = new OperationImpl();
977            entity.setName(name);
978            entity.setRankOrderOnPeriod(rankOrderOnPeriod);
979            entity.setStartDateTime(startDateTime);
980            entity.setEndDateTime(endDateTime);
981            entity.setIsMainOperation(isMainOperation);
982            entity.setPosition(position);
983            entity.setComments(comments);
984            entity.setControlDate(controlDate);
985            entity.setValidationDate(validationDate);
986            entity.setQualificationDate(qualificationDate);
987            entity.setQualificationComments(qualificationComments);
988            entity.setVesselPersonFeatures(vesselPersonFeatures);
989            entity.setQualityFlag(qualityFlag);
990            entity.setVessel(vessel);
991            entity.setOperationVesselAssociations(operationVesselAssociations);
992            entity.setGearUseFeatures(gearUseFeatures);
993            entity.setVesselUseFeatures(vesselUseFeatures);
994            entity.setGearPhysicalFeatures(gearPhysicalFeatures);
995            entity.setVesselPositionVMSs(vesselPositionVMSs);
996            entity.setVesselPositions(vesselPositions);
997            entity.setFishingTrip(fishingTrip);
998            return entity;
999        }
1000    }
1001
1002    /**
1003     * @see Comparable#compareTo
1004     */
1005    public int compareTo(Operation o)
1006    {
1007        int cmp = 0;
1008        if (this.getId() != null)
1009        {
1010            cmp = this.getId().compareTo(o.getId());
1011        }
1012        else
1013        {
1014            if (this.getName() != null)
1015            {
1016                cmp = (cmp != 0 ? cmp : this.getName().compareTo(o.getName()));
1017            }
1018            if (this.getRankOrderOnPeriod() != null)
1019            {
1020                cmp = (cmp != 0 ? cmp : this.getRankOrderOnPeriod().compareTo(o.getRankOrderOnPeriod()));
1021            }
1022            if (this.getStartDateTime() != null)
1023            {
1024                cmp = (cmp != 0 ? cmp : this.getStartDateTime().compareTo(o.getStartDateTime()));
1025            }
1026            if (this.getEndDateTime() != null)
1027            {
1028                cmp = (cmp != 0 ? cmp : this.getEndDateTime().compareTo(o.getEndDateTime()));
1029            }
1030            if (this.getIsMainOperation() != null)
1031            {
1032                cmp = (cmp != 0 ? cmp : this.getIsMainOperation().compareTo(o.getIsMainOperation()));
1033            }
1034            if (this.getPosition() != null)
1035            {
1036                cmp = (cmp != 0 ? cmp : this.getPosition().compareTo(o.getPosition()));
1037            }
1038            if (this.getComments() != null)
1039            {
1040                cmp = (cmp != 0 ? cmp : this.getComments().compareTo(o.getComments()));
1041            }
1042            if (this.getControlDate() != null)
1043            {
1044                cmp = (cmp != 0 ? cmp : this.getControlDate().compareTo(o.getControlDate()));
1045            }
1046            if (this.getValidationDate() != null)
1047            {
1048                cmp = (cmp != 0 ? cmp : this.getValidationDate().compareTo(o.getValidationDate()));
1049            }
1050            if (this.getQualificationDate() != null)
1051            {
1052                cmp = (cmp != 0 ? cmp : this.getQualificationDate().compareTo(o.getQualificationDate()));
1053            }
1054            if (this.getQualificationComments() != null)
1055            {
1056                cmp = (cmp != 0 ? cmp : this.getQualificationComments().compareTo(o.getQualificationComments()));
1057            }
1058        }
1059        return cmp;
1060    }
1061// HibernateEntity.vsl merge-point
1062// Operation.java merge-point
1063}