Subversion Repositories eFlore/Applications.coel

Rev

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