Subversion Repositories eFlore/Applications.coel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
150 gduche 1
package org.tela_botanica.client.vues;
2
 
253 gduche 3
import java.util.Collection;
197 gduche 4
import java.util.HashMap;
5
import java.util.Iterator;
253 gduche 6
import java.util.LinkedList;
7
import java.util.MissingResourceException;
189 gduche 8
 
435 gduche 9
import org.tela_botanica.client.ComposantId;
305 gduche 10
import org.tela_botanica.client.Mediateur;
150 gduche 11
import org.tela_botanica.client.RegistreId;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
305 gduche 13
import org.tela_botanica.client.modeles.Configuration;
150 gduche 14
import org.tela_botanica.client.modeles.Personne;
305 gduche 15
import org.tela_botanica.client.modeles.Valeur;
16
import org.tela_botanica.client.modeles.ValeurListe;
259 gduche 17
import org.tela_botanica.client.util.UtilTruk;
527 gduche 18
 
150 gduche 19
import com.extjs.gxt.ui.client.Registry;
20
import com.extjs.gxt.ui.client.Style.Scroll;
435 gduche 21
import com.extjs.gxt.ui.client.util.Format;
22
import com.extjs.gxt.ui.client.util.Params;
215 aurelien 23
import com.extjs.gxt.ui.client.widget.ContentPanel;
527 gduche 24
import com.extjs.gxt.ui.client.widget.Html;
189 gduche 25
import com.extjs.gxt.ui.client.widget.TabItem;
26
import com.extjs.gxt.ui.client.widget.TabPanel;
197 gduche 27
import com.extjs.gxt.ui.client.widget.form.FieldSet;
246 gduche 28
import com.extjs.gxt.ui.client.widget.form.LabelField;
527 gduche 29
import com.extjs.gxt.ui.client.widget.layout.AnchorLayout;
150 gduche 30
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
197 gduche 31
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
32
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
33
import com.google.gwt.user.client.ui.Image;
150 gduche 34
 
