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.administration.user;
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.Program2Person;
032import fr.ifremer.adagio.core.dao.referential.Status;
033import java.io.Serializable;
034import java.sql.Timestamp;
035import java.util.Collection;
036import java.util.Date;
037import java.util.HashSet;
038
039/**
040 * <html>
041 * <head>
042 * <style>
043 * p {padding:0px; margin:0px;}
044 * </style>
045 * </head>
046 * <body>
047 * <p>
048 * Personne liées aux données : utilisateur du système, ou observateurs,
049 * responsable de données, etc.
050 * </p>
051 * <p>
052 * </p>
053 * <p>
054 * Les personnes liées aux activités professionnelles de pêche sont plutôt
055 * gérer dans <i>VesselPerson</i>.
056 * </p>
057 * <p>
058 * </p>
059 * <p>
060 * Nombre de lignes : 100
061 * </p>
062 * </body>
063 * </html>
064 */
065// HibernateEntity.vsl annotations merge-point
066public abstract class Person
067    implements Serializable, Comparable<Person>
068{
069    /**
070     * The serial version UID of this class. Needed for serialization.
071     */
072    private static final long serialVersionUID = 1139539194129865139L;
073
074    // Generate 14 attributes
075    private Integer id;
076
077    /**
078     * Identifiant interne. généré par le système.
079     * @return this.id Integer
080     */
081    public Integer getId()
082    {
083        return this.id;
084    }
085
086    /**
087     * Identifiant interne. généré par le système.
088     * @param idIn Integer
089     */
090    public void setId(Integer idIn)
091    {
092        this.id = idIn;
093    }
094
095    private String lastname;
096
097    /**
098     * 
099     * @return this.lastname String
100     */
101    public String getLastname()
102    {
103        return this.lastname;
104    }
105
106    /**
107     * 
108     * @param lastnameIn String
109     */
110    public void setLastname(String lastnameIn)
111    {
112        this.lastname = lastnameIn;
113    }
114
115    private String firstname;
116
117    /**
118     * 
119     * @return this.firstname String
120     */
121    public String getFirstname()
122    {
123        return this.firstname;
124    }
125
126    /**
127     * 
128     * @param firstnameIn String
129     */
130    public void setFirstname(String firstnameIn)
131    {
132        this.firstname = firstnameIn;
133    }
134
135    private String address;
136
137    /**
138     * 
139     * @return this.address String
140     */
141    public String getAddress()
142    {
143        return this.address;
144    }
145
146    /**
147     * 
148     * @param addressIn String
149     */
150    public void setAddress(String addressIn)
151    {
152        this.address = addressIn;
153    }
154
155    private Date creationDate;
156
157    /**
158     * 
159     * @return this.creationDate Date
160     */
161    public Date getCreationDate()
162    {
163        return this.creationDate;
164    }
165
166    /**
167     * 
168     * @param creationDateIn Date
169     */
170    public void setCreationDate(Date creationDateIn)
171    {
172        this.creationDate = creationDateIn;
173    }
174
175    private String phoneNumber;
176
177    /**
178     * 
179     * @return this.phoneNumber String
180     */
181    public String getPhoneNumber()
182    {
183        return this.phoneNumber;
184    }
185
186    /**
187     * 
188     * @param phoneNumberIn String
189     */
190    public void setPhoneNumber(String phoneNumberIn)
191    {
192        this.phoneNumber = phoneNumberIn;
193    }
194
195    private String mobileNumber;
196
197    /**
198     * 
199     * @return this.mobileNumber String
200     */
201    public String getMobileNumber()
202    {
203        return this.mobileNumber;
204    }
205
206    /**
207     * 
208     * @param mobileNumberIn String
209     */
210    public void setMobileNumber(String mobileNumberIn)
211    {
212        this.mobileNumber = mobileNumberIn;
213    }
214
215    private String faxNumber;
216
217    /**
218     * 
219     * @return this.faxNumber String
220     */
221    public String getFaxNumber()
222    {
223        return this.faxNumber;
224    }
225
226    /**
227     * 
228     * @param faxNumberIn String
229     */
230    public void setFaxNumber(String faxNumberIn)
231    {
232        this.faxNumber = faxNumberIn;
233    }
234
235    private String email;
236
237    /**
238     * 
239     * @return this.email String
240     */
241    public String getEmail()
242    {
243        return this.email;
244    }
245
246    /**
247     * 
248     * @param emailIn String
249     */
250    public void setEmail(String emailIn)
251    {
252        this.email = emailIn;
253    }
254
255    private Timestamp updateDate;
256
257    /**
258     * 
259     * @return this.updateDate Timestamp
260     */
261    public Timestamp getUpdateDate()
262    {
263        return this.updateDate;
264    }
265
266    /**
267     * 
268     * @param updateDateIn Timestamp
269     */
270    public void setUpdateDate(Timestamp updateDateIn)
271    {
272        this.updateDate = updateDateIn;
273    }
274
275    
276
277    /**
278     * Mot de passe crypté de l'utilisateur. Utilisé pour permettre une authentification meme en
279     * mode déconnecté.
280     * @return this.cryptPassword String
281     */
282    
283    
284
285    /**
286     * Mot de passe crypté de l'utilisateur. Utilisé pour permettre une authentification meme en
287     * mode déconnecté.
288     * @param cryptPasswordIn String
289     */
290    
291    
292
293    private String employeeNumber;
294
295    /**
296     * =code ou matricule de la personne. Valeur récupérée de l'annuaire LDAP.
297     * Si la personne est un agent Ifremer, il s'agit de son numéro de matricule. Cela correspond
298     * alors à l'attribut "employeenumber" dans l'annuaire LDAP (mais sans les zéros suplémentaires
299     * au début du numéro).
300     * Si la personne n'est pas Ifremer, un matricule sans signification lui est tout de même
301     * affecté : toute personne, même extranet, a donc l'attribut "employeenumber" de renseigné dans
302     * l'annuaire LDAP.
303     * @return this.employeeNumber String
304     */
305    public String getEmployeeNumber()
306    {
307        return this.employeeNumber;
308    }
309
310    /**
311     * =code ou matricule de la personne. Valeur récupérée de l'annuaire LDAP.
312     * Si la personne est un agent Ifremer, il s'agit de son numéro de matricule. Cela correspond
313     * alors à l'attribut "employeenumber" dans l'annuaire LDAP (mais sans les zéros suplémentaires
314     * au début du numéro).
315     * Si la personne n'est pas Ifremer, un matricule sans signification lui est tout de même
316     * affecté : toute personne, même extranet, a donc l'attribut "employeenumber" de renseigné dans
317     * l'annuaire LDAP.
318     * @param employeeNumberIn String
319     */
320    public void setEmployeeNumber(String employeeNumberIn)
321    {
322        this.employeeNumber = employeeNumberIn;
323    }
324
325    private String username;
326
327    /**
328     * Login LDAP de l'utilisateur.
329     * @return this.username String
330     */
331    public String getUsername()
332    {
333        return this.username;
334    }
335
336    /**
337     * Login LDAP de l'utilisateur.
338     * @param usernameIn String
339     */
340    public void setUsername(String usernameIn)
341    {
342        this.username = usernameIn;
343    }
344
345    private String usernameExtranet;
346
347    /**
348     * 
349     * @return this.usernameExtranet String
350     */
351    public String getUsernameExtranet()
352    {
353        return this.usernameExtranet;
354    }
355
356    /**
357     * 
358     * @param usernameExtranetIn String
359     */
360    public void setUsernameExtranet(String usernameExtranetIn)
361    {
362        this.usernameExtranet = usernameExtranetIn;
363    }
364
365    // Generate 38 associations
366    private Collection<Program2Person> program2Persons = new HashSet<Program2Person>();
367
368    /**
369     * <html>
370     * <head>
371     * <style>
372     * p {padding:0px; margin:0px;}
373     * </style>
374     * </head>
375     * <body>
376     * Définis les privilèges d'un utilsiateur sur un progamme, ou sur un
377     * </body>
378     * </html>
379     * @return this.program2Persons Collection<Program2Person>
380     */
381    public Collection<Program2Person> getProgram2Persons()
382    {
383        return this.program2Persons;
384    }
385
386    /**
387     * <html>
388     * <head>
389     * <style>
390     * p {padding:0px; margin:0px;}
391     * </style>
392     * </head>
393     * <body>
394     * Définis les privilèges d'un utilsiateur sur un progamme, ou sur un
395     * </body>
396     * </html>
397     * @param program2PersonsIn Collection<Program2Person>
398     */
399    public void setProgram2Persons(Collection<Program2Person> program2PersonsIn)
400    {
401        this.program2Persons = program2PersonsIn;
402    }
403
404    /**
405     * <html>
406     * <head>
407     * <style>
408     * p {padding:0px; margin:0px;}
409     * </style>
410     * </head>
411     * <body>
412     * Définis les privilèges d'un utilsiateur sur un progamme, ou sur un
413     * </body>
414     * </html>
415     * @param elementToAdd Program2Person
416     * @return <tt>true</tt> if this collection changed as a result of the
417     *         call
418     */
419    public boolean addProgram2Persons(Program2Person elementToAdd)
420    {
421        return this.program2Persons.add(elementToAdd);
422    }
423
424    /**
425     * <html>
426     * <head>
427     * <style>
428     * p {padding:0px; margin:0px;}
429     * </style>
430     * </head>
431     * <body>
432     * Définis les privilèges d'un utilsiateur sur un progamme, ou sur un
433     * </body>
434     * </html>
435     * @param elementToRemove Program2Person
436     * @return <tt>true</tt> if this collection changed as a result of the
437     *         call
438     */
439    public boolean removeProgram2Persons(Program2Person elementToRemove)
440    {
441        return this.program2Persons.remove(elementToRemove);
442    }
443
444    private Collection<UserProfil> profils = new HashSet<UserProfil>();
445
446    /**
447     * <html>
448     * <head>
449     * </head>
450     * <body>
451     * <p>
452     * Liste des profils pouvant &#234;tre affect&#233;s &#224; un utilisateur.
453     * </p>
454     * <p>
455     * Pour la v1, les valeurs identifi&#233;es sont :
456     * </p>
457     * <p>
458     * - Administrateur de r&#233;f&#233;rentiel (pour info, pas encore de synonyme LDAP)
459     * : donne acc&#232;s aux fonctionnalit&#233;s d&#8217;aministration du r&#233;f&#233;rentiel,
460     * ainsi
461     * qu&#8217;aux autres fonctionn lit&#233; d&#8217;administration (ex :
462     * programmes/strat&#233;gies).
463     * </p>
464     * <p>
465     * - Observateur (pour info, synonyme LDAP = SIH_ROBS) : donne acc&#232;s en
466     * consultation sur le r&#233;f&#233;rentiel (hors donn&#233;es navires). Si portefeuilles
467     * rattach&#233;s &#224; l'observateur, alors droits en saisie sur la fonctionnalit&#233;
468     * correspondant au type du portefeuille (gestion des mar&#233;es observ&#233;es,
469     * calendriers d'activit&#233;s navires, ...). Si superviseur de portefeuille,
470     * alors droits de correction sur les donn&#233;es saisies dans les
471     * portefeuilles supervis&#233;s.
472     * </p>
473     * <p>
474     * - Projet (pour info, synonyme LDAP = SIH_PROJET) : utilisateur membre de
475     * l'&#233;quipe projet du syst&#232;me ISIH : membre droits de consultation et de
476     * saisie que pour un observateur.
477     * </p>
478     * <p>
479     * - Utilisateur (pour info, synonyme LDAP = SIH_AUTRE) : utilisateur su
480     * syst&#232;me ISIH : pour la v1, ce profil ne donne acc&#232;s &#224; aucune
481     * fonctionnalit&#233; du syst&#232;me Allegro.
482     * <br>    </p>
483     * <p>
484     * </p>
485     * <p>
486     * <u>note 1 :</u> les droits d'acc&#232;s en saisie sur les fonctions
487     * (superviseur, activit&#233; sur les navires, mar&#233;es observ&#233;es) ne sont donc
488     * pas g&#233;r&#233;s ici, mais par l'interm&#233;diaire des portefeuilles (cf classe
489     * &quot;Portefeuille Navire&quot;).
490     * </p>
491     * <p>
492     * <u>note 2 :</u> le synonyme LDAP &quot;SIH_AUTRE&quot; n'est pas utilis&#233; pour le
493     * moment : il correspond &#224; un utilisateur sans profil particulier
494     * </p>
495     * <p>
496     * Nombre de lignes : 4
497     * </p>
498     * </body>
499     * </html>
500     * @return this.profils Collection<UserProfil>
501     */
502    public Collection<UserProfil> getProfils()
503    {
504        return this.profils;
505    }
506
507    /**
508     * <html>
509     * <head>
510     * </head>
511     * <body>
512     * <p>
513     * Liste des profils pouvant &#234;tre affect&#233;s &#224; un utilisateur.
514     * </p>
515     * <p>
516     * Pour la v1, les valeurs identifi&#233;es sont :
517     * </p>
518     * <p>
519     * - Administrateur de r&#233;f&#233;rentiel (pour info, pas encore de synonyme LDAP)
520     * : donne acc&#232;s aux fonctionnalit&#233;s d&#8217;aministration du r&#233;f&#233;rentiel,
521     * ainsi
522     * qu&#8217;aux autres fonctionn lit&#233; d&#8217;administration (ex :
523     * programmes/strat&#233;gies).
524     * </p>
525     * <p>
526     * - Observateur (pour info, synonyme LDAP = SIH_ROBS) : donne acc&#232;s en
527     * consultation sur le r&#233;f&#233;rentiel (hors donn&#233;es navires). Si portefeuilles
528     * rattach&#233;s &#224; l'observateur, alors droits en saisie sur la fonctionnalit&#233;
529     * correspondant au type du portefeuille (gestion des mar&#233;es observ&#233;es,
530     * calendriers d'activit&#233;s navires, ...). Si superviseur de portefeuille,
531     * alors droits de correction sur les donn&#233;es saisies dans les
532     * portefeuilles supervis&#233;s.
533     * </p>
534     * <p>
535     * - Projet (pour info, synonyme LDAP = SIH_PROJET) : utilisateur membre de
536     * l'&#233;quipe projet du syst&#232;me ISIH : membre droits de consultation et de
537     * saisie que pour un observateur.
538     * </p>
539     * <p>
540     * - Utilisateur (pour info, synonyme LDAP = SIH_AUTRE) : utilisateur su
541     * syst&#232;me ISIH : pour la v1, ce profil ne donne acc&#232;s &#224; aucune
542     * fonctionnalit&#233; du syst&#232;me Allegro.
543     * <br>    </p>
544     * <p>
545     * </p>
546     * <p>
547     * <u>note 1 :</u> les droits d'acc&#232;s en saisie sur les fonctions
548     * (superviseur, activit&#233; sur les navires, mar&#233;es observ&#233;es) ne sont donc
549     * pas g&#233;r&#233;s ici, mais par l'interm&#233;diaire des portefeuilles (cf classe
550     * &quot;Portefeuille Navire&quot;).
551     * </p>
552     * <p>
553     * <u>note 2 :</u> le synonyme LDAP &quot;SIH_AUTRE&quot; n'est pas utilis&#233; pour le
554     * moment : il correspond &#224; un utilisateur sans profil particulier
555     * </p>
556     * <p>
557     * Nombre de lignes : 4
558     * </p>
559     * </body>
560     * </html>
561     * @param profilsIn Collection<UserProfil>
562     */
563    public void setProfils(Collection<UserProfil> profilsIn)
564    {
565        this.profils = profilsIn;
566    }
567
568    /**
569     * <html>
570     * <head>
571     * </head>
572     * <body>
573     * <p>
574     * Liste des profils pouvant &#234;tre affect&#233;s &#224; un utilisateur.
575     * </p>
576     * <p>
577     * Pour la v1, les valeurs identifi&#233;es sont :
578     * </p>
579     * <p>
580     * - Administrateur de r&#233;f&#233;rentiel (pour info, pas encore de synonyme LDAP)
581     * : donne acc&#232;s aux fonctionnalit&#233;s d&#8217;aministration du r&#233;f&#233;rentiel,
582     * ainsi
583     * qu&#8217;aux autres fonctionn lit&#233; d&#8217;administration (ex :
584     * programmes/strat&#233;gies).
585     * </p>
586     * <p>
587     * - Observateur (pour info, synonyme LDAP = SIH_ROBS) : donne acc&#232;s en
588     * consultation sur le r&#233;f&#233;rentiel (hors donn&#233;es navires). Si portefeuilles
589     * rattach&#233;s &#224; l'observateur, alors droits en saisie sur la fonctionnalit&#233;
590     * correspondant au type du portefeuille (gestion des mar&#233;es observ&#233;es,
591     * calendriers d'activit&#233;s navires, ...). Si superviseur de portefeuille,
592     * alors droits de correction sur les donn&#233;es saisies dans les
593     * portefeuilles supervis&#233;s.
594     * </p>
595     * <p>
596     * - Projet (pour info, synonyme LDAP = SIH_PROJET) : utilisateur membre de
597     * l'&#233;quipe projet du syst&#232;me ISIH : membre droits de consultation et de
598     * saisie que pour un observateur.
599     * </p>
600     * <p>
601     * - Utilisateur (pour info, synonyme LDAP = SIH_AUTRE) : utilisateur su
602     * syst&#232;me ISIH : pour la v1, ce profil ne donne acc&#232;s &#224; aucune
603     * fonctionnalit&#233; du syst&#232;me Allegro.
604     * <br>    </p>
605     * <p>
606     * </p>
607     * <p>
608     * <u>note 1 :</u> les droits d'acc&#232;s en saisie sur les fonctions
609     * (superviseur, activit&#233; sur les navires, mar&#233;es observ&#233;es) ne sont donc
610     * pas g&#233;r&#233;s ici, mais par l'interm&#233;diaire des portefeuilles (cf classe
611     * &quot;Portefeuille Navire&quot;).
612     * </p>
613     * <p>
614     * <u>note 2 :</u> le synonyme LDAP &quot;SIH_AUTRE&quot; n'est pas utilis&#233; pour le
615     * moment : il correspond &#224; un utilisateur sans profil particulier
616     * </p>
617     * <p>
618     * Nombre de lignes : 4
619     * </p>
620     * </body>
621     * </html>
622     * @param elementToAdd UserProfil
623     * @return <tt>true</tt> if this collection changed as a result of the
624     *         call
625     */
626    public boolean addProfils(UserProfil elementToAdd)
627    {
628        return this.profils.add(elementToAdd);
629    }
630
631    /**
632     * <html>
633     * <head>
634     * </head>
635     * <body>
636     * <p>
637     * Liste des profils pouvant &#234;tre affect&#233;s &#224; un utilisateur.
638     * </p>
639     * <p>
640     * Pour la v1, les valeurs identifi&#233;es sont :
641     * </p>
642     * <p>
643     * - Administrateur de r&#233;f&#233;rentiel (pour info, pas encore de synonyme LDAP)
644     * : donne acc&#232;s aux fonctionnalit&#233;s d&#8217;aministration du r&#233;f&#233;rentiel,
645     * ainsi
646     * qu&#8217;aux autres fonctionn lit&#233; d&#8217;administration (ex :
647     * programmes/strat&#233;gies).
648     * </p>
649     * <p>
650     * - Observateur (pour info, synonyme LDAP = SIH_ROBS) : donne acc&#232;s en
651     * consultation sur le r&#233;f&#233;rentiel (hors donn&#233;es navires). Si portefeuilles
652     * rattach&#233;s &#224; l'observateur, alors droits en saisie sur la fonctionnalit&#233;
653     * correspondant au type du portefeuille (gestion des mar&#233;es observ&#233;es,
654     * calendriers d'activit&#233;s navires, ...). Si superviseur de portefeuille,
655     * alors droits de correction sur les donn&#233;es saisies dans les
656     * portefeuilles supervis&#233;s.
657     * </p>
658     * <p>
659     * - Projet (pour info, synonyme LDAP = SIH_PROJET) : utilisateur membre de
660     * l'&#233;quipe projet du syst&#232;me ISIH : membre droits de consultation et de
661     * saisie que pour un observateur.
662     * </p>
663     * <p>
664     * - Utilisateur (pour info, synonyme LDAP = SIH_AUTRE) : utilisateur su
665     * syst&#232;me ISIH : pour la v1, ce profil ne donne acc&#232;s &#224; aucune
666     * fonctionnalit&#233; du syst&#232;me Allegro.
667     * <br>    </p>
668     * <p>
669     * </p>
670     * <p>
671     * <u>note 1 :</u> les droits d'acc&#232;s en saisie sur les fonctions
672     * (superviseur, activit&#233; sur les navires, mar&#233;es observ&#233;es) ne sont donc
673     * pas g&#233;r&#233;s ici, mais par l'interm&#233;diaire des portefeuilles (cf classe
674     * &quot;Portefeuille Navire&quot;).
675     * </p>
676     * <p>
677     * <u>note 2 :</u> le synonyme LDAP &quot;SIH_AUTRE&quot; n'est pas utilis&#233; pour le
678     * moment : il correspond &#224; un utilisateur sans profil particulier
679     * </p>
680     * <p>
681     * Nombre de lignes : 4
682     * </p>
683     * </body>
684     * </html>
685     * @param elementToRemove UserProfil
686     * @return <tt>true</tt> if this collection changed as a result of the
687     *         call
688     */
689    public boolean removeProfils(UserProfil elementToRemove)
690    {
691        return this.profils.remove(elementToRemove);
692    }
693
694    private Department department;
695
696    /**
697     * Service d'appartenance d'une personne.
698     * Il peut s'agir des départements et service de l'Ifremer, ou bien des entreprises, services
699     * extérieurs (sous-traitants, etc.).
700     * REMARQUE : nous en aurons besoin en v2, pour l'administration des personnes (rechercher une
701     * personne, gérer les sous-traitants, etc.), mais aussi pour identifier le service effectuant
702     * l’analyse d’un résultat de mesure.
703     * Nombre de lignes : 60
704     * @return this.department Department
705     */
706    public Department getDepartment()
707    {
708        return this.department;
709    }
710
711    /**
712     * Service d'appartenance d'une personne.
713     * Il peut s'agir des départements et service de l'Ifremer, ou bien des entreprises, services
714     * extérieurs (sous-traitants, etc.).
715     * REMARQUE : nous en aurons besoin en v2, pour l'administration des personnes (rechercher une
716     * personne, gérer les sous-traitants, etc.), mais aussi pour identifier le service effectuant
717     * l’analyse d’un résultat de mesure.
718     * Nombre de lignes : 60
719     * @param departmentIn Department
720     */
721    public void setDepartment(Department departmentIn)
722    {
723        this.department = departmentIn;
724    }
725
726    private Status status;
727
728    /**
729     * Pour les données du référentiel, information permettant de déterminer si une donnée est
730     * valide,
731     * obsolète ou temporaire.
732     * - obsolète (=inactif) : '0'
733     * - valide (=actif) : '1'
734     * - temporaire : '2'
735     * - en cours de suppression : '3'
736     * -  : '4'
737     * note : on a préfère ici 'valide' au terme 'actif' (utilisé dans Harmonie), pour ne pas
738     * confondre
739     * avec par exemple l'activité d'un navire sur un mois.
740     * @return this.status Status
741     */
742    public Status getStatus()
743    {
744        return this.status;
745    }
746
747    /**
748     * Pour les données du référentiel, information permettant de déterminer si une donnée est
749     * valide,
750     * obsolète ou temporaire.
751     * - obsolète (=inactif) : '0'
752     * - valide (=actif) : '1'
753     * - temporaire : '2'
754     * - en cours de suppression : '3'
755     * -  : '4'
756     * note : on a préfère ici 'valide' au terme 'actif' (utilisé dans Harmonie), pour ne pas
757     * confondre
758     * avec par exemple l'activité d'un navire sur un mois.
759     * @param statusIn Status
760     */
761    public void setStatus(Status statusIn)
762    {
763        this.status = statusIn;
764    }
765
766    /**
767     * Returns <code>true</code> if the argument is an Person instance and all identifiers for this entity
768     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
769     */
770    @Override
771    public boolean equals(Object object)
772    {
773        if (this == object)
774        {
775            return true;
776        }
777        if (!(object instanceof Person))
778        {
779            return false;
780        }
781        final Person that = (Person)object;
782        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
783        {
784            return false;
785        }
786        return true;
787    }
788
789    /**
790     * Returns a hash code based on this entity's identifiers.
791     */
792    @Override
793    public int hashCode()
794    {
795        int hashCode = 0;
796        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
797
798        return hashCode;
799    }
800
801    /**
802     * Constructs new instances of {@link Person}.
803     */
804    public static final class Factory
805    {
806        /**
807         * Constructs a new instance of {@link Person}.
808         * @return new PersonImpl()
809         */
810        public static Person newInstance()
811        {
812            return new PersonImpl();
813        }
814
815        /**
816         * Constructs a new instance of {@link Person}, taking all required and/or
817         * read-only properties as arguments, except for identifiers.
818         * @param lastname String
819         * @param firstname String
820         * @param creationDate Date
821         * @param updateDate Timestamp
822         * @param employeeNumber String
823         * @param username String
824         * @param department Department
825         * @param status Status
826         * @return newInstance
827         */
828        public static Person newInstance(String lastname, String firstname, Date creationDate, Timestamp updateDate, String employeeNumber, String username, Department department, Status status)
829        {
830            final Person entity = new PersonImpl();
831            entity.setLastname(lastname);
832            entity.setFirstname(firstname);
833            entity.setCreationDate(creationDate);
834            entity.setUpdateDate(updateDate);
835            entity.setEmployeeNumber(employeeNumber);
836            entity.setUsername(username);
837            entity.setDepartment(department);
838            entity.setStatus(status);
839            return entity;
840        }
841
842        /**
843         * Constructs a new instance of {@link Person}, taking all possible properties
844         * (except the identifier(s))as arguments.
845         * @param lastname String
846         * @param firstname String
847         * @param address String
848         * @param creationDate Date
849         * @param phoneNumber String
850         * @param mobileNumber String
851         * @param faxNumber String
852         * @param email String
853         * @param updateDate Timestamp
854         * @param cryptPassword String
855         * @param employeeNumber String
856         * @param username String
857         * @param usernameExtranet String
858         * @param program2Persons Collection<Program2Person>
859         * @param profils Collection<UserProfil>
860         * @param department Department
861         * @param status Status
862         * @return newInstance Person
863         */
864        public static Person newInstance(String lastname, String firstname, String address, Date creationDate, String phoneNumber, String mobileNumber, String faxNumber, String email, Timestamp updateDate,  String employeeNumber, String username, String usernameExtranet, Collection<Program2Person> program2Persons, Collection<UserProfil> profils, Department department, Status status)
865        {
866            final Person entity = new PersonImpl();
867            entity.setLastname(lastname);
868            entity.setFirstname(firstname);
869            entity.setAddress(address);
870            entity.setCreationDate(creationDate);
871            entity.setPhoneNumber(phoneNumber);
872            entity.setMobileNumber(mobileNumber);
873            entity.setFaxNumber(faxNumber);
874            entity.setEmail(email);
875            entity.setUpdateDate(updateDate);
876            
877            entity.setEmployeeNumber(employeeNumber);
878            entity.setUsername(username);
879            entity.setUsernameExtranet(usernameExtranet);
880            entity.setProgram2Persons(program2Persons);
881            entity.setProfils(profils);
882            entity.setDepartment(department);
883            entity.setStatus(status);
884            return entity;
885        }
886    }
887
888    /**
889     * @see Comparable#compareTo
890     */
891    public int compareTo(Person o)
892    {
893        int cmp = 0;
894        if (this.getId() != null)
895        {
896            cmp = this.getId().compareTo(o.getId());
897        }
898        else
899        {
900            if (this.getLastname() != null)
901            {
902                cmp = (cmp != 0 ? cmp : this.getLastname().compareTo(o.getLastname()));
903            }
904            if (this.getFirstname() != null)
905            {
906                cmp = (cmp != 0 ? cmp : this.getFirstname().compareTo(o.getFirstname()));
907            }
908            if (this.getAddress() != null)
909            {
910                cmp = (cmp != 0 ? cmp : this.getAddress().compareTo(o.getAddress()));
911            }
912            if (this.getCreationDate() != null)
913            {
914                cmp = (cmp != 0 ? cmp : this.getCreationDate().compareTo(o.getCreationDate()));
915            }
916            if (this.getPhoneNumber() != null)
917            {
918                cmp = (cmp != 0 ? cmp : this.getPhoneNumber().compareTo(o.getPhoneNumber()));
919            }
920            if (this.getMobileNumber() != null)
921            {
922                cmp = (cmp != 0 ? cmp : this.getMobileNumber().compareTo(o.getMobileNumber()));
923            }
924            if (this.getFaxNumber() != null)
925            {
926                cmp = (cmp != 0 ? cmp : this.getFaxNumber().compareTo(o.getFaxNumber()));
927            }
928            if (this.getEmail() != null)
929            {
930                cmp = (cmp != 0 ? cmp : this.getEmail().compareTo(o.getEmail()));
931            }
932            if (this.getUpdateDate() != null)
933            {
934                cmp = (cmp != 0 ? cmp : this.getUpdateDate().compareTo(o.getUpdateDate()));
935            }
936            
937            
938            if (this.getEmployeeNumber() != null)
939            {
940                cmp = (cmp != 0 ? cmp : this.getEmployeeNumber().compareTo(o.getEmployeeNumber()));
941            }
942            if (this.getUsername() != null)
943            {
944                cmp = (cmp != 0 ? cmp : this.getUsername().compareTo(o.getUsername()));
945            }
946            if (this.getUsernameExtranet() != null)
947            {
948                cmp = (cmp != 0 ? cmp : this.getUsernameExtranet().compareTo(o.getUsernameExtranet()));
949            }
950        }
951        return cmp;
952    }
953// HibernateEntity.vsl merge-point
954// Person.java merge-point
955}