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.pmfm;
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.Status;
032import fr.ifremer.adagio.core.dao.referential.ValidityStatus;
033import java.io.Serializable;
034import java.sql.Timestamp;
035import java.util.Collection;
036import java.util.Date;
037import java.util.HashSet;
038
039/**
040 * Quadruplet paramètre/support/méthode/fraction. Ce quadruplet est systématiquement associé aux
041 * résultats et décrit précisemment les conditions de mesure/d'analyse de ceux-ci.
042 */
043// HibernateEntity.vsl annotations merge-point
044public abstract class Pmfm
045    implements Serializable, Comparable<Pmfm>
046{
047    /**
048     * The serial version UID of this class. Needed for serialization.
049     */
050    private static final long serialVersionUID = 610610289820423019L;
051
052    // Generate 12 attributes
053    private Integer id;
054
055    /**
056     * Idenfiant interne. Généré par le système.
057     * @return this.id Integer
058     */
059    public Integer getId()
060    {
061        return this.id;
062    }
063
064    /**
065     * Idenfiant interne. Généré par le système.
066     * @param idIn Integer
067     */
068    public void setId(Integer idIn)
069    {
070        this.id = idIn;
071    }
072
073    private Integer signifFiguresNumber;
074
075    /**
076     * Nombre de chiffres significatifs en tout du résultat pour le quadruplet concerné.
077     * @return this.signifFiguresNumber Integer
078     */
079    public Integer getSignifFiguresNumber()
080    {
081        return this.signifFiguresNumber;
082    }
083
084    /**
085     * Nombre de chiffres significatifs en tout du résultat pour le quadruplet concerné.
086     * @param signifFiguresNumberIn Integer
087     */
088    public void setSignifFiguresNumber(Integer signifFiguresNumberIn)
089    {
090        this.signifFiguresNumber = signifFiguresNumberIn;
091    }
092
093    private Integer maximumNumberDecimals;
094
095    /**
096     * Nombre de décimales significatives pour le résultat mesuré/analysé suivant le quadruplet lié.
097     * @return this.maximumNumberDecimals Integer
098     */
099    public Integer getMaximumNumberDecimals()
100    {
101        return this.maximumNumberDecimals;
102    }
103
104    /**
105     * Nombre de décimales significatives pour le résultat mesuré/analysé suivant le quadruplet lié.
106     * @param maximumNumberDecimalsIn Integer
107     */
108    public void setMaximumNumberDecimals(Integer maximumNumberDecimalsIn)
109    {
110        this.maximumNumberDecimals = maximumNumberDecimalsIn;
111    }
112
113    private Float detectionThreshold;
114
115    /**
116     * Seuil de détection des instruments de mesure et de la méthode associée.
117     * @return this.detectionThreshold Float
118     */
119    public Float getDetectionThreshold()
120    {
121        return this.detectionThreshold;
122    }
123
124    /**
125     * Seuil de détection des instruments de mesure et de la méthode associée.
126     * @param detectionThresholdIn Float
127     */
128    public void setDetectionThreshold(Float detectionThresholdIn)
129    {
130        this.detectionThreshold = detectionThresholdIn;
131    }
132
133    private Float minValue;
134
135    /**
136     * Valeur mimimale autorisée par défaut (peut etre redéfini dans les stratégies).
137     * @return this.minValue Float
138     */
139    public Float getMinValue()
140    {
141        return this.minValue;
142    }
143
144    /**
145     * Valeur mimimale autorisée par défaut (peut etre redéfini dans les stratégies).
146     * @param minValueIn Float
147     */
148    public void setMinValue(Float minValueIn)
149    {
150        this.minValue = minValueIn;
151    }
152
153    private Float maxValue;
154
155    /**
156     * Valeur maximale autorisée par défaut (peut etre redéfini dans les stratégies).
157     * @return this.maxValue Float
158     */
159    public Float getMaxValue()
160    {
161        return this.maxValue;
162    }
163
164    /**
165     * Valeur maximale autorisée par défaut (peut etre redéfini dans les stratégies).
166     * @param maxValueIn Float
167     */
168    public void setMaxValue(Float maxValueIn)
169    {
170        this.maxValue = maxValueIn;
171    }
172
173    private Float precision;
174
175    /**
176     * 
177     * @return this.precision Float
178     */
179    public Float getPrecision()
180    {
181        return this.precision;
182    }
183
184    /**
185     * 
186     * @param precisionIn Float
187     */
188    public void setPrecision(Float precisionIn)
189    {
190        this.precision = precisionIn;
191    }
192
193    private Float defaultValue;
194
195    /**
196     * Précision de la mesure associé pour le PSFM.Typiquement, cette précision est utile lors de la
197     * saisie de plusieursinstruments et de la méthode associée.
198     * @return this.defaultValue Float
199     */
200    public Float getDefaultValue()
201    {
202        return this.defaultValue;
203    }
204
205    /**
206     * Précision de la mesure associé pour le PSFM.Typiquement, cette précision est utile lors de la
207     * saisie de plusieursinstruments et de la méthode associée.
208     * @param defaultValueIn Float
209     */
210    public void setDefaultValue(Float defaultValueIn)
211    {
212        this.defaultValue = defaultValueIn;
213    }
214
215    private Date creationDate;
216
217    /**
218     * 
219     * @return this.creationDate Date
220     */
221    public Date getCreationDate()
222    {
223        return this.creationDate;
224    }
225
226    /**
227     * 
228     * @param creationDateIn Date
229     */
230    public void setCreationDate(Date creationDateIn)
231    {
232        this.creationDate = creationDateIn;
233    }
234
235    private String description;
236
237    /**
238     * 
239     * @return this.description String
240     */
241    public String getDescription()
242    {
243        return this.description;
244    }
245
246    /**
247     * 
248     * @param descriptionIn String
249     */
250    public void setDescription(String descriptionIn)
251    {
252        this.description = descriptionIn;
253    }
254
255    private String comments;
256
257    /**
258     * 
259     * @return this.comments String
260     */
261    public String getComments()
262    {
263        return this.comments;
264    }
265
266    /**
267     * 
268     * @param commentsIn String
269     */
270    public void setComments(String commentsIn)
271    {
272        this.comments = commentsIn;
273    }
274
275    private Timestamp updateDate;
276
277    /**
278     * 
279     * @return this.updateDate Timestamp
280     */
281    public Timestamp getUpdateDate()
282    {
283        return this.updateDate;
284    }
285
286    /**
287     * 
288     * @param updateDateIn Timestamp
289     */
290    public void setUpdateDate(Timestamp updateDateIn)
291    {
292        this.updateDate = updateDateIn;
293    }
294
295    // Generate 17 associations
296    private ValidityStatus validityStatus;
297
298    /**
299     * Etat de validation d'une donnée du référentiel. Utile pour les responsables de référentiel.
300     * Validity status of a referential data.
301     * @return this.validityStatus ValidityStatus
302     */
303    public ValidityStatus getValidityStatus()
304    {
305        return this.validityStatus;
306    }
307
308    /**
309     * Etat de validation d'une donnée du référentiel. Utile pour les responsables de référentiel.
310     * Validity status of a referential data.
311     * @param validityStatusIn ValidityStatus
312     */
313    public void setValidityStatus(ValidityStatus validityStatusIn)
314    {
315        this.validityStatus = validityStatusIn;
316    }
317
318    private Matrix matrix;
319
320    /**
321     * Le support est un composant du milieu sur lequel porte l'investigation. Les supports sont,
322     * par
323     * exemple :
324     * - un engin,
325     * - la mer (ou autre environnement),
326     * - bivalve (moule, huître, coque...)
327     * - crustacé (crevette...)
328     * - poisson (merlu, sardine...)
329     * - gastéropode (bigorneau, littorine...)
330     * - echinoderme    (oursin...)
331     * - masse d'eau, eau brute
332     * - eau filtrée
333     * - ...
334     * Le support ne correspond pas au support réellement analysé. En effet, il peut s'agir d'une
335     * analyse
336     * sur une fraction du support (par exemple, pour le poisson, l'otolite,… ou pour un engin, le
337     * bras).
338     * Nombre de lignes : 20
339     * @return this.matrix Matrix
340     */
341    public Matrix getMatrix()
342    {
343        return this.matrix;
344    }
345
346    /**
347     * Le support est un composant du milieu sur lequel porte l'investigation. Les supports sont,
348     * par
349     * exemple :
350     * - un engin,
351     * - la mer (ou autre environnement),
352     * - bivalve (moule, huître, coque...)
353     * - crustacé (crevette...)
354     * - poisson (merlu, sardine...)
355     * - gastéropode (bigorneau, littorine...)
356     * - echinoderme    (oursin...)
357     * - masse d'eau, eau brute
358     * - eau filtrée
359     * - ...
360     * Le support ne correspond pas au support réellement analysé. En effet, il peut s'agir d'une
361     * analyse
362     * sur une fraction du support (par exemple, pour le poisson, l'otolite,… ou pour un engin, le
363     * bras).
364     * Nombre de lignes : 20
365     * @param matrixIn Matrix
366     */
367    public void setMatrix(Matrix matrixIn)
368    {
369        this.matrix = matrixIn;
370    }
371
372    private Method method;
373
374    /**
375     * Les méthodes sont rassemblées dans une liste qui couvre tous les domaines pour lesquels il
376     * existe un
377     * paramètre.
378     * La liste des méthodes est générique et porte sur toutes les phases du processus de mesure des
379     * paramètres. Chaque méthode n'est pas non plus systématiquement spécifique à l'une de ces
380     * phases ou à
381     * une nature particulière de paramètre. En effet, une méthode peut couvrir tout le cycle du
382     * processus
383     * et/ou être utilisable pour une phase quelle que soit la nature du paramètre.
384     * Les méthodes peuvent être référencées par les paramètres à différentes phases de leur
385     * processus de
386     * mesure que sont :
387     * pour les paramètres biologique :
388     * - le prélèvement et l'échantillonnage ;
389     * - la conservation et le transport ;
390     * - le fractionnement ;
391     * - l'analyse ;
392     * pour les paramètres environnementaux :
393     * - l'observation ;
394     * @return this.method Method
395     */
396    public Method getMethod()
397    {
398        return this.method;
399    }
400
401    /**
402     * Les méthodes sont rassemblées dans une liste qui couvre tous les domaines pour lesquels il
403     * existe un
404     * paramètre.
405     * La liste des méthodes est générique et porte sur toutes les phases du processus de mesure des
406     * paramètres. Chaque méthode n'est pas non plus systématiquement spécifique à l'une de ces
407     * phases ou à
408     * une nature particulière de paramètre. En effet, une méthode peut couvrir tout le cycle du
409     * processus
410     * et/ou être utilisable pour une phase quelle que soit la nature du paramètre.
411     * Les méthodes peuvent être référencées par les paramètres à différentes phases de leur
412     * processus de
413     * mesure que sont :
414     * pour les paramètres biologique :
415     * - le prélèvement et l'échantillonnage ;
416     * - la conservation et le transport ;
417     * - le fractionnement ;
418     * - l'analyse ;
419     * pour les paramètres environnementaux :
420     * - l'observation ;
421     * @param methodIn Method
422     */
423    public void setMethod(Method methodIn)
424    {
425        this.method = methodIn;
426    }
427
428    private Collection<QualitativeValue> qualitativeValues = new HashSet<QualitativeValue>();
429
430    /**
431     * Liste des valeurs qualitatives pour un PSFM.Il s'agit d’une sous-liste des valeurs
432     * qualitatives du paramètre.
433     * @return this.qualitativeValues Collection<QualitativeValue>
434     */
435    public Collection<QualitativeValue> getQualitativeValues()
436    {
437        return this.qualitativeValues;
438    }
439
440    /**
441     * Liste des valeurs qualitatives pour un PSFM.Il s'agit d’une sous-liste des valeurs
442     * qualitatives du paramètre.
443     * @param qualitativeValuesIn Collection<QualitativeValue>
444     */
445    public void setQualitativeValues(Collection<QualitativeValue> qualitativeValuesIn)
446    {
447        this.qualitativeValues = qualitativeValuesIn;
448    }
449
450    /**
451     * Liste des valeurs qualitatives pour un PSFM.Il s'agit d’une sous-liste des valeurs
452     * qualitatives du paramètre.
453     * @param elementToAdd QualitativeValue
454     * @return <tt>true</tt> if this collection changed as a result of the
455     *         call
456     */
457    public boolean addQualitativeValues(QualitativeValue elementToAdd)
458    {
459        return this.qualitativeValues.add(elementToAdd);
460    }
461
462    /**
463     * Liste des valeurs qualitatives pour un PSFM.Il s'agit d’une sous-liste des valeurs
464     * qualitatives du paramètre.
465     * @param elementToRemove QualitativeValue
466     * @return <tt>true</tt> if this collection changed as a result of the
467     *         call
468     */
469    public boolean removeQualitativeValues(QualitativeValue elementToRemove)
470    {
471        return this.qualitativeValues.remove(elementToRemove);
472    }
473
474    private Fraction fraction;
475
476    /**
477     * Une fraction analysée est un composant du support sur lequel porte l'analyse.
478     * Les fractions analysées sont généralement des fractions "organiques", au sens d'une
479     * classification
480     * par partie d'un même organisme,
481     * ex : foie, écaille, reins, dents, otolithe...
482     * Elles peuvent aussi être un sous ensemble quelconque du support. Par exemple, dans le cas des
483     * engins
484     * : le bras, …
485     * Les fractions dites "systématiques", au sens d'une classification systématique (ex : poisson
486     * :
487     * Cyprinidae / Cyprinus / Cyprinus carpio...) ne sont pas considérées comme des fractions au
488     * sens de
489     * l'entité, mais comme une précision apportée sur l'individu. Représentées par les entités
490     * "taxon" et
491     * "groupe de taxon", elles ne font pas partie de la liste des fractions analysées.
492     * Etant une liste de référence, une procédure stricte pour la création de nouvelles fractions
493     * analysées pourra être mise en place (On pourra s'inspirer des procédures utilisées dans
494     * Quadrige2,
495     * qui utilisent le référentiel national du SANDRE).
496     * Nombre de lignes : 10
497     * @return this.fraction Fraction
498     */
499    public Fraction getFraction()
500    {
501        return this.fraction;
502    }
503
504    /**
505     * Une fraction analysée est un composant du support sur lequel porte l'analyse.
506     * Les fractions analysées sont généralement des fractions "organiques", au sens d'une
507     * classification
508     * par partie d'un même organisme,
509     * ex : foie, écaille, reins, dents, otolithe...
510     * Elles peuvent aussi être un sous ensemble quelconque du support. Par exemple, dans le cas des
511     * engins
512     * : le bras, …
513     * Les fractions dites "systématiques", au sens d'une classification systématique (ex : poisson
514     * :
515     * Cyprinidae / Cyprinus / Cyprinus carpio...) ne sont pas considérées comme des fractions au
516     * sens de
517     * l'entité, mais comme une précision apportée sur l'individu. Représentées par les entités
518     * "taxon" et
519     * "groupe de taxon", elles ne font pas partie de la liste des fractions analysées.
520     * Etant une liste de référence, une procédure stricte pour la création de nouvelles fractions
521     * analysées pourra être mise en place (On pourra s'inspirer des procédures utilisées dans
522     * Quadrige2,
523     * qui utilisent le référentiel national du SANDRE).
524     * Nombre de lignes : 10
525     * @param fractionIn Fraction
526     */
527    public void setFraction(Fraction fractionIn)
528    {
529        this.fraction = fractionIn;
530    }
531
532    private Parameter parameter;
533
534    /**
535     * Un paramètre est une propriété du milieu ou d'un élément du milieu qui contribue à en
536     * apprécier les
537     * caractéristiques et/ou la qualité et/ou l'aptitude à des usages.
538     * Le paramètre se décline en trois types : quantitatif, qualitatif ou libre.
539     * Le type quantitatif se rapporte aux paramètres qui ont une infinité de résultats numériques.
540     * Le type qualitatif se rapporte aux paramètres qui ne prennent qu'un nombre limité de valeurs
541     * prédéfinies pour chacun d'eux.
542     * Le type libre, ou alphanumérique, correspond aux paramètres de valeurs alphanumériques, sans
543     * limite
544     * de valeurs possibles (hormis la longueur de la chaine : 40 max).
545     * Ces trois types sont mutuellement exclusifs.
546     * Exemple de paramètre :
547     * • Taille (numérique)
548     * • Age (numérique)
549     * • Sexe (qualitatif)
550     * • Catégorie commerciale (qualitatif)
551     * • Présentation commerciale (qualitatif)
552     * • Vrac / Hors Vrac (qualitatif)
553     * • Rejet / Débarquement (qualitatif) (Discard/Landing)
554     * • Stade de maturité (qualitatif) (Maturity stage)
555     * • Numéro de contrat (libre - alphanumérique)
556     * Cette liste n’est pas exhaustive.
557     * Nombre de lignes : 130
558     * @return this.parameter Parameter
559     */
560    public Parameter getParameter()
561    {
562        return this.parameter;
563    }
564
565    /**
566     * Un paramètre est une propriété du milieu ou d'un élément du milieu qui contribue à en
567     * apprécier les
568     * caractéristiques et/ou la qualité et/ou l'aptitude à des usages.
569     * Le paramètre se décline en trois types : quantitatif, qualitatif ou libre.
570     * Le type quantitatif se rapporte aux paramètres qui ont une infinité de résultats numériques.
571     * Le type qualitatif se rapporte aux paramètres qui ne prennent qu'un nombre limité de valeurs
572     * prédéfinies pour chacun d'eux.
573     * Le type libre, ou alphanumérique, correspond aux paramètres de valeurs alphanumériques, sans
574     * limite
575     * de valeurs possibles (hormis la longueur de la chaine : 40 max).
576     * Ces trois types sont mutuellement exclusifs.
577     * Exemple de paramètre :
578     * • Taille (numérique)
579     * • Age (numérique)
580     * • Sexe (qualitatif)
581     * • Catégorie commerciale (qualitatif)
582     * • Présentation commerciale (qualitatif)
583     * • Vrac / Hors Vrac (qualitatif)
584     * • Rejet / Débarquement (qualitatif) (Discard/Landing)
585     * • Stade de maturité (qualitatif) (Maturity stage)
586     * • Numéro de contrat (libre - alphanumérique)
587     * Cette liste n’est pas exhaustive.
588     * Nombre de lignes : 130
589     * @param parameterIn Parameter
590     */
591    public void setParameter(Parameter parameterIn)
592    {
593        this.parameter = parameterIn;
594    }
595
596    private AggregationLevel aggregationLevel;
597
598    /**
599     * Niveau (ou période) d'agrégation de la donnée.
600     * Par exemple :
601     * - aucune (pas d'agrégation)
602     * - jour,
603     * - mois,
604     * - année
605     * - marée
606     * - opération
607     * - zone de peche (cas des séquences de peche ?)
608     * Utiliser une période d'agrégation permet de définir des valeurs moyennes sur une période
609     * d'agrégation (par exemple : le mois) indépendamment de la période concernée (par exemple :
610     * une
611     * année).
612     * Exemple :
613     * - moyenne mensuelle sur l'année, du nombre d'engin levé par jour :
614     * - paramètre : nombre d'engin levé
615     * - niveau d'agrégation du PSFM : jour
616     * - période concerné : 01/01/XX au 31/12/XX : définie au niveau de l'entité à laquelle est
617     * rattachée
618     * la mesure (exemple : la marée, l'opération, les caractéristiques d'utilisation, etc.).
619     * - période d'agrégation sur la mesure (xxxMeasurement) : mois
620     * @return this.aggregationLevel AggregationLevel
621     */
622    public AggregationLevel getAggregationLevel()
623    {
624        return this.aggregationLevel;
625    }
626
627    /**
628     * Niveau (ou période) d'agrégation de la donnée.
629     * Par exemple :
630     * - aucune (pas d'agrégation)
631     * - jour,
632     * - mois,
633     * - année
634     * - marée
635     * - opération
636     * - zone de peche (cas des séquences de peche ?)
637     * Utiliser une période d'agrégation permet de définir des valeurs moyennes sur une période
638     * d'agrégation (par exemple : le mois) indépendamment de la période concernée (par exemple :
639     * une
640     * année).
641     * Exemple :
642     * - moyenne mensuelle sur l'année, du nombre d'engin levé par jour :
643     * - paramètre : nombre d'engin levé
644     * - niveau d'agrégation du PSFM : jour
645     * - période concerné : 01/01/XX au 31/12/XX : définie au niveau de l'entité à laquelle est
646     * rattachée
647     * la mesure (exemple : la marée, l'opération, les caractéristiques d'utilisation, etc.).
648     * - période d'agrégation sur la mesure (xxxMeasurement) : mois
649     * @param aggregationLevelIn AggregationLevel
650     */
651    public void setAggregationLevel(AggregationLevel aggregationLevelIn)
652    {
653        this.aggregationLevel = aggregationLevelIn;
654    }
655
656    private Status status;
657
658    /**
659     * Pour les données du référentiel, information permettant de déterminer si une donnée est
660     * valide,
661     * obsolète ou temporaire.
662     * - obsolète (=inactif) : '0'
663     * - valide (=actif) : '1'
664     * - temporaire : '2'
665     * - en cours de suppression : '3'
666     * -  : '4'
667     * note : on a préfère ici 'valide' au terme 'actif' (utilisé dans Harmonie), pour ne pas
668     * confondre
669     * avec par exemple l'activité d'un navire sur un mois.
670     * @return this.status Status
671     */
672    public Status getStatus()
673    {
674        return this.status;
675    }
676
677    /**
678     * Pour les données du référentiel, information permettant de déterminer si une donnée est
679     * valide,
680     * obsolète ou temporaire.
681     * - obsolète (=inactif) : '0'
682     * - valide (=actif) : '1'
683     * - temporaire : '2'
684     * - en cours de suppression : '3'
685     * -  : '4'
686     * note : on a préfère ici 'valide' au terme 'actif' (utilisé dans Harmonie), pour ne pas
687     * confondre
688     * avec par exemple l'activité d'un navire sur un mois.
689     * @param statusIn Status
690     */
691    public void setStatus(Status statusIn)
692    {
693        this.status = statusIn;
694    }
695
696    private Unit unit;
697
698    /**
699     * Unité d'une mesure.
700     * Nombre de lignes : 30
701     * @return this.unit Unit
702     */
703    public Unit getUnit()
704    {
705        return this.unit;
706    }
707
708    /**
709     * Unité d'une mesure.
710     * Nombre de lignes : 30
711     * @param unitIn Unit
712     */
713    public void setUnit(Unit unitIn)
714    {
715        this.unit = unitIn;
716    }
717
718    /**
719     * Returns <code>true</code> if the argument is an Pmfm instance and all identifiers for this entity
720     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
721     */
722    @Override
723    public boolean equals(Object object)
724    {
725        if (this == object)
726        {
727            return true;
728        }
729        if (!(object instanceof Pmfm))
730        {
731            return false;
732        }
733        final Pmfm that = (Pmfm)object;
734        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
735        {
736            return false;
737        }
738        return true;
739    }
740
741    /**
742     * Returns a hash code based on this entity's identifiers.
743     */
744    @Override
745    public int hashCode()
746    {
747        int hashCode = 0;
748        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
749
750        return hashCode;
751    }
752
753    /**
754     * Constructs new instances of {@link Pmfm}.
755     */
756    public static final class Factory
757    {
758        /**
759         * Constructs a new instance of {@link Pmfm}.
760         * @return new PmfmImpl()
761         */
762        public static Pmfm newInstance()
763        {
764            return new PmfmImpl();
765        }
766
767        /**
768         * Constructs a new instance of {@link Pmfm}, taking all required and/or
769         * read-only properties as arguments, except for identifiers.
770         * @param creationDate Date
771         * @param updateDate Timestamp
772         * @param validityStatus ValidityStatus
773         * @param matrix Matrix
774         * @param method Method
775         * @param fraction Fraction
776         * @param parameter Parameter
777         * @param aggregationLevel AggregationLevel
778         * @param status Status
779         * @param unit Unit
780         * @return newInstance
781         */
782        public static Pmfm newInstance(Date creationDate, Timestamp updateDate, ValidityStatus validityStatus, Matrix matrix, Method method, Fraction fraction, Parameter parameter, AggregationLevel aggregationLevel, Status status, Unit unit)
783        {
784            final Pmfm entity = new PmfmImpl();
785            entity.setCreationDate(creationDate);
786            entity.setUpdateDate(updateDate);
787            entity.setValidityStatus(validityStatus);
788            entity.setMatrix(matrix);
789            entity.setMethod(method);
790            entity.setFraction(fraction);
791            entity.setParameter(parameter);
792            entity.setAggregationLevel(aggregationLevel);
793            entity.setStatus(status);
794            entity.setUnit(unit);
795            return entity;
796        }
797
798        /**
799         * Constructs a new instance of {@link Pmfm}, taking all possible properties
800         * (except the identifier(s))as arguments.
801         * @param signifFiguresNumber Integer
802         * @param maximumNumberDecimals Integer
803         * @param detectionThreshold Float
804         * @param minValue Float
805         * @param maxValue Float
806         * @param precision Float
807         * @param defaultValue Float
808         * @param creationDate Date
809         * @param description String
810         * @param comments String
811         * @param updateDate Timestamp
812         * @param validityStatus ValidityStatus
813         * @param matrix Matrix
814         * @param method Method
815         * @param qualitativeValues Collection<QualitativeValue>
816         * @param fraction Fraction
817         * @param parameter Parameter
818         * @param aggregationLevel AggregationLevel
819         * @param status Status
820         * @param unit Unit
821         * @return newInstance Pmfm
822         */
823        public static Pmfm newInstance(Integer signifFiguresNumber, Integer maximumNumberDecimals, Float detectionThreshold, Float minValue, Float maxValue, Float precision, Float defaultValue, Date creationDate, String description, String comments, Timestamp updateDate, ValidityStatus validityStatus, Matrix matrix, Method method, Collection<QualitativeValue> qualitativeValues, Fraction fraction, Parameter parameter, AggregationLevel aggregationLevel, Status status, Unit unit)
824        {
825            final Pmfm entity = new PmfmImpl();
826            entity.setSignifFiguresNumber(signifFiguresNumber);
827            entity.setMaximumNumberDecimals(maximumNumberDecimals);
828            entity.setDetectionThreshold(detectionThreshold);
829            entity.setMinValue(minValue);
830            entity.setMaxValue(maxValue);
831            entity.setPrecision(precision);
832            entity.setDefaultValue(defaultValue);
833            entity.setCreationDate(creationDate);
834            entity.setDescription(description);
835            entity.setComments(comments);
836            entity.setUpdateDate(updateDate);
837            entity.setValidityStatus(validityStatus);
838            entity.setMatrix(matrix);
839            entity.setMethod(method);
840            entity.setQualitativeValues(qualitativeValues);
841            entity.setFraction(fraction);
842            entity.setParameter(parameter);
843            entity.setAggregationLevel(aggregationLevel);
844            entity.setStatus(status);
845            entity.setUnit(unit);
846            return entity;
847        }
848    }
849
850    /**
851     * @see Comparable#compareTo
852     */
853    public int compareTo(Pmfm o)
854    {
855        int cmp = 0;
856        if (this.getId() != null)
857        {
858            cmp = this.getId().compareTo(o.getId());
859        }
860        else
861        {
862            if (this.getSignifFiguresNumber() != null)
863            {
864                cmp = (cmp != 0 ? cmp : this.getSignifFiguresNumber().compareTo(o.getSignifFiguresNumber()));
865            }
866            if (this.getMaximumNumberDecimals() != null)
867            {
868                cmp = (cmp != 0 ? cmp : this.getMaximumNumberDecimals().compareTo(o.getMaximumNumberDecimals()));
869            }
870            if (this.getDetectionThreshold() != null)
871            {
872                cmp = (cmp != 0 ? cmp : this.getDetectionThreshold().compareTo(o.getDetectionThreshold()));
873            }
874            if (this.getMinValue() != null)
875            {
876                cmp = (cmp != 0 ? cmp : this.getMinValue().compareTo(o.getMinValue()));
877            }
878            if (this.getMaxValue() != null)
879            {
880                cmp = (cmp != 0 ? cmp : this.getMaxValue().compareTo(o.getMaxValue()));
881            }
882            if (this.getPrecision() != null)
883            {
884                cmp = (cmp != 0 ? cmp : this.getPrecision().compareTo(o.getPrecision()));
885            }
886            if (this.getDefaultValue() != null)
887            {
888                cmp = (cmp != 0 ? cmp : this.getDefaultValue().compareTo(o.getDefaultValue()));
889            }
890            if (this.getCreationDate() != null)
891            {
892                cmp = (cmp != 0 ? cmp : this.getCreationDate().compareTo(o.getCreationDate()));
893            }
894            if (this.getDescription() != null)
895            {
896                cmp = (cmp != 0 ? cmp : this.getDescription().compareTo(o.getDescription()));
897            }
898            if (this.getComments() != null)
899            {
900                cmp = (cmp != 0 ? cmp : this.getComments().compareTo(o.getComments()));
901            }
902            if (this.getUpdateDate() != null)
903            {
904                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
905            }
906        }
907        return cmp;
908    }
909// HibernateEntity.vsl merge-point
910// Pmfm.java merge-point
911}