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.vessel;
007
008/*
009 * #%L
010 * SIH-Adagio :: Core
011 * $Id:$
012 * $HeadURL:$
013 * %%
014 * Copyright (C) 2012 - 2014 Ifremer
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Affero General Public License as published by
018 * the Free Software Foundation, either version 3 of the License, or
019 * (at your option) any later version.
020 * 
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Public License for more details.
025 * 
026 * You should have received a copy of the GNU Affero General Public License
027 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
028 * #L%
029 */
030
031import fr.ifremer.adagio.core.dao.administration.programStrategy.Program;
032import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.VesselFeatures;
033import fr.ifremer.adagio.core.dao.data.vessel.regulation.RightToProduce;
034import fr.ifremer.adagio.core.dao.referential.Status;
035import fr.ifremer.adagio.core.dao.referential.VesselType;
036import java.io.Serializable;
037import java.sql.Timestamp;
038import java.util.Collection;
039import java.util.HashSet;
040
041/**
042 * Navire, ou plus généralement un usager de la ressource.
043 * Peut etre un navire de peche professionnel ou non, un navire scientifique, un pêcheur à pied, un
044 * groupement de navires, etc.
045 */
046// HibernateEntity.vsl annotations merge-point
047public abstract class Vessel
048    implements Serializable, Comparable<Vessel>
049{
050    /**
051     * The serial version UID of this class. Needed for serialization.
052     */
053    private static final long serialVersionUID = -6166084732904526931L;
054
055    // Generate 2 attributes
056    private String code;
057
058    /**
059     * <html>
060     * <head>
061     * <style>
062     * p {padding:0px; margin:0px;}
063     * </style>
064     * </head>
065     * <body>
066     * <p>
067     * Code du navire, c'est à dire son identifiant interne unique. Son
068     * identifiant interne ne change jamais, quelque soit son immatriculation,
069     * son lieu d'immatriculation, etc.
070     * </p>
071     * <p>
072     * </p>
073     * <p>
074     * Le code est sur 12 caractères pour permettre de stocker les 6 caractères
075     * du code Harmonie (+ dans Allegro un prefixe en base locale : &quot;#TEMP¿&quot;).
076     * </p>
077     * <p>
078     * </p>
079     * <p>
080     * =&gt; <b><u>Depuis le modèle V3.1.3</u></b>, une séquence
081     * VESSEL_CODE_SEQ permet de générer un identifiant unique, à convertir
082     * ensuite en alphanumérique.
083     * </p>
084     * </body>
085     * </html>
086     * @return this.code String
087     */
088    public String getCode()
089    {
090        return this.code;
091    }
092
093    /**
094     * <html>
095     * <head>
096     * <style>
097     * p {padding:0px; margin:0px;}
098     * </style>
099     * </head>
100     * <body>
101     * <p>
102     * Code du navire, c'est à dire son identifiant interne unique. Son
103     * identifiant interne ne change jamais, quelque soit son immatriculation,
104     * son lieu d'immatriculation, etc.
105     * </p>
106     * <p>
107     * </p>
108     * <p>
109     * Le code est sur 12 caractères pour permettre de stocker les 6 caractères
110     * du code Harmonie (+ dans Allegro un prefixe en base locale : &quot;#TEMP¿&quot;).
111     * </p>
112     * <p>
113     * </p>
114     * <p>
115     * =&gt; <b><u>Depuis le modèle V3.1.3</u></b>, une séquence
116     * VESSEL_CODE_SEQ permet de générer un identifiant unique, à convertir
117     * ensuite en alphanumérique.
118     * </p>
119     * </body>
120     * </html>
121     * @param codeIn String
122     */
123    public void setCode(String codeIn)
124    {
125        this.code = codeIn;
126    }
127
128    private Timestamp updateDate;
129
130    /**
131     * 
132     * @return this.updateDate Timestamp
133     */
134    public Timestamp getUpdateDate()
135    {
136        return this.updateDate;
137    }
138
139    /**
140     * 
141     * @param updateDateIn Timestamp
142     */
143    public void setUpdateDate(Timestamp updateDateIn)
144    {
145        this.updateDate = updateDateIn;
146    }
147
148    // Generate 34 associations
149    private Collection<VesselFleetEvent> vesselFleetEvents = new HashSet<VesselFleetEvent>();
150
151    /**
152     * <html>
153     * <head>
154     * <style>
155     * p {padding:0px; margin:0px;}
156     * </style>
157     * </head>
158     * <body>
159     * <p>
160     * Evènement d'entrée ou sortie de flotte (entrée ou sortie du registre des
161     * navires).
162     * </p>
163     * <p>
164     * </p>
165     * <p>
166     * Par exemple :
167     * </p>
168     * <ul>
169     * <li>
170     * Pour le flux FPC :
171     * </li>
172     * </ul>
173     * <!--StartFragment-->
174     * <div style="color:rgb(0, 0,
175     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
176     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
177     * <p style="margin-left:50.0px;">
178     * IMP<span style="white-space:pre-wrap;"> </span>Importation
179     * </p>
180     * </div>
181     * <div style="color:rgb(0, 0,
182     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
183     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
184     * <p style="margin-left:50.0px;">
185     * CHA<span style="white-space:pre-wrap;"> </span>Entrée dans le FPC
186     * </p>
187     * </div>
188     * <div style="color:rgb(0, 0,
189     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
190     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
191     * <p style="margin-left:50.0px;">
192     * CST<span style="white-space:pre-wrap;"> </span>Construction
193     * </p>
194     * </div>
195     * <div style="color:rgb(0, 0,
196     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
197     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
198     * <p style="margin-left:50.0px;">
199     * EXP<span style="white-space:pre-wrap;"> </span>Exportation
200     * </p>
201     * </div>
202     * <div style="color:rgb(0, 0,
203     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
204     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
205     * <p style="margin-left:50.0px;">
206     * COR<span style="white-space:pre-wrap;"> </span>Correction
207     * </p>
208     * </div>
209     * <div style="color:rgb(0, 0,
210     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
211     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
212     * <p style="margin-left:50.0px;">
213     * RET<span style="white-space:pre-wrap;"> </span>Retrait du FPC
214     * </p>
215     * </div>
216     * <div style="color:rgb(0, 0,
217     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
218     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
219     * <p style="margin-left:50.0px;">
220     * DES<span style="white-space:pre-wrap;"> </span>Destruction
221     * </p>
222     * </div>
223     * <div style="font-size:13px;font-style:normal;font-variant:normal;color:rgb(0, 0,
224     * 0);font-family:arial, sans-serif;">
225     * </div>
226     * </body>
227     * </html>
228     * @return this.vesselFleetEvents Collection<VesselFleetEvent>
229     */
230    public Collection<VesselFleetEvent> getVesselFleetEvents()
231    {
232        return this.vesselFleetEvents;
233    }
234
235    /**
236     * <html>
237     * <head>
238     * <style>
239     * p {padding:0px; margin:0px;}
240     * </style>
241     * </head>
242     * <body>
243     * <p>
244     * Evènement d'entrée ou sortie de flotte (entrée ou sortie du registre des
245     * navires).
246     * </p>
247     * <p>
248     * </p>
249     * <p>
250     * Par exemple :
251     * </p>
252     * <ul>
253     * <li>
254     * Pour le flux FPC :
255     * </li>
256     * </ul>
257     * <!--StartFragment-->
258     * <div style="color:rgb(0, 0,
259     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
260     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
261     * <p style="margin-left:50.0px;">
262     * IMP<span style="white-space:pre-wrap;"> </span>Importation
263     * </p>
264     * </div>
265     * <div style="color:rgb(0, 0,
266     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
267     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
268     * <p style="margin-left:50.0px;">
269     * CHA<span style="white-space:pre-wrap;"> </span>Entrée dans le FPC
270     * </p>
271     * </div>
272     * <div style="color:rgb(0, 0,
273     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
274     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
275     * <p style="margin-left:50.0px;">
276     * CST<span style="white-space:pre-wrap;"> </span>Construction
277     * </p>
278     * </div>
279     * <div style="color:rgb(0, 0,
280     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
281     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
282     * <p style="margin-left:50.0px;">
283     * EXP<span style="white-space:pre-wrap;"> </span>Exportation
284     * </p>
285     * </div>
286     * <div style="color:rgb(0, 0,
287     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
288     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
289     * <p style="margin-left:50.0px;">
290     * COR<span style="white-space:pre-wrap;"> </span>Correction
291     * </p>
292     * </div>
293     * <div style="color:rgb(0, 0,
294     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
295     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
296     * <p style="margin-left:50.0px;">
297     * RET<span style="white-space:pre-wrap;"> </span>Retrait du FPC
298     * </p>
299     * </div>
300     * <div style="color:rgb(0, 0,
301     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
302     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
303     * <p style="margin-left:50.0px;">
304     * DES<span style="white-space:pre-wrap;"> </span>Destruction
305     * </p>
306     * </div>
307     * <div style="font-size:13px;font-style:normal;font-variant:normal;color:rgb(0, 0,
308     * 0);font-family:arial, sans-serif;">
309     * </div>
310     * </body>
311     * </html>
312     * @param vesselFleetEventsIn Collection<VesselFleetEvent>
313     */
314    public void setVesselFleetEvents(Collection<VesselFleetEvent> vesselFleetEventsIn)
315    {
316        this.vesselFleetEvents = vesselFleetEventsIn;
317    }
318
319    /**
320     * <html>
321     * <head>
322     * <style>
323     * p {padding:0px; margin:0px;}
324     * </style>
325     * </head>
326     * <body>
327     * <p>
328     * Evènement d'entrée ou sortie de flotte (entrée ou sortie du registre des
329     * navires).
330     * </p>
331     * <p>
332     * </p>
333     * <p>
334     * Par exemple :
335     * </p>
336     * <ul>
337     * <li>
338     * Pour le flux FPC :
339     * </li>
340     * </ul>
341     * <!--StartFragment-->
342     * <div style="color:rgb(0, 0,
343     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
344     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
345     * <p style="margin-left:50.0px;">
346     * IMP<span style="white-space:pre-wrap;"> </span>Importation
347     * </p>
348     * </div>
349     * <div style="color:rgb(0, 0,
350     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
351     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
352     * <p style="margin-left:50.0px;">
353     * CHA<span style="white-space:pre-wrap;"> </span>Entrée dans le FPC
354     * </p>
355     * </div>
356     * <div style="color:rgb(0, 0,
357     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
358     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
359     * <p style="margin-left:50.0px;">
360     * CST<span style="white-space:pre-wrap;"> </span>Construction
361     * </p>
362     * </div>
363     * <div style="color:rgb(0, 0,
364     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
365     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
366     * <p style="margin-left:50.0px;">
367     * EXP<span style="white-space:pre-wrap;"> </span>Exportation
368     * </p>
369     * </div>
370     * <div style="color:rgb(0, 0,
371     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
372     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
373     * <p style="margin-left:50.0px;">
374     * COR<span style="white-space:pre-wrap;"> </span>Correction
375     * </p>
376     * </div>
377     * <div style="color:rgb(0, 0,
378     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
379     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
380     * <p style="margin-left:50.0px;">
381     * RET<span style="white-space:pre-wrap;"> </span>Retrait du FPC
382     * </p>
383     * </div>
384     * <div style="color:rgb(0, 0,
385     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
386     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
387     * <p style="margin-left:50.0px;">
388     * DES<span style="white-space:pre-wrap;"> </span>Destruction
389     * </p>
390     * </div>
391     * <div style="font-size:13px;font-style:normal;font-variant:normal;color:rgb(0, 0,
392     * 0);font-family:arial, sans-serif;">
393     * </div>
394     * </body>
395     * </html>
396     * @param elementToAdd VesselFleetEvent
397     * @return <tt>true</tt> if this collection changed as a result of the
398     *         call
399     */
400    public boolean addVesselFleetEvents(VesselFleetEvent elementToAdd)
401    {
402        return this.vesselFleetEvents.add(elementToAdd);
403    }
404
405    /**
406     * <html>
407     * <head>
408     * <style>
409     * p {padding:0px; margin:0px;}
410     * </style>
411     * </head>
412     * <body>
413     * <p>
414     * Evènement d'entrée ou sortie de flotte (entrée ou sortie du registre des
415     * navires).
416     * </p>
417     * <p>
418     * </p>
419     * <p>
420     * Par exemple :
421     * </p>
422     * <ul>
423     * <li>
424     * Pour le flux FPC :
425     * </li>
426     * </ul>
427     * <!--StartFragment-->
428     * <div style="color:rgb(0, 0,
429     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
430     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
431     * <p style="margin-left:50.0px;">
432     * IMP<span style="white-space:pre-wrap;"> </span>Importation
433     * </p>
434     * </div>
435     * <div style="color:rgb(0, 0,
436     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
437     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
438     * <p style="margin-left:50.0px;">
439     * CHA<span style="white-space:pre-wrap;"> </span>Entrée dans le FPC
440     * </p>
441     * </div>
442     * <div style="color:rgb(0, 0,
443     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
444     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
445     * <p style="margin-left:50.0px;">
446     * CST<span style="white-space:pre-wrap;"> </span>Construction
447     * </p>
448     * </div>
449     * <div style="color:rgb(0, 0,
450     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
451     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
452     * <p style="margin-left:50.0px;">
453     * EXP<span style="white-space:pre-wrap;"> </span>Exportation
454     * </p>
455     * </div>
456     * <div style="color:rgb(0, 0,
457     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
458     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
459     * <p style="margin-left:50.0px;">
460     * COR<span style="white-space:pre-wrap;"> </span>Correction
461     * </p>
462     * </div>
463     * <div style="color:rgb(0, 0,
464     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
465     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
466     * <p style="margin-left:50.0px;">
467     * RET<span style="white-space:pre-wrap;"> </span>Retrait du FPC
468     * </p>
469     * </div>
470     * <div style="color:rgb(0, 0,
471     * 0);white-space:normal;font-size:13px;text-indent:0px;font-weight:normal;letter-spacing:normal;font-variant:normal;word-spacing:0px;text-align:-webkit-auto;font-style:normal;background-color:rgb(255,
472     * 255, 255);line-height:normal;font-family:arial, sans-serif;text-transform:none;">
473     * <p style="margin-left:50.0px;">
474     * DES<span style="white-space:pre-wrap;"> </span>Destruction
475     * </p>
476     * </div>
477     * <div style="font-size:13px;font-style:normal;font-variant:normal;color:rgb(0, 0,
478     * 0);font-family:arial, sans-serif;">
479     * </div>
480     * </body>
481     * </html>
482     * @param elementToRemove VesselFleetEvent
483     * @return <tt>true</tt> if this collection changed as a result of the
484     *         call
485     */
486    public boolean removeVesselFleetEvents(VesselFleetEvent elementToRemove)
487    {
488        return this.vesselFleetEvents.remove(elementToRemove);
489    }
490
491    private Status status;
492
493    /**
494     * Etat du navire à la date actuelle du système. Sert notamment à déterminer si le navire est
495     * encore actif à la date du jour.
496     * Cet état sert également pour les navires temporaires, lors de leur création dans la base
497     * locale d'Allegro.
498     * @return this.status Status
499     */
500    public Status getStatus()
501    {
502        return this.status;
503    }
504
505    /**
506     * Etat du navire à la date actuelle du système. Sert notamment à déterminer si le navire est
507     * encore actif à la date du jour.
508     * Cet état sert également pour les navires temporaires, lors de leur création dans la base
509     * locale d'Allegro.
510     * @param statusIn Status
511     */
512    public void setStatus(Status statusIn)
513    {
514        this.status = statusIn;
515    }
516
517    private Collection<VesselRegistrationPeriod> vesselRegistrationPeriods = new HashSet<VesselRegistrationPeriod>();
518
519    /**
520     * Définit le lieu d'immatriculation d'un navire statistique et la période associée.
521     * Nombre de lignes : 72700
522     * @return this.vesselRegistrationPeriods Collection<VesselRegistrationPeriod>
523     */
524    public Collection<VesselRegistrationPeriod> getVesselRegistrationPeriods()
525    {
526        return this.vesselRegistrationPeriods;
527    }
528
529    /**
530     * Définit le lieu d'immatriculation d'un navire statistique et la période associée.
531     * Nombre de lignes : 72700
532     * @param vesselRegistrationPeriodsIn Collection<VesselRegistrationPeriod>
533     */
534    public void setVesselRegistrationPeriods(Collection<VesselRegistrationPeriod> vesselRegistrationPeriodsIn)
535    {
536        this.vesselRegistrationPeriods = vesselRegistrationPeriodsIn;
537    }
538
539    /**
540     * Définit le lieu d'immatriculation d'un navire statistique et la période associée.
541     * Nombre de lignes : 72700
542     * @param elementToAdd VesselRegistrationPeriod
543     * @return <tt>true</tt> if this collection changed as a result of the
544     *         call
545     */
546    public boolean addVesselRegistrationPeriods(VesselRegistrationPeriod elementToAdd)
547    {
548        return this.vesselRegistrationPeriods.add(elementToAdd);
549    }
550
551    /**
552     * Définit le lieu d'immatriculation d'un navire statistique et la période associée.
553     * Nombre de lignes : 72700
554     * @param elementToRemove VesselRegistrationPeriod
555     * @return <tt>true</tt> if this collection changed as a result of the
556     *         call
557     */
558    public boolean removeVesselRegistrationPeriods(VesselRegistrationPeriod elementToRemove)
559    {
560        return this.vesselRegistrationPeriods.remove(elementToRemove);
561    }
562
563    private Collection<VesselFeatures> vesselFeatures = new HashSet<VesselFeatures>();
564
565    /**
566     * <html>
567     * <head>
568     * <style>
569     * p {padding:0px; margin:0px;}
570     * </style>
571     * </head>
572     * <body>
573     * <p>
574     * Caractéristiques d'un navire, sur une période donnée.
575     * </p>
576     * <p>
577     * <b>Correspond à la synthèse consolidée des différents
578     * VesselPhysicalFeatures collectés.
579     * </b>    </p>
580     * <p>
581     * </p>
582     * <p>
583     * Si le navire est inscrit au FPC, les caractéristiques FPC sont utilisées
584     * (jauge_ums et jauge_brute).
585     * </p>
586     * <p>
587     * </p>
588     * <p>
589     * REMARQUE : les données ramenées depuis Harmonie sont fusionnées entre
590     * les caractéristiques FPC (à utiliser de préférence si présent), et les
591     * caractéristiques d'autres sources.
592     * </p>
593     * <p>
594     * </p>
595     * <p>
596     * Nombre de lignes : 67375
597     * </p>
598     * </body>
599     * </html>
600     * @return this.vesselFeatures Collection<VesselFeatures>
601     */
602    public Collection<VesselFeatures> getVesselFeatures()
603    {
604        return this.vesselFeatures;
605    }
606
607    /**
608     * <html>
609     * <head>
610     * <style>
611     * p {padding:0px; margin:0px;}
612     * </style>
613     * </head>
614     * <body>
615     * <p>
616     * Caractéristiques d'un navire, sur une période donnée.
617     * </p>
618     * <p>
619     * <b>Correspond à la synthèse consolidée des différents
620     * VesselPhysicalFeatures collectés.
621     * </b>    </p>
622     * <p>
623     * </p>
624     * <p>
625     * Si le navire est inscrit au FPC, les caractéristiques FPC sont utilisées
626     * (jauge_ums et jauge_brute).
627     * </p>
628     * <p>
629     * </p>
630     * <p>
631     * REMARQUE : les données ramenées depuis Harmonie sont fusionnées entre
632     * les caractéristiques FPC (à utiliser de préférence si présent), et les
633     * caractéristiques d'autres sources.
634     * </p>
635     * <p>
636     * </p>
637     * <p>
638     * Nombre de lignes : 67375
639     * </p>
640     * </body>
641     * </html>
642     * @param vesselFeaturesIn Collection<VesselFeatures>
643     */
644    public void setVesselFeatures(Collection<VesselFeatures> vesselFeaturesIn)
645    {
646        this.vesselFeatures = vesselFeaturesIn;
647    }
648
649    /**
650     * <html>
651     * <head>
652     * <style>
653     * p {padding:0px; margin:0px;}
654     * </style>
655     * </head>
656     * <body>
657     * <p>
658     * Caractéristiques d'un navire, sur une période donnée.
659     * </p>
660     * <p>
661     * <b>Correspond à la synthèse consolidée des différents
662     * VesselPhysicalFeatures collectés.
663     * </b>    </p>
664     * <p>
665     * </p>
666     * <p>
667     * Si le navire est inscrit au FPC, les caractéristiques FPC sont utilisées
668     * (jauge_ums et jauge_brute).
669     * </p>
670     * <p>
671     * </p>
672     * <p>
673     * REMARQUE : les données ramenées depuis Harmonie sont fusionnées entre
674     * les caractéristiques FPC (à utiliser de préférence si présent), et les
675     * caractéristiques d'autres sources.
676     * </p>
677     * <p>
678     * </p>
679     * <p>
680     * Nombre de lignes : 67375
681     * </p>
682     * </body>
683     * </html>
684     * @param elementToAdd VesselFeatures
685     * @return <tt>true</tt> if this collection changed as a result of the
686     *         call
687     */
688    public boolean addVesselFeatures(VesselFeatures elementToAdd)
689    {
690        return this.vesselFeatures.add(elementToAdd);
691    }
692
693    /**
694     * <html>
695     * <head>
696     * <style>
697     * p {padding:0px; margin:0px;}
698     * </style>
699     * </head>
700     * <body>
701     * <p>
702     * Caractéristiques d'un navire, sur une période donnée.
703     * </p>
704     * <p>
705     * <b>Correspond à la synthèse consolidée des différents
706     * VesselPhysicalFeatures collectés.
707     * </b>    </p>
708     * <p>
709     * </p>
710     * <p>
711     * Si le navire est inscrit au FPC, les caractéristiques FPC sont utilisées
712     * (jauge_ums et jauge_brute).
713     * </p>
714     * <p>
715     * </p>
716     * <p>
717     * REMARQUE : les données ramenées depuis Harmonie sont fusionnées entre
718     * les caractéristiques FPC (à utiliser de préférence si présent), et les
719     * caractéristiques d'autres sources.
720     * </p>
721     * <p>
722     * </p>
723     * <p>
724     * Nombre de lignes : 67375
725     * </p>
726     * </body>
727     * </html>
728     * @param elementToRemove VesselFeatures
729     * @return <tt>true</tt> if this collection changed as a result of the
730     *         call
731     */
732    public boolean removeVesselFeatures(VesselFeatures elementToRemove)
733    {
734        return this.vesselFeatures.remove(elementToRemove);
735    }
736
737    private Collection<RightToProduce> rightToProduces = new HashSet<RightToProduce>();
738
739    /**
740     * Un droit de produire est une autorisation administrative pour prélever de ou exploiter de la
741     * ressource. Il peut concerner un ensemble de navires de peche, ou un seul navire ou pecheur à
742     * pied.
743     * L'autorisation peut etre relative à une espèce, ou bien à un couple engin/espèce (=métier)
744     * il peut etre défini dans le cadre d'un corpus ou non (ex : droit de produire défini par les
745     * autorités locales).
746     * @return this.rightToProduces Collection<RightToProduce>
747     */
748    public Collection<RightToProduce> getRightToProduces()
749    {
750        return this.rightToProduces;
751    }
752
753    /**
754     * Un droit de produire est une autorisation administrative pour prélever de ou exploiter de la
755     * ressource. Il peut concerner un ensemble de navires de peche, ou un seul navire ou pecheur à
756     * pied.
757     * L'autorisation peut etre relative à une espèce, ou bien à un couple engin/espèce (=métier)
758     * il peut etre défini dans le cadre d'un corpus ou non (ex : droit de produire défini par les
759     * autorités locales).
760     * @param rightToProducesIn Collection<RightToProduce>
761     */
762    public void setRightToProduces(Collection<RightToProduce> rightToProducesIn)
763    {
764        this.rightToProduces = rightToProducesIn;
765    }
766
767    /**
768     * Un droit de produire est une autorisation administrative pour prélever de ou exploiter de la
769     * ressource. Il peut concerner un ensemble de navires de peche, ou un seul navire ou pecheur à
770     * pied.
771     * L'autorisation peut etre relative à une espèce, ou bien à un couple engin/espèce (=métier)
772     * il peut etre défini dans le cadre d'un corpus ou non (ex : droit de produire défini par les
773     * autorités locales).
774     * @param elementToAdd RightToProduce
775     * @return <tt>true</tt> if this collection changed as a result of the
776     *         call
777     */
778    public boolean addRightToProduces(RightToProduce elementToAdd)
779    {
780        return this.rightToProduces.add(elementToAdd);
781    }
782
783    /**
784     * Un droit de produire est une autorisation administrative pour prélever de ou exploiter de la
785     * ressource. Il peut concerner un ensemble de navires de peche, ou un seul navire ou pecheur à
786     * pied.
787     * L'autorisation peut etre relative à une espèce, ou bien à un couple engin/espèce (=métier)
788     * il peut etre défini dans le cadre d'un corpus ou non (ex : droit de produire défini par les
789     * autorités locales).
790     * @param elementToRemove RightToProduce
791     * @return <tt>true</tt> if this collection changed as a result of the
792     *         call
793     */
794    public boolean removeRightToProduces(RightToProduce elementToRemove)
795    {
796        return this.rightToProduces.remove(elementToRemove);
797    }
798
799    private Program program;
800
801    /**
802     * <html>
803     * <head>
804     * <style>
805     * p {padding:0px; margin:0px;}
806     * </style>
807     * </head>
808     * <body>
809     * <p>
810     * Identifie le référentiel d'usagers auquel est rattaché le Vessel. Il
811     * peut s'agir du référentiel consolidé SIH, ou d'une autre référentiel
812     * (UE, FPC, VMS, etc).
813     * </p>
814     * <p>
815     * </p>
816     * <p>
817     * Par exemple, lors de l'importation des données VMS, un Vessel est crée,
818     * rattaché au programme de collecte VMS. Cela permet de ne pas perdre
819     * d'informationssur le navire, même si celui-ci n'était pas dans le
820     * référentiel consolidé.
821     * </p>
822     * </body>
823     * </html>
824     * @return this.program Program
825     */
826    public Program getProgram()
827    {
828        return this.program;
829    }
830
831    /**
832     * <html>
833     * <head>
834     * <style>
835     * p {padding:0px; margin:0px;}
836     * </style>
837     * </head>
838     * <body>
839     * <p>
840     * Identifie le référentiel d'usagers auquel est rattaché le Vessel. Il
841     * peut s'agir du référentiel consolidé SIH, ou d'une autre référentiel
842     * (UE, FPC, VMS, etc).
843     * </p>
844     * <p>
845     * </p>
846     * <p>
847     * Par exemple, lors de l'importation des données VMS, un Vessel est crée,
848     * rattaché au programme de collecte VMS. Cela permet de ne pas perdre
849     * d'informationssur le navire, même si celui-ci n'était pas dans le
850     * référentiel consolidé.
851     * </p>
852     * </body>
853     * </html>
854     * @param programIn Program
855     */
856    public void setProgram(Program programIn)
857    {
858        this.program = programIn;
859    }
860
861    private Collection<VesselOwnerPeriod> vesselOwnerPeriods = new HashSet<VesselOwnerPeriod>();
862
863    /**
864     * Période d'appartenance d'un navire à un armateur (période d'armement).
865     * Nombre de lignes : 25600
866     * @return this.vesselOwnerPeriods Collection<VesselOwnerPeriod>
867     */
868    public Collection<VesselOwnerPeriod> getVesselOwnerPeriods()
869    {
870        return this.vesselOwnerPeriods;
871    }
872
873    /**
874     * Période d'appartenance d'un navire à un armateur (période d'armement).
875     * Nombre de lignes : 25600
876     * @param vesselOwnerPeriodsIn Collection<VesselOwnerPeriod>
877     */
878    public void setVesselOwnerPeriods(Collection<VesselOwnerPeriod> vesselOwnerPeriodsIn)
879    {
880        this.vesselOwnerPeriods = vesselOwnerPeriodsIn;
881    }
882
883    /**
884     * Période d'appartenance d'un navire à un armateur (période d'armement).
885     * Nombre de lignes : 25600
886     * @param elementToAdd VesselOwnerPeriod
887     * @return <tt>true</tt> if this collection changed as a result of the
888     *         call
889     */
890    public boolean addVesselOwnerPeriods(VesselOwnerPeriod elementToAdd)
891    {
892        return this.vesselOwnerPeriods.add(elementToAdd);
893    }
894
895    /**
896     * Période d'appartenance d'un navire à un armateur (période d'armement).
897     * Nombre de lignes : 25600
898     * @param elementToRemove VesselOwnerPeriod
899     * @return <tt>true</tt> if this collection changed as a result of the
900     *         call
901     */
902    public boolean removeVesselOwnerPeriods(VesselOwnerPeriod elementToRemove)
903    {
904        return this.vesselOwnerPeriods.remove(elementToRemove);
905    }
906
907    private VesselType vesselType;
908
909    /**
910     * Type de navire. Exemple : 1 pour les navires professionnels, 2 pour les pecheurs à pied, 3
911     * pour les navires scientifiques
912     * @return this.vesselType VesselType
913     */
914    public VesselType getVesselType()
915    {
916        return this.vesselType;
917    }
918
919    /**
920     * Type de navire. Exemple : 1 pour les navires professionnels, 2 pour les pecheurs à pied, 3
921     * pour les navires scientifiques
922     * @param vesselTypeIn VesselType
923     */
924    public void setVesselType(VesselType vesselTypeIn)
925    {
926        this.vesselType = vesselTypeIn;
927    }
928
929    private Collection<VesselCommissioningPeriod> vesselCommissioningPeriods = new HashSet<VesselCommissioningPeriod>();
930
931    /**
932     * Période d'armement, ou de mise en service, du navire.
933     * La mise en service est rattaché à un lieu terrestre de mise en service. Cela peut etre le
934     * pays
935     * d'armement ou le quartier d'armement.
936     * @return this.vesselCommissioningPeriods Collection<VesselCommissioningPeriod>
937     */
938    public Collection<VesselCommissioningPeriod> getVesselCommissioningPeriods()
939    {
940        return this.vesselCommissioningPeriods;
941    }
942
943    /**
944     * Période d'armement, ou de mise en service, du navire.
945     * La mise en service est rattaché à un lieu terrestre de mise en service. Cela peut etre le
946     * pays
947     * d'armement ou le quartier d'armement.
948     * @param vesselCommissioningPeriodsIn Collection<VesselCommissioningPeriod>
949     */
950    public void setVesselCommissioningPeriods(Collection<VesselCommissioningPeriod> vesselCommissioningPeriodsIn)
951    {
952        this.vesselCommissioningPeriods = vesselCommissioningPeriodsIn;
953    }
954
955    /**
956     * Période d'armement, ou de mise en service, du navire.
957     * La mise en service est rattaché à un lieu terrestre de mise en service. Cela peut etre le
958     * pays
959     * d'armement ou le quartier d'armement.
960     * @param elementToAdd VesselCommissioningPeriod
961     * @return <tt>true</tt> if this collection changed as a result of the
962     *         call
963     */
964    public boolean addVesselCommissioningPeriods(VesselCommissioningPeriod elementToAdd)
965    {
966        return this.vesselCommissioningPeriods.add(elementToAdd);
967    }
968
969    /**
970     * Période d'armement, ou de mise en service, du navire.
971     * La mise en service est rattaché à un lieu terrestre de mise en service. Cela peut etre le
972     * pays
973     * d'armement ou le quartier d'armement.
974     * @param elementToRemove VesselCommissioningPeriod
975     * @return <tt>true</tt> if this collection changed as a result of the
976     *         call
977     */
978    public boolean removeVesselCommissioningPeriods(VesselCommissioningPeriod elementToRemove)
979    {
980        return this.vesselCommissioningPeriods.remove(elementToRemove);
981    }
982
983    /**
984     * Returns <code>true</code> if the argument is an Vessel instance and all identifiers for this entity
985     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
986     */
987    @Override
988    public boolean equals(Object object)
989    {
990        if (this == object)
991        {
992            return true;
993        }
994        if (!(object instanceof Vessel))
995        {
996            return false;
997        }
998        final Vessel that = (Vessel)object;
999        if (this.code == null || that.getCode() == null || !this.code.equals(that.getCode()))
1000        {
1001            return false;
1002        }
1003        return true;
1004    }
1005
1006    /**
1007     * Returns a hash code based on this entity's identifiers.
1008     */
1009    @Override
1010    public int hashCode()
1011    {
1012        int hashCode = 0;
1013        hashCode = 29 * hashCode + (this.code == null ? 0 : this.code.hashCode());
1014
1015        return hashCode;
1016    }
1017
1018    /**
1019     * Constructs new instances of {@link Vessel}.
1020     */
1021    public static final class Factory
1022    {
1023        /**
1024         * Constructs a new instance of {@link Vessel}.
1025         * @return new VesselImpl()
1026         */
1027        public static Vessel newInstance()
1028        {
1029            return new VesselImpl();
1030        }
1031
1032        /**
1033         * Constructs a new instance of {@link Vessel}, taking all required and/or
1034         * read-only properties as arguments, except for identifiers.
1035         * @param updateDate Timestamp
1036         * @param status Status
1037         * @param program Program
1038         * @param vesselType VesselType
1039         * @return newInstance
1040         */
1041        public static Vessel newInstance(Timestamp updateDate, Status status, Program program, VesselType vesselType)
1042        {
1043            final Vessel entity = new VesselImpl();
1044            entity.setUpdateDate(updateDate);
1045            entity.setStatus(status);
1046            entity.setProgram(program);
1047            entity.setVesselType(vesselType);
1048            return entity;
1049        }
1050
1051        /**
1052         * Constructs a new instance of {@link Vessel}, taking all possible properties
1053         * (except the identifier(s))as arguments.
1054         * @param updateDate Timestamp
1055         * @param vesselFleetEvents Collection<VesselFleetEvent>
1056         * @param status Status
1057         * @param vesselRegistrationPeriods Collection<VesselRegistrationPeriod>
1058         * @param vesselFeatures Collection<VesselFeatures>
1059         * @param rightToProduces Collection<RightToProduce>
1060         * @param program Program
1061         * @param vesselOwnerPeriods Collection<VesselOwnerPeriod>
1062         * @param vesselType VesselType
1063         * @param vesselCommissioningPeriods Collection<VesselCommissioningPeriod>
1064         * @return newInstance Vessel
1065         */
1066        public static Vessel newInstance(Timestamp updateDate, Collection<VesselFleetEvent> vesselFleetEvents, Status status, Collection<VesselRegistrationPeriod> vesselRegistrationPeriods, Collection<VesselFeatures> vesselFeatures, Collection<RightToProduce> rightToProduces, Program program, Collection<VesselOwnerPeriod> vesselOwnerPeriods, VesselType vesselType, Collection<VesselCommissioningPeriod> vesselCommissioningPeriods)
1067        {
1068            final Vessel entity = new VesselImpl();
1069            entity.setUpdateDate(updateDate);
1070            entity.setVesselFleetEvents(vesselFleetEvents);
1071            entity.setStatus(status);
1072            entity.setVesselRegistrationPeriods(vesselRegistrationPeriods);
1073            entity.setVesselFeatures(vesselFeatures);
1074            entity.setRightToProduces(rightToProduces);
1075            entity.setProgram(program);
1076            entity.setVesselOwnerPeriods(vesselOwnerPeriods);
1077            entity.setVesselType(vesselType);
1078            entity.setVesselCommissioningPeriods(vesselCommissioningPeriods);
1079            return entity;
1080        }
1081    }
1082
1083    /**
1084     * @see Comparable#compareTo
1085     */
1086    public int compareTo(Vessel o)
1087    {
1088        int cmp = 0;
1089        if (this.getCode() != null)
1090        {
1091            cmp = this.getCode().compareTo(o.getCode());
1092        }
1093        else
1094        {
1095            if (this.getUpdateDate() != null)
1096            {
1097                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
1098            }
1099        }
1100        return cmp;
1101    }
1102// HibernateEntity.vsl merge-point
1103// Vessel.java merge-point
1104}