Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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