Subversion Repositories eFlore/Applications.coel

Rev

Rev 1764 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.modeles.personne;

import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.collection.CollectionAPublication;
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.Log;
import org.tela_botanica.client.util.UtilString;

import com.extjs.gxt.ui.client.data.ModelData;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.json.client.JSONObject;

public class Personne extends aDonnee {

        private static final long serialVersionUID = -6974716696155349332L;

        public static final String PREFIXE = "cp";
        public static final String TELEPHONE_FIXE = "FIX";
        public static final String TELEPHONE_GSM = "GSM";
        public static final String TELEPHONE_FAX = "FAX";
        public static final String ETRE_DECEDE = "30745";
        public static final String ETRE_VIVANT = "30746";
        public static String[] champsObligatoires = {"cp_id_personne"};
        
        private PublicationAPersonneListe publicationsLiees= null;
        
        public Personne() {}

        public Personne(ModelData model) {
                creerPersonne(model, false);
        }
        
        public Personne(ModelData model, boolean removePrefix) {
                creerPersonne(model, removePrefix);
        }
        
        private void creerPersonne(ModelData model, boolean removePrefix) {
                this.removePrefix = removePrefix;
                
                Map<String, Object> a = model.getProperties();

                Set<String> cles = a.keySet();
                Iterator<String> it = cles.iterator();
                while (it.hasNext()) {
                        String cle = it.next();                 
                        if (a.get(cle) != null) {
                                String cleObjet = "";
                                if (removePrefix) {
                                        cleObjet = cleObjet.replaceFirst("^"+PREFIXE+"_", "");
                                }
                                else {
                                        cleObjet = cle;
                                }
                                this.set(cleObjet, a.get(cle));
                        }
                }
        }
        
        public Personne(JSONObject personne) {
                initialiserModele(personne);
                //Ajout du champ courriel principal
                this.setCourrielPrinc(this.getInfoDenormaliseParPosition(this.renvoyerValeurCorrecte("truk_courriel"), 1));
        }
        
        @Override
        protected String getPrefixe() {
                return PREFIXE;
        }
        
        protected String[] getChampsObligatoires()      {
                return champsObligatoires;
        }
        
        public Object obtenirValeurChamp(String nomChamp)       {
                return renvoyerValeurCorrecte(nomChamp);
        }
        
        public Date getDate(String nomChamp)    {
                String strDate = renvoyerValeurCorrecte(nomChamp);
                Date dateRetour = null;
                try {
                        if ((strDate != null) && (!strDate.equals("0000-00-00"))) {
                                dateRetour = DateTimeFormat.getFormat("yyyy-MM-dd").parseStrict(strDate);
                        }
                } catch (StringIndexOutOfBoundsException e)     {
                        GWT.log("Impossible de parser la date " + strDate, e);
                }
                return dateRetour;              
        }
        
        public String getString(String nomChamp)        {
                return String.valueOf(renvoyerValeurCorrecte(nomChamp));
        }
        
        //Traitement des truks
        protected void remplacerTypeDansChaineDenormalise(String champ, String type, Object valeur) {
                if (valeur != null && !valeur.equals("")) {
                        ajouterChaineDenormaliseAvecType(champ, type, valeur);
                } else {
                        supprimerTypeDansChaineDenormalise(champ, type);
                }
        }
        /**
         * Ajoute un nouvel élément sans type à une chaine dénormalisée.
         * Champ de type "truk" contenant seulement des valeurs séparées par ";;".
         * Si l'élément existe déjà, il ne sera pas ajouté.
         * 
         * @param champ le nom du champ dénormalisé
         * @param valeur la valeur à ajouter
         */
        protected void ajouterChaineDenormalise(String champ, Object valeur) {
                if (valeur instanceof String) {
                        String chaineExistante = renvoyerValeurCorrecte(champ);
                        if (chaineExistante.equals("")) {
                                this.set(champ, valeur);
                        } else {
                                // Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
                                if (!chaineExistante.matches("(^|"+SEPARATEUR_VALEURS+")"+valeur+"("+SEPARATEUR_VALEURS+"|$)")) {
                                        this.set(champ, chaineExistante+SEPARATEUR_VALEURS+valeur);
                                }
                        }
                }
        }
        
        // ID PERSONNE
        public String getId() {
                Log.debug("Dans getId() Personne : "+this.toString());
                return renvoyerValeurCorrecte("id_personne");
        }
        public void setId(String personneId) {
                if (removePrefix) this.set("id_personne", personneId);
                else this.set(PREFIXE+"_id_personne", personneId);
        }
        
