Rev 305 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.MissingResourceException;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.i18n.Constantes;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Configuration;import org.tela_botanica.client.modeles.Personne;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;import org.tela_botanica.client.util.UtilTruk;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.Style.Scroll;import com.extjs.gxt.ui.client.Style.VerticalAlignment;import com.extjs.gxt.ui.client.widget.ContentPanel;import com.extjs.gxt.ui.client.widget.LayoutContainer;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.FitLayout;import com.extjs.gxt.ui.client.widget.layout.FlowLayout;import com.extjs.gxt.ui.client.widget.layout.FormLayout;import com.extjs.gxt.ui.client.widget.layout.TableData;import com.extjs.gxt.ui.client.widget.layout.TableLayout;import com.google.gwt.core.client.GWT;import com.google.gwt.user.client.ui.Image;public class PersonneDetailPanneauVue extends LayoutContainer implements Rafraichissable {// Le panneau détail se compose de formulaires tabulésprivate TabPanel tabPanel;// Onglet 1 : identite & contactprivate TabItem tabIdentite;private ContentPanel panneauIdentite;private ContentPanel panneauImage;private FieldSet fsIdentite;private FieldSet fsContact;// Onglet 2 : Adressesprivate TabItem tabAdresse;private FieldSet fsAdressePerso;// contient : adresse perso / adresse pro// Onglet 3 : Informations naturalistesprivate TabItem tabInfosNat;private FieldSet fsSpec;private Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);public PersonneDetailPanneauVue() {tabPanel = new TabPanel();this.add(tabPanel);//Constructeur de la classeRegistry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);setLayout(new FitLayout());tabIdentite = new TabItem("Identité");TableLayout tLayout = new TableLayout(2);tabIdentite.setLayout(tLayout);tabIdentite.setScrollMode(Scroll.AUTO);panneauIdentite = new ContentPanel();panneauIdentite.setWidth("400px");panneauIdentite.setHeaderVisible(false);panneauIdentite.setBorders(false);panneauIdentite.setBodyBorder(false);panneauImage = new ContentPanel();panneauImage.setLayout(new FlowLayout());panneauImage.setBorders(false);panneauImage.setWidth(350);panneauImage.setBodyBorder(false);panneauImage.setHeaderVisible(false);//Gérer l'alignement vertical en hautTableData td = new TableData();td.setVerticalAlign(VerticalAlignment.TOP);tabIdentite.add(panneauIdentite, td);tabIdentite.add(panneauImage, td);fsIdentite = new FieldSet();fsIdentite.setLayout(new FormLayout());fsContact = new FieldSet();fsContact.setLayout(new FormLayout());tabPanel.add(tabIdentite);//Onglet Adresse:tabAdresse = new TabItem("Adresses");fsAdressePerso = new FieldSet();fsAdressePerso.setLayout(new FormLayout());tabPanel.add(tabAdresse);//Onglet info naturalistestabInfosNat = new TabItem("Informations naturalistes");fsSpec = new FieldSet();fsSpec.setLayout(new FormLayout());tabInfosNat.setScrollMode(Scroll.AUTO);tabPanel.add(tabInfosNat);}private HashMap hmLabelFieldRegion = new HashMap();public void afficherDetailPersonne(Personne personne) {if (personne != null) {//MAJ Identité : Configurer les fieldSetpanneauIdentite.removeAll();panneauImage.removeAll();fsIdentite.setHeading("Identité");//fsIdentite.setWidth("350px");fsContact.setHeading("Contact");//fsContact.setWidth("350px");panneauIdentite.add(fsIdentite);//La personne peut avoir un ou plusieurs logopanneauImage.setHeight("100%");panneauImage.setPosition(0, 6);panneauImage.setBorders(false);LinkedList<String> listeLogos = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_logo");if ((listeLogos != null)&&(listeLogos.size() > 0)) {panneauImage.setBorders(true);for (int i = 0; i < listeLogos.size(); i++) {String logoUrl = listeLogos.get(i);if ((logoUrl!=null)&&(!logoUrl.trim().equals(""))) {//Si c'est le cas, on l'affiche sur la même ligne que fsIdentitéImage img = new Image();img.setUrl(logoUrl);panneauImage.add(img);if (panneauImage.getWidth() < (img.getWidth() + 15)) {panneauImage.setWidth(img.getWidth() + 15);}}}}panneauIdentite.add(fsContact);fsIdentite.removeAll();fsContact.removeAll();fsAdressePerso.removeAll();fsSpec.removeAll();tabInfosNat.removeAll();//Ajout des champs Identité// TODO: projet// nom completObject nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");ajouterLabelField(fsIdentite,"Nom Complet", nomComplet);// Nom autre : champ truk; non-typéLinkedList<String> nomsAutre = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_nom_autre");if ((nomsAutre != null)&&(nomsAutre.size() > 0)) {LabelField noms = new LabelField();noms.setFieldLabel("Autres noms:");String listeNoms = UtilTruk.traiterTrukListe(nomsAutre, ", ");noms.setValue(listeNoms);fsIdentite.add(noms);}// abreviationObject abreviation = personne.obtenirValeurChamp("abreviation");ajouterLabelField(fsIdentite, "Abreviation", abreviation);// Abréviations, autre : non-typéLinkedList<String> abrevAutres = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_abreviation_autre");if ((abrevAutres != null)&&(abrevAutres.size() > 0)) {LabelField abreviations = new LabelField();abreviations.setFieldLabel("Autres abreviations:");String listeAbrev = UtilTruk.traiterTrukListe(abrevAutres, ", ");abreviations.setValue(listeAbrev);fsIdentite.add(abreviations);}fsIdentite.addText("<hr>");// date naissance// TODO : Mettre la date en format FR 10/12/09Object dateNaissance = personne.obtenirValeurChamp("naissance_date");ajouterLabelField(fsIdentite, "Né le", dateNaissance);// lieu naissanceObject lieuNaissance = personne.obtenirValeurChamp("naissance_lieu");ajouterLabelField(fsIdentite, "A", lieuNaissance);// date decesObject dateDeces = personne.obtenirValeurChamp("deces_date");ajouterLabelField(fsIdentite, "Date décès", dateDeces);// lieu decesObject lieuDeces = personne.obtenirValeurChamp("deces_lieu");ajouterLabelField(fsIdentite, "Lieu de décès", lieuDeces);fsIdentite.addText("<hr>");//DescriptionString description = (String) personne.obtenirValeurChamp("description");if ((description!=null)&&(!description.trim().equals(""))) {LabelField txtDescription = new LabelField();txtDescription.setFieldLabel("Description:");txtDescription.setValue(description);//rendreNonEditable(txtDescription);fsIdentite.add(txtDescription);}// CONTACT// Téléphones// > Plusieurs téléphones possible, typésConstantes constantesI18n = (Constantes) GWT.create(Constantes.class);HashMap<String, String> mapTelephones = (HashMap<String, String>) personne.getChaineDenormaliseAsMapOrList("truk_telephone");if ((mapTelephones != null)&&(mapTelephones.size() > 0)) {Collection<String> telephoneKeys = mapTelephones.keySet();Iterator<String> itTelephones = telephoneKeys.iterator();while (itTelephones.hasNext()) {String key = itTelephones.next();LabelField telephoneLabel = new LabelField();String label = "";try {label = constantesI18n.getString(key);}catch (MissingResourceException e) {label = key;}telephoneLabel.setFieldLabel( label + ":");telephoneLabel.setValue(mapTelephones.get(key));fsContact.add(telephoneLabel);}}// Fax// > Plusieurs fax possible, typésHashMap<String, String> mapFax = (HashMap<String, String>) personne.getChaineDenormaliseAsMapOrList("truk_fax");if ((mapFax != null)&&(mapFax.size() > 0)) {Collection<String> faxKeys = mapFax.keySet();Iterator<String> itFax = faxKeys.iterator();while (itFax.hasNext()) {String key = itFax.next();LabelField faxLabel = new LabelField();String label = "";try {label = constantesI18n.getString(key);}catch (MissingResourceException e) {label = key;}faxLabel.setFieldLabel( label + ":");faxLabel.setValue(mapTelephones.get(key));fsContact.add(faxLabel);}}// Courriel// Courriel est un 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";}LabelField labelCourriel = new LabelField();labelCourriel.setFieldLabel(strLabelCourriel);String valeurCourriel = "";Iterator<String> itCourriel = listeCourriel.iterator();while (itCourriel.hasNext()) {String valeurCourante = itCourriel.next();valeurCourriel += "<a href=\"mailto:" + valeurCourante + "\">" + valeurCourante + "</a><br />";}labelCourriel.setValue(valeurCourriel);fsContact.add(labelCourriel);}// Url Site WebsLinkedList listeUrl = (LinkedList) personne.getChaineDenormaliseAsMapOrList("truk_url");if (listeUrl!=null && listeUrl.size() > 0) {String strUrl = "";Iterator<String> urlIt = listeUrl.iterator();while (urlIt.hasNext()) {String urlCourante = urlIt.next();strUrl += "<a href=\""+urlCourante+"\">" + urlCourante + "</a> <br/>";}LabelField urlLabelField = new LabelField();urlLabelField.setFieldLabel("Url:");urlLabelField.setValue(strUrl);fsContact.add(urlLabelField);}panneauIdentite.add(fsContact);fsAdressePerso.setHeading("Adresse personnelle");/** Adresses :* */String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");ajouterLabelField(fsAdressePerso, "Adresse", adresse01);String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");ajouterLabelField(fsAdressePerso, "", adresse02);String boitePostale = (String) personne.obtenirValeurChamp("bp");ajouterLabelField(fsAdressePerso, "Boite Postale", boitePostale);String codePostal = (String) personne.obtenirValeurChamp("code_postal");ajouterLabelField(fsAdressePerso, "Code postal", codePostal);String ville = (String) personne.obtenirValeurChamp("ville");ajouterLabelField(fsAdressePerso, "Ville", ville);String region = (String) personne.obtenirValeurChamp("region");ajouterLabelField(fsAdressePerso, "Région", region);String pays = (String) personne.obtenirValeurChamp("pays");ajouterLabelField(fsAdressePerso, "Pays", pays);fsAdressePerso.addText("<br >");fsAdressePerso.setWidth("350px");tabAdresse.add(fsAdressePerso);// Infos naturalistes// Biographie// Spécialité (typé)fsSpec.setHeading("Spécialités");tabInfosNat.add(fsSpec);HashMap hmSpecialite = (HashMap) personne.getChaineDenormaliseAsMapOrList("ce_truk_specialite");if ((hmSpecialite != null)&&(hmSpecialite.size() > 0)) {Collection<String> specialiteKeys = hmSpecialite.keySet();Iterator<String> itSpec = specialiteKeys.iterator();while (itSpec.hasNext()) {String key = itSpec.next();LabelField specLabel = new LabelField();String label = "";try {label = constantesI18n.getString(key);}catch (MissingResourceException e) {label = key;}specLabel.setFieldLabel( label + ":");specLabel.setValue(hmSpecialite.get(key));fsSpec.add(specLabel);}}// RécolteLinkedList<String> lstRecolte = (LinkedList) personne.getChaineDenormaliseAsMapOrList("truk_recolte");if ((lstRecolte!=null)&&(lstRecolte.size()>0)) {FieldSet fsRecolte = new FieldSet();fsRecolte.setHeading("Récoltes");fsRecolte.setLayout(new FormLayout());Iterator<String> itRecolte = lstRecolte.iterator();while (itRecolte.hasNext()) {String recolteCourante = itRecolte.next();LabelField lfRecolte = new LabelField();String[] splitRecolte = recolteCourante.split("\\|");String labelRecolte = "";if (splitRecolte.length > 1) {lfRecolte.setValue(splitRecolte[1]);}lfRecolte.setFieldLabel(splitRecolte[0]);fsRecolte.add(lfRecolte);LinkedList<LabelField> lstComposantsRegion = (LinkedList<LabelField>) hmLabelFieldRegion.get(splitRecolte[0]);if (lstComposantsRegion == null) {lstComposantsRegion = new LinkedList<LabelField>();}lstComposantsRegion.add(lfRecolte);hmLabelFieldRegion.remove(splitRecolte[0]);hmLabelFieldRegion.put(splitRecolte[0], lstComposantsRegion);}tabInfosNat.add(fsRecolte);}changerLabelRegions();// tabInfosNatlayout();}}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 Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);public void rafraichir(Object nouvellesDonnees) {// Si on a reçu une personne on en affiche les détailsif (nouvellesDonnees instanceof Personne) {afficherDetailPersonne((Personne) nouvellesDonnees);} else if (nouvellesDonnees instanceof ValeurListe) {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());}}}}}}}