Subversion Repositories eFlore/Applications.coel

Rev

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