        // NOM COMPLET
        public String getNomComplet() {
                return renvoyerValeurCorrecte("fmt_nom_complet");
        }
        public void setNomComplet(String nomComplet) {
                this.set("fmt_nom_complet", nomComplet);
        }
        public void setFmtNomComplet(String prefixe, String suffixe)    {
                String fmtNomComplet = "";
                
                if ((prefixe != null)&&(!prefixe.trim().equals("")))    {
                        fmtNomComplet += prefixe + " ";
                }
                
                if ((this.getPrenom()!=null)&&(!this.getPrenom().trim().equals("")))    {
                        fmtNomComplet += this.getPrenom() + " ";
                }
                
                if ((this.getNom()!=null)&&(!this.getNom().trim().equals("")))  {
                        fmtNomComplet += this.getNom() + " ";
                }
                
                if ((suffixe!=null)&&(!suffixe.trim().equals("")))      {
                        fmtNomComplet += suffixe;
                }

                setNomComplet(UtilString.ucFirst(fmtNomComplet));
        }
        
        // NOM
        public String getNom() {
                if (removePrefix) return renvoyerValeurCorrecte("nom");
                else return renvoyerValeurCorrecte(PREFIXE+"_nom");
        }
        public void setNom(String nom) {
                if (removePrefix) set("nom", nom);
                else set(PREFIXE+"_nom", nom);
        }
        
        // PRÉNOM
        public String getPrenom() {
                if (removePrefix) return renvoyerValeurCorrecte("prenom");
                else return renvoyerValeurCorrecte(PREFIXE+"_prenom");
        }
        public void setPrenom(String prenom) {
                if (removePrefix) set("prenom", prenom);
                else set(PREFIXE+"_prenom", prenom);
        }
        
        // TÉLÉPHONE
        public String getTelephone() {
                return renvoyerValeurCorrecte("truk_telephone");
        }
        public void setTelephone(String t) {
                this.set("truk_telephone", t);
        }
        public void ajouterTelephone(String type, Object valeur) {
                ajouterChaineDenormaliseAvecType("truk_telephone", type, valeur);
        }
        public String selectionnerTelephone(String type) {
                return getInfoDenormaliseParType(renvoyerValeurCorrecte("truk_telephone"), type);
        }
        
        // FAX
        public String getFax() {
                return renvoyerValeurCorrecte("truk_fax");
        }
        public void setFax(String f) {
                this.set("truk_fax", f);
        }
        public void ajouterFax(Object valeur) {
                ajouterChaineDenormalise("truk_fax", valeur);
        }
        public String selectionnerFax(int position) {
                return getInfoDenormaliseParPosition(renvoyerValeurCorrecte("truk_fax"), position);
        }
        
        // COURRIEL
        public String getCourriel() {
                return renvoyerValeurCorrecte("truk_courriel");
        }
        public void setCourriel(String c) {
                this.set("truk_courriel", c);
        }
        public void ajouterCourriel(String c) {
                ajouterChaineDenormalise("truk_courriel", c);
        }
        public String selectionnerCourriel(int position) {
                return getInfoDenormaliseParPosition(renvoyerValeurCorrecte("truk_courriel"), position);
        }
        
        // SPÉCIALITÉ
        public String getSpecialite() {
                return renvoyerValeurCorrecte("ce_truk_specialite");
        }
        public void setSpecialite(String s) {
                // Pas de liste pour l'instant, donc tout passe dans "Autre".
                setChaineDenormaliseUnique("ce_truk_specialite", "AUTRE", s);
        }
        public String afficherSpecialite() {
                return getChaineDenormaliseUnique("ce_truk_specialite");
        }
        
        // NAISSANCE DATE
        public String getNaissanceDate()        {
                String dateNaiss = "";
                dateNaiss = get("naissance_date");
                if (UtilString.isEmpty(dateNaiss)||dateNaiss.equals("0000-00-00"))      {
                        dateNaiss = Mediateur.i18nC.inconnue();
                }
                return dateNaiss;
        }
        
