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.referential.taxon;
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.location.Location;
032import fr.ifremer.adagio.core.dao.referential.pmfm.Parameter;
033import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm;
034import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue;
035import fr.ifremer.adagio.core.dao.referential.pmfm.Unit;
036import java.io.Serializable;
037import java.sql.Timestamp;
038import java.util.Date;
039
040/**
041 * Définition des type de mensuration à appliquer (PSFM/paramètre/unité, précision), suivant
042 * l'espèce commerciale, le lieu, la présentation (optionnel), et la période de validité.
043 */
044// HibernateEntity.vsl annotations merge-point
045public abstract class TaxonGroupLengthPmfm
046    implements Serializable, Comparable<TaxonGroupLengthPmfm>
047{
048    /**
049     * The serial version UID of this class. Needed for serialization.
050     */
051    private static final long serialVersionUID = -7900471178485426657L;
052
053    // Generate 6 attributes
054    private Integer id;
055
056    /**
057     * 
058     * @return this.id Integer
059     */
060    public Integer getId()
061    {
062        return this.id;
063    }
064
065    /**
066     * 
067     * @param idIn Integer
068     */
069    public void setId(Integer idIn)
070    {
071        this.id = idIn;
072    }
073
074    private Date startDate;
075
076    /**
077     * Date de début de validité de l'association avec une mensuration.
078     * @return this.startDate Date
079     */
080    public Date getStartDate()
081    {
082        return this.startDate;
083    }
084
085    /**
086     * Date de début de validité de l'association avec une mensuration.
087     * @param startDateIn Date
088     */
089    public void setStartDate(Date startDateIn)
090    {
091        this.startDate = startDateIn;
092    }
093
094    private Date endDate;
095
096    /**
097     * Date de fin de validité de l'association avec une mensuration (optionnelle).
098     * Si vide, signifie que l'association est toujours valable
099     * @return this.endDate Date
100     */
101    public Date getEndDate()
102    {
103        return this.endDate;
104    }
105
106    /**
107     * Date de fin de validité de l'association avec une mensuration (optionnelle).
108     * Si vide, signifie que l'association est toujours valable
109     * @param endDateIn Date
110     */
111    public void setEndDate(Date endDateIn)
112    {
113        this.endDate = endDateIn;
114    }
115
116    private String description;
117
118    /**
119     * Description de l'association avec une mensuration.
120     * Par exemple : la référence du manuel ou du protocole de terrain, etc.
121     * @return this.description String
122     */
123    public String getDescription()
124    {
125        return this.description;
126    }
127
128    /**
129     * Description de l'association avec une mensuration.
130     * Par exemple : la référence du manuel ou du protocole de terrain, etc.
131     * @param descriptionIn String
132     */
133    public void setDescription(String descriptionIn)
134    {
135        this.description = descriptionIn;
136    }
137
138    private Float precision;
139
140    /**
141     * Précision de la mensuration, exprimée dans l'unité de la mensuration.
142     * Il s'agit d'un champ technique, recopié à partir de la table PMFM.
143     * ATTENTION : Doit toujours être cohérent avec la valeur de la table PMFM.
144     * @return this.precision Float
145     */
146    public Float getPrecision()
147    {
148        return this.precision;
149    }
150
151    /**
152     * Précision de la mensuration, exprimée dans l'unité de la mensuration.
153     * Il s'agit d'un champ technique, recopié à partir de la table PMFM.
154     * ATTENTION : Doit toujours être cohérent avec la valeur de la table PMFM.
155     * @param precisionIn Float
156     */
157    public void setPrecision(Float precisionIn)
158    {
159        this.precision = precisionIn;
160    }
161
162    private Timestamp updateDate;
163
164    /**
165     * 
166     * @return this.updateDate Timestamp
167     */
168    public Timestamp getUpdateDate()
169    {
170        return this.updateDate;
171    }
172
173    /**
174     * 
175     * @param updateDateIn Timestamp
176     */
177    public void setUpdateDate(Timestamp updateDateIn)
178    {
179        this.updateDate = updateDateIn;
180    }
181
182    // Generate 6 associations
183    private Unit unit;
184
185    /**
186     * Champ technique, recopié à partir de l'unité du PSFM.
187     * ATTENTION : Doit toujours être cohérent avec la table PMFM
188     * @return this.unit Unit
189     */
190    public Unit getUnit()
191    {
192        return this.unit;
193    }
194
195    /**
196     * Champ technique, recopié à partir de l'unité du PSFM.
197     * ATTENTION : Doit toujours être cohérent avec la table PMFM
198     * @param unitIn Unit
199     */
200    public void setUnit(Unit unitIn)
201    {
202        this.unit = unitIn;
203    }
204
205    private QualitativeValue dressing;
206
207    /**
208     * Présentation de l'individu / du poisson, servant à déterminer le bon type de mensuration à
209     * appliquer.
210     * @return this.dressing QualitativeValue
211     */
212    public QualitativeValue getDressing()
213    {
214        return this.dressing;
215    }
216
217    /**
218     * Présentation de l'individu / du poisson, servant à déterminer le bon type de mensuration à
219     * appliquer.
220     * @param dressingIn QualitativeValue
221     */
222    public void setDressing(QualitativeValue dressingIn)
223    {
224        this.dressing = dressingIn;
225    }
226
227    private Parameter parameter;
228
229    /**
230     * Champ technique, recopié à partir du code pamètre du PSFM.
231     * ATTENTION : Doit toujours être cohérent avec la table PMFM
232     * @return this.parameter Parameter
233     */
234    public Parameter getParameter()
235    {
236        return this.parameter;
237    }
238
239    /**
240     * Champ technique, recopié à partir du code pamètre du PSFM.
241     * ATTENTION : Doit toujours être cohérent avec la table PMFM
242     * @param parameterIn Parameter
243     */
244    public void setParameter(Parameter parameterIn)
245    {
246        this.parameter = parameterIn;
247    }
248
249    private Pmfm pmfm;
250
251    /**
252     * PSFM représentant le type de mensuration à appliquer.
253     * Les champs du PSFM généralement utilisés pour exploiter la mansuration (code paramètre,
254     * unité, précision) ont été recopiés dans des champs techniques de la table.
255     * @return this.pmfm Pmfm
256     */
257    public Pmfm getPmfm()
258    {
259        return this.pmfm;
260    }
261
262    /**
263     * PSFM représentant le type de mensuration à appliquer.
264     * Les champs du PSFM généralement utilisés pour exploiter la mansuration (code paramètre,
265     * unité, précision) ont été recopiés dans des champs techniques de la table.
266     * @param pmfmIn Pmfm
267     */
268    public void setPmfm(Pmfm pmfmIn)
269    {
270        this.pmfm = pmfmIn;
271    }
272
273    private TaxonGroup taxonGroup;
274
275    /**
276     * Il désigne un ensemble de taxons appartenant à des groupes taxinomiques différents mais ayant
277     * les
278     * mêmes caractéristiques pour un critère donné. Ce critère peut être morpho-anatomique (par
279     * exemple
280     * les strates algales ou la taille des organismes), comportemental (par exemple des groupes
281     * trophiques
282     * ou des modes de déplacement), ou encore basé sur des notions plus complexes comme la
283     * polluo-sensibilité (exemple des groupes écologiques définis pour les macroinvertébrés
284     * benthiques).
285     * Pour un critère donné, les groupes de taxons sont rassemblés dans un regroupement appelé
286     * groupe de
287     * taxons père.
288     * Les groupes de taxons sont de deux catégories :
289     * - Descriptif : c'est à dire seulement utilisé pour l'extraction de données. Les regroupements
290     * de
291     * taxons sont effectués en aval de la mesure effectuée.
292     * - Identification : il s'agit de regroupements utilisés pour identifier des catégories de
293     * taxons sur
294     * le terrain ou en laboratoire, lorsqu'il est difficile d'opérer une identification précise ou
295     * lorsque
296     * celle-ci s'avère tout simplement impossible ou non pertinente. Le regroupement des taxons
297     * s'effectue
298     * alors en amont de la mesure.
299     * Certains groupes peuvent être figés, c'est à dire qu'ils sont définis une bonne fois pour
300     * toute dans
301     * un document. Pour ce dernier cas particulier, il n'y a donc, a priori, pas besoin de mise à
302     * jour, et
303     * encore moins de pouvoir les supprimer : ils sont donc non modifiables (mais ce ne doit pas
304     * être une
305     * règle générale)
306     * @return this.taxonGroup TaxonGroup
307     */
308    public TaxonGroup getTaxonGroup()
309    {
310        return this.taxonGroup;
311    }
312
313    /**
314     * Il désigne un ensemble de taxons appartenant à des groupes taxinomiques différents mais ayant
315     * les
316     * mêmes caractéristiques pour un critère donné. Ce critère peut être morpho-anatomique (par
317     * exemple
318     * les strates algales ou la taille des organismes), comportemental (par exemple des groupes
319     * trophiques
320     * ou des modes de déplacement), ou encore basé sur des notions plus complexes comme la
321     * polluo-sensibilité (exemple des groupes écologiques définis pour les macroinvertébrés
322     * benthiques).
323     * Pour un critère donné, les groupes de taxons sont rassemblés dans un regroupement appelé
324     * groupe de
325     * taxons père.
326     * Les groupes de taxons sont de deux catégories :
327     * - Descriptif : c'est à dire seulement utilisé pour l'extraction de données. Les regroupements
328     * de
329     * taxons sont effectués en aval de la mesure effectuée.
330     * - Identification : il s'agit de regroupements utilisés pour identifier des catégories de
331     * taxons sur
332     * le terrain ou en laboratoire, lorsqu'il est difficile d'opérer une identification précise ou
333     * lorsque
334     * celle-ci s'avère tout simplement impossible ou non pertinente. Le regroupement des taxons
335     * s'effectue
336     * alors en amont de la mesure.
337     * Certains groupes peuvent être figés, c'est à dire qu'ils sont définis une bonne fois pour
338     * toute dans
339     * un document. Pour ce dernier cas particulier, il n'y a donc, a priori, pas besoin de mise à
340     * jour, et
341     * encore moins de pouvoir les supprimer : ils sont donc non modifiables (mais ce ne doit pas
342     * être une
343     * règle générale)
344     * @param taxonGroupIn TaxonGroup
345     */
346    public void setTaxonGroup(TaxonGroup taxonGroupIn)
347    {
348        this.taxonGroup = taxonGroupIn;
349    }
350
351    private Location location;
352
353    /**
354     * Lieux (terrestre) d'application de la relation.
355     * @return this.location Location
356     */
357    public Location getLocation()
358    {
359        return this.location;
360    }
361
362    /**
363     * Lieux (terrestre) d'application de la relation.
364     * @param locationIn Location
365     */
366    public void setLocation(Location locationIn)
367    {
368        this.location = locationIn;
369    }
370
371    /**
372     * Returns <code>true</code> if the argument is an TaxonGroupLengthPmfm instance and all identifiers for this entity
373     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
374     */
375    @Override
376    public boolean equals(Object object)
377    {
378        if (this == object)
379        {
380            return true;
381        }
382        if (!(object instanceof TaxonGroupLengthPmfm))
383        {
384            return false;
385        }
386        final TaxonGroupLengthPmfm that = (TaxonGroupLengthPmfm)object;
387        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
388        {
389            return false;
390        }
391        return true;
392    }
393
394    /**
395     * Returns a hash code based on this entity's identifiers.
396     */
397    @Override
398    public int hashCode()
399    {
400        int hashCode = 0;
401        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
402
403        return hashCode;
404    }
405
406    /**
407     * Constructs new instances of {@link TaxonGroupLengthPmfm}.
408     */
409    public static final class Factory
410    {
411        /**
412         * Constructs a new instance of {@link TaxonGroupLengthPmfm}.
413         * @return new TaxonGroupLengthPmfmImpl()
414         */
415        public static TaxonGroupLengthPmfm newInstance()
416        {
417            return new TaxonGroupLengthPmfmImpl();
418        }
419
420        /**
421         * Constructs a new instance of {@link TaxonGroupLengthPmfm}, taking all required and/or
422         * read-only properties as arguments, except for identifiers.
423         * @param startDate Date
424         * @param description String
425         * @param updateDate Timestamp
426         * @param unit Unit
427         * @param parameter Parameter
428         * @param pmfm Pmfm
429         * @param taxonGroup TaxonGroup
430         * @param location Location
431         * @return newInstance
432         */
433        public static TaxonGroupLengthPmfm newInstance(Date startDate, String description, Timestamp updateDate, Unit unit, Parameter parameter, Pmfm pmfm, TaxonGroup taxonGroup, Location location)
434        {
435            final TaxonGroupLengthPmfm entity = new TaxonGroupLengthPmfmImpl();
436            entity.setStartDate(startDate);
437            entity.setDescription(description);
438            entity.setUpdateDate(updateDate);
439            entity.setUnit(unit);
440            entity.setParameter(parameter);
441            entity.setPmfm(pmfm);
442            entity.setTaxonGroup(taxonGroup);
443            entity.setLocation(location);
444            return entity;
445        }
446
447        /**
448         * Constructs a new instance of {@link TaxonGroupLengthPmfm}, taking all possible properties
449         * (except the identifier(s))as arguments.
450         * @param startDate Date
451         * @param endDate Date
452         * @param description String
453         * @param precision Float
454         * @param updateDate Timestamp
455         * @param unit Unit
456         * @param dressing QualitativeValue
457         * @param parameter Parameter
458         * @param pmfm Pmfm
459         * @param taxonGroup TaxonGroup
460         * @param location Location
461         * @return newInstance TaxonGroupLengthPmfm
462         */
463        public static TaxonGroupLengthPmfm newInstance(Date startDate, Date endDate, String description, Float precision, Timestamp updateDate, Unit unit, QualitativeValue dressing, Parameter parameter, Pmfm pmfm, TaxonGroup taxonGroup, Location location)
464        {
465            final TaxonGroupLengthPmfm entity = new TaxonGroupLengthPmfmImpl();
466            entity.setStartDate(startDate);
467            entity.setEndDate(endDate);
468            entity.setDescription(description);
469            entity.setPrecision(precision);
470            entity.setUpdateDate(updateDate);
471            entity.setUnit(unit);
472            entity.setDressing(dressing);
473            entity.setParameter(parameter);
474            entity.setPmfm(pmfm);
475            entity.setTaxonGroup(taxonGroup);
476            entity.setLocation(location);
477            return entity;
478        }
479    }
480
481    /**
482     * @see Comparable#compareTo
483     */
484    public int compareTo(TaxonGroupLengthPmfm o)
485    {
486        int cmp = 0;
487        if (this.getId() != null)
488        {
489            cmp = this.getId().compareTo(o.getId());
490        }
491        else
492        {
493            if (this.getStartDate() != null)
494            {
495                cmp = (cmp != 0 ? cmp : this.getStartDate().compareTo(o.getStartDate()));
496            }
497            if (this.getEndDate() != null)
498            {
499                cmp = (cmp != 0 ? cmp : this.getEndDate().compareTo(o.getEndDate()));
500            }
501            if (this.getDescription() != null)
502            {
503                cmp = (cmp != 0 ? cmp : this.getDescription().compareTo(o.getDescription()));
504            }
505            if (this.getPrecision() != null)
506            {
507                cmp = (cmp != 0 ? cmp : this.getPrecision().compareTo(o.getPrecision()));
508            }
509            if (this.getUpdateDate() != null)
510            {
511                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
512            }
513        }
514        return cmp;
515    }
516// HibernateEntity.vsl merge-point
517// TaxonGroupLengthPmfm.java merge-point
518}