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