527 gduche 35
public class PersonneDetailVue extends DetailVue implements Rafraichissable {
150 gduche 36
 
269 gduche 37
	private TabPanel tabPanel;
527 gduche 38
	private Html entete;
820 gduche 39
 
215 aurelien 40
	private TabItem tabIdentite;
200 gduche 41
	private TabItem tabAdresse;
215 aurelien 42
	private TabItem tabInfosNat;
435 gduche 43
	private TabItem tabLogos;
820 gduche 44
 
45
	private void chargerOntologie() {
46
		mediateur.obtenirListeValeurEtRafraichir(this, "pays");
47
	}
435 gduche 48
 
820 gduche 49
 
527 gduche 50
	public PersonneDetailVue(Mediateur mediateur) {
820 gduche 51
 
527 gduche 52
		super(mediateur);
820 gduche 53
		chargerOntologie();
435 gduche 54
 
820 gduche 55
		mediateur.obtenirListeValeurEtRafraichir(this, "pays");
56
 
57
		setLayout(new FitLayout());
58
 
527 gduche 59
		entete = new Html();
60
		entete.setId(ComposantId.ZONE_DETAIL_ENTETE);
820 gduche 61
 
527 gduche 62
		ContentPanel panneauPrincipal = new ContentPanel();
63
		panneauPrincipal.setLayout(new FitLayout());
64
		panneauPrincipal.setHeaderVisible(false);
65
		panneauPrincipal.setBodyBorder(true);
66
		panneauPrincipal.setTopComponent(entete);
820 gduche 67
 
472 gduche 68
		tabIdentite = new TabItem(mediateur.i18nC.personneIdentite());
527 gduche 69
		tabIdentite.setLayout(new AnchorLayout());
820 gduche 70
		tabIdentite.setScrollMode(Scroll.AUTO);
71
 
472 gduche 72
		tabAdresse = new TabItem(mediateur.i18nC.personneAdresses());
73
		tabAdresse.setLayout(new FitLayout());
74
		tabAdresse.setScrollMode(Scroll.AUTO);
820 gduche 75
 
472 gduche 76
		tabInfosNat = new TabItem(mediateur.i18nC.personneInfoNat());
321 gduche 77
		tabInfosNat.setScrollMode(Scroll.AUTO);
820 gduche 78
 
472 gduche 79
		tabLogos = new TabItem(mediateur.i18nC.personneLogos());
680 gduche 80
		tabLogos.setScrollMode(Scroll.AUTO);
435 gduche 81
		tabLogos.setLayout(new FlowLayout());
820 gduche 82
 
527 gduche 83
		tabPanel = new TabPanel();
84
		tabPanel.setId(ComposantId.ZONE_DETAIL_CORPS);
85
		tabPanel.setBodyBorder(false);
820 gduche 86
 
527 gduche 87
		tabPanel.add(tabIdentite);
88
		tabPanel.add(tabAdresse);
89
		tabPanel.add(tabInfosNat);
435 gduche 90
		tabPanel.add(tabLogos);
820 gduche 91
 
527 gduche 92
		panneauPrincipal.add(tabPanel);
93
		add(panneauPrincipal);
150 gduche 94
	}
95
 
321 gduche 96
	private HashMap hmLabelFieldRegion = new HashMap();
820 gduche 97
 
150 gduche 98
	public void afficherDetailPersonne(Personne personne) {
99
		if (personne != null) {
820 gduche 100
 
527 gduche 101
			String tplEntete = initialiserTplEntete();
820 gduche 102
 
435 gduche 103
			Params enteteParams = new Params();
104
			enteteParams.set("nom", (String) personne.get("fmt_nom_complet"));
105
			enteteParams.set("mail", (String) personne.get("courriel_princ"));
820 gduche 106
 
107
			LinkedList lstLogos = (LinkedList) personne
108
					.getChaineDenormaliseAsMapOrList("truk_logo");
109
			if (lstLogos != null && lstLogos.size() > 0) {
110
 
435 gduche 111
				tabLogos.removeAll();
112
				String urlLogoPrinc = (String) lstLogos.get(0);
820 gduche 113
				if (!urlLogoPrinc.trim().equals("")) {
114
					tplEntete = "<div id='personne-logo-div'><img src='{image}' alt='logo' /></div>"
115
							+ tplEntete;
435 gduche 116
					enteteParams.set("image", urlLogoPrinc);
253 gduche 117
				}
820 gduche 118
 
435 gduche 119
				Iterator<String> itLogo = lstLogos.iterator();
820 gduche 120
				while (itLogo.hasNext()) {
435 gduche 121
					String urlLogoCourant = itLogo.next();
122
					Image imgCourante = new Image(urlLogoCourant);
820 gduche 123
					tabLogos.add(imgCourante);
435 gduche 124
				}
527 gduche 125
				tabLogos.enable();
820 gduche 126
 
435 gduche 127
			} else {
472 gduche 128
				enteteParams.set("image", "");
435 gduche 129
				tabLogos.disable();
472 gduche 130
			}
820 gduche 131
 
132
			entete.el()
133
					.setInnerHtml(Format.substitute(tplEntete, enteteParams));
134
 
527 gduche 135
			String tplIdentite = initialiserTplIdentite();
820 gduche 136
 
435 gduche 137
			Params tabIdentiteParams = new Params();
820 gduche 138
			tabIdentiteParams.set("nom_complet", personne
139
					.getString("fmt_nom_complet"));
140
			tabIdentiteParams.set("abreviation", personne
141
					.getString("abreviation"));
142
			tabIdentiteParams.set("naissance_date", personne
143
					.getString("naissance_date"));
144
			tabIdentiteParams.set("naissance_lieu", personne
145
					.getString("naissance_lieu"));
146
			tabIdentiteParams.set("deces_date", personne
147
					.getString("deces_date"));
148
			tabIdentiteParams.set("deces_lieu", personne
149
					.getString("deces_lieu"));
150
			tabIdentiteParams.set("description", personne
151
					.getString("description"));
152
 
321 gduche 153
			tabInfosNat.removeAll();
820 gduche 154
 
155
			/*// Nom autre : champ truk; non-typé
156
			LinkedList<String> nomsAutre = (LinkedList<String>) personne
157
					.getChaineDenormaliseAsMapOrList("truk_nom_autre");
435 gduche 158
			String listeNoms = "";
820 gduche 159
			if ((nomsAutre != null) && (nomsAutre.size() > 0)) {
160
				listeNoms = UtilTruk.traiterTrukListe(nomsAutre, ", ");
259 gduche 161
			}
435 gduche 162
			tabIdentiteParams.set("nom_autre", listeNoms);
820 gduche 163
 
259 gduche 164
			// Abréviations, autre : non-typé
820 gduche 165
			LinkedList<String> abrevAutres = (LinkedList<String>) personne
166
					.getChaineDenormaliseAsMapOrList("truk_abreviation_autre");
435 gduche 167
			String listeAbrev = "";
820 gduche 168
			if ((abrevAutres != null) && (abrevAutres.size() > 0)) {
435 gduche 169
				listeAbrev = UtilTruk.traiterTrukListe(abrevAutres, ", ");
820 gduche 170
			}*/
171
			tabIdentiteParams.set("nom_autre", construireTxtTruck(personne.getString("truk_nom_autre")));
172
			tabIdentiteParams.set("abreviation_autre", construireTxtTruck(personne.getString("truk_abreviation_autre")));
173
 
174
			HashMap<String, String> mapTelephones = (HashMap<String, String>) personne
175
					.getChaineDenormaliseAsMapOrList("truk_telephone");
176
			if ((mapTelephones != null) && (mapTelephones.size() > 0)) {
177
 
253 gduche 178
				Collection<String> telephoneKeys = mapTelephones.keySet();
179
				Iterator<String> itTelephones = telephoneKeys.iterator();
820 gduche 180
 
181
				while (itTelephones.hasNext()) {
253 gduche 182
					String key = itTelephones.next();
472 gduche 183
					String label = mapTelephones.get(key);
820 gduche 184
 
253 gduche 185
					try {
472 gduche 186
						label = mediateur.i18nC.getString(label);
820 gduche 187
					} catch (MissingResourceException e) {
253 gduche 188
					}
820 gduche 189
 
527 gduche 190
					tplIdentite += "<b>" + label + ":</b> " + key;
191
					tplIdentite += "<br />";
253 gduche 192
				}
215 aurelien 193
			}
820 gduche 194
 
195
			// Courriel :Champ truk de la forme
196
			// "Adresse@adr.com;; adr2@adr.fr ..."
197
			LinkedList<String> listeCourriel = (LinkedList<String>) personne
198
					.getChaineDenormaliseAsMapOrList("truk_courriel");
199
			if ((listeCourriel != null) && (listeCourriel.size() > 0)) {
253 gduche 200
				String strLabelCourriel = "Courriel";
820 gduche 201
				if (listeCourriel.size() > 1) {
202
					strLabelCourriel += "s";
253 gduche 203
				}
820 gduche 204
 
253 gduche 205
				String valeurCourriel = "";
206
				Iterator<String> itCourriel = listeCourriel.iterator();
820 gduche 207
				while (itCourriel.hasNext()) {
253 gduche 208
					String valeurCourante = itCourriel.next();
820 gduche 209
					valeurCourriel += "<br /><a href=\"mailto:"
210
							+ valeurCourante + "\">" + valeurCourante + "</a>";
253 gduche 211
				}
527 gduche 212
				tplIdentite += valeurCourriel;
253 gduche 213
			}
472 gduche 214
 
260 gduche 215
			// Url Site Webs
820 gduche 216
			LinkedList listeUrl = (LinkedList) personne
217
					.getChaineDenormaliseAsMapOrList("truk_url");
218
			if (listeUrl != null && listeUrl.size() > 0) {
219
 
527 gduche 220
				tplIdentite += "<br /><br /><b>Sites web:</b><br /><span style='display:inline-block'>";
260 gduche 221
				String strUrl = "";
222
				Iterator<String> urlIt = listeUrl.iterator();
820 gduche 223
				while (urlIt.hasNext()) {
260 gduche 224
					String urlCourante = urlIt.next();
820 gduche 225
					strUrl += "<a href=\"" + urlCourante + "\">" + urlCourante
226
							+ "</a> <br/>";
260 gduche 227
				}
527 gduche 228
				tplIdentite += strUrl + "</span><br />";
820 gduche 229
			}
230
 
527 gduche 231
			tplIdentite += "</div>";
820 gduche 232
 
527 gduche 233
			afficherOnglet(tplIdentite, tabIdentiteParams, tabIdentite);
820 gduche 234
 
235
			String tabAdresseTpl = "<div class='{css_corps}'>"
236
					+ "	<div class='{css_fieldset}'>"
237
					+ "		<h2>Adresse personnelle:</h2>"
238
					+ "		{adresse01} <br />" + "		{adresse02} <br />"
239
					+ "		{boitePostale}<br />"
240
					+ "		{codePostal} {region}<br />"
241
					+ "		<span style='uppercase'>{pays}</span><br />"
242
					+ "</div>";
243
			// Adresses :
472 gduche 244
			Params paramAdresseTpl = new Params();
820 gduche 245
			paramAdresseTpl.set("adresse01", (String) personne
246
					.obtenirValeurChamp("adresse_01"));
247
			paramAdresseTpl.set("adresse02", (String) personne
248
					.obtenirValeurChamp("adresse_02"));
249
			paramAdresseTpl.set("boitePostale", (String) personne
250
					.obtenirValeurChamp("bp"));
251
			paramAdresseTpl.set("codePostal", (String) personne
252
					.obtenirValeurChamp("code_postal"));
253
			paramAdresseTpl.set("ville", (String) personne
254
					.obtenirValeurChamp("ville"));
255
			paramAdresseTpl.set("region", (String) personne
256
					.obtenirValeurChamp("region"));
257
			paramAdresseTpl.set("pays", (String) personne
258
					.obtenirValeurChamp("pays"));
259
 
472 gduche 260
			afficherOnglet(tabAdresseTpl, paramAdresseTpl, tabAdresse);
261
			tabAdresse.setStyleAttribute("padding", "15px");
215 aurelien 262
 
472 gduche 263
			// Infos naturalistes :Biographie, Spécialité (typé)
820 gduche 264
			String tplInfosNat = "<div class='{css_corps}'>"
265
					+ "	<div class='{css_fieldset}'>" + "		<h2>"
266
					+ mediateur.i18nC.personneSpecialite() + "</h1>"
267
					+ "			{specialites}" + "		<h2>"
268
					+ mediateur.i18nC.personneRecolte() + "</h2>"
269
					+ "		{recoltes}" + "  </div>" + "</div>";
527 gduche 270
			Params prmInfosNat = new Params();
820 gduche 271
 
272
			// TODO : replace id region par valeur
273
 
797 gduche 274
			String specialite = construireTxtTruck(personne.getSpecialite());
275
			prmInfosNat.set("specialites", specialite);
820 gduche 276
 
277
			String recolte = construireTxtListeOntologie(personne.getString("truk_recolte"));
797 gduche 278
			prmInfosNat.set("recoltes", recolte);
820 gduche 279
 
797 gduche 280
			afficherOnglet(tplInfosNat, prmInfosNat, tabInfosNat);
281
			tabAdresse.setStyleAttribute("padding", "15px");
820 gduche 282
 
305 gduche 283
			changerLabelRegions();
150 gduche 284
			layout();
820 gduche 285
		}
197 gduche 286
	}
820 gduche 287
 
288
	public String initialiserTplEntete() {
289
 
290
		return "<div id='{css_id}'>" + "<h1>{nom}</h1>"
291
				+ "<h2><a href='{mail}'>{mail}</a></h2>" + "</div>";
472 gduche 292
	}
820 gduche 293
 
527 gduche 294
	public String initialiserTplIdentite() {
820 gduche 295
 
296
		return "<div class='{css_corps}'>" + "	<div class='{css_fieldset}'>"
297
				+ "	 <h2>Noms:</h2>" + "	 <span><b>"
298
				+ mediateur.i18nC.personneNomComplet()
299
				+ ":</b></span> {nom_complet}<br />"
300
				+ "	 <span><b>"
301
				+ mediateur.i18nC.personneNomAutre()
302
				+ ":</b></span> {nom_autre}<br />"
303
				+ "	 <span><b>"
304
				+ mediateur.i18nC.personneAbreviation()
305
				+ ":</b></span> {abreviation}<br />"
306
				+ " 	 <span><b>"
307
				+ mediateur.i18nC.personneAbreviationAutre()
308
				+ ":</b></b></span> {abreviation_autre}<br /><br />"
309
				+ "	 <h2>Naissance:</h2>"
310
				+ " 	 <span><b>"
311
				+ mediateur.i18nC.personneDateNaissance()
312
				+ "</b></span> {naissance_date}<br />"
313
				+ " 	 <span><b>"
314
				+ mediateur.i18nC.personneLieuNaissance()
315
				+ ":</b></span> {naissance_lieu}<br /><br />"
316
				+ "	<h2>Décès:</h2>"
317
				+ " 	 <span><b>"
318
				+ mediateur.i18nC.personneDateDeces()
319
				+ ":</b></span> {deces_date}<br />"
320
				+ " 	 <span><b>"
321
				+ mediateur.i18nC.personneLieuDeces()
322
				+ ":</b></span> {deces_lieu}<br /><br />"
323
				+ " 	</div>"
324
				+ "</div>"
325
				+ "<div class='{css_corps}'>"
326
				+ "	<div class='css_fieldset'> "
327
				+ "	<h2>Description:</h2>"
328
				+ " 		{description}<br />" + "	</div>" + "<br />";
527 gduche 329
	}
820 gduche 330
 
331
	private void changerLabelRegions() {
332
 
321 gduche 333
		Collection<String> colClesComposants = hmLabelFieldRegion.keySet();
305 gduche 334
		Iterator<String> itComposants = colClesComposants.iterator();
820 gduche 335
 
336
		while (itComposants.hasNext()) {
305 gduche 337
			String region = itComposants.next();
338
			mediateur.obtenirValeurEtRafraichir(this, "region", region);
339
		}
340
	}
197 gduche 341
 
820 gduche 342
	private void ajouterLabelField(FieldSet fs, String tfLabel, Object tfValue) {
343
 
344
		if ((tfValue != null) && (!tfValue.toString().trim().equals(""))) {
345
 
246 gduche 346
			LabelField tf = new LabelField();
820 gduche 347
 
246 gduche 348
			tf.setFieldLabel(tfLabel + ":");
820 gduche 349
			if ((tfLabel == null) || ("".equals(tfLabel))) {
197 gduche 350
				tf.setHideLabel(true);
351
				tf.setStyleAttribute("margin", "0 0 0 105px");
352
			}
353
			tf.setValue(tfValue);
820 gduche 354
 
355
			// Ajout au fieldSet
200 gduche 356
			fs.add(tf);
357
		}
358
	}
820 gduche 359
 
360
	private Configuration config = (Configuration) Registry
361
			.get(RegistreId.CONFIG);
362
 
363
	private boolean ontologieRecue = false;
364
	private Personne personneAAfficher = null;
200 gduche 365
 
305 gduche 366
	public void rafraichir(Object nouvellesDonnees) {
820 gduche 367
 
227 aurelien 368
		// Si on a reçu une personne on en affiche les détails
305 gduche 369
		if (nouvellesDonnees instanceof Personne) {
820 gduche 370
			if (ontologieRecue)	{
371
				afficherDetailPersonne((Personne) nouvellesDonnees);
372
			} else	{
373
				personneAAfficher = (Personne) nouvellesDonnees;
374
			}
375
		} else if (nouvellesDonnees instanceof ValeurListe) {
376
			ValeurListe ontologieReceptionnee = (ValeurListe) nouvellesDonnees;
377
			ajouterListeValeursAOntologie(ontologieReceptionnee);
305 gduche 378
 
820 gduche 379
			if (personneAAfficher != null)	{
380
				afficherDetailPersonne(personneAAfficher);
381
			}
382
			ontologieRecue = true;
383
 
384
			// Remplacer ci-dessous par Ontologie
305 gduche 385
			ValeurListe listeValeur = (ValeurListe) nouvellesDonnees;
820 gduche 386
			if (listeValeur.getId().equals(config.getListeId("region"))) {
387
 
305 gduche 388
				Collection colCleListeValeur = listeValeur.keySet();
389
				Iterator<String> itLv = colCleListeValeur.iterator();
820 gduche 390
				while (itLv.hasNext()) {
305 gduche 391
					String idRegion = itLv.next();
392
					Valeur region = listeValeur.get(idRegion);
820 gduche 393
 
394
					if (region != null) {
395
 
305 gduche 396
						String strRegionId = region.getAbreviation();
820 gduche 397
 
321 gduche 398
						LinkedList<LabelField> listComposantsRegion = (LinkedList) hmLabelFieldRegion.get(strRegionId);
820 gduche 399
						for (int i = 0; i < listComposantsRegion.size(); i++) {
305 gduche 400
							LabelField lfRegion = listComposantsRegion.get(i);
820 gduche 401
							lfRegion.setFieldLabel(region.getNom());
305 gduche 402
						}
820 gduche 403
 
305 gduche 404
					}
405
				}
406
			}
407
		}
150 gduche 408
	}
409
 
197 gduche 410
}