Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 853 Rev 857
1
package org.tela_botanica.client.composants;
1
package org.tela_botanica.client.composants;
2
 
2
 
3
import java.util.HashMap;
3
import java.util.HashMap;
4
 
4
 
5
import org.tela_botanica.client.Mediateur;
5
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.images.Images;
6
import org.tela_botanica.client.images.Images;
7
import org.tela_botanica.client.modeles.Valeur;
7
import org.tela_botanica.client.modeles.Valeur;
8
 
8
 
9
import com.extjs.gxt.ui.client.event.ButtonEvent;
9
import com.extjs.gxt.ui.client.event.ButtonEvent;
10
import com.extjs.gxt.ui.client.event.SelectionListener;
10
import com.extjs.gxt.ui.client.event.SelectionListener;
11
import com.extjs.gxt.ui.client.store.ListStore;
11
import com.extjs.gxt.ui.client.store.ListStore;
-
 
12
import com.extjs.gxt.ui.client.widget.Component;
12
import com.extjs.gxt.ui.client.widget.LayoutContainer;
13
import com.extjs.gxt.ui.client.widget.LayoutContainer;
13
import com.extjs.gxt.ui.client.widget.MessageBox;
14
import com.extjs.gxt.ui.client.widget.MessageBox;
14
import com.extjs.gxt.ui.client.widget.Text;
15
import com.extjs.gxt.ui.client.widget.Text;
15
import com.extjs.gxt.ui.client.widget.button.Button;
16
import com.extjs.gxt.ui.client.widget.button.Button;
16
import com.extjs.gxt.ui.client.widget.form.ComboBox;
17
import com.extjs.gxt.ui.client.widget.form.ComboBox;
-
 
18
import com.extjs.gxt.ui.client.widget.form.Field;
17
import com.extjs.gxt.ui.client.widget.form.HiddenField;
19
import com.extjs.gxt.ui.client.widget.form.HiddenField;
18
import com.extjs.gxt.ui.client.widget.form.LabelField;
20
import com.extjs.gxt.ui.client.widget.form.LabelField;
19
import com.extjs.gxt.ui.client.widget.form.TextField;
21
import com.extjs.gxt.ui.client.widget.form.TextField;
20
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
22
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
21
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
23
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
22
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
24
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
23
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
25
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
24
import com.google.gwt.core.client.GWT;
26
import com.google.gwt.core.client.GWT;
25
 
27
 
