Subversion Repositories eFlore/Applications.coel

Rev

Rev 200 | Rev 217 | 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
 
197 gduche 5
import java.util.HashMap;
6
import java.util.Iterator;
189 gduche 7
 
197 gduche 8
 
150 gduche 9
import org.tela_botanica.client.RegistreId;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.Personne;
12
import org.tela_botanica.client.modeles.StructureListe;
13
 
14
import com.extjs.gxt.ui.client.Registry;
15
import com.extjs.gxt.ui.client.Style.Scroll;
197 gduche 16
import com.extjs.gxt.ui.client.event.ComponentEvent;
17
import com.extjs.gxt.ui.client.event.KeyListener;
150 gduche 18
import com.extjs.gxt.ui.client.util.Params;
215 aurelien 19
import com.extjs.gxt.ui.client.widget.ContentPanel;
150 gduche 20
import com.extjs.gxt.ui.client.widget.Html;
197 gduche 21
import com.extjs.gxt.ui.client.widget.LayoutContainer;
189 gduche 22
import com.extjs.gxt.ui.client.widget.TabItem;
23
import com.extjs.gxt.ui.client.widget.TabPanel;
200 gduche 24
import com.extjs.gxt.ui.client.widget.form.Field;
197 gduche 25
import com.extjs.gxt.ui.client.widget.form.FieldSet;
200 gduche 26
import com.extjs.gxt.ui.client.widget.form.TextArea;
197 gduche 27
import com.extjs.gxt.ui.client.widget.form.TextField;
215 aurelien 28
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
150 gduche 29
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
197 gduche 30
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
31
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
32
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
33
import com.google.gwt.dom.client.LinkElement;
34
import com.google.gwt.dom.client.NodeList;
35
import com.google.gwt.user.client.Window;
189 gduche 36
import com.google.gwt.user.client.ui.Hyperlink;
197 gduche 37
import com.google.gwt.user.client.ui.Image;
189 gduche 38
import com.google.gwt.user.client.ui.Label;
215 aurelien 39
import com.google.gwt.user.client.ui.Panel;
40
import com.google.gwt.user.client.ui.SimplePanel;
200 gduche 41
import com.google.gwt.user.client.ui.TextBox;
189 gduche 42
import com.google.gwt.user.client.ui.Widget;
43
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
150 gduche 44
 
