Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.modeles.publication;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.structure.Structure;
import org.tela_botanica.client.util.UtilNombre;
import org.tela_botanica.client.util.UtilString;

import com.extjs.gxt.ui.client.data.ModelData;
import com.google.gwt.json.client.JSONObject;

public class Publication extends aDonnee {

        private static final long serialVersionUID = 4142843068041690126L;
        public static final String PREFIXE = "cpu";
        public static String[] champsObligatoires = {"cpu_id_publication"};
        
        // Cache de valeurs pour contourner des bugs très compliqué d'affichage
        public static Map<String, String> editeurs = new HashMap<String, String>();
        public static Map<String, Publication> publisSaisiesModifieesCache = new HashMap<String, Publication>();

        private Structure editeur = null;
        public ArrayList<String> cles = null;
        
        public Publication() {}
        
        public Publication(boolean removePrefix) {
                this.removePrefix = removePrefix;
                cles = new ArrayList<String>();
                cles.add("id_publication");
        }
        
        public Publication(JSONObject publication) {
                initialiserModele(publication);
                editeur = new Structure(publication);
                cles = new ArrayList<String>();
                cles.add("id_publication");
        }
        
        public Publication(ModelData model, boolean removePrefix) {
                this.removePrefix = removePrefix;
                editeur = new Structure(model);
                cles = new ArrayList<String>();
                cles.add("id_publication");
                
                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 = cle.replaceFirst("^"+getPrefixe()+"_", "");
                                }
                                else {
                                        cleObjet = cle;
                                        String valeur = "";
                                        if (a.get(cle) instanceof Integer) {
                                                valeur = String.valueOf(a.get(cle));
                                        } else if (a.get(cle) instanceof String) {
                                                valeur = (String) a.get(cle);
                                        }
                                        traiterClesEtrangeres(cle, valeur);
                                }
                                this.set(cleObjet, a.get(cle));
                        }
                }
        }
        
        // Action
        //--------
        // cette méthode sert dans le cas suivant : le contructeur reçoit un object ModelData
        // qui contient cpuap_id_publication mais pas cpu_id_publication ou id_publication. Sans
        // la méthode ci-dessous, on aurait des problèmes. Celle-ci affecte à id_publication la
        // valeur des clés étrangères rencontrées (cpuap_id_publication, cpuac_id_publication, etc.)
        private void traiterClesEtrangeres(String cle, String valeur) {
                // on recupere le nom de la clé de la propriété (sans son prefixe)
                String nomSansPrefixe = cle.replaceFirst("^[a-zA-Z]+_", "");
                // on regarde si cette clé est une clé primaire de la table Publication
                if (cles.contains(nomSansPrefixe)) {
                        // si c'est le cas et que la valeur est non nulle
                        if (valeur != null && !UtilString.isEmpty(valeur)) {
                                // on affecte la valeur de la clés étrangère à la clé primaire
                                if (removePrefix) {
                                        this.set(nomSansPrefixe, valeur);
                                } else {
                                        this.set(getPrefixe()+"_"+nomSansPrefixe, valeur);
                                }
                        }
                }
        }
        
        protected String getPrefixe() {
                return PREFIXE;
        }
                
        protected String[] getChampsObligatoires()      {
                return champsObligatoires;
        }
        
        public void setStructureEditeur(Structure structure) {
                editeur = structure;
        }
        
        public String getId() {
                return renvoyerValeurCorrecte("id_publication");
        }
        public void setId(String idPublication) {
                setValeurCorrecte("id_publication", idPublication);
        }
        
        public String getNomComplet() {
                return renvoyerValeurCorrecte("fmt_nom_complet");
        }
        public void setNomComplet(String nomComplet) {
                setValeurCorrecte("fmt_nom_complet", nomComplet);
        }
        
        public String getURI() {
                return renvoyerValeurCorrecte("uri");
        }
        public void setUri(String uri) {
                setValeurCorrecte("uri", uri);
        }

        public String getAuteur() {
                return renvoyerValeurCorrecte("fmt_auteur");
        }
        public void setAuteur(String auteurFormate) {
                setValeurCorrecte("fmt_auteur", auteurFormate);
        }

        public String getCollection() {
                return renvoyerValeurCorrecte("collection");
        }
        public void setCollection(String collection) {
                setValeurCorrecte("collection", collection);
        }
        
        public String getTitre() {
                return renvoyerValeurCorrecte("titre");
        }
        public void setTitre(String titre) {
                setValeurCorrecte("titre", UtilString.ucFirst(titre));
        }

        public String getNomEditeur() {
                // Pour éviter de planter l'application
                // on tente de prendre l'éditeur où il est disponible
                String editeurNom = getEditeur();
                if (UtilNombre.estUnNombre(editeurNom) || editeurNom.isEmpty()) {
                        if(editeur != null && !editeur.getNom().isEmpty()) {
                                editeurs.put(editeurNom, editeur.getNom());
                                editeurNom = editeur.getNom();
                        } else {        
                                editeurNom = editeurs.get(editeurNom) != null ? editeurs.get(editeurNom) : "";
                        }
                }
                
                return editeurNom;
        }
        
        public String getEditeur() {
                return getChaineDenormaliseUnique("ce_truk_editeur");
        }
        public void setEditeur(String editeur) {
                setChaineDenormaliseUnique("ce_truk_editeur", "AUTRE", editeur);
        }

        public String getAnneeParution() {
                String annee = "";
                String dateParution = this.getDateParution();
                if (dateParution.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {// AAAA-MM-JJ
                        annee = dateParution.split("-")[0];
                } else if (dateParution.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
                        annee = dateParution;
                } else if (dateParution.matches("^[0-2][0-9]{3}$")) {// AAAA
                        annee = dateParution;
                } else {
                        annee = "";
                }
                return annee;
        }
        public void setAnneeParution(String annee) {
                if (annee.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {// AAAA-MM-JJ
                        this.setDateParution(annee);
                } else if (annee.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
                        this.setDateParution(annee);
                } else if (annee.matches("^[0-2][0-9]{3}$")) {// AAAA
                        this.setDateParution(annee);
                } else {
                        this.setDateParution("");
                }
        }
        public static boolean etreAnneeParutionValide(String annee) {
                boolean valide = false;
                if (annee.matches("^[0-2][0-9]{3}$")) {// AAAA
                        valide = true;
                } else if (annee.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
                        valide = true;
                } 
                return valide;
        }
        
        public String getDateParution() {
                return renvoyerValeurCorrecte("date_parution");
        }
        public void setDateParution(String date) {
                setValeurCorrecte("date_parution", date);
        }

        public String getIndicationNvt() {
                return renvoyerValeurCorrecte("indication_nvt");
        }
        public void setIndicationNvt(String nvt) {
                setValeurCorrecte("indication_nvt", nvt);
        }
        
        public String getFascicule() {
                return renvoyerValeurCorrecte("fascicule");
        }
        public void setFascicule(String fascicule) {
                setValeurCorrecte("fascicule", fascicule);
        }
        
        public String getPages() {
                return renvoyerValeurCorrecte("truk_pages");
        }
        public void setPages(String pages) {
                setValeurCorrecte("truk_pages", pages);
        }
        
}