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.link;
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.referential.LinkedItemType;
032import fr.ifremer.adagio.core.dao.referential.QualityFlag;
033import java.io.Serializable;
034import java.sql.Timestamp;
035import java.util.Date;
036
037/**
038 * <html>
039 * <head>
040 * <style>
041 * p {padding:0px; margin:0px;}
042 * </style>
043 * </head>
044 * <body>
045 * <p>
046 * Rapprochement d'une entité d'un type donné à une autre, qui peut etre ou
047 * non du meme type.
048 * </p>
049 * <p>
050 * </p>
051 * <p>
052 * Cette classe permet de gérer des objets ayant un identifiant numérique (<i>objectId</i>)
053 * ou un code alphanumérique (<i>objectCode - exemple : Vessel</i>).
054 * L'utilisiation du code ou de l'identifiant est exclusive.
055 * </p>
056 * <p>
057 * </p>
058 * <p>
059 * Un rapprochement peut avoir une période de validité (Optionnel).
060 * </p>
061 * <p>
062 * </p>
063 * <p>
064 * Exemple d'utilisation : A partir des données VMS, on récupère des
065 * informations de navire (Pavillon, nom, dates, etc.) stockées sous la
066 * forme d'un navire (Vessel + VesselRegistrationPeriod, etc); après
067 * chargement des données VMS, un outil de rapprochement permet de
068 * retrouver (ou pas) le navire du fichier flotte national correspondant.
069 * La correspondance trouvée est stockée dans <i>LinkedItem</i>.
070 * A l'exportation des données VMS depuis Adagio, cela permet de restituer
071 * les informations sur le navire telle que présentes dans le flux VMS
072 * d'origine.
073 * </p>
074 * </body>
075 * </html>
076 */
077// HibernateEntity.vsl annotations merge-point
078public abstract class LinkedItem
079    implements Serializable, Comparable<LinkedItem>
080{
081    /**
082     * The serial version UID of this class. Needed for serialization.
083     */
084    private static final long serialVersionUID = 9060531832458899533L;
085
086    // Generate 8 attributes
087    private Integer id;
088
089    /**
090     * Idenfiant interne. Généré par le système.
091     * @return this.id Integer
092     */
093    public Integer getId()
094    {
095        return this.id;
096    }
097
098    /**
099     * Idenfiant interne. Généré par le système.
100     * @param idIn Integer
101     */
102    public void setId(Integer idIn)
103    {
104        this.id = idIn;
105    }
106
107    private Integer fromObjectId;
108
109    /**
110     * <html>
111     * <head>
112     * </head>
113     * <body>
114     * <p>
115     * Identifiant interne d'une des deux entit&#233;s rapproch&#233;es.
116     * </p>
117     * <p>
118     * Le type d'entit&#233; doit correspondre &#224; celui d&#233;fini dans
119     * <i>LinkedItemType.fromObjectType</i>.
120     * </p>
121     * </body>
122     * </html>
123     * @return this.fromObjectId Integer
124     */
125    public Integer getFromObjectId()
126    {
127        return this.fromObjectId;
128    }
129
130    /**
131     * <html>
132     * <head>
133     * </head>
134     * <body>
135     * <p>
136     * Identifiant interne d'une des deux entit&#233;s rapproch&#233;es.
137     * </p>
138     * <p>
139     * Le type d'entit&#233; doit correspondre &#224; celui d&#233;fini dans
140     * <i>LinkedItemType.fromObjectType</i>.
141     * </p>
142     * </body>
143     * </html>
144     * @param fromObjectIdIn Integer
145     */
146    public void setFromObjectId(Integer fromObjectIdIn)
147    {
148        this.fromObjectId = fromObjectIdIn;
149    }
150
151    private String fromObjectCode;
152
153    /**
154     * 
155     * @return this.fromObjectCode String
156     */
157    public String getFromObjectCode()
158    {
159        return this.fromObjectCode;
160    }
161
162    /**
163     * 
164     * @param fromObjectCodeIn String
165     */
166    public void setFromObjectCode(String fromObjectCodeIn)
167    {
168        this.fromObjectCode = fromObjectCodeIn;
169    }
170
171    private Integer toObjectId;
172
173    /**
174     * <html>
175     * <head>
176     * </head>
177     * <body>
178     * <p>
179     * Identifiant interne d'une des deux entit&#233;s rapproch&#233;es.
180     * </p>
181     * <p>
182     * Le type d'entit&#233; doit correspondre &#224; celui d&#233;fini dans
183     * <i>LinkedItemType.toObjectType</i>.
184     * </p>
185     * </body>
186     * </html>
187     * @return this.toObjectId Integer
188     */
189    public Integer getToObjectId()
190    {
191        return this.toObjectId;
192    }
193
194    /**
195     * <html>
196     * <head>
197     * </head>
198     * <body>
199     * <p>
200     * Identifiant interne d'une des deux entit&#233;s rapproch&#233;es.
201     * </p>
202     * <p>
203     * Le type d'entit&#233; doit correspondre &#224; celui d&#233;fini dans
204     * <i>LinkedItemType.toObjectType</i>.
205     * </p>
206     * </body>
207     * </html>
208     * @param toObjectIdIn Integer
209     */
210    public void setToObjectId(Integer toObjectIdIn)
211    {
212        this.toObjectId = toObjectIdIn;
213    }
214
215    private String toObjectCode;
216
217    /**
218     * 
219     * @return this.toObjectCode String
220     */
221    public String getToObjectCode()
222    {
223        return this.toObjectCode;
224    }
225
226    /**
227     * 
228     * @param toObjectCodeIn String
229     */
230    public void setToObjectCode(String toObjectCodeIn)
231    {
232        this.toObjectCode = toObjectCodeIn;
233    }
234
235    private Date startDate;
236
237    /**
238     * Date de début de validité du rapprochement (optionnel).
239     * @return this.startDate Date
240     */
241    public Date getStartDate()
242    {
243        return this.startDate;
244    }
245
246    /**
247     * Date de début de validité du rapprochement (optionnel).
248     * @param startDateIn Date
249     */
250    public void setStartDate(Date startDateIn)
251    {
252        this.startDate = startDateIn;
253    }
254
255    private Date endDate;
256
257    /**
258     * Date de fin de validité du rapprochement (optionnel).
259     * Doit être vide, si startDate est vide.
260     * @return this.endDate Date
261     */
262    public Date getEndDate()
263    {
264        return this.endDate;
265    }
266
267    /**
268     * Date de fin de validité du rapprochement (optionnel).
269     * Doit être vide, si startDate est vide.
270     * @param endDateIn Date
271     */
272    public void setEndDate(Date endDateIn)
273    {
274        this.endDate = endDateIn;
275    }
276
277    private Timestamp updateDate;
278
279    /**
280     * Date de dernière modification (Mise à jour automatiquement par le système).
281     * @return this.updateDate Timestamp
282     */
283    public Timestamp getUpdateDate()
284    {
285        return this.updateDate;
286    }
287
288    /**
289     * Date de dernière modification (Mise à jour automatiquement par le système).
290     * @param updateDateIn Timestamp
291     */
292    public void setUpdateDate(Timestamp updateDateIn)
293    {
294        this.updateDate = updateDateIn;
295    }
296
297    // Generate 2 associations
298    private QualityFlag qualityFlag;
299
300    /**
301     * <html>
302     * <head>
303     * <style>
304     * p {padding:0px; margin:0px;}
305     * </style>
306     * </head>
307     * <body>
308     * <p>
309     * Pour les besoins du rapprochement des navires VMS avec le référentiel
310     * consolidé des navires (mantis #13782), le flag qualité dans la
311     * table LINKED_ITEM permet d'identifier la qualité du rapprochement :
312     * </p>
313     * <p>
314     * - rapprochement complet : même navire + périodes chevauchantes
315     * </p>
316     * <p>
317     * - rapprochement partiel : même navire mais périodes non chevauchantes
318     * (on reçoit des flux VMS quotidien mais des flux navires trimestriels)
319     * </p>
320     * </body>
321     * </html>
322     * @return this.qualityFlag QualityFlag
323     */
324    public QualityFlag getQualityFlag()
325    {
326        return this.qualityFlag;
327    }
328
329    /**
330     * <html>
331     * <head>
332     * <style>
333     * p {padding:0px; margin:0px;}
334     * </style>
335     * </head>
336     * <body>
337     * <p>
338     * Pour les besoins du rapprochement des navires VMS avec le référentiel
339     * consolidé des navires (mantis #13782), le flag qualité dans la
340     * table LINKED_ITEM permet d'identifier la qualité du rapprochement :
341     * </p>
342     * <p>
343     * - rapprochement complet : même navire + périodes chevauchantes
344     * </p>
345     * <p>
346     * - rapprochement partiel : même navire mais périodes non chevauchantes
347     * (on reçoit des flux VMS quotidien mais des flux navires trimestriels)
348     * </p>
349     * </body>
350     * </html>
351     * @param qualityFlagIn QualityFlag
352     */
353    public void setQualityFlag(QualityFlag qualityFlagIn)
354    {
355        this.qualityFlag = qualityFlagIn;
356    }
357
358    private LinkedItemType linkedItemType;
359
360    /**
361     * Type de rapprochement effectué.
362     * Le type de rapprochement défini les types d'entités mis en jeux dans le rapprochement.
363     * @return this.linkedItemType LinkedItemType
364     */
365    public LinkedItemType getLinkedItemType()
366    {
367        return this.linkedItemType;
368    }
369
370    /**
371     * Type de rapprochement effectué.
372     * Le type de rapprochement défini les types d'entités mis en jeux dans le rapprochement.
373     * @param linkedItemTypeIn LinkedItemType
374     */
375    public void setLinkedItemType(LinkedItemType linkedItemTypeIn)
376    {
377        this.linkedItemType = linkedItemTypeIn;
378    }
379
380    /**
381     * Returns <code>true</code> if the argument is an LinkedItem instance and all identifiers for this entity
382     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
383     */
384    @Override
385    public boolean equals(Object object)
386    {
387        if (this == object)
388        {
389            return true;
390        }
391        if (!(object instanceof LinkedItem))
392        {
393            return false;
394        }
395        final LinkedItem that = (LinkedItem)object;
396        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
397        {
398            return false;
399        }
400        return true;
401    }
402
403    /**
404     * Returns a hash code based on this entity's identifiers.
405     */
406    @Override
407    public int hashCode()
408    {
409        int hashCode = 0;
410        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
411
412        return hashCode;
413    }
414
415    /**
416     * Constructs new instances of {@link LinkedItem}.
417     */
418    public static final class Factory
419    {
420        /**
421         * Constructs a new instance of {@link LinkedItem}.
422         * @return new LinkedItemImpl()
423         */
424        public static LinkedItem newInstance()
425        {
426            return new LinkedItemImpl();
427        }
428
429        /**
430         * Constructs a new instance of {@link LinkedItem}, taking all required and/or
431         * read-only properties as arguments, except for identifiers.
432         * @param updateDate Timestamp
433         * @param qualityFlag QualityFlag
434         * @param linkedItemType LinkedItemType
435         * @return newInstance
436         */
437        public static LinkedItem newInstance(Timestamp updateDate, QualityFlag qualityFlag, LinkedItemType linkedItemType)
438        {
439            final LinkedItem entity = new LinkedItemImpl();
440            entity.setUpdateDate(updateDate);
441            entity.setQualityFlag(qualityFlag);
442            entity.setLinkedItemType(linkedItemType);
443            return entity;
444        }
445
446        /**
447         * Constructs a new instance of {@link LinkedItem}, taking all possible properties
448         * (except the identifier(s))as arguments.
449         * @param fromObjectId Integer
450         * @param fromObjectCode String
451         * @param toObjectId Integer
452         * @param toObjectCode String
453         * @param startDate Date
454         * @param endDate Date
455         * @param updateDate Timestamp
456         * @param qualityFlag QualityFlag
457         * @param linkedItemType LinkedItemType
458         * @return newInstance LinkedItem
459         */
460        public static LinkedItem newInstance(Integer fromObjectId, String fromObjectCode, Integer toObjectId, String toObjectCode, Date startDate, Date endDate, Timestamp updateDate, QualityFlag qualityFlag, LinkedItemType linkedItemType)
461        {
462            final LinkedItem entity = new LinkedItemImpl();
463            entity.setFromObjectId(fromObjectId);
464            entity.setFromObjectCode(fromObjectCode);
465            entity.setToObjectId(toObjectId);
466            entity.setToObjectCode(toObjectCode);
467            entity.setStartDate(startDate);
468            entity.setEndDate(endDate);
469            entity.setUpdateDate(updateDate);
470            entity.setQualityFlag(qualityFlag);
471            entity.setLinkedItemType(linkedItemType);
472            return entity;
473        }
474    }
475
476    /**
477     * @see Comparable#compareTo
478     */
479    public int compareTo(LinkedItem o)
480    {
481        int cmp = 0;
482        if (this.getId() != null)
483        {
484            cmp = this.getId().compareTo(o.getId());
485        }
486        else
487        {
488            if (this.getFromObjectId() != null)
489            {
490                cmp = (cmp != 0 ? cmp : this.getFromObjectId().compareTo(o.getFromObjectId()));
491            }
492            if (this.getFromObjectCode() != null)
493            {
494                cmp = (cmp != 0 ? cmp : this.getFromObjectCode().compareTo(o.getFromObjectCode()));
495            }
496            if (this.getToObjectId() != null)
497            {
498                cmp = (cmp != 0 ? cmp : this.getToObjectId().compareTo(o.getToObjectId()));
499            }
500            if (this.getToObjectCode() != null)
501            {
502                cmp = (cmp != 0 ? cmp : this.getToObjectCode().compareTo(o.getToObjectCode()));
503            }
504            if (this.getStartDate() != null)
505            {
506                cmp = (cmp != 0 ? cmp : this.getStartDate().compareTo(o.getStartDate()));
507            }
508            if (this.getEndDate() != null)
509            {
510                cmp = (cmp != 0 ? cmp : this.getEndDate().compareTo(o.getEndDate()));
511            }
512            if (this.getUpdateDate() != null)
513            {
514                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
515            }
516        }
517        return cmp;
518    }
519// HibernateEntity.vsl merge-point
520// LinkedItem.java merge-point
521}