189 gduche 45
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable {
150 gduche 46
 
197 gduche 47
	// Le panneau détail se compose de formulaires tabulés
189 gduche 48
 
197 gduche 49
	// Onglet 1 : identite & contact
215 aurelien 50
	private TabItem tabIdentite;
51
 
52
	private ContentPanel panneauIdentite;
53
	private ContentPanel panneauImage;
54
 
197 gduche 55
	private FieldSet fsIdentite;
56
	private FieldSet fsContact;
189 gduche 57
 
200 gduche 58
	// Onglet 2 : Adresses
59
	private TabItem tabAdresse;
60
	private FieldSet fsAdressePerso;
198 gduche 61
		// contient : adresse perso / adresse pro
62
 
215 aurelien 63
	// Onglet 3 : Informations naturalistes
64
	private TabItem tabInfosNat;
198 gduche 65
 
66
	// > Se baser sur la présentation thunderBird
67
 
68
 
150 gduche 69
	public PersonneDetailPanneauVue() {
189 gduche 70
 
198 gduche 71
		//Constructeur de la classe
150 gduche 72
		Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
189 gduche 73
		setLayout(new FitLayout());
150 gduche 74
 
215 aurelien 75
		tabIdentite = new TabItem("Identité");
76
		TableLayout tLayout = new TableLayout(2);
77
		tabIdentite.setLayout(tLayout);
78
		tabIdentite.setScrollMode(Scroll.AUTO);
189 gduche 79
 
215 aurelien 80
		panneauIdentite = new ContentPanel();
81
		panneauIdentite.setWidth("400px");
82
		panneauIdentite.setHeaderVisible(false);
83
		panneauIdentite.setBorders(false);
84
		panneauIdentite.setBodyBorder(false);
85
		panneauImage = new ContentPanel();
86
		panneauImage.setWidth("350px");
87
		panneauImage.setBorders(false);
88
		panneauImage.setBodyBorder(false);
89
		panneauImage.setHeaderVisible(false);
90
		panneauImage.setStyleName("conteneur-image-centre");
200 gduche 91
 
215 aurelien 92
		tabIdentite.add(panneauIdentite);
93
		tabIdentite.add(panneauImage);
94
 
197 gduche 95
		fsIdentite = new FieldSet();
96
		fsIdentite.setLayout(new FormLayout());
97
 
98
 
99
		fsContact = new FieldSet();
100
		fsContact.setLayout(new FormLayout());
101
 
215 aurelien 102
		this.add(tabIdentite);
197 gduche 103
 
200 gduche 104
		//Onglet Adresse:
215 aurelien 105
		tabAdresse = new TabItem("Adresse");
200 gduche 106
		fsAdressePerso = new FieldSet();
107
		fsAdressePerso.setLayout(new FormLayout());
108
 
215 aurelien 109
		this.add(tabAdresse);
200 gduche 110
 
215 aurelien 111
		//Onglet info naturalistes
112
		tabInfosNat = new TabItem("Informations naturalistes");
200 gduche 113
 
215 aurelien 114
		this.add(tabInfosNat);
198 gduche 115
 
150 gduche 116
	}
117
 
118
	public void afficherDetailPersonne(Personne personne) {
119
		if (personne != null) {
198 gduche 120
 
121
 
122
			//MAJ Identité : Configurer les fieldSet
215 aurelien 123
			panneauIdentite.removeAll();
124
			panneauImage.removeAll();
150 gduche 125
 
197 gduche 126
			fsIdentite.setHeading("Identité");
127
			fsIdentite.setWidth("350px");
183 gduche 128
 
197 gduche 129
			fsContact.setHeading("Contact");
130
			fsContact.setWidth("350px");
183 gduche 131
 
197 gduche 132
 
215 aurelien 133
			panneauIdentite.add(fsIdentite);
134
 
198 gduche 135
			//La personne peut avoir un logo
197 gduche 136
			String logoUrl = (String) personne.obtenirValeurChamp("truk_logo");
198 gduche 137
 
197 gduche 138
			if ((logoUrl!=null)&&(!logoUrl.trim().equals("")))	{
198 gduche 139
				//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité
197 gduche 140
				Image img = new Image();
141
				img.setUrl(logoUrl);
200 gduche 142
				img.setStyleName("logo-personne");
215 aurelien 143
 
144
				panneauImage.add(img);
189 gduche 145
			}
150 gduche 146
 
215 aurelien 147
			panneauIdentite.add(fsContact);
183 gduche 148
 
197 gduche 149
			fsIdentite.removeAll();
150
			fsContact.removeAll();
215 aurelien 151
			fsAdressePerso.removeAll();
197 gduche 152
			//Ajout des champs Identité
153
 
154
 
155
 
156
			// TODO: projet
157
 
158
			// nom complet
159
			Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");
160
			ajouterTextFieldNonEditable(fsIdentite,"Nom", nomComplet);
161
 
162
 
163
			// TODO : nom autre
164
 
165
			// abreviation
166
			Object abreviation = personne.obtenirValeurChamp("abreviation");
167
			ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation);
168
 
169
			// date naissance
170
			Object dateNaissance = personne.obtenirValeurChamp("date_naissance");
171
			ajouterTextFieldNonEditable(fsIdentite, "Date de naissance", dateNaissance);
172
 
173
			// lieu naissance
174
			Object lieuNaissance = personne.obtenirValeurChamp("lieu_naissance");
175
			ajouterTextFieldNonEditable(fsIdentite, "Lieu de naissance", lieuNaissance);
176
 
177
			// date deces
178
			Object dateDeces = personne.obtenirValeurChamp("date_deces");
179
			ajouterTextFieldNonEditable(fsIdentite, "Date de décès", dateDeces);
180
 
181
			// lieu deces
182
			Object lieuDeces = personne.obtenirValeurChamp("lieu_deces");
183
			ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces);
184
 
200 gduche 185
			//Description
186
			String description = (String) personne.obtenirValeurChamp("description");
187
			if ((description!=null)&&(!description.trim().equals("")))	{
188
				TextArea txtDescription = new TextArea();
189
				txtDescription.setFieldLabel("Description");
190
				txtDescription.setValue(description);
191
 
192
				rendreNonEditable(txtDescription);
193
 
194
				fsIdentite.add(txtDescription);
195
			}
197 gduche 196
 
197
 
198
			//CONTACT
199
 
215 aurelien 200
			// Courriel est un champ TRUK
198 gduche 201
			// on doit afficher N entrées
215 aurelien 202
			// Voir si le | (pipe) est bien le bon séparateur
203
			String courriels =  (String) personne.obtenirValeurChamp("truk_courriel");
204
			String[] tabCourriel = courriels.split("\\|");
205
			Html intituleHTML = new Html("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b>");
206
			fsContact.add(intituleHTML);
207
 
208
			for(int i = 0 ; i < tabCourriel.length ; i++) {
209
				String courriel = tabCourriel[i];
210
				Hyperlink lnkCourriel = new Hyperlink();
211
				lnkCourriel.setHTML("<a href=\"mailto:" + courriel + "\">" + courriel + "</a>");
212
				fsContact.add(lnkCourriel);
213
			}
197 gduche 214
 
215 aurelien 215
			panneauIdentite.add(fsContact);
197 gduche 216
 
198 gduche 217
 
215 aurelien 218
			fsAdressePerso.setHeading("Adresse personnelle");
219
 
198 gduche 220
			/*
221
			 * Adresses :
215 aurelien 222
			 * */
197 gduche 223
			String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
215 aurelien 224
			ajouterTextFieldNonEditable(fsAdressePerso, "Adresse", adresse01);
197 gduche 225
 
226
 
227
			String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
215 aurelien 228
			ajouterTextFieldNonEditable(fsAdressePerso, "", adresse02);
197 gduche 229
 
230
			String boitePostale = (String) personne.obtenirValeurChamp("bp");
215 aurelien 231
			ajouterTextFieldNonEditable(fsAdressePerso, "Boite Postale", boitePostale);
197 gduche 232
 
233
			String codePostal = (String) personne.obtenirValeurChamp("code_postal");
215 aurelien 234
			ajouterTextFieldNonEditable(fsAdressePerso, "Code postal", codePostal);
197 gduche 235
 
236
			String ville = (String) personne.obtenirValeurChamp("ville");
215 aurelien 237
			ajouterTextFieldNonEditable(fsAdressePerso, "Ville", ville);
197 gduche 238
 
239
			String region = (String) personne.obtenirValeurChamp("region");
215 aurelien 240
			ajouterTextFieldNonEditable(fsAdressePerso, "Région", region);
197 gduche 241
 
242
			String pays = (String) personne.obtenirValeurChamp("pays");
215 aurelien 243
			ajouterTextFieldNonEditable(fsAdressePerso, "Pays", pays);
197 gduche 244
 
215 aurelien 245
			fsAdressePerso.addText("<br >");
246
			fsAdressePerso.setWidth("350px");
197 gduche 247
 
215 aurelien 248
			tabAdresse.add(fsAdressePerso);
249
			tabAdresse.setScrollMode(Scroll.AUTO);
250
			/*
251
			*/
252
 
150 gduche 253
			layout();
197 gduche 254
		}