26
public class ChampMultiValeurs extends LayoutContainer {
28
public class ChampMultiValeurs extends LayoutContainer {
27
	//TODO : changer le champRecapitulatif par une hashMap
29
	//TODO : changer le champRecapitulatif par une hashMap
28
	//TODO : autoriser la modification des champs saisis
30
	//TODO : autoriser la modification des champs saisis
29
 
31
 
30
	String idChampCache = null;
32
	String idChampCache = null;
31
	
33
	
32
	String nomLabelChampTxt = "";
34
	String nomLabelChampTxt = "";
33
	
35
	
34
	String titreErreur = null;
36
	String titreErreur = null;
35
	String valeurVideMsg = null;
37
	String valeurVideMsg = null;
36
	String valeurIdentiqueMsg = null;
38
	String valeurIdentiqueMsg = null;
37
	String valeurNonValideMsg = null;
39
	String valeurNonValideMsg = null;
38
	
40
	
39
	String valeurParDefaut = "";
41
	String valeurParDefaut = "";
40
	String validation = null;
42
	String validationMasque = null;
41
	String exempleValidation = null;
43
	String exempleValidation = null;
42
	String boutonSupprimerLabel = "";
44
	String boutonSupprimerLabel = "";
43
	
45
	
44
	LayoutContainer principalLayout = null;
46
	LayoutContainer principalLayout = null;
45
	TextField<String> champTexte = null;
47
	Field<String> champValeurTxt = null;
-
 
48
	ComboBox<Valeur> champValeurCombo = null;
46
	HiddenField<String> champRecapitulatif = null;
49
	HiddenField<String> champRecapitulatif = null;
47
	HashMap<String, LayoutContainer> valeurs = null;
50
	HashMap<String, LayoutContainer> valeurs = null;
48
	ComboBox<Valeur> types = null;
51
	ComboBox<Valeur> types = null;
49
	
52
	
50
	int largeurTotale = 420;
53
	int largeurTotale = 420;
51
	int largeurBouton = 20;
54
	int largeurBouton = 20;
52
	int largeurChamp = 0;
55
	int largeurChamp = 0;
53
 	
56
 	
54
	boolean estMultiType = false;
57
	boolean estMultiType = false;
-
 
58
	boolean estComboBox = false;
55
	
59
	
56
	public ChampMultiValeurs() {
60
	public ChampMultiValeurs() {
57
		initialiserChampMultiValeur(null, 0);
61
		initialiserChampMultiValeur(null, 0);
58
	}
62
	}
59
	
63
	
60
	public ChampMultiValeurs(String label) {
64
	public ChampMultiValeurs(String label) {
61
		initialiserChampMultiValeur(label, 0);
65
		initialiserChampMultiValeur(label, 0);
62
	}
66
	}
63
	
67
	
64
	public ChampMultiValeurs(String label, int largeurTotale) {
68
	public ChampMultiValeurs(String label, int largeurTotale) {
65
		initialiserChampMultiValeur(label, largeurTotale);
69
		initialiserChampMultiValeur(label, largeurTotale);
66
	}
70
	}
67
	
71
	
68
	public ChampMultiValeurs(boolean estMultiType, String label, int largeurTotale) {
72
	public ChampMultiValeurs(boolean estMultiType, String label, int largeurTotale) {
69
		this.estMultiType = estMultiType; 
73
		this.estMultiType = estMultiType;
-
 
74
		initialiserChampMultiValeur(label, largeurTotale);
-
 
75
	}
-
 
76
	
-
 
77
	public ChampMultiValeurs(boolean estCombobox, boolean estMultiType, String label, int largeurTotale) {
-
 
78
		this.estMultiType = estMultiType;
-
 
79
		this.estComboBox = estCombobox;
70
		initialiserChampMultiValeur(label, largeurTotale);
80
		initialiserChampMultiValeur(label, largeurTotale);
71
	}
81
	}
72
	
82
	
73
	public void setLabel(String label) {
83
	public void setLabel(String label) {
74
		if (label == null) {
84
		if (label == null) {
75
			label = "";
85
			label = "";
76
		}
86
		}
77
		nomLabelChampTxt = label;
87
		nomLabelChampTxt = label;
78
	}
88
	}
79
	
89
	
80
	public void setLargeur(int largeur) {
90
	public void setLargeur(int largeur) {
81
		if (largeur != 0 && largeur > 20) {
91
		if (largeur != 0 && largeur > 20) {
82
			largeurTotale = largeur;
92
			largeurTotale = largeur;
83
		}
93
		}
84
		largeurChamp = largeurTotale - largeurBouton;
94
		largeurChamp = largeurTotale - largeurBouton;
85
	}
95
	}
86
	
96
	
87
	public void setValidation (String validation, String exempleValidation)	{
97
	public void setValidation (String validation, String exempleValidation)	{
88
		this.validation = validation;
98
		this.validationMasque = validation;
89
		this.exempleValidation = exempleValidation;
99
		this.exempleValidation = exempleValidation;
90
		
100
		
91
		this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);
101
		this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);
92
	}
102
	}
93
	
103
	
94
	public void setValeurParDefaut(String valeur)	{
104
	public void setValeurParDefaut(String valeur)	{
95
		this.valeurParDefaut = valeur;
105
		this.valeurParDefaut = valeur;
96
		champTexte.setValue(valeur);
106
		champValeurTxt.setValue(valeur);
97
	}
107
	}
