Subversion Repositories eFlore/Applications.coel

Rev

Rev 253 | Rev 260 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
150 gduche 1
package org.tela_botanica.client.vues;
2
 
189 gduche 3
 
4
 
253 gduche 5
 
6
 
7
import java.util.Collection;
197 gduche 8
import java.util.HashMap;
9
import java.util.Iterator;
253 gduche 10
import java.util.LinkedList;
11
import java.util.MissingResourceException;
189 gduche 12
 
197 gduche 13
 
150 gduche 14
import org.tela_botanica.client.RegistreId;
253 gduche 15
import org.tela_botanica.client.i18n.Constantes;
150 gduche 16
import org.tela_botanica.client.interfaces.Rafraichissable;
17
import org.tela_botanica.client.modeles.Personne;
259 gduche 18
import org.tela_botanica.client.util.UtilTruk;
150 gduche 19
 
20
import com.extjs.gxt.ui.client.Registry;
259 gduche 21
 
22
 
150 gduche 23
import com.extjs.gxt.ui.client.Style.Scroll;
253 gduche 24
import com.extjs.gxt.ui.client.Style.VerticalAlignment;
259 gduche 25
 
215 aurelien 26
import com.extjs.gxt.ui.client.widget.ContentPanel;
189 gduche 27
import com.extjs.gxt.ui.client.widget.TabItem;
28
import com.extjs.gxt.ui.client.widget.TabPanel;
197 gduche 29
import com.extjs.gxt.ui.client.widget.form.FieldSet;
246 gduche 30
import com.extjs.gxt.ui.client.widget.form.LabelField;
150 gduche 31
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
197 gduche 32
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
33
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
253 gduche 34
import com.extjs.gxt.ui.client.widget.layout.TableData;
197 gduche 35
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
253 gduche 36
import com.google.gwt.core.client.GWT;
197 gduche 37
import com.google.gwt.user.client.ui.Image;
150 gduche 38
 