255
	}
256
 
200 gduche 257
	private void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue)	{
197 gduche 258
 
259
		if ((tfValue!=null)&&(!tfValue.toString().trim().equals("")))	{
189 gduche 260
 
197 gduche 261
			TextField tf = new TextField();
262
 
263
			tf.setFieldLabel(tfLabel);
264
			if ((tfLabel==null)||("".equals(tfLabel)))	{
265
				tf.setHideLabel(true);
266
				tf.setStyleAttribute("margin", "0 0 0 105px");
267
			}
268
			tf.setValue(tfValue);
269
 
270
			// Non éditable : on empêche l'évènement par défaut
200 gduche 271
			rendreNonEditable(tf);
272
 
273
			//Ajout au fieldSet
274
			fs.add(tf);
275
		}
276
	}
277
 
278
	private void rendreNonEditable(Field field)	{
197 gduche 279
 
200 gduche 280
		field.addKeyListener(new KeyListener()	{
197 gduche 281
			public void componentKeyPress(ComponentEvent ev)	{
282
				ev.stopEvent();
283
			}
284
			});
200 gduche 285
	}
197 gduche 286
 
287
 
183 gduche 288
	public void rafraichir(Object nouvelleDonnees) {
289
		if (nouvelleDonnees instanceof Personne) {
290
			afficherDetailPersonne((Personne) nouvelleDonnees);
150 gduche 291
		} else if (nouvelleDonnees instanceof StructureListe) {
292
			StructureListe listeInstitutions = (StructureListe) nouvelleDonnees;
293
			// Test pour savoir si la liste contient des éléments
294
			if (listeInstitutions.size() == 0) {
183 gduche 295
				afficherDetailPersonne(null);
150 gduche 296
			}
183 gduche 297
		}
150 gduche 298
	}
299
 
197 gduche 300
}