Subversion Repositories eFlore/Applications.coel

Rev

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