98
	
108
	
99
	public void setValeurBoutonSupprimer(String valeur)	{
109
	public void setValeurBoutonSupprimer(String valeur)	{
100
		this.boutonSupprimerLabel = valeur;
110
		this.boutonSupprimerLabel = valeur;
101
	}
111
	}
102
	
112
	
103
	private void initialiserChampMultiValeur(String label, int largeur) {
113
	private void initialiserChampMultiValeur(String label, int largeur) {
104
		setLabel(label);
114
		setLabel(label);
105
		setLargeur(largeur);
115
		setLargeur(largeur);
106
		
116
		
107
		titreErreur = Mediateur.i18nC.erreurSaisieTitre();
117
		titreErreur = Mediateur.i18nC.erreurSaisieTitre();
108
		valeurVideMsg = Mediateur.i18nC.demanderValeur();
118
		valeurVideMsg = Mediateur.i18nC.demanderValeur();
109
		valeurIdentiqueMsg = Mediateur.i18nC.valeurDejaPresente();
119
		valeurIdentiqueMsg = Mediateur.i18nC.valeurDejaPresente();
110
		
120
		
111
		valeurs = new HashMap<String, LayoutContainer>();
121
		valeurs = new HashMap<String, LayoutContainer>();
112
		champRecapitulatif = new HiddenField<String>();
122
		champRecapitulatif = new HiddenField<String>();
113
		champRecapitulatif.setValue("");
123
		champRecapitulatif.setValue("");
114
		
124
		
115
		setLayout(new FormLayout());
125
		setLayout(new FormLayout());
116
		
126
		
117
		creerChampMultiValeurs();
127
		creerChampMultiValeurs();
118
	}
128
	}
119
	
129
	
