Subversion Repositories eFlore/Applications.coel

Rev

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