Rev 1284 | Rev 1367 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.personne;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import org.tela_botanica.client.ComposantId;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.configuration.Configuration;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;import org.tela_botanica.client.modeles.personne.Personne;import org.tela_botanica.client.modeles.publication.Publication;import org.tela_botanica.client.modeles.publication.PublicationAPersonne;import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;import org.tela_botanica.client.util.Debug;import org.tela_botanica.client.vues.DetailVue;import com.extjs.gxt.ui.client.Registry;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.TabItem;import com.extjs.gxt.ui.client.widget.TabPanel;import com.extjs.gxt.ui.client.widget.form.FieldSet;import com.extjs.gxt.ui.client.widget.form.LabelField;import com.extjs.gxt.ui.client.widget.layout.AnchorLayout;import com.extjs.gxt.ui.client.widget.layout.FitLayout;import com.extjs.gxt.ui.client.widget.layout.FlowLayout;import com.google.gwt.user.client.ui.Image;public class PersonneDetailVue extends DetailVue implements Rafraichissable {private TabPanel tabPanel;private Html entete;private TabItem tabIdentite;private TabItem tabAdresse;private TabItem tabInfosNat;private TabItem tabLogos;private TabItem tabPublications;private HashMap hmLabelFieldRegion = new HashMap();private Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);private boolean ontologieRecue = false;private Personne personneAAfficher = null;private boolean personneAffichee = false;private String tableauPublicationsLieesTpl = "";private String lignePublicationLieeTpl = "";private void chargerOntologie() {mediateur.obtenirListeValeurEtRafraichir(this, "pays");mediateur.obtenirListeValeurEtRafraichir(this, "tel");mediateur.obtenirListeValeurEtRafraichir(this, "relationPersonnePublication");}public PersonneDetailVue(Mediateur mediateur) {super(mediateur);chargerOntologie();setLayout(new FitLayout());entete = new Html();entete.setId(ComposantId.ZONE_DETAIL_ENTETE);ContentPanel panneauPrincipal = new ContentPanel();panneauPrincipal.setLayout(new FitLayout());panneauPrincipal.setHeaderVisible(false);panneauPrincipal.setBodyBorder(true);panneauPrincipal.setTopComponent(entete);tabIdentite = new TabItem(i18nC.personneIdentite());tabIdentite.setLayout(new AnchorLayout());tabIdentite.setScrollMode(Scroll.AUTO);tabAdresse = new TabItem(i18nC.personneAdresses());tabAdresse.setLayout(new FitLayout());tabAdresse.setScrollMode(Scroll.AUTO);tabInfosNat = new TabItem(i18nC.personneInfoNat());tabInfosNat.setScrollMode(Scroll.AUTO);//Greg : ajout d'un résumé des publicationstabPublications = new TabItem(i18nC.tabPublications());tabPublications.setScrollMode(Scroll.AUTO);tabPublications.setLayout(new FlowLayout());tabLogos = new TabItem(i18nC.personneLogos());tabLogos.setScrollMode(Scroll.AUTO);tabLogos.setLayout(new FlowLayout());tabPanel = new TabPanel();tabPanel.setId(ComposantId.ZONE_DETAIL_CORPS);tabPanel.setBodyBorder(false);tabPanel.add(tabIdentite);tabPanel.add(tabAdresse);tabPanel.add(tabInfosNat);tabPanel.add(tabPublications);tabPanel.add(tabLogos);panneauPrincipal.add(tabPanel);add(panneauPrincipal);}public void afficherDetailPersonne(Personne personne) {if (personne != null) {String tplEntete = initialiserTplEntete();//Sélection des publication à personnemediateur.selectionnerPublicationAPersonne(this, null, personne.getId(), new LinkedList());Params enteteParams = new Params();enteteParams.set("nom", (String) personne.get("fmt_nom_complet"));enteteParams.set("mail", (String) personne.getCourrielPrinc());LinkedList lstLogos = (LinkedList) personne.getChaineDenormaliseAsMapOrList("truk_logo");if (lstLogos != null && lstLogos.size() > 0) {tabLogos.removeAll();String urlLogoPrinc = (String) lstLogos.get(0);if (!urlLogoPrinc.trim().equals("")) {tplEntete = "<div id='personne-logo-div'><img src='{image}' alt='logo' /></div>"+ tplEntete;enteteParams.set("image", urlLogoPrinc);}Iterator<String> itLogo = lstLogos.iterator();while (itLogo.hasNext()) {String urlLogoCourant = itLogo.next();Image imgCourante = new Image(urlLogoCourant);tabLogos.add(imgCourante);}tabLogos.enable();} else {enteteParams.set("image", "");tabLogos.disable();}entete.el().setInnerHtml(Format.substitute(tplEntete, enteteParams));String tplIdentite = initialiserTplIdentite();Params tabIdentiteParams = new Params();tabIdentiteParams.set("nom_complet", personne.getString("fmt_nom_complet"));tabIdentiteParams.set("abreviation", personne.getString("abreviation"));tabIdentiteParams.set("naissance_date", personne.getAnneeOuDateNaiss().equals("") ? mediateur.i18nC.inconnue() : personne.getAnneeOuDateNaiss());tabIdentiteParams.set("naissance_lieu", personne.getString("naissance_lieu"));String tplDeces = "";if (personne.estDecedee()) {tplDeces = " <h2>Décès:</h2>"+ " <span><b>"+ i18nC.personneDateDeces()+ ":</b></span> {deces_date}<br />"+ " <span><b>"+ i18nC.personneLieuDeces()+ ":</b></span> {deces_lieu}<br /><br />";tabIdentiteParams.set("deces_date", personne.getAnneeOuDateDeces().equals("") ? mediateur.i18nC.inconnue() : personne.getAnneeOuDateDeces());tabIdentiteParams.set("deces_lieu", personne.getString("deces_lieu"));}Params paramsDeces = new Params();paramsDeces.set("tplDeces", tplDeces);tplIdentite = Format.substitute(tplIdentite, paramsDeces);tabIdentiteParams.set("description", personne.getString("description"));tabInfosNat.removeAll();tabIdentiteParams.set("nom_autre", construireTxtTruck(personne.getString("truk_nom_autre")));tabIdentiteParams.set("abreviation_autre", construireTxtTruck(personne.getString("truk_abreviation_autre")));tplIdentite += construireTxtListeOntologie(personne.getString("truk_telephone"));// Courriel :Champ truk de la forme// "Adresse@adr.com;; adr2@adr.fr ..."LinkedList<String> listeCourriel = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_courriel");if ((listeCourriel != null) && (listeCourriel.size() > 0)) {String strLabelCourriel = "Courriel";if (listeCourriel.size() > 1) {strLabelCourriel += "s";}String valeurCourriel = "";Iterator<String> itCourriel = listeCourriel.iterator();while (itCourriel.hasNext()) {String valeurCourante = itCourriel.next();valeurCourriel += "<br /><a href=\"mailto:"+ valeurCourante + "\">" + valeurCourante + "</a>";}tplIdentite += valeurCourriel;}// Url Site WebsLinkedList listeUrl = (LinkedList) personne.getChaineDenormaliseAsMapOrList("truk_url");if (listeUrl != null && listeUrl.size() > 0) {tplIdentite += "<br /><br /><b>Sites web:</b><br /><span style='display:inline-block'>";String strUrl = "";Iterator<String> urlIt = listeUrl.iterator();while (urlIt.hasNext()) {String urlCourante = urlIt.next();strUrl += "<a href=\"" + urlCourante + "\">" + urlCourante+ "</a> <br/>";}tplIdentite += strUrl + "</span><br />";}tplIdentite += "</div>";afficherOnglet(tplIdentite, tabIdentiteParams, tabIdentite);String tabAdresseTpl = "<div class='{css_corps}'>"+ " <div class='{css_fieldset}'>"+ " <h2>Adresse personnelle:</h2>"+ " <b>Adresse:</b> {adresse01} <br />"+ " <b>Complément d'adresse: </b>{adresse02} <br />"+ " <b>Boite postale: </b>{boitePostale}<br />"+ " <b>Code postal:</b>{codePostal} <br />"+ " <b>Région:</b>{region}<br />"+ " <b>Pays :</b><span style='uppercase'>{pays}</span><br />"+ "</div>";// Adresses :Params paramAdresseTpl = new Params();paramAdresseTpl.set("adresse01", (String) personne.obtenirValeurChamp("adresse_01"));paramAdresseTpl.set("adresse02", (String) personne.obtenirValeurChamp("adresse_02"));paramAdresseTpl.set("boitePostale", (String) personne.obtenirValeurChamp("bp"));paramAdresseTpl.set("codePostal", (String) personne.obtenirValeurChamp("code_postal"));paramAdresseTpl.set("ville", (String) personne.obtenirValeurChamp("ville"));paramAdresseTpl.set("region", (String) personne.obtenirValeurChamp("ce_truk_region"));paramAdresseTpl.set("pays", construireTxtListeOntologie((String) personne.obtenirValeurChamp("ce_truk_pays")));afficherOnglet(tabAdresseTpl, paramAdresseTpl, tabAdresse);tabAdresse.setStyleAttribute("padding", "15px");// Infos naturalistes :Biographie, Spécialité (typé)String tplInfosNat = "<div class='{css_corps}'>"+ " <div class='{css_fieldset}'>" + " <h2>"+ i18nC.personneBiographie() + "</h2>"+ " {biographie}" + " "+ "<h2>" + i18nC.personneSpecialite() + "</h2>"+ " {specialites}" + " <h2>"+ i18nC.personneRecolte() + "</h2>"+ " {recoltes}" + " </div>" + "</div>";Params prmInfosNat = new Params();prmInfosNat.set("biographie", personne.get("biographie"));String specialite = construireTxtTruck(personne.getSpecialite());prmInfosNat.set("specialites", specialite);String recolte = construireTxtListeOntologie(personne.getString("truk_recolte"));prmInfosNat.set("recoltes", recolte);afficherOnglet(tplInfosNat, prmInfosNat, tabInfosNat);tabAdresse.setStyleAttribute("padding", "15px");changerLabelRegions();layout();}}public String initialiserTplEntete() {return "<div id='{css_id}'>" + "<h1>{nom}</h1>"+ "<h2><a href='{mail}'>{mail}</a></h2>" + "</div>";}public String initialiserTplIdentite() {return "<div class='{css_corps}'>" + " <div class='{css_fieldset}'>"+ " <h2>Noms:</h2>" + " <span><b>"+ i18nC.personneNomComplet()+ ":</b></span> {nom_complet}<br />"+ " <span><b>"+ i18nC.personneNomAutre()+ ":</b></span> {nom_autre}<br />"+ " <span><b>"+ i18nC.personneAbreviation()+ ":</b></span> {abreviation}<br />"+ " <span><b>"+ i18nC.personneAbreviationAutre()+ ":</b></b></span> {abreviation_autre}<br /><br />"+ " <h2>Naissance:</h2>"+ " <span><b>"+ i18nC.personneDateNaissance()+ ":</b></span> {naissance_date}<br />"+ " <span><b>"+ i18nC.personneLieuNaissance()+ ":</b></span> {naissance_lieu}<br /><br />"+ "{tplDeces}"+ " </div>"+ "</div>"+ "<div class='{css_corps}'>"+ " <div class='css_fieldset'> "+ " <h2>Description:</h2>"+ " {description}<br />" + " </div>" + "<br />";}private void changerLabelRegions() {Collection<String> colClesComposants = hmLabelFieldRegion.keySet();Iterator<String> itComposants = colClesComposants.iterator();while (itComposants.hasNext()) {String region = itComposants.next();mediateur.obtenirValeurEtRafraichir(this, "region", region);}}private void ajouterLabelField(FieldSet fs, String tfLabel, Object tfValue) {if ((tfValue != null) && (!tfValue.toString().trim().equals(""))) {LabelField tf = new LabelField();tf.setFieldLabel(tfLabel + ":");if ((tfLabel == null) || ("".equals(tfLabel))) {tf.setHideLabel(true);tf.setStyleAttribute("margin", "0 0 0 105px");}tf.setValue(tfValue);// Ajout au fieldSetfs.add(tf);}}private void initialiserTableauPublicationsLieesTpl() {tableauPublicationsLieesTpl ="<div class='{css_corps}'>" +" <h2>{i18n_titre_publication}</h2>"+" <table>"+" <thead>"+" <tr>" +" <th>{i18n_relation}</th>" +" <th>{i18n_auteur}</th>" +" <th>{i18n_titre}</th>" +" <th>{i18n_revue}</th>" +" <th>{i18n_editeur}</th>" +" <th>{i18n_annee}</th>" +" <th>{i18n_nvt}</th>" +" <th>{i18n_fascicule}</th>" +" <th>{i18n_page}</th>" +" </tr>"+" </thead>"+" <tbody>"+" {lignes}"+" </tbody>"+"</table>";}private void initialiserLignePublicationLieeTpl() {lignePublicationLieeTpl ="<tr>"+" <td>{relation}</td>"+" <td>{auteur}</td>"+" <td>{titre}</td>"+" <td>{revue}</td>"+" <td>{editeur}</td>"+" <td>{annee}</td>"+" <td>{nvt}</td>"+" <td>{fascicule}</td>"+" <td>{page}</td>"+"</tr>";}/*** @author greg* Rempli l'onglet des publications liées* @param listePublications la liste des publications*/private void afficherPublications(PublicationAPersonneListe listePublications) {List<PublicationAPersonne> publicationsLiees = listePublications.toList();Iterator<PublicationAPersonne> iterateur = publicationsLiees.iterator();//Onglet PublicationsinitialiserTableauPublicationsLieesTpl();Params paramsPublis = new Params();String contenuLignes = "";while (iterateur.hasNext()) {initialiserLignePublicationLieeTpl();PublicationAPersonne publicationAPersonneCourante = iterateur.next();Publication publication = publicationAPersonneCourante.getPublicationLiee();Params ligneParams = new Params();ligneParams.set("relation", construireTxtListeOntologie(publicationAPersonneCourante.getRole()));ligneParams.set("auteur", publication.getAuteur());ligneParams.set("titre", publication.getTitre());ligneParams.set("revue", publication.getCollection());ligneParams.set("editeur", publication.getEditeur());ligneParams.set("annee", publication.getAnneeParution());ligneParams.set("nvt", publication.getIndicationNvt());ligneParams.set("fascicule", publication.getFascicule());ligneParams.set("page", publication.getPages());contenuLignes += Format.substitute(lignePublicationLieeTpl, ligneParams);}paramsPublis.set("lignes", contenuLignes);paramsPublis.set("i18n_titre_publication", i18nC.tabPublications());paramsPublis.set("i18n_relation", i18nC.publicationAuteurs());paramsPublis.set("i18n_auteur", i18nC.publicationAuteurs());paramsPublis.set("i18n_titre", i18nC.publicationTitre());paramsPublis.set("i18n_revue", i18nC.publicationRevueCollection());paramsPublis.set("i18n_editeur", i18nC.publicationEditeur());paramsPublis.set("i18n_annee", i18nC.publicationDateParution());paramsPublis.set("i18n_nvt", i18nC.publicationNvt());paramsPublis.set("i18n_fascicule", i18nC.publicationFascicule());paramsPublis.set("i18n_page", i18nC.publicationPage());afficherOnglet(tableauPublicationsLieesTpl, paramsPublis, tabPublications);}public void rafraichir(Object nouvellesDonnees) {// FIXME : Ci-dessous, on utilise le booléen personneAffichee pour éviter un affichage répété de personnes.// Se règlerait avec une gestion Synchrone/Asynchrone// Si on a reçu une personne on en affiche les détailsif (nouvellesDonnees instanceof Personne) {personneAAfficher = (Personne) nouvellesDonnees;personneAffichee = false;} else if (nouvellesDonnees instanceof ValeurListe) {ValeurListe ontologieReceptionnee = (ValeurListe) nouvellesDonnees;ajouterListeValeursAOntologie(ontologieReceptionnee);ontologieRecue = true;// Remplacer ci-dessous par OntologieValeurListe listeValeur = (ValeurListe) nouvellesDonnees;if (listeValeur.getId().equals(config.getListeId("region"))) {Collection colCleListeValeur = listeValeur.keySet();Iterator<String> itLv = colCleListeValeur.iterator();while (itLv.hasNext()) {String idRegion = itLv.next();Valeur region = listeValeur.get(idRegion);if (region != null) {String strRegionId = region.getAbreviation();LinkedList<LabelField> listComposantsRegion = (LinkedList) hmLabelFieldRegion.get(strRegionId);for (int i = 0; i < listComposantsRegion.size(); i++) {LabelField lfRegion = listComposantsRegion.get(i);lfRegion.setFieldLabel(region.getNom());}}}}} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {afficherPublications((PublicationAPersonneListe) nouvellesDonnees);}if (ontologieRecue && personneAAfficher != null && personneAffichee == false) {afficherDetailPersonne(personneAAfficher);personneAffichee = true;}}}