120
	private void creerChampMultiValeurs() {
130
	private void creerChampMultiValeurs() {
121
		principalLayout = new LayoutContainer();
131
		principalLayout = new LayoutContainer();
122
		principalLayout.setLayout(new RowLayout());
132
		principalLayout.setLayout(new RowLayout());
123
		
133
		
124
		LabelField label = new LabelField(nomLabelChampTxt + ":");
134
		LabelField label = new LabelField(nomLabelChampTxt + ":");
125
		label.setWidth(largeurChamp);
135
		label.setWidth(largeurChamp);
126
		principalLayout.add(label);
136
		principalLayout.add(label);
127
		
137
		
128
		LayoutContainer colonneLayout = new LayoutContainer();
138
		LayoutContainer colonneLayout = new LayoutContainer();
129
		colonneLayout.setLayout(new ColumnLayout());
139
		colonneLayout.setLayout(new ColumnLayout());
130
		
140
		
131
		if (estMultiType == true)	{
141
		if (estMultiType == true)	{
132
			largeurChamp = largeurChamp - 150;
142
			largeurChamp = largeurChamp - 150;
133
			types = new ComboBox<Valeur>();
143
			types = new ComboBox<Valeur>();
134
			types.setDisplayField("nom");
144
			types.setDisplayField("nom");
135
			types.setEmptyText("Choisissez:");			
145
			types.setEmptyText("Choisissez:");			
136
			types.setStore(new ListStore<Valeur>());
146
			types.setStore(new ListStore<Valeur>());
137
			colonneLayout.add(types, new ColumnData(150));
147
			colonneLayout.add(types, new ColumnData(150));
138
		}
148
		}
-
 
149
		
-
 
150
		if (estComboBox) {
-
 
151
			champValeurCombo = new ComboBox<Valeur>();
-
 
152
			champValeurCombo.setDisplayField("nom");
-
 
153
			champValeurCombo.setStore(new ListStore<Valeur>());
-
 
154
			colonneLayout.add(champValeurCombo, new ColumnData(largeurChamp));
139
		
155
		} else {
140
		champTexte = new TextField<String>();
156
			champValeurTxt = new TextField<String>();
141
		colonneLayout.add(champTexte, new ColumnData(largeurChamp));
157
			colonneLayout.add(champValeurTxt, new ColumnData(largeurChamp));
142
 
158
		}
143
		Button ajouterBouton = new Button();
159
		Button ajouterBouton = new Button();
144
		ajouterBouton.setIcon(Images.ICONES.ajouter());
160
		ajouterBouton.setIcon(Images.ICONES.ajouter());
145
		ajouterBouton.addSelectionListener(
161
		ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
162
			public void componentSelected(ButtonEvent ce) {
-
 
163
				String valeurChamp = "";
146
			new SelectionListener<ButtonEvent>() {
164
				if (estComboBox) {
-
 
165
					valeurChamp = champValeurCombo.getValue().getNom();
147
				public void componentSelected(ButtonEvent ce) {
166
				} else {
-
 
167
					valeurChamp = champValeurTxt.getValue();
-
 
168
				}
148
					String valeurChampTxt = (String) champTexte.getValue();
169
				
149
					if ((valeurChampTxt == null) || valeurChampTxt.trim().equals("") || valeurChampTxt.trim().equals(valeurParDefaut))	{
170
				if ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut))	{
150
						MessageBox.alert(titreErreur, valeurVideMsg, null);
171
					MessageBox.alert(titreErreur, valeurVideMsg, null);
151
					} else if (valeurs.get(valeurChampTxt) != null){
172
				} else if (valeurs.get(valeurChamp) != null){
-
 
173
					MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);							
-
 
174
				} else {
-
 
175
					if (validationMasque != null && !valeurChamp.matches(validationMasque)) 	{
152
						MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);							
176
						MessageBox.alert(titreErreur, valeurNonValideMsg, null);
153
					} else {
-
 
154
						if (validation!=null && !valeurChampTxt.matches(validation)) 	{
-
 
155
							MessageBox.alert(titreErreur, valeurNonValideMsg, null);
-
 
156
						} else {
177
					} else {
157
							if (estMultiType)	{
-
 
158
								
178
						if (estMultiType)	{
159
								String type = "";
179
							String type = "";
160
								String id = "";
180
							String id = "";
161
								Valeur valeur = types.getValue();
-
 
162
					
-
 
163
								if (valeur != null)	{
-
 
164
									type = valeur.getNom();
-
 
165
									id = valeur.getId();
-
 
166
								}	else {
-
 
167
									type = types.getRawValue();
-
 
168
									id = type;
-
 
169
								}
181
							Valeur valeur = types.getValue();
170
				
-
 
171
								if (type.trim().equals(""))	{
182
				
172
									MessageBox.alert("Erreur de saisie", "Vous devez saisir un type ", null);
183
							if (valeur != null)	{
173
								}	else {
-
 
174
									ajouterValeur(valeurChampTxt, type, id);
-
 
175
								}
-
 
176
								
184
								type = valeur.getNom();
177
								
185
								id = valeur.getId();
-
 
186
							} else {
178
							} else {
187
								type = types.getRawValue();
-
 
188
								id = type;
-
 
189
							}
-
 
190
			
-
 
191
							if (type.trim().equals(""))	{
-
 
192
								MessageBox.alert("Erreur de saisie", "Vous devez saisir un type ", null);
-
 
193
							} else {
-
 
194
								ajouterValeur(valeurChamp, type, id);
-
 
195
							}
179
								ajouterValeur(valeurChampTxt);
196
						} else {
180
							}
197
							ajouterValeur(valeurChamp);
181
						}
198
						}
182
					}
199
					}
183
				}
200
				}
-
 
201
			}
184
			});
202
		});
185
		colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));
203
		colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));
186
		
204
		
187
		principalLayout.add(champRecapitulatif);
205
		principalLayout.add(champRecapitulatif);
188
		principalLayout.add(colonneLayout);
206
		principalLayout.add(colonneLayout);
189
		add(principalLayout);
