Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.vues.projet;

import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.ComposantId;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.modeles.projet.ProjetListe;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
import org.tela_botanica.client.vues.DetailVue;

import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.util.Params;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.core.client.GWT;

public class ProjetDetailVue extends DetailVue implements Rafraichissable {
        
        private String enteteTpl = null;
        private String contenuTpl = null;
        private String indexationTpl = null;
                
        private ContentPanel panneauPrincipal = null;
        private Html entete = null;
        private Html contenu = null;
        
        private final String listeValeurIndexationDureeId = "dureesIndexation";
        private final int listeValeurIndexationDureeInt = 1072;
        private final String listeValeurIndexationFrequenceId = "frequencesIndexation";
        private final int listeValeurIndexationFrequenceInt = 1073;
        private final String listeLanguesId = "langues";
        private final int listeLanguesInt = 1071;       

        private Projet projet = null;
        private boolean projetChargementOk = false;
        private ValeurListe valeurListeIndexationDuree = null;  
        private boolean listeIndexationDureeChargee = false;
        private ValeurListe valeurListeIndexationFrequence = null;
        private boolean listeIndexationFrequenceChargee = false;
        private ValeurListe valeurListeLangue = null;
        private boolean listeLangueChargee = false;
        private boolean displayUrl = true;

        private Sequenceur sequenceur;
        
        public ProjetDetailVue(Mediateur mediateurCourant, Sequenceur sequenceur) {
                super(mediateurCourant);
                this.sequenceur = sequenceur;
                
                panneauPrincipal = new ContentPanel();
                panneauPrincipal.setLayout(new FitLayout());
                panneauPrincipal.setHeaderVisible(false);
                panneauPrincipal.setBodyBorder(false);
                panneauPrincipal.setScrollMode(Scroll.AUTO);
                        
            entete = new Html();
            entete.setId(ComposantId.ZONE_DETAIL_ENTETE);
            panneauPrincipal.setTopComponent(entete);
            
            contenu = new Html();
            panneauPrincipal.add(contenu);
            
                add(panneauPrincipal);
                
                mediateurCourant.obtenirListeValeurEtRafraichir(this, listeValeurIndexationDureeId, sequenceur);
                mediateurCourant.obtenirListeValeurEtRafraichir(this, listeValeurIndexationFrequenceId, sequenceur);
                mediateurCourant.obtenirListeValeurEtRafraichir(this, listeLanguesId, sequenceur);
        }

        private void initialiserTousLesTpl() {
                initialiserEnteteHtmlTpl();
                initialiserGeneralTpl();
                initialiserIndexationTpl();
        }
        
        private void initialiserEnteteHtmlTpl() {
                enteteTpl =     
                        "<div id='{css_id}'>"+
                        "       <h1>{projet}</h1>"+
                        "       <h2>{abreviation} <span class='{css_meta}'>{projet} <br /> {i18n_id}:{id} - {guid}</span></h2>" +
                        "</div>";
        }
        
        private void initialiserGeneralTpl() {
                contenuTpl =
                        "<div class='{css_corps}'>"+
                        "       <div class='{css_fieldset}'>"+
                        "               <h2>{i18n_titre_info_generale}</h2>"+
                        "               <span class='{css_label}'>{i18n_nom} :</span> {nom}<br />"+
                        "               <span class='{css_label}'>{i18n_abreviation} :</span> {abreviation}<br />"+
                        "               <span class='{css_label}'>{i18n_resume} :</span> {resume}<br />"+
                        "               <span class='{css_label}'>{i18n_description} :</span> {description}<br />";
                
                if (projet.getUrl() != null && !UtilString.isEmpty(projet.getUrl()))
                        contenuTpl +=   "               <span class='{css_label}'>{i18n_url} :</span> <a class='{css_lien_ext}' href='{url}' onclick='window.open(this.href); return false;'>{url}</a><br />";
                
                contenuTpl +=
                        "       </div>"+
                        "       <div class='{css_fieldset}'>"+
                        "               <h2>{i18n_titre_complement}</h2>"+
                        "               <span class='{css_label}'>{i18n_mot_cles} :</span> {mot_cles}<br />"+
                        "               <span class='{css_label}'>{i18n_citation} :</span> {citation}<br />"+
                        "               <span class='{css_label}'>{i18n_licence} :</span> {licence}<br />"+
                        "               <span class='{css_label}'>{i18n_langue} :</span> {langue}<br />"+
                        "       </div>"+
                        "       <hr class='{css_clear}'/>"+
                        "       <div class='{css_fieldset}'>"+
                        "               <h2>{i18n_titre_indexation}</h2>"+
                        "               <span class='{css_label}'>{i18n_mark_public} :</span> {mark_public}<br />"+
                        "               {indexation}"+
                        "       </div>"+
                        "</div>";
        }
        