        public String getDateSouple(String date) {
                String valeurDate = date;
                
                String jour = "";
                String mois = "";
                String annee = "";

                // pas de date dans la BD
                if (UtilString.isEmpty(valeurDate) || valeurDate.equals("0000-00-00")) {
                        valeurDate  = "";
                
                // YYYY
                } else if (valeurDate.endsWith("00-00")) {
                        valeurDate = valeurDate.substring(0, 4);
                        if (valeurDate.matches("\\d{4}")) {
                                jour = "";
                                mois = "";
                                annee = valeurDate.substring(0,4);
                                valeurDate = annee;
                        }
                        
                // YYYY-MM
                } else if (valeurDate.endsWith("-00")) {
                        valeurDate = valeurDate.substring(0, 7);
                        if (valeurDate.matches("\\d{4}-\\d{2}")) {
                                jour = "";
                                mois = valeurDate.substring(5,7);
                                annee = valeurDate.substring(0,4);
                                valeurDate = mois+"/"+annee;
                        }
                }
                
                // YYYY-MM-DD
                else if (valeurDate.matches("\\d{4}-\\d{2}-\\d{2}")) {
                        Date objetDate = DateTimeFormat.getFormat("yyyy-MM-dd").parse(valeurDate);
                        DateTimeFormat fmt = DateTimeFormat.getFormat("dd/MM/yyyy");
                        valeurDate = fmt.format(objetDate);
                }
                 
                 return valeurDate;
        }
        
        public String getAnneeOuDateNaiss()     {
                String valeurDateNaissance = get("naissance_date");              
                return getDateSouple(valeurDateNaissance);
        }
        
        public void setNaissanceDate(Date naissanceDate) {
                if (naissanceDate != null) {
                        this.set("naissance_date", naissanceDate);
                } else {
                        this.set("naissance_date", null);
                }
        }
        
        // NAISSANCE LIEU
        public String getNaissanceLieu() {
                return renvoyerValeurCorrecte("naissance_lieu");
        }
        public void setNaissanceLieu(String naissanceLieu) {
                this.set("naissance_lieu", naissanceLieu);
        }
        
        // DÉCÉS
        public boolean estDecedee()     {
                String ceDeces = getDeces();
                if (ceDeces.isEmpty() || ceDeces.equals(ETRE_DECEDE))   {
                        return true;
                } else {
                        return false;
                }
        }
        
        public String getDeces()        {
                return renvoyerValeurCorrecte("ce_deces");
        }
        
        public String getAnneeOuDateDeces()     {
                String valeurDateDeces = get("deces_date");      
                return getDateSouple(valeurDateDeces);
        }
        
        public void setDeces(String deces)      {
                set("ce_deces", deces);
        }
        
        public void setDeces(Date decesDate, String lieuDeces)  {
                set("ce_deces", ETRE_DECEDE);
                setDecesDate(decesDate);
                setDecesLieu(lieuDeces);
        }
        public void setNonDecedee()     {
                set("ce_deces", ETRE_VIVANT);
                setDecesDate(null);
                setDecesLieu("");
        }
        
        // DÉCÉS DATE
        public String getDecesDate()    {
                String dateDeces = renvoyerValeurCorrecte("deces_date");
                if (UtilString.isEmpty(dateDeces) || dateDeces.equals("0000-00-00"))    {
                        dateDeces = Mediateur.i18nC.inconnue();
                }
                return dateDeces;
        }
        
        public void setDecesDate(Date decesDate) {
                if (decesDate != null)  {
                        this.set("deces_date", DateTimeFormat.getFormat("yyyy-MM-dd").format(decesDate));
                }       else    {
                        this.set("deces_date", "");                     
                }
        }
        
        // DÉCÉS LIEU
        public String getDecesLieu() {
                return renvoyerValeurCorrecte("deces_lieu");
        }
        public void setDecesLieu(String decesLieu) {
                this.set("deces_lieu", decesLieu);
        }
        
        // PARAMÊTRE
        public String getParametre() {
                return renvoyerValeurCorrecte("parametre");
        }
        public void setParametre(String parametre) {
                this.set("parametre", parametre);
        }
        
        public void setCourrielPrinc(String courriel)   {
                this.set("_courriel_princ_", courriel);
        }
        
        public String getCourrielPrinc()        {
                return (String) this.get("_courriel_princ_");
        }
        
        // PUBLICATIONS LIÉES
        public PublicationAPersonneListe getPublicationsLiees() {
                return publicationsLiees;
        }
        
        public void setPublicationsLiees(PublicationAPersonneListe relationsCollectionAPublication) {
                publicationsLiees = relationsCollectionAPublication;
        }
}