207
		add(principalLayout);
190
	}
208
	}
191
	
209
	
192
	public void ajouterValeur(final String texte, final String strValeur, final String id)	{
210
	public void ajouterValeur(final String texte, final String strValeur, final String id)	{
193
		//Implémenté dans classe inférieure
211
		//Implémenté dans classe inférieure
194
	}
212
	}
195
	
213
	
196
	public void ajouterValeur(final String texte) 	{
214
	public void ajouterValeur(final String texte) 	{
197
		LayoutContainer colonneLayout = new LayoutContainer();
215
		LayoutContainer colonneLayout = new LayoutContainer();
198
		colonneLayout.setLayout(new ColumnLayout());
216
		colonneLayout.setLayout(new ColumnLayout());
199
		valeurs.put(texte, colonneLayout);
217
		valeurs.put(texte, colonneLayout);
200
		
218
		
201
		Text champTxt = new Text();
219
		Text champTxt = new Text();
202
		champTxt.setText(texte);
220
		champTxt.setText(texte);
203
		colonneLayout.add(champTxt, new ColumnData(largeurChamp));
221
		colonneLayout.add(champTxt, new ColumnData(largeurChamp));
204
		
222
		
205
		Button supprimerBouton = new Button();
223
		Button supprimerBouton = new Button();
206
		supprimerBouton.setIcon(Images.ICONES.supprimer());
224
		supprimerBouton.setIcon(Images.ICONES.supprimer());
207
		supprimerBouton.setText(boutonSupprimerLabel);
225
		supprimerBouton.setText(boutonSupprimerLabel);
208
		supprimerBouton.setData("valeur", texte);
226
		supprimerBouton.setData("valeur", texte);
209
		supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
227
		supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
210
			public void componentSelected(ButtonEvent ce) {
228
			public void componentSelected(ButtonEvent ce) {
211
				String valeur = ce.getComponent().getData("valeur");
229
				String valeur = ce.getComponent().getData("valeur");
212
				LayoutContainer valeurLayout = valeurs.get(valeur);
230
				LayoutContainer valeurLayout = valeurs.get(valeur);
213
				principalLayout.remove(valeurLayout);
231
				principalLayout.remove(valeurLayout);
214
				
232
				
215
				valeurs.remove(valeur);
233
				valeurs.remove(valeur);
216
				
234
				
217
				supprimerValeurDuRecapitulatif(valeur);
235
				supprimerValeurDuRecapitulatif(valeur);
218
				
236
				
219
				actualiserLayoutGlobal();
237
				actualiserLayoutGlobal();
220
			}
238
			}
221
		});
239
		});
222
		colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));
240
		colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));
223
		
241
		
224
		// Ajout du layout de la valeur au layout principal
242
		// Ajout du layout de la valeur au layout principal
225
		principalLayout.add(colonneLayout);
243
		principalLayout.add(colonneLayout);
226
		
244
		
227
		// Ajout de la valeur au champ récapitulatif des valeurs ajoutées
245
		// Ajout de la valeur au champ récapitulatif des valeurs ajoutées
228
		ajouterValeurAuRecapitulatif(texte);
246
		ajouterValeurAuRecapitulatif(texte);
229
		reinitialiserChamp();
247
		reinitialiserChamp();
230
		actualiserLayoutGlobal();
248
		actualiserLayoutGlobal();
231
	}
249
	}
232
	
250
	
233
	public void reinitialiserChamp()	{
251
	public void reinitialiserChamp()	{
-
 
252
		if (estComboBox) {
-
 
253
			champValeurCombo.setValue(champValeurCombo.getStore().findModel("id_valeur", valeurParDefaut));
-
 
254
		} else {
234
		champTexte.setValue(valeurParDefaut);	
255
			champValeurTxt.setValue(valeurParDefaut);
-
 
256
		}
-
 
257
		
-
 
258
		if (estMultiType) {
-
 
259
			types.reset();
-
 
260
		}
235
	}
261
	}