        private void initialiserIndexationTpl() {
                indexationTpl =
                        "               <span class='{css_label}'>{i18n_indexation_heure} :</span> {indexation_heure}<br />"+
                        "               <span class='{css_label}'>{i18n_indexation_duree} :</span> {indexation_duree}<br />"+
                        "               <span class='{css_label}'>{i18n_indexation_frequence} :</span> {indexation_frequence}<br />";
        }
        
        public void afficherDetail() {
                if (projet != null) {
                        afficherEntete();
                        afficherDetailProjet();
                };
                layout();
        }
        
        private void afficherEntete() {
                Params enteteParams = new Params();
                enteteParams.set("css_id", ComposantId.ZONE_DETAIL_ENTETE);
                enteteParams.set("css_meta", ComposantClass.META);
                
                enteteParams.set("i18n_id", i18nC.id());
                
                enteteParams.set("id", projet.getId());
                enteteParams.set("guid", getGuid());
                enteteParams.set("projet", construireTxtProjet(projet.getId()));
                enteteParams.set("abreviation", projet.getAbreviation());

                String eHtml = Format.substitute(enteteTpl, enteteParams);
                entete.getElement().setInnerHTML(eHtml);
        }
        
        public String getGuid() {
                String guid = "URN:tela-botanica.org:";
                guid += "coel"+projet.getId()+":";
                guid += "pro"+projet.getId();
                return guid;
        }
        
        public void afficherDetailProjet() {
                Params contenuParams = new Params();
                
                contenuParams.set("i18n_titre_info_generale", i18nC.projetTitreInfoGenerale());
                
                contenuParams.set("i18n_nom", i18nC.nom());
                contenuParams.set("nom", projet.getNom());
                
                contenuParams.set("i18n_abreviation", i18nC.projetAbreviation());
                contenuParams.set("abreviation", projet.getAbreviation());
                
                contenuParams.set("i18n_resume", i18nC.projetResume());
                contenuParams.set("resume", projet.getResume());
                
                contenuParams.set("i18n_description", i18nC.projetDescription());
                contenuParams.set("description", projet.getDescription());
                
                contenuParams.set("i18n_url", i18nC.projetUrl());
                contenuParams.set("url", projet.getUrl());
                
                contenuParams.set("i18n_titre_complement", i18nC.projetTitreComplement());
                
                contenuParams.set("i18n_mot_cles", i18nC.projetMotsCles());
                contenuParams.set("mot_cles", projet.getMotsCles());
                
                contenuParams.set("i18n_citation", i18nC.projetCitation());
                contenuParams.set("citation", projet.getCitation());
                
                contenuParams.set("i18n_licence", i18nC.projetLicence());
                contenuParams.set("licence", projet.getLicence());
                
                contenuParams.set("i18n_langue", i18nC.projetLangue());
                contenuParams.set("langue", obtenirValeurLangue(projet.getLangueId()));
                
                contenuParams.set("i18n_titre_indexation", i18nC.projetTitreIndexation());
                
                contenuParams.set("i18n_mark_public", i18nC.projetMarkPublic());
                contenuParams.set("mark_public", obtenirValeurPublic(projet.getMarkPublic()));
                
                contenuParams.set("indexation", creerIndexation());
                
                String gHtml = formaterContenu(contenuTpl, contenuParams);
                contenu.getElement().setInnerHTML(gHtml);
        }
        
