Rev 1136 | Rev 1265 | 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.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 publications
tabPublications = 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 à personne
mediateur.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.getNaissanceDate());
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.getDecesDate());
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 Webs
LinkedList 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 />"
+ " <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("region"));
paramAdresseTpl.set("pays", (String) personne
.obtenirValeurChamp("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.personneSpecialite() + "</h1>"
+ " {specialites}" + " <h2>"
+ i18nC.personneRecolte() + "</h2>"
+ " {recoltes}" + " </div>" + "</div>";
Params prmInfosNat = new Params();
// TODO : replace id region par valeur
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 fieldSet
fs.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 Publications
initialiserTableauPublicationsLieesTpl();
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.collectionPublicationTitre());
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étails
if (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 Ontologie
ValeurListe 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;
}
}
}