Subversion Repositories eFlore/Applications.coel

Rev

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