        private String corrigerIndexationHeure(String heureMinuteSecondeEnBdd) {
                String heureMinute = "";
                if (!UtilString.isEmpty(heureMinuteSecondeEnBdd)) {
                        heureMinute = heureMinuteSecondeEnBdd.replaceAll(":00$", "");
                }
                return heureMinute;
        }
        
        private String creerIndexation() {
                String html = "";
                if (projet.getMarkPublic().equals("1")) {
                        Params indexationParams = new Params();
                        
                        indexationParams.set("i18n_indexation_heure", i18nC.projetIndexationHeure());
                        indexationParams.set("indexation_heure", corrigerIndexationHeure(projet.getIndexationHeure()));
                        
                        indexationParams.set("i18n_indexation_duree", i18nC.projetIndexationDuree());
                        indexationParams.set("indexation_duree", obtenirValeurIndexationDuree(projet.getIndexationDuree()));
                        
                        indexationParams.set("i18n_indexation_frequence", i18nC.projetIndexationFrequence());
                        indexationParams.set("indexation_frequence", obtenirValeurIndexationFrequence(projet.getIndexationFreq()));
                        
                        html = Format.substitute(indexationTpl, indexationParams);
                }
                return html;
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof Projet) {
                        if (Mediateur.DEBUG) System.out.println("|| ProjetDetailVue > Réception d'un Projet");
                        projet = (Projet) nouvellesDonnees;
                        projetChargementOk = true;
                        
                        initialiserTousLesTpl();
                        
                } else if (nouvellesDonnees instanceof ProjetListe) {
                        if (Mediateur.DEBUG) System.out.println("|| ProjetDetailVue > Réception d'une ProjetListe");
                        projets = (ProjetListe) nouvellesDonnees;
                        projetsChargementOk = true;
                } else if(nouvellesDonnees instanceof ValeurListe) {
                        if (Mediateur.DEBUG) System.out.println("|| ProjetDetailVue > Réception d'une ValeurListe");
                        
                        ValeurListe nValeurListe = (ValeurListe)nouvellesDonnees;
                        
                        if (nValeurListe.getId() == listeValeurIndexationDureeInt) {
                                valeurListeIndexationDuree = (ValeurListe)nouvellesDonnees;
                                listeIndexationDureeChargee = true;
                        }
                        
                        if (nValeurListe.getId() == listeValeurIndexationFrequenceInt) {
                                valeurListeIndexationFrequence = (ValeurListe)nouvellesDonnees;
                                listeIndexationFrequenceChargee = true;
                        }
                        
                        if (nValeurListe.getId() == listeLanguesInt) {
                                valeurListeLangue = (ValeurListe)nouvellesDonnees;
                                listeLangueChargee = true;
                        }
                } else {
                        GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
                
                if (avoirDonneesChargees()) {
                        afficherDetail();
                }
        }
        
        private boolean avoirDonneesChargees() {
                boolean ok = false;
                if (projetsChargementOk && projetChargementOk && listeIndexationDureeChargee && listeIndexationFrequenceChargee && listeLangueChargee) {
                        ok = true;
                }
                return ok;
        }
        
        private String obtenirValeurIndexationDuree(String id) {
                if (valeurListeIndexationDuree.get(id) != null) {
                        return valeurListeIndexationDuree.get(id).getNom();
                }
                return "";
        }
        
        private String obtenirValeurIndexationFrequence(String id) {
                if (valeurListeIndexationFrequence.get(id) != null) {
                        return valeurListeIndexationFrequence.get(id).getNom();
                }
                return "";
        }
        
        private String obtenirValeurLangue(String id) {
                if (valeurListeLangue.get(id) != null) {
                        return valeurListeLangue.get(id).getNom();
                }
                return "";
        }
        
        private String obtenirValeurPublic(String ouiNon) {
                if (ouiNon.equals("1")) {
                        return i18nC.oui();
                }
                return i18nC.non();
        }
}