189 gduche 39
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable {
150 gduche 40
 
197 gduche 41
	// Le panneau détail se compose de formulaires tabulés
189 gduche 42
 
197 gduche 43
	// Onglet 1 : identite & contact
215 aurelien 44
	private TabItem tabIdentite;
45
 
46
	private ContentPanel panneauIdentite;
47
	private ContentPanel panneauImage;
48
 
197 gduche 49
	private FieldSet fsIdentite;
50
	private FieldSet fsContact;
189 gduche 51
 
200 gduche 52
	// Onglet 2 : Adresses
53
	private TabItem tabAdresse;
54
	private FieldSet fsAdressePerso;
198 gduche 55
		// contient : adresse perso / adresse pro
56
 
215 aurelien 57
	// Onglet 3 : Informations naturalistes
58
	private TabItem tabInfosNat;
198 gduche 59
 
150 gduche 60
	public PersonneDetailPanneauVue() {
189 gduche 61
 
198 gduche 62
		//Constructeur de la classe
150 gduche 63
		Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
189 gduche 64
		setLayout(new FitLayout());
150 gduche 65
 
215 aurelien 66
		tabIdentite = new TabItem("Identité");
67
		TableLayout tLayout = new TableLayout(2);
68
		tabIdentite.setLayout(tLayout);
69
		tabIdentite.setScrollMode(Scroll.AUTO);
189 gduche 70
 
215 aurelien 71
		panneauIdentite = new ContentPanel();
72
		panneauIdentite.setWidth("400px");
73
		panneauIdentite.setHeaderVisible(false);
74
		panneauIdentite.setBorders(false);
75
		panneauIdentite.setBodyBorder(false);
76
		panneauImage = new ContentPanel();
253 gduche 77
		panneauImage.setLayout(new FlowLayout());
215 aurelien 78
		panneauImage.setBorders(false);
253 gduche 79
		panneauImage.setWidth(350);
215 aurelien 80
		panneauImage.setBodyBorder(false);
81
		panneauImage.setHeaderVisible(false);
200 gduche 82
 
259 gduche 83
		//Gérer l'alignement vertical en haut
253 gduche 84
		TableData td = new TableData();
259 gduche 85
		td.setVerticalAlign(VerticalAlignment.TOP);
86
 
87
		tabIdentite.add(panneauIdentite, td);
253 gduche 88
		tabIdentite.add(panneauImage, td);
259 gduche 89
 
253 gduche 90
 
197 gduche 91
		fsIdentite = new FieldSet();
92
		fsIdentite.setLayout(new FormLayout());
93
 
94
 
95
		fsContact = new FieldSet();
96
		fsContact.setLayout(new FormLayout());
97
 
215 aurelien 98
		this.add(tabIdentite);
197 gduche 99
 
200 gduche 100
		//Onglet Adresse:
259 gduche 101
		tabAdresse = new TabItem("Adresses");
200 gduche 102
		fsAdressePerso = new FieldSet();
103
		fsAdressePerso.setLayout(new FormLayout());
104
 
215 aurelien 105
		this.add(tabAdresse);
200 gduche 106
 
215 aurelien 107
		//Onglet info naturalistes
108
		tabInfosNat = new TabItem("Informations naturalistes");
200 gduche 109
 
215 aurelien 110
		this.add(tabInfosNat);
198 gduche 111
 
150 gduche 112
	}
113
 
114
	public void afficherDetailPersonne(Personne personne) {
115
		if (personne != null) {
198 gduche 116
 
117
 
118
			//MAJ Identité : Configurer les fieldSet
215 aurelien 119
			panneauIdentite.removeAll();
120
			panneauImage.removeAll();
150 gduche 121
 
197 gduche 122
			fsIdentite.setHeading("Identité");
259 gduche 123
			//fsIdentite.setWidth("350px");
183 gduche 124
 
197 gduche 125
			fsContact.setHeading("Contact");
259 gduche 126
			//fsContact.setWidth("350px");
183 gduche 127
 
215 aurelien 128
			panneauIdentite.add(fsIdentite);
129
 
259 gduche 130
 
253 gduche 131
			//La personne peut avoir un ou plusieurs logo
132
			panneauImage.setHeight("100%");
259 gduche 133
			panneauImage.setPosition(0, 6);
134
			panneauImage.setBorders(false);
198 gduche 135
 
253 gduche 136
			LinkedList<String> listeLogos = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_logo");
137
			if ((listeLogos != null)&&(listeLogos.size() > 0))	{
259 gduche 138
				panneauImage.setBorders(true);
253 gduche 139
				for (int i = 0; i < listeLogos.size(); i++)	{
140
					String logoUrl = listeLogos.get(i);
141
					if ((logoUrl!=null)&&(!logoUrl.trim().equals("")))	{
142
						//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité
143
						Image img = new Image();
144
						img.setUrl(logoUrl);
145
 
146
						panneauImage.add(img);
147
						if (panneauImage.getWidth() < (img.getWidth() + 15))	{
148
							panneauImage.setWidth(img.getWidth() + 15);
149
						}
150
 
151
					}
152
				}
246 gduche 153
 
189 gduche 154
			}
150 gduche 155
 
215 aurelien 156
			panneauIdentite.add(fsContact);
183 gduche 157
 
197 gduche 158
			fsIdentite.removeAll();
159
			fsContact.removeAll();
215 aurelien 160
			fsAdressePerso.removeAll();
197 gduche 161
			//Ajout des champs Identité
162
 
163
 
164
 
165
			// TODO: projet
166
 
167
			// nom complet
168
			Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");
253 gduche 169
			ajouterTextFieldNonEditable(fsIdentite,"Nom Complet", nomComplet);
197 gduche 170
 
259 gduche 171
			// Nom autre : champ truk; non-typé
172
			LinkedList<String> nomsAutre = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_nom_autre");
173
			if ((nomsAutre != null)&&(nomsAutre.size() > 0))	{
174
 
175
				LabelField noms = new LabelField();
176
				noms.setFieldLabel("Autres noms:");
177
				String listeNoms = UtilTruk.traiterTrukListe(nomsAutre, ", ");
178
				noms.setValue(listeNoms);
179
				fsIdentite.add(noms);
180
			}
197 gduche 181
 
182
			// abreviation
183
			Object abreviation = personne.obtenirValeurChamp("abreviation");
184
			ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation);
185
 
259 gduche 186
			// Abréviations, autre : non-typé
187
			LinkedList<String> abrevAutres = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_abreviation_autre");
188
			if ((abrevAutres != null)&&(abrevAutres.size() > 0))	{
189
 
190
				LabelField abreviations = new LabelField();
191
				abreviations.setFieldLabel("Autres abreviations:");
192
				String listeAbrev = UtilTruk.traiterTrukListe(abrevAutres, ", ");
193
				abreviations.setValue(listeAbrev);
194
				fsIdentite.add(abreviations);
195
			}
196
			fsIdentite.addText("<hr>");
197 gduche 197
 
259 gduche 198
			// date naissance
199
			// TODO : Mettre la date en format FR 10/12/09
200
			Object dateNaissance = personne.obtenirValeurChamp("naissance_date");
201
			ajouterTextFieldNonEditable(fsIdentite, "Né le", dateNaissance);
202
 
197 gduche 203
			// lieu naissance
259 gduche 204
			Object lieuNaissance = personne.obtenirValeurChamp("naissance_lieu");
205
			ajouterTextFieldNonEditable(fsIdentite, "A", lieuNaissance);
197 gduche 206
 
207
			// date deces
259 gduche 208
			Object dateDeces = personne.obtenirValeurChamp("deces_date");
209
			ajouterTextFieldNonEditable(fsIdentite, "Date décès", dateDeces);
197 gduche 210
 
211
			// lieu deces
259 gduche 212
			Object lieuDeces = personne.obtenirValeurChamp("deces_lieu");
197 gduche 213
			ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces);
214
 
259 gduche 215
			fsIdentite.addText("<hr>");
216
 
200 gduche 217
			//Description
218
			String description = (String) personne.obtenirValeurChamp("description");
219
			if ((description!=null)&&(!description.trim().equals("")))	{
253 gduche 220
				LabelField txtDescription = new LabelField();
221
				txtDescription.setFieldLabel("Description:");
200 gduche 222
				txtDescription.setValue(description);
223
 
253 gduche 224
				//rendreNonEditable(txtDescription);
200 gduche 225
 
226
				fsIdentite.add(txtDescription);
227
			}
197 gduche 228
 
229
 
253 gduche 230
			// CONTACT
231
			// Téléphones
232
			// > Plusieurs téléphones possible, typés
233
			Constantes constantesI18n = (Constantes) GWT.create(Constantes.class);
197 gduche 234
 
253 gduche 235
			HashMap<String, String> mapTelephones = (HashMap<String, String>) personne.getChaineDenormaliseAsMapOrList("truk_telephone");
236
			if ((mapTelephones != null)&&(mapTelephones.size() > 0))	{
237
 
238
				Collection<String> telephoneKeys = mapTelephones.keySet();
239
				Iterator<String> itTelephones = telephoneKeys.iterator();
240
 
241
				while (itTelephones.hasNext())	{
242
					String key = itTelephones.next();
243
					LabelField telephoneLabel = new LabelField();
244
					String label = "";
245
					try {
246
						label = constantesI18n.getString(key);
247
					}
248
					catch (MissingResourceException e)	{
249
						label = key;
250
					}
251
 
252
					telephoneLabel.setFieldLabel( label + ":");
253
 
254
					telephoneLabel.setValue(mapTelephones.get(key));
255
 
256
					fsContact.add(telephoneLabel);
257
				}
215 aurelien 258
			}
197 gduche 259
 
253 gduche 260
			// Fax
261
			// > Plusieurs fax possible, typés
262
 
263
			HashMap<String, String> mapFax = (HashMap<String, String>) personne.getChaineDenormaliseAsMapOrList("truk_fax");
264
			if ((mapFax != null)&&(mapFax.size() > 0))	{
265
 
266
				Collection<String> faxKeys = mapFax.keySet();
267
				Iterator<String> itFax = faxKeys.iterator();
268
 
269
				while (itFax.hasNext())	{
270
					String key = itFax.next();
271
					LabelField faxLabel = new LabelField();
272
					String label = "";
273
					try {
274
						label = constantesI18n.getString(key);
275
					}
276
					catch (MissingResourceException e)	{
277
						label = key;
278
					}
279
 
280
					faxLabel.setFieldLabel( label + ":");
281
 
282
					faxLabel.setValue(mapTelephones.get(key));
283
 
284
					fsContact.add(faxLabel);
285
				}
286
			}
287
 
288
			// Courriel
289
			// Courriel est un champ truk de la forme "Adresse@adr.com;; adr2@adr.fr ..."
290
 
291
			LinkedList<String> listeCourriel = (LinkedList<String>) personne.getChaineDenormaliseAsMapOrList("truk_courriel");
292
			if ((listeCourriel!=null)&&(listeCourriel.size() > 0))	{
293
				String strLabelCourriel = "Courriel";
294
				if (listeCourriel.size() > 1)	{
295
					strLabelCourriel += "s";
296
				}
297
 
298
				LabelField labelCourriel = new LabelField();
299
				labelCourriel.setFieldLabel(strLabelCourriel);
300
 
301
				String valeurCourriel = "";
302
				Iterator<String> itCourriel = listeCourriel.iterator();
303
				while (itCourriel.hasNext())	{
304
					String valeurCourante = itCourriel.next();
305
					valeurCourriel += "<a href=\"mailto:" + valeurCourante + "\">" + valeurCourante + "</a><br />";
306
 
307
				}
308
 
309
				labelCourriel.setValue(valeurCourriel);
310
				fsContact.add(labelCourriel);
311
			}
312
 
313
 
215 aurelien 314
			panneauIdentite.add(fsContact);
197 gduche 315
 
198 gduche 316
 
215 aurelien 317
			fsAdressePerso.setHeading("Adresse personnelle");
318
 
198 gduche 319
			/*
320
			 * Adresses :
215 aurelien 321
			 * */
197 gduche 322
			String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
215 aurelien 323
			ajouterTextFieldNonEditable(fsAdressePerso, "Adresse", adresse01);
197 gduche 324
 
325
 
326
			String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
215 aurelien 327
			ajouterTextFieldNonEditable(fsAdressePerso, "", adresse02);
197 gduche 328
 
329
			String boitePostale = (String) personne.obtenirValeurChamp("bp");
215 aurelien 330
			ajouterTextFieldNonEditable(fsAdressePerso, "Boite Postale", boitePostale);
197 gduche 331
 
332
			String codePostal = (String) personne.obtenirValeurChamp("code_postal");
215 aurelien 333
			ajouterTextFieldNonEditable(fsAdressePerso, "Code postal", codePostal);
197 gduche 334
 
335
			String ville = (String) personne.obtenirValeurChamp("ville");
215 aurelien 336
			ajouterTextFieldNonEditable(fsAdressePerso, "Ville", ville);
197 gduche 337
 
338
			String region = (String) personne.obtenirValeurChamp("region");
215 aurelien 339
			ajouterTextFieldNonEditable(fsAdressePerso, "Région", region);
197 gduche 340
 
341
			String pays = (String) personne.obtenirValeurChamp("pays");
215 aurelien 342
			ajouterTextFieldNonEditable(fsAdressePerso, "Pays", pays);
197 gduche 343
 
215 aurelien 344
			fsAdressePerso.addText("<br >");
345
			fsAdressePerso.setWidth("350px");
197 gduche 346
 
215 aurelien 347
			tabAdresse.add(fsAdressePerso);
348
			tabAdresse.setScrollMode(Scroll.AUTO);
246 gduche 349
 
215 aurelien 350
 
150 gduche 351
			layout();
197 gduche 352
		}
