Subversion Repositories eFlore/Applications.coel

Rev

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