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.batch.CatchBatch;
033import fr.ifremer.adagio.core.dao.data.produce.Produce;
034import fr.ifremer.adagio.core.dao.data.sample.Sample;
035import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
036import fr.ifremer.adagio.core.dao.data.vessel.Vessel;
037import fr.ifremer.adagio.core.dao.data.vessel.feature.person.VesselPersonFeatures;
038import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.GearPhysicalFeatures;
039import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures;
040import fr.ifremer.adagio.core.dao.data.vessel.feature.use.VesselUseFeatures;
041import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPosition;
042import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPositionVMS;
043import fr.ifremer.adagio.core.dao.referential.QualityFlag;
044import java.util.Collection;
045import java.util.Date;
046import java.util.HashSet;
047
048/**
049 * Opération de peche durant laquelle un prélèvement peut etre effectué, au cours d'une sortie en
050 * mer (marée observée en mer, marée enquetée au débarquement, sortie lors d'une campagne à la mer,
051 * etc.).
052 * Il peut également s'agir d'une séquence de peche, lorsque les dates début/fin ne sont pas connus,
053 * et si la zone de peche est unique.
054 * Les dates/heures et lat/long de début/fin caractérisent le début/fin de la capture réalisée (hors
055 * temps d'établissement de l'engin).
056 * REMARQUE : les caractéristiques "indicateur jour/nuit" et "Trajectoire rectiligne ou non" sont
057 * présent à ce niveau dans Harmonie, mais gérés dans Allegro via les "cracatéristique d'utilisation
058 * du navire" (VesselUseFeatures) rattachée à l'opération parente.
059 */
060// HibernateEntity.vsl annotations merge-point
061public abstract class FishingOperation
062    extends OperationImpl
063{
064    /**
065     * The serial version UID of this class. Needed for serialization.
066     */
067    private static final long serialVersionUID = -5247889332101799215L;
068
069    // Generate 3 attributes
070    private Date fishingStartDateTime;
071
072    /**
073     * Date/heure au début du prélèvement.
074     * Par exemple, pour le cas d'une opération avec un chalut, il s'agit la date/heure à
075     * l'établissement du chalut (le temps de descente n'est pas pris en compte).
076     * @return this.fishingStartDateTime Date
077     */
078    public Date getFishingStartDateTime()
079    {
080        return this.fishingStartDateTime;
081    }
082
083    /**
084     * Date/heure au début du prélèvement.
085     * Par exemple, pour le cas d'une opération avec un chalut, il s'agit la date/heure à
086     * l'établissement du chalut (le temps de descente n'est pas pris en compte).
087     * @param fishingStartDateTimeIn Date
088     */
089    public void setFishingStartDateTime(Date fishingStartDateTimeIn)
090    {
091        this.fishingStartDateTime = fishingStartDateTimeIn;
092    }
093
094    private Date fishingEndDateTime;
095
096    /**
097     * Date/heure à la fin du prélèvement.
098     * Par exemple, pour le cas d'une opération avec un chalut, le temps de remontée n'est pas
099     * comptabilisé.
100     * @return this.fishingEndDateTime Date
101     */
102    public Date getFishingEndDateTime()
103    {
104        return this.fishingEndDateTime;
105    }
106
107    /**
108     * Date/heure à la fin du prélèvement.
109     * Par exemple, pour le cas d'une opération avec un chalut, le temps de remontée n'est pas
110     * comptabilisé.
111     * @param fishingEndDateTimeIn Date
112     */
113    public void setFishingEndDateTime(Date fishingEndDateTimeIn)
114    {
115        this.fishingEndDateTime = fishingEndDateTimeIn;
116    }
117
118    private Boolean hasCatch;
119
120    /**
121     * Une capture a t elle été prélevée ?
122     * Si non, il s'agit d'une opération de peche infructueuse.
123     * A priori, si une capture avec quantification différente de 0 est saisie, ou bien si des
124     * produits sont rattachés à l'opération, alors hasCatch=true (HAS_CATCH=1).
125     * Si on ne sait pas si une capture a été réalisée ou non, le champ est laissé vide.
126     * Champ utile pour les marées observées au débarquement, pour lesquelles on ne peut pas saisir
127     * systématiquement de lot capture ou bien des produits.
128     * @return this.hasCatch Boolean
129     */
130    public Boolean getHasCatch()
131    {
132        return this.hasCatch;
133    }
134
135    /**
136     * Une capture a t elle été prélevée ?
137     * Si non, il s'agit d'une opération de peche infructueuse.
138     * A priori, si une capture avec quantification différente de 0 est saisie, ou bien si des
139     * produits sont rattachés à l'opération, alors hasCatch=true (HAS_CATCH=1).
140     * Si on ne sait pas si une capture a été réalisée ou non, le champ est laissé vide.
141     * Champ utile pour les marées observées au débarquement, pour lesquelles on ne peut pas saisir
142     * systématiquement de lot capture ou bien des produits.
143     * @param hasCatchIn Boolean
144     */
145    public void setHasCatch(Boolean hasCatchIn)
146    {
147        this.hasCatch = hasCatchIn;
148    }
149
150    // Generate 3 associations
151    private Collection<Produce> produces = new HashSet<Produce>();
152
153    /**
154     * <html>
155     * <head>
156     * </head>
157     * <body>
158     * <p>
159     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
160     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
161     * </p>
162     * <p>
163     * </p>
164     * <p>
165     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
166     * </p>
167     * <p>
168     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
169     * &#233;conomiques, comme par exemple :
170     * </p>
171     * <p>
172     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
173     * par exemple : prix au kilo, et prix total en euros.
174     * </p>
175     * <p>
176     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
177     * collective control&#233;e par un organisme tier. (cf SACROIS)
178     * </p>
179     * <p>
180     * - Destination commerciale : consommation humaine, consommation animale,
181     * etc .
182     * </p>
183     * </body>
184     * </html>
185     * @return this.produces Collection<Produce>
186     */
187    public Collection<Produce> getProduces()
188    {
189        return this.produces;
190    }
191
192    /**
193     * <html>
194     * <head>
195     * </head>
196     * <body>
197     * <p>
198     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
199     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
200     * </p>
201     * <p>
202     * </p>
203     * <p>
204     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
205     * </p>
206     * <p>
207     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
208     * &#233;conomiques, comme par exemple :
209     * </p>
210     * <p>
211     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
212     * par exemple : prix au kilo, et prix total en euros.
213     * </p>
214     * <p>
215     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
216     * collective control&#233;e par un organisme tier. (cf SACROIS)
217     * </p>
218     * <p>
219     * - Destination commerciale : consommation humaine, consommation animale,
220     * etc .
221     * </p>
222     * </body>
223     * </html>
224     * @param producesIn Collection<Produce>
225     */
226    public void setProduces(Collection<Produce> producesIn)
227    {
228        this.produces = producesIn;
229    }
230
231    /**
232     * <html>
233     * <head>
234     * </head>
235     * <body>
236     * <p>
237     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
238     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
239     * </p>
240     * <p>
241     * </p>
242     * <p>
243     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
244     * </p>
245     * <p>
246     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
247     * &#233;conomiques, comme par exemple :
248     * </p>
249     * <p>
250     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
251     * par exemple : prix au kilo, et prix total en euros.
252     * </p>
253     * <p>
254     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
255     * collective control&#233;e par un organisme tier. (cf SACROIS)
256     * </p>
257     * <p>
258     * - Destination commerciale : consommation humaine, consommation animale,
259     * etc .
260     * </p>
261     * </body>
262     * </html>
263     * @param elementToAdd Produce
264     * @return <tt>true</tt> if this collection changed as a result of the
265     *         call
266     */
267    public boolean addProduces(Produce elementToAdd)
268    {
269        return this.produces.add(elementToAdd);
270    }
271
272    /**
273     * <html>
274     * <head>
275     * </head>
276     * <body>
277     * <p>
278     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
279     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
280     * </p>
281     * <p>
282     * </p>
283     * <p>
284     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
285     * </p>
286     * <p>
287     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
288     * &#233;conomiques, comme par exemple :
289     * </p>
290     * <p>
291     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
292     * par exemple : prix au kilo, et prix total en euros.
293     * </p>
294     * <p>
295     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
296     * collective control&#233;e par un organisme tier. (cf SACROIS)
297     * </p>
298     * <p>
299     * - Destination commerciale : consommation humaine, consommation animale,
300     * etc .
301     * </p>
302     * </body>
303     * </html>
304     * @param elementToRemove Produce
305     * @return <tt>true</tt> if this collection changed as a result of the
306     *         call
307     */
308    public boolean removeProduces(Produce elementToRemove)
309    {
310        return this.produces.remove(elementToRemove);
311    }
312
313    private CatchBatch catchBatch;
314
315    /**
316     * Capture réalisée au cours d'une opération, et sur laquelle un échantillonnage est réalisé.
317     * La capture porte donc l'arbre d''échantillonnage.
318     * @return this.catchBatch CatchBatch
319     */
320    public CatchBatch getCatchBatch()
321    {
322        return this.catchBatch;
323    }
324
325    /**
326     * Capture réalisée au cours d'une opération, et sur laquelle un échantillonnage est réalisé.
327     * La capture porte donc l'arbre d''échantillonnage.
328     * @param catchBatchIn CatchBatch
329     */
330    public void setCatchBatch(CatchBatch catchBatchIn)
331    {
332        this.catchBatch = catchBatchIn;
333    }
334
335    private Collection<Sample> samples = new HashSet<Sample>();
336
337    /**
338     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
339     * d'un
340     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
341     * pour
342     * analyse ou dénombrement.
343     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
344     * débarquement ou à
345     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
346     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
347     * support
348     * est, par exemple :
349     * - crustacé (crevette...)
350     * - poisson (merlu, sardine...)
351     * - gastéropode (bigorneau, littorine...)
352     * - echinoderme (oursin...)
353     * - etc.
354     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
355     * plusieurs
356     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
357     * pourra
358     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
359     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
360     * prélèvement,
361     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
362     * des
363     * lectures d'age, etc..
364     * Par exemple de prélèvement :
365     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
366     * afin de
367     * réaliser une lecture d'age.
368     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
369     * - etc.
370     * @return this.samples Collection<Sample>
371     */
372    public Collection<Sample> getSamples()
373    {
374        return this.samples;
375    }
376
377    /**
378     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
379     * d'un
380     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
381     * pour
382     * analyse ou dénombrement.
383     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
384     * débarquement ou à
385     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
386     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
387     * support
388     * est, par exemple :
389     * - crustacé (crevette...)
390     * - poisson (merlu, sardine...)
391     * - gastéropode (bigorneau, littorine...)
392     * - echinoderme (oursin...)
393     * - etc.
394     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
395     * plusieurs
396     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
397     * pourra
398     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
399     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
400     * prélèvement,
401     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
402     * des
403     * lectures d'age, etc..
404     * Par exemple de prélèvement :
405     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
406     * afin de
407     * réaliser une lecture d'age.
408     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
409     * - etc.
410     * @param samplesIn Collection<Sample>
411     */
412    public void setSamples(Collection<Sample> samplesIn)
413    {
414        this.samples = samplesIn;
415    }
416
417    /**
418     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
419     * d'un
420     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
421     * pour
422     * analyse ou dénombrement.
423     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
424     * débarquement ou à
425     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
426     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
427     * support
428     * est, par exemple :
429     * - crustacé (crevette...)
430     * - poisson (merlu, sardine...)
431     * - gastéropode (bigorneau, littorine...)
432     * - echinoderme (oursin...)
433     * - etc.
434     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
435     * plusieurs
436     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
437     * pourra
438     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
439     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
440     * prélèvement,
441     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
442     * des
443     * lectures d'age, etc..
444     * Par exemple de prélèvement :
445     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
446     * afin de
447     * réaliser une lecture d'age.
448     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
449     * - etc.
450     * @param elementToAdd Sample
451     * @return <tt>true</tt> if this collection changed as a result of the
452     *         call
453     */
454    public boolean addSamples(Sample elementToAdd)
455    {
456        return this.samples.add(elementToAdd);
457    }
458
459    /**
460     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
461     * d'un
462     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
463     * pour
464     * analyse ou dénombrement.
465     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
466     * débarquement ou à
467     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
468     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
469     * support
470     * est, par exemple :
471     * - crustacé (crevette...)
472     * - poisson (merlu, sardine...)
473     * - gastéropode (bigorneau, littorine...)
474     * - echinoderme (oursin...)
475     * - etc.
476     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
477     * plusieurs
478     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
479     * pourra
480     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
481     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
482     * prélèvement,
483     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
484     * des
485     * lectures d'age, etc..
486     * Par exemple de prélèvement :
487     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
488     * afin de
489     * réaliser une lecture d'age.
490     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
491     * - etc.
492     * @param elementToRemove Sample
493     * @return <tt>true</tt> if this collection changed as a result of the
494     *         call
495     */
496    public boolean removeSamples(Sample elementToRemove)
497    {
498        return this.samples.remove(elementToRemove);
499    }
500
501    /**
502     * This entity does not have any identifiers
503     * but since it extends the <code>OperationImpl</code> class
504     * it will simply delegate the call up there.
505     *
506     * @see fr.ifremer.adagio.core.dao.data.operation.Operation#equals(Object)
507     */
508    @Override
509    public boolean equals(Object object)
510    {
511        return super.equals(object);
512    }
513
514    /**
515     * This entity does not have any identifiers
516     * but since it extends the <code>OperationImpl</code> class
517     * it will simply delegate the call up there.
518     *
519     * @see fr.ifremer.adagio.core.dao.data.operation.Operation#hashCode()
520     */
521    @Override
522    public int hashCode()
523    {
524        return super.hashCode();
525    }
526
527    /**
528     * Constructs new instances of {@link FishingOperation}.
529     */
530    public static final class Factory
531    {
532        /**
533         * Constructs a new instance of {@link FishingOperation}.
534         * @return new FishingOperationImpl()
535         */
536        public static FishingOperation newInstance()
537        {
538            return new FishingOperationImpl();
539        }
540
541        /**
542         * Constructs a new instance of {@link FishingOperation}, taking all required and/or
543         * read-only properties as arguments, except for identifiers.
544         * @param qualityFlag QualityFlag
545         * @param vessel Vessel
546         * @return newInstance
547         */
548        public static FishingOperation newInstance(QualityFlag qualityFlag, Vessel vessel)
549        {
550            final FishingOperation entity = new FishingOperationImpl();
551            entity.setQualityFlag(qualityFlag);
552            entity.setVessel(vessel);
553            return entity;
554        }
555
556        /**
557         * Constructs a new instance of {@link FishingOperation}, taking all possible properties
558         * (except the identifier(s))as arguments.
559         * @param name String
560         * @param rankOrderOnPeriod Short
561         * @param startDateTime Date
562         * @param endDateTime Date
563         * @param isMainOperation Boolean
564         * @param position LineString
565         * @param comments String
566         * @param controlDate Date
567         * @param validationDate Date
568         * @param qualificationDate Date
569         * @param qualificationComments String
570         * @param vesselPersonFeatures Collection<VesselPersonFeatures>
571         * @param qualityFlag QualityFlag
572         * @param vessel Vessel
573         * @param operationVesselAssociations Collection<OperationVesselAssociation>
574         * @param gearUseFeatures Collection<GearUseFeatures>
575         * @param vesselUseFeatures Collection<VesselUseFeatures>
576         * @param gearPhysicalFeatures GearPhysicalFeatures
577         * @param vesselPositionVMSs Collection<VesselPositionVMS>
578         * @param vesselPositions Collection<VesselPosition>
579         * @param fishingTrip FishingTrip
580         * @param fishingStartDateTime Date
581         * @param fishingEndDateTime Date
582         * @param hasCatch Boolean
583         * @param produces Collection<Produce>
584         * @param catchBatch CatchBatch
585         * @param samples Collection<Sample>
586         * @return newInstance FishingOperation
587         */
588        public static FishingOperation 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, Date fishingStartDateTime, Date fishingEndDateTime, Boolean hasCatch, Collection<Produce> produces, CatchBatch catchBatch, Collection<Sample> samples)
589        {
590            final FishingOperation entity = new FishingOperationImpl();
591            entity.setName(name);
592            entity.setRankOrderOnPeriod(rankOrderOnPeriod);
593            entity.setStartDateTime(startDateTime);
594            entity.setEndDateTime(endDateTime);
595            entity.setIsMainOperation(isMainOperation);
596            entity.setPosition(position);
597            entity.setComments(comments);
598            entity.setControlDate(controlDate);
599            entity.setValidationDate(validationDate);
600            entity.setQualificationDate(qualificationDate);
601            entity.setQualificationComments(qualificationComments);
602            entity.setVesselPersonFeatures(vesselPersonFeatures);
603            entity.setQualityFlag(qualityFlag);
604            entity.setVessel(vessel);
605            entity.setOperationVesselAssociations(operationVesselAssociations);
606            entity.setGearUseFeatures(gearUseFeatures);
607            entity.setVesselUseFeatures(vesselUseFeatures);
608            entity.setGearPhysicalFeatures(gearPhysicalFeatures);
609            entity.setVesselPositionVMSs(vesselPositionVMSs);
610            entity.setVesselPositions(vesselPositions);
611            entity.setFishingTrip(fishingTrip);
612            entity.setFishingStartDateTime(fishingStartDateTime);
613            entity.setFishingEndDateTime(fishingEndDateTime);
614            entity.setHasCatch(hasCatch);
615            entity.setProduces(produces);
616            entity.setCatchBatch(catchBatch);
617            entity.setSamples(samples);
618            return entity;
619        }
620    }
621
622    /**
623     * @see Comparable#compareTo
624     */
625    public int compareTo(FishingOperation o)
626    {
627        int cmp = 0;
628        if (this.getId() != null)
629        {
630            cmp = this.getId().compareTo(o.getId());
631        }
632        else
633        {
634            if (this.getFishingStartDateTime() != null)
635            {
636                cmp = (cmp != 0 ? cmp : this.getFishingStartDateTime().compareTo(o.getFishingStartDateTime()));
637            }
638            if (this.getFishingEndDateTime() != null)
639            {
640                cmp = (cmp != 0 ? cmp : this.getFishingEndDateTime().compareTo(o.getFishingEndDateTime()));
641            }
642            if (this.getHasCatch() != null)
643            {
644                cmp = (cmp != 0 ? cmp : this.getHasCatch().compareTo(o.getHasCatch()));
645            }
646        }
647        return cmp;
648    }
649// HibernateEntity.vsl merge-point
650// FishingOperation.java merge-point
651}