Subversion Repositories eFlore/Applications.coel

Rev

Rev 198 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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