236
	
262
	
237
	public void actualiserLayoutGlobal() {
263
	public void actualiserLayoutGlobal() {
238
		layout();
264
		layout();
239
	}
265
	}
240
	
266
	
241
	public void ajouterValeurAuRecapitulatif(String texte) {
267
	public void ajouterValeurAuRecapitulatif(String texte) {
242
		String texteRecapitulatif = "";
268
		String texteRecapitulatif = "";
243
		if (champRecapitulatif.getValue() != null)	{
269
		if (champRecapitulatif.getValue() != null)	{
244
			texteRecapitulatif = champRecapitulatif.getValue();
270
			texteRecapitulatif = champRecapitulatif.getValue();
245
		}
271
		}
246
		texteRecapitulatif += texte + ";;";
272
		texteRecapitulatif += texte + ";;";
247
		champRecapitulatif.setValue(texteRecapitulatif);
273
		champRecapitulatif.setValue(texteRecapitulatif);
248
	}
274
	}
249
	
275
	
250
	public void supprimerValeurDuRecapitulatif(String texte) {
276
	public void supprimerValeurDuRecapitulatif(String texte) {
251
		if (champRecapitulatif.getValue() != null)	{
277
		if (champRecapitulatif.getValue() != null)	{
252
			String texteRecapitulatif = champRecapitulatif.getValue();
278
			String texteRecapitulatif = champRecapitulatif.getValue();
253
			texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");
279
			texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");
254
			champRecapitulatif.setValue(texteRecapitulatif);
280
			champRecapitulatif.setValue(texteRecapitulatif);
255
		}
281
		}
256
	}
282
	}
257
	
283
	
258
	public String getValeurs() {
284
	public String getValeurs() {
259
		String texteRecapitulatif = "";
285
		String texteRecapitulatif = "";
260
		if (champRecapitulatif.getValue() != null) {
286
		if (champRecapitulatif.getValue() != null) {
261
			texteRecapitulatif = champRecapitulatif.getValue();
287
			texteRecapitulatif = champRecapitulatif.getValue();
262
			texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");
288
			texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");
263
		}
289
		}
264
		return texteRecapitulatif;
290
		return texteRecapitulatif;
265
	}
291
	}
266
	
292
	
267
	public void peupler(String chaineExistante) {
293
	public void peupler(String chaineExistante) {
268
		if (valeurs.size()>0)	{
294
		if (valeurs.size()>0)	{
269
			reinitialiser();
295
			reinitialiser();
270
		}
296
		}
271
		if (chaineExistante != null && !chaineExistante.trim().equals("")) {
297
		if (chaineExistante != null && !chaineExistante.trim().equals("")) {
272
			String[] valeurs = chaineExistante.split(";;");
298
			String[] valeurs = chaineExistante.split(";;");
273
			for (int i = 0; i < valeurs.length; i++) {
299
			for (int i = 0; i < valeurs.length; i++) {
274
				ajouterValeur(valeurs[i]);
300
				ajouterValeur(valeurs[i]);
275
			}
301
			}
276
		}
302
		}
277
	}
303
	}
278
	
304
	
279
	public void reinitialiser()	{
305
	public void reinitialiser()	{
280
		//TODO : pourrait etre mieux fait si les valeurs étaient enregistrées dans un 
306
		//TODO : pourrait etre mieux fait si les valeurs étaient enregistrées dans un 
281
		// layout particulier. Il suffirait alors d'enlever les valeurs de ce layout.
307
		// layout particulier. Il suffirait alors d'enlever les valeurs de ce layout.
282
		principalLayout.removeAll();
308
		principalLayout.removeAll();
283
		initialiserChampMultiValeur(nomLabelChampTxt, largeurTotale);
309
		initialiserChampMultiValeur(nomLabelChampTxt, largeurTotale);
284
	}
310
	}
285
}
311
}