Subversion Repositories eFlore/Applications.coel

Rev

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