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.fishingArea;
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.data.produce.Produce;
032import fr.ifremer.adagio.core.dao.data.sample.Sample;
033import fr.ifremer.adagio.core.dao.data.survey.sale.Sale;
034import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures;
035import fr.ifremer.adagio.core.dao.data.vessel.feature.use.VesselUseFeatures;
036import fr.ifremer.adagio.core.dao.referential.DepthGradient;
037import fr.ifremer.adagio.core.dao.referential.DistanceToCoastGradient;
038import fr.ifremer.adagio.core.dao.referential.NearbySpecificArea;
039import fr.ifremer.adagio.core.dao.referential.QualityFlag;
040import fr.ifremer.adagio.core.dao.referential.location.Location;
041import java.io.Serializable;
042import java.util.Collection;
043import java.util.Date;
044import java.util.HashSet;
045
046/**
047 * <html>
048 * <head>
049 * <style>
050 * p {padding:0px; margin:0px;}
051 * </style>
052 * </head>
053 * <body>
054 * <p>
055 * Zone de peche ou d'activité effective d'un navire.
056 * </p>
057 * <p>
058 * </p>
059 * <p>
060 * Contient une entrée pour chaque zone de peche d'un navire.
061 * </p>
062 * <p>
063 * </p>
064 * <p>
065 * ATTENTION : ne pas réutiliser une zone de peche effective dèjà
066 * existante, à cause des liens de composition (et des contraintes &quot;delete
067 * cascade&quot;) depuis les autres tables.
068 * </p>
069 * <p>
070 * Votre enregistrement pourrait etre supprimée par quelqu'un d'autre !
071 * </p>
072 * <p>
073 * </p>
074 * <p>
075 * </p>
076 * <p>
077 * <u>Cas particulier des campagnes scientifiques (F.Coppin) : </u>Dans le
078 * cas des campagnes scientifiques, ce concept correspond à une &quot;station&quot;. La
079 * notion exacte de Fishing Area est définie suivant le protocole spatiale
080 * mise en place. En effet, la notion la plus fine d'aire de travail est la
081 * localité (stockée  <i>FishingArea2RegulationLocation</i>).
082 * L'ordre de réalisation des prélèvements pouvant changer d'une année sur
083 * l'autre, la localité permet de disposer d'un code unique pour une zone
084 * de prélèvement donnée. Cette localité peut s'inscrire ou non selon le
085 * protocole dans une strate (stcokée dans <i>FishingArea2RegulationLocation)</i>
086 * définie dans le cadre du programme lié à la série (ce paramétrage est
087 * stocké dans les <i>Program</i> et <i>Strategy</i>). Il s'agit alors
088 * d'un 2ème niveau géographique pouvant contenir une ou plusieurs
089 * localités.
090 * </p>
091 * <p>
092 * Toutes les situations peuvent être envisagées :
093 * </p>
094 * <ul>
095 * <li>
096 * Localités + strates
097 * </li>
098 * <li>
099 * Localités sans strate
100 * </li>
101 * <li>
102 * Strates sans localité
103 * </li>
104 * <li>
105 * ni localité ni strate
106 * </li>
107 * </ul>
108 * <p>
109 * En plus de ces options la notion de strate bathymétrique peut exister.
110 * </p>
111 * <p>
112 * Dans tous les cas de figure ces divers éléments géographiques doivent
113 * s'inscrivent dans la notion officielle de rectangle ou sous rectangle
114 * statistique (stcoké dans <i>FishingArea.location</i>).
115 * </p>
116 * <p>
117 * </p>
118 * </body>
119 * </html>
120 */
121// HibernateEntity.vsl annotations merge-point
122public abstract class FishingArea
123    implements Serializable, Comparable<FishingArea>
124{
125    /**
126     * The serial version UID of this class. Needed for serialization.
127     */
128    private static final long serialVersionUID = -3744603833038946960L;
129
130    // Generate 3 attributes
131    private Integer id;
132
133    /**
134     * Idenfiant interne. Généré par le système.
135     * @return this.id Integer
136     */
137    public Integer getId()
138    {
139        return this.id;
140    }
141
142    /**
143     * Idenfiant interne. Généré par le système.
144     * @param idIn Integer
145     */
146    public void setId(Integer idIn)
147    {
148        this.id = idIn;
149    }
150
151    private Date qualificationDate;
152
153    /**
154     * @since 3.5.0
155     * @return this.qualificationDate Date
156     */
157    public Date getQualificationDate()
158    {
159        return this.qualificationDate;
160    }
161
162    /**
163     * @since 3.5.0
164     * @param qualificationDateIn Date
165     */
166    public void setQualificationDate(Date qualificationDateIn)
167    {
168        this.qualificationDate = qualificationDateIn;
169    }
170
171    private String qualificationComments;
172
173    /**
174     * @since 3.5.0
175     * @return this.qualificationComments String
176     */
177    public String getQualificationComments()
178    {
179        return this.qualificationComments;
180    }
181
182    /**
183     * @since 3.5.0
184     * @param qualificationCommentsIn String
185     */
186    public void setQualificationComments(String qualificationCommentsIn)
187    {
188        this.qualificationComments = qualificationCommentsIn;
189    }
190
191    // Generate 12 associations
192    private Collection<FishingArea2ManagedLocation> fishingArea2ManagedLocations = new HashSet<FishingArea2ManagedLocation>();
193
194    /**
195     * 
196     * @return this.fishingArea2ManagedLocations Collection<FishingArea2ManagedLocation>
197     */
198    public Collection<FishingArea2ManagedLocation> getFishingArea2ManagedLocations()
199    {
200        return this.fishingArea2ManagedLocations;
201    }
202
203    /**
204     * 
205     * @param fishingArea2ManagedLocationsIn Collection<FishingArea2ManagedLocation>
206     */
207    public void setFishingArea2ManagedLocations(Collection<FishingArea2ManagedLocation> fishingArea2ManagedLocationsIn)
208    {
209        this.fishingArea2ManagedLocations = fishingArea2ManagedLocationsIn;
210    }
211
212    /**
213     * 
214     * @param elementToAdd FishingArea2ManagedLocation
215     * @return <tt>true</tt> if this collection changed as a result of the
216     *         call
217     */
218    public boolean addFishingArea2ManagedLocations(FishingArea2ManagedLocation elementToAdd)
219    {
220        return this.fishingArea2ManagedLocations.add(elementToAdd);
221    }
222
223    /**
224     * 
225     * @param elementToRemove FishingArea2ManagedLocation
226     * @return <tt>true</tt> if this collection changed as a result of the
227     *         call
228     */
229    public boolean removeFishingArea2ManagedLocations(FishingArea2ManagedLocation elementToRemove)
230    {
231        return this.fishingArea2ManagedLocations.remove(elementToRemove);
232    }
233
234    private Collection<FishingArea2RegulationLocation> regulationLocations = new HashSet<FishingArea2RegulationLocation>();
235
236    /**
237     * Zones réglementaires particulières (ex : ZEE, zone d'effort, etc.)
238     * @return this.regulationLocations Collection<FishingArea2RegulationLocation>
239     */
240    public Collection<FishingArea2RegulationLocation> getRegulationLocations()
241    {
242        return this.regulationLocations;
243    }
244
245    /**
246     * Zones réglementaires particulières (ex : ZEE, zone d'effort, etc.)
247     * @param regulationLocationsIn Collection<FishingArea2RegulationLocation>
248     */
249    public void setRegulationLocations(Collection<FishingArea2RegulationLocation> regulationLocationsIn)
250    {
251        this.regulationLocations = regulationLocationsIn;
252    }
253
254    /**
255     * Zones réglementaires particulières (ex : ZEE, zone d'effort, etc.)
256     * @param elementToAdd FishingArea2RegulationLocation
257     * @return <tt>true</tt> if this collection changed as a result of the
258     *         call
259     */
260    public boolean addRegulationLocations(FishingArea2RegulationLocation elementToAdd)
261    {
262        return this.regulationLocations.add(elementToAdd);
263    }
264
265    /**
266     * Zones réglementaires particulières (ex : ZEE, zone d'effort, etc.)
267     * @param elementToRemove FishingArea2RegulationLocation
268     * @return <tt>true</tt> if this collection changed as a result of the
269     *         call
270     */
271    public boolean removeRegulationLocations(FishingArea2RegulationLocation elementToRemove)
272    {
273        return this.regulationLocations.remove(elementToRemove);
274    }
275
276    private Produce produce;
277
278    /**
279     * <html>
280     * <head>
281     * </head>
282     * <body>
283     * <p>
284     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
285     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
286     * </p>
287     * <p>
288     * </p>
289     * <p>
290     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
291     * </p>
292     * <p>
293     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
294     * &#233;conomiques, comme par exemple :
295     * </p>
296     * <p>
297     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
298     * par exemple : prix au kilo, et prix total en euros.
299     * </p>
300     * <p>
301     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
302     * collective control&#233;e par un organisme tier. (cf SACROIS)
303     * </p>
304     * <p>
305     * - Destination commerciale : consommation humaine, consommation animale,
306     * etc .
307     * </p>
308     * </body>
309     * </html>
310     * @return this.produce Produce
311     */
312    public Produce getProduce()
313    {
314        return this.produce;
315    }
316
317    /**
318     * <html>
319     * <head>
320     * </head>
321     * <body>
322     * <p>
323     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
324     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
325     * </p>
326     * <p>
327     * </p>
328     * <p>
329     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
330     * </p>
331     * <p>
332     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
333     * &#233;conomiques, comme par exemple :
334     * </p>
335     * <p>
336     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
337     * par exemple : prix au kilo, et prix total en euros.
338     * </p>
339     * <p>
340     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
341     * collective control&#233;e par un organisme tier. (cf SACROIS)
342     * </p>
343     * <p>
344     * - Destination commerciale : consommation humaine, consommation animale,
345     * etc .
346     * </p>
347     * </body>
348     * </html>
349     * @param produceIn Produce
350     */
351    public void setProduce(Produce produceIn)
352    {
353        this.produce = produceIn;
354    }
355
356    private GearUseFeatures gearUseFeatures;
357
358    /**
359     * Paramètre de mise en oeuvre de l'engin durant une opération.
360     * Exemple de paramètre de mise en oeuvre:
361     * • nombre de boués,
362     * • type de panneau,
363     * • présence d'un racasseur,
364     * • nombre de casier.
365     * mais aussi :
366     * • profondeur moyenne de l'engin,
367     * • vitesse de traine moyenne
368     * • ouverture du chalut
369     * @return this.gearUseFeatures GearUseFeatures
370     */
371    public GearUseFeatures getGearUseFeatures()
372    {
373        return this.gearUseFeatures;
374    }
375
376    /**
377     * Paramètre de mise en oeuvre de l'engin durant une opération.
378     * Exemple de paramètre de mise en oeuvre:
379     * • nombre de boués,
380     * • type de panneau,
381     * • présence d'un racasseur,
382     * • nombre de casier.
383     * mais aussi :
384     * • profondeur moyenne de l'engin,
385     * • vitesse de traine moyenne
386     * • ouverture du chalut
387     * @param gearUseFeaturesIn GearUseFeatures
388     */
389    public void setGearUseFeatures(GearUseFeatures gearUseFeaturesIn)
390    {
391        this.gearUseFeatures = gearUseFeaturesIn;
392    }
393
394    private VesselUseFeatures vesselUseFeatures;
395
396    /**
397     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
398     * données de
399     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
400     * Par exemple, pour les donénes d'observation :
401     * • profondeur de mer au début de l'opération, en mètre,
402     * • profondeur de mer à la fin de l'opération, en mètre,
403     * • déroulement de l'opération (normal, anormal, etc.)
404     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
405     * • trait rectiligne (oui/non)
406     * • cout en gazoil,
407     * • nombre d'engin perdu,
408     * • cout des pertes,
409     * • etc.
410     * Par exemple, pour les données de déclaration :
411     * • temps de pêche,
412     * • temps de route (qui peut aussi etre calculé à l'exploitation),
413     * • nombre d'opérations,
414     * • etc.
415     * @return this.vesselUseFeatures VesselUseFeatures
416     */
417    public VesselUseFeatures getVesselUseFeatures()
418    {
419        return this.vesselUseFeatures;
420    }
421
422    /**
423     * Paramètres de mise en oeuvre du navire. Il peut s'agir de données d'observation comme de
424     * données de
425     * déclaration, mais liée à comment est utilisé le navire et dans quelles conditions.
426     * Par exemple, pour les donénes d'observation :
427     * • profondeur de mer au début de l'opération, en mètre,
428     * • profondeur de mer à la fin de l'opération, en mètre,
429     * • déroulement de l'opération (normal, anormal, etc.)
430     * • état de la mer lors durant l'opération : échelle de 0 à 9 (4=agitée, etc)
431     * • trait rectiligne (oui/non)
432     * • cout en gazoil,
433     * • nombre d'engin perdu,
434     * • cout des pertes,
435     * • etc.
436     * Par exemple, pour les données de déclaration :
437     * • temps de pêche,
438     * • temps de route (qui peut aussi etre calculé à l'exploitation),
439     * • nombre d'opérations,
440     * • etc.
441     * @param vesselUseFeaturesIn VesselUseFeatures
442     */
443    public void setVesselUseFeatures(VesselUseFeatures vesselUseFeaturesIn)
444    {
445        this.vesselUseFeatures = vesselUseFeaturesIn;
446    }
447
448    private NearbySpecificArea nearbySpecificArea;
449
450    /**
451     * Type de zone de proximité particulière.
452     * Par exemple :
453     * - DCP (Dispositif de Concentration de Poison)
454     * - Filière aquacole
455     * - ...
456     * (liste non exhaustive)
457     * Nombre de lignes : 10
458     * @return this.nearbySpecificArea NearbySpecificArea
459     */
460    public NearbySpecificArea getNearbySpecificArea()
461    {
462        return this.nearbySpecificArea;
463    }
464
465    /**
466     * Type de zone de proximité particulière.
467     * Par exemple :
468     * - DCP (Dispositif de Concentration de Poison)
469     * - Filière aquacole
470     * - ...
471     * (liste non exhaustive)
472     * Nombre de lignes : 10
473     * @param nearbySpecificAreaIn NearbySpecificArea
474     */
475    public void setNearbySpecificArea(NearbySpecificArea nearbySpecificAreaIn)
476    {
477        this.nearbySpecificArea = nearbySpecificAreaIn;
478    }
479
480    private DepthGradient depthGradient;
481
482    /**
483     * Type de gradient de profondeur de la zone de pêche.
484     * @return this.depthGradient DepthGradient
485     */
486    public DepthGradient getDepthGradient()
487    {
488        return this.depthGradient;
489    }
490
491    /**
492     * Type de gradient de profondeur de la zone de pêche.
493     * @param depthGradientIn DepthGradient
494     */
495    public void setDepthGradient(DepthGradient depthGradientIn)
496    {
497        this.depthGradient = depthGradientIn;
498    }
499
500    private DistanceToCoastGradient distanceToCoastGradient;
501
502    /**
503     * Gradient de distance à la cote.
504     * passage en optionel nécessaire pour SACROIS.
505     * @return this.distanceToCoastGradient DistanceToCoastGradient
506     */
507    public DistanceToCoastGradient getDistanceToCoastGradient()
508    {
509        return this.distanceToCoastGradient;
510    }
511
512    /**
513     * Gradient de distance à la cote.
514     * passage en optionel nécessaire pour SACROIS.
515     * @param distanceToCoastGradientIn DistanceToCoastGradient
516     */
517    public void setDistanceToCoastGradient(DistanceToCoastGradient distanceToCoastGradientIn)
518    {
519        this.distanceToCoastGradient = distanceToCoastGradientIn;
520    }
521
522    private Location location;
523
524    /**
525     * Représente un lieu au sens général du terme. Il peut s'agir d'un lieu ponctuel, linéaire ou
526     * surfacique.
527     * Suivant sa classification et son niveau, il peut s'agir d'un secteur FAO, un port de pêche,
528     * un
529     * quartier maritime, une criée, etc.
530     * Nombre de lignes : lieux terrestre : 4500 + secteurs : 11210 + strates : 1000 + localités :
531     * 200
532     * @return this.location Location
533     */
534    public Location getLocation()
535    {
536        return this.location;
537    }
538
539    /**
540     * Représente un lieu au sens général du terme. Il peut s'agir d'un lieu ponctuel, linéaire ou
541     * surfacique.
542     * Suivant sa classification et son niveau, il peut s'agir d'un secteur FAO, un port de pêche,
543     * un
544     * quartier maritime, une criée, etc.
545     * Nombre de lignes : lieux terrestre : 4500 + secteurs : 11210 + strates : 1000 + localités :
546     * 200
547     * @param locationIn Location
548     */
549    public void setLocation(Location locationIn)
550    {
551        this.location = locationIn;
552    }
553
554    private Sale sale;
555
556    /**
557     * Lien vers la vente rattachée.
558     * Nécessaire pour Allegro ObsVente (v3.1), qui nécessite qu'une vente soit liée à des zones en
559     * mer. Ceci pour le calcul des RTP dans l'échantillonnage biologique. Ces zones en mer sont
560     * récupérées à partir de la ligne du plan d'echantillonnage, depuis WAO.
561     * @return this.sale Sale
562     */
563    public Sale getSale()
564    {
565        return this.sale;
566    }
567
568    /**
569     * Lien vers la vente rattachée.
570     * Nécessaire pour Allegro ObsVente (v3.1), qui nécessite qu'une vente soit liée à des zones en
571     * mer. Ceci pour le calcul des RTP dans l'échantillonnage biologique. Ces zones en mer sont
572     * récupérées à partir de la ligne du plan d'echantillonnage, depuis WAO.
573     * @param saleIn Sale
574     */
575    public void setSale(Sale saleIn)
576    {
577        this.sale = saleIn;
578    }
579
580    private QualityFlag qualityFlag;
581
582    /**
583     * @since 3.5.0
584     * @return this.qualityFlag QualityFlag
585     */
586    public QualityFlag getQualityFlag()
587    {
588        return this.qualityFlag;
589    }
590
591    /**
592     * @since 3.5.0
593     * @param qualityFlagIn QualityFlag
594     */
595    public void setQualityFlag(QualityFlag qualityFlagIn)
596    {
597        this.qualityFlag = qualityFlagIn;
598    }
599
600    private Sample sample;
601
602    /**
603     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
604     * d'un
605     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
606     * pour
607     * analyse ou dénombrement.
608     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
609     * débarquement ou à
610     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
611     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
612     * support
613     * est, par exemple :
614     * - crustacé (crevette...)
615     * - poisson (merlu, sardine...)
616     * - gastéropode (bigorneau, littorine...)
617     * - echinoderme (oursin...)
618     * - etc.
619     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
620     * plusieurs
621     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
622     * pourra
623     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
624     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
625     * prélèvement,
626     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
627     * des
628     * lectures d'age, etc..
629     * Par exemple de prélèvement :
630     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
631     * afin de
632     * réaliser une lecture d'age.
633     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
634     * - etc.
635     * @return this.sample Sample
636     */
637    public Sample getSample()
638    {
639        return this.sample;
640    }
641
642    /**
643     * Un prélèvement représente un (et un seul) support, prélevé au cours d'une opération de peche,
644     * d'un
645     * échantillonnage au débarquement ou d'une vente. Il s'agit de la partie qui est recueillie
646     * pour
647     * analyse ou dénombrement.
648     * Un prélèvement est rattaché à une opération de peche ou un groupe d'opérations, un
649     * débarquement ou à
650     * une vente. Il peut être en plus rattaché à un des lots échantillonnés (le lot de provenance).
651     * Dans le cas des marées observées en mer, un prlèvement correspond à un individu, dont le
652     * support
653     * est, par exemple :
654     * - crustacé (crevette...)
655     * - poisson (merlu, sardine...)
656     * - gastéropode (bigorneau, littorine...)
657     * - echinoderme (oursin...)
658     * - etc.
659     * Le nombre d'individu, généralement égal à 1, permet de constituer des prélèvement de
660     * plusieurs
661     * individu (dès lors qu'il sont ne meme anture). Chaque résultat de mesure (SampleMeasurement)
662     * pourra
663     * identifié l'individu concerné par la mesure, par une numéro din'dividu.
664     * Un mnémonique, représentant généralement l'étiquette collée sur le sachet contenant le
665     * prélèvement,
666     * permet d"identifier le prélèvement de manière simple, notamment en laboratoire pour la saisie
667     * des
668     * lectures d'age, etc..
669     * Par exemple de prélèvement :
670     * - un poisson, d'une espèce donnée, sur lequel est prélevé un otholithe, et/ou des écailes
671     * afin de
672     * réaliser une lecture d'age.
673     * - un cétacé, issu d'un lot, sur lesquels doit être effectué des analyses d'age, de taille,
674     * - etc.
675     * @param sampleIn Sample
676     */
677    public void setSample(Sample sampleIn)
678    {
679        this.sample = sampleIn;
680    }
681
682    /**
683     * Returns <code>true</code> if the argument is an FishingArea instance and all identifiers for this entity
684     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
685     */
686    @Override
687    public boolean equals(Object object)
688    {
689        if (this == object)
690        {
691            return true;
692        }
693        if (!(object instanceof FishingArea))
694        {
695            return false;
696        }
697        final FishingArea that = (FishingArea)object;
698        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
699        {
700            return false;
701        }
702        return true;
703    }
704
705    /**
706     * Returns a hash code based on this entity's identifiers.
707     */
708    @Override
709    public int hashCode()
710    {
711        int hashCode = 0;
712        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
713
714        return hashCode;
715    }
716
717    /**
718     * Constructs new instances of {@link FishingArea}.
719     */
720    public static final class Factory
721    {
722        /**
723         * Constructs a new instance of {@link FishingArea}.
724         * @return new FishingAreaImpl()
725         */
726        public static FishingArea newInstance()
727        {
728            return new FishingAreaImpl();
729        }
730
731        /**
732         * Constructs a new instance of {@link FishingArea}, taking all required and/or
733         * read-only properties as arguments, except for identifiers.
734         * @param distanceToCoastGradient DistanceToCoastGradient
735         * @param location Location
736         * @param qualityFlag QualityFlag
737         * @return newInstance
738         */
739        public static FishingArea newInstance(DistanceToCoastGradient distanceToCoastGradient, Location location, QualityFlag qualityFlag)
740        {
741            final FishingArea entity = new FishingAreaImpl();
742            entity.setDistanceToCoastGradient(distanceToCoastGradient);
743            entity.setLocation(location);
744            entity.setQualityFlag(qualityFlag);
745            return entity;
746        }
747
748        /**
749         * Constructs a new instance of {@link FishingArea}, taking all possible properties
750         * (except the identifier(s))as arguments.
751         * @param qualificationDate Date
752         * @param qualificationComments String
753         * @param fishingArea2ManagedLocations Collection<FishingArea2ManagedLocation>
754         * @param regulationLocations Collection<FishingArea2RegulationLocation>
755         * @param produce Produce
756         * @param gearUseFeatures GearUseFeatures
757         * @param vesselUseFeatures VesselUseFeatures
758         * @param nearbySpecificArea NearbySpecificArea
759         * @param depthGradient DepthGradient
760         * @param distanceToCoastGradient DistanceToCoastGradient
761         * @param location Location
762         * @param sale Sale
763         * @param qualityFlag QualityFlag
764         * @param sample Sample
765         * @return newInstance FishingArea
766         */
767        public static FishingArea newInstance(Date qualificationDate, String qualificationComments, Collection<FishingArea2ManagedLocation> fishingArea2ManagedLocations, Collection<FishingArea2RegulationLocation> regulationLocations, Produce produce, GearUseFeatures gearUseFeatures, VesselUseFeatures vesselUseFeatures, NearbySpecificArea nearbySpecificArea, DepthGradient depthGradient, DistanceToCoastGradient distanceToCoastGradient, Location location, Sale sale, QualityFlag qualityFlag, Sample sample)
768        {
769            final FishingArea entity = new FishingAreaImpl();
770            entity.setQualificationDate(qualificationDate);
771            entity.setQualificationComments(qualificationComments);
772            entity.setFishingArea2ManagedLocations(fishingArea2ManagedLocations);
773            entity.setRegulationLocations(regulationLocations);
774            entity.setProduce(produce);
775            entity.setGearUseFeatures(gearUseFeatures);
776            entity.setVesselUseFeatures(vesselUseFeatures);
777            entity.setNearbySpecificArea(nearbySpecificArea);
778            entity.setDepthGradient(depthGradient);
779            entity.setDistanceToCoastGradient(distanceToCoastGradient);
780            entity.setLocation(location);
781            entity.setSale(sale);
782            entity.setQualityFlag(qualityFlag);
783            entity.setSample(sample);
784            return entity;
785        }
786    }
787
788    /**
789     * @see Comparable#compareTo
790     */
791    public int compareTo(FishingArea o)
792    {
793        int cmp = 0;
794        if (this.getId() != null)
795        {
796            cmp = this.getId().compareTo(o.getId());
797        }
798        else
799        {
800            if (this.getQualificationDate() != null)
801            {
802                cmp = (cmp != 0 ? cmp : this.getQualificationDate().compareTo(o.getQualificationDate()));
803            }
804            if (this.getQualificationComments() != null)
805            {
806                cmp = (cmp != 0 ? cmp : this.getQualificationComments().compareTo(o.getQualificationComments()));
807            }
808        }
809        return cmp;
810    }
811// HibernateEntity.vsl merge-point
812// FishingArea.java merge-point
813}