353
	}
354
 
200 gduche 355
	private void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue)	{
197 gduche 356
 
357
		if ((tfValue!=null)&&(!tfValue.toString().trim().equals("")))	{
189 gduche 358
 
246 gduche 359
 
360
			LabelField tf = new LabelField();
197 gduche 361
 
246 gduche 362
			tf.setFieldLabel(tfLabel + ":");
197 gduche 363
			if ((tfLabel==null)||("".equals(tfLabel)))	{
364
				tf.setHideLabel(true);
365
				tf.setStyleAttribute("margin", "0 0 0 105px");
366
			}
367
			tf.setValue(tfValue);
368
 
369
			// Non éditable : on empêche l'évènement par défaut
247 gduche 370
			// > MAJ 27/07 : inutile avec LabelField
371
			//rendreNonEditable(tf);
246 gduche 372
 
200 gduche 373
			//Ajout au fieldSet
374
			fs.add(tf);
375
		}
376
	}
377
 
253 gduche 378
	/*
379
	 * private void rendreNonEditable(Field field)	{
197 gduche 380
 
200 gduche 381
		field.addKeyListener(new KeyListener()	{
197 gduche 382
			public void componentKeyPress(ComponentEvent ev)	{
383
				ev.stopEvent();
384
			}
385
			});
200 gduche 386
	}
253 gduche 387
	*/
197 gduche 388
 
389
 
183 gduche 390
	public void rafraichir(Object nouvelleDonnees) {
227 aurelien 391
 
392
		// Si on a reçu une personne on en affiche les détails
183 gduche 393
		if (nouvelleDonnees instanceof Personne) {
394
			afficherDetailPersonne((Personne) nouvelleDonnees);
227 aurelien 395
		}
150 gduche 396
	}
397
 
197 gduche 398
}