Subversion Repositories eFlore/Applications.coel

Rev

Rev 1415 | Rev 1428 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1287 cyprien 1
package org.tela_botanica.client.composants;
2
 
3
import java.util.HashMap;
4
 
5
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.composants.pagination.Proxy;
8
import org.tela_botanica.client.configuration.Configuration;
9
import org.tela_botanica.client.images.Images;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.Valeur;
12
import org.tela_botanica.client.modeles.ValeurListe;
13
import org.tela_botanica.client.modeles.aDonnee;
14
import org.tela_botanica.client.util.Debug;
15
import org.tela_botanica.client.vues.Formulaire;
16
 
17
import com.extjs.gxt.ui.client.Registry;
18
import com.extjs.gxt.ui.client.data.ModelData;
19
import com.extjs.gxt.ui.client.data.ModelType;
20
import com.extjs.gxt.ui.client.event.ButtonEvent;
21
import com.extjs.gxt.ui.client.event.Events;
22
import com.extjs.gxt.ui.client.event.FieldEvent;
23
import com.extjs.gxt.ui.client.event.Listener;
24
import com.extjs.gxt.ui.client.event.SelectionListener;
25
import com.extjs.gxt.ui.client.store.ListStore;
26
import com.extjs.gxt.ui.client.widget.Component;
27
import com.extjs.gxt.ui.client.widget.LayoutContainer;
28
import com.extjs.gxt.ui.client.widget.MessageBox;
29
import com.extjs.gxt.ui.client.widget.Text;
30
import com.extjs.gxt.ui.client.widget.button.Button;
31
import com.extjs.gxt.ui.client.widget.form.ComboBox;
32
import com.extjs.gxt.ui.client.widget.form.Field;
33
import com.extjs.gxt.ui.client.widget.form.HiddenField;
34
import com.extjs.gxt.ui.client.widget.form.LabelField;
35
import com.extjs.gxt.ui.client.widget.form.TextField;
36
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
37
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
38
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
39
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
40
 
41
public class ChampMultiValeursMultiTypesPaginable extends ChampMultiValeursPaginable implements Rafraichissable {
42
 
43
	  //-------------//
44
	 //  ATTRIBUTS	//
45
	//-------------//
46
 
47
	// Elements pour le champ 'types'
48
	ColumnData colonneChampTypes = null;
49
	ChampComboBoxRechercheTempsReelPaginable champTypesComboBox = null;
50
	int largeurChampTypes = 200;
51
	String displayNameChampTypes = "nom";
52
 
53
	// Elements pour gérer le type de valeurs que contient le champ
54
	Proxy proxyChampTypes = null;
55
	ModelType modeltypeChampTypes = null;
56
 
57
	// Variables de traitement
58
	HashMap<Integer, String> tempMapValeurs = null;
59
 
60
	  //-------------//
61
	 //   METHODES	//
62
	//-------------//
63
 
64
	/*--------------
65
	  Constructeur
66
	--------------*/
67
	public ChampMultiValeursMultiTypesPaginable(String label, int largeurTotale, boolean estCombobox, ModelType modeltypeChampValeur, Proxy proxyChampValeur, String displayNameChampValeur, ModelType modeltypeChampTypes, Proxy proxyChampTypes, String displayNameChampTypes) {
68
		super(label, largeurTotale, estCombobox, modeltypeChampValeur, proxyChampValeur, displayNameChampValeur);
69
 
70
		this.proxyChampTypes = proxyChampTypes;
71
		this.modeltypeChampTypes = modeltypeChampTypes;
72
		this.displayNameChampTypes = displayNameChampTypes;
73
 
74
		initialiserChampMultiValeursMultiTypesPaginable(label);
75
	}
76
 
77
	/*------------
78
	  Accesseurs
79
	------------*/
80
 
81
	 //------------//
82
	//    Get     //------------------------------------------------------------
83
 
84
	public ChampComboBoxRechercheTempsReelPaginable getChampTypesComboBox() {
85
		return this.champTypesComboBox;
86
	}
87
 
88
	 //------------//
89
	//    Set     //------------------------------------------------------------
90
 
91
	@Override
92
	public void setLargeurTotale(int largeurTotale) {
93
		this.largeurTotale = largeurTotale;
94
		largeurChampValeur = largeurTotale - largeurBouton - largeurChampTypes;
95
	}
96
 
97
	/*-------------------------------------------
98
	  Méthodes protégées et méthodes publiques
99
	--------------------------------------------*/
100
 
101
	@Override
102
	public void rafraichir(Object nouvellesDonnees) {
103
		super.rafraichir(nouvellesDonnees);
104
 
105
		if (nouvellesDonnees instanceof ValeurListe) {
106
			Valeur v = ((ValeurListe)nouvellesDonnees).toList().get(0);
107
			ajouterValeur(tempMapValeurs.get(Integer.parseInt(v.getId())), v.getNom(), v.getId());
108
		}
109
	}
110
 
111
	@Override
1369 cyprien 112
	protected void ajouterValeur(final String texte, final String type, final String idType) {
1287 cyprien 113
 
114
		LayoutContainer colonneConteneur = new LayoutContainer();
115
		colonneConteneur.setLayout(new ColumnLayout());
1369 cyprien 116
		valeurs.put(idType + aDonnee.SEPARATEUR_TYPE_VALEUR + texte, colonneConteneur);
1287 cyprien 117
 
118
		Text champType = new Text();
119
		champType.setText(type + " : ");
120
		champType.setWidth(largeurChampTypes);
121
		colonneConteneur.add(champType, new ColumnData(largeurChampTypes));
122
 
123
		Text champValeur = new Text();
124
		champValeur.setText(texte);
125
		champValeur.setWidth(largeurChampTypes);
126
		colonneConteneur.add(champValeur, new ColumnData(largeurChampTypes));
127
 
128
		Button supprimerBouton = new Button();
129
		supprimerBouton.setIcon(Images.ICONES.supprimer());
130
		supprimerBouton.setText(boutonSupprimerLabel);
1369 cyprien 131
		supprimerBouton.setData("valeur", idType + aDonnee.SEPARATEUR_TYPE_VALEUR + texte);
1287 cyprien 132
 
133
		supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
134
			public void componentSelected(ButtonEvent ce) {
135
				String valeur = ce.getComponent().getData("valeur");
136
				LayoutContainer valeurLayout = valeurs.get(valeur);
137
				principalLayout.remove(valeurLayout);
138
				valeurs.remove(valeur);
139
				supprimerValeurDuRecapitulatif(valeur);
140
				actualiserLayoutGlobal();
141
			}
142
		});
143
		colonneConteneur.add(supprimerBouton, new ColumnData(largeurBouton));
144
 
145
		// Ajout du layout de la valeur au layout principal
146
		principalLayout.add(colonneConteneur);
147
 
148
		// Ajout de la valeur au champ récapitulatif des valeurs ajoutées
1369 cyprien 149
		ajouterValeurAuRecapitulatif(texte, idType);
150
 
1287 cyprien 151
		reinitialiserChamp();
152
		actualiserLayoutGlobal();
153
	}
154
 
155
	@Override
156
	public void peupler(String chaineExistante) {
157
 
158
		if (valeurs.size() > 0)	{
159
			reinitialiser();
160
		}
161
		if (chaineExistante != null && !chaineExistante.trim().equals("")) {
162
 
163
			String[] valeurs = chaineExistante.split(aDonnee.SEPARATEUR_VALEURS);
164
			for (int i = 0; i < valeurs.length; i++) {
165
				String[] idEtValeur = valeurs[i].split(aDonnee.SEPARATEUR_TYPE_VALEUR);
166
				String idType = idEtValeur[0];
167
				String idValeur = idEtValeur[1];
168
 
169
				// Champ Valeur
170
				tempMapValeurs.put(Integer.parseInt(idType), idValeur);
171
 
172
				// Champ Types
1369 cyprien 173
				mediateur.obtenirListeValeurEtRafraichir(this, Integer.parseInt(idType), null);
1287 cyprien 174
			}
175
		}
176
	}
177
 
178
 
179
	/*------------------
180
	  Méthodes privées
181
	------------------*/
182
 
183
	private void initialiserChampMultiValeursMultiTypesPaginable(String label) {
184
		setLargeurTotale(largeurTotale);
185
		tempMapValeurs = new HashMap<Integer,String>();
186
		creerChampMultiValeursMultiTypes();
187
	}
188
 
189
	private void creerChampMultiValeursMultiTypes() {
190
 
191
		/* Creation du champ Types */
192
		champTypesComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyChampTypes, modeltypeChampTypes, displayNameChampTypes);
193
		champTypesComboBox.setWidth(largeurChampTypes);
194
		champTypesComboBox.getCombo().setEmptyText("Type...");
195
 
196
		champTypesComboBox.addListener(Events.Select, new Listener<FieldEvent>() {
197
			public void handleEvent(FieldEvent fe) {
198
 
199
			}
200
		});
201
 
202
		/* Placement des éléments dans le conteneur */
203
		// le champ "types" doit être graphiquement placé avant les autres champs,
204
		// on doit donc retirer ces derniers avant d'insérer le champ "types"
205
		colonneConteneur.removeAll();
206
		colonneConteneur.setWidth(largeurTotale);
207
		colonneChampTypes = new ColumnData(largeurChampTypes);
208
		colonneChampTypes.setWidth(largeurChampTypes);
209
		colonneConteneur.add(champTypesComboBox, colonneChampTypes);
210
		if (champValeurEstComboBox) {
211
			champValeurComboBox.setWidth(largeurChampValeur);
212
			colonneChampValeur.setWidth(largeurChampValeur);
213
			colonneConteneur.add(champValeurComboBox, colonneChampValeur);
214
		} else {
215
			champValeurTxt.setWidth(largeurChampValeur);
216
			colonneChampValeur.setWidth(largeurChampValeur);
217
			colonneConteneur.add(champValeurTxt, colonneChampValeur);
218
		}
219
		ajouterBouton.setWidth(largeurBouton);
220
		colonneBoutonAjouter.setWidth(largeurBouton);
221
		colonneConteneur.add(ajouterBouton, colonneBoutonAjouter);
222
 
223
		/* Modification de l'écouteur du bouton Ajouter */
224
		ajouterBouton.removeAllListeners();
225
		ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
226
			public void componentSelected(ButtonEvent ce) {
227
				// récupération de la valeur du champ "Valeur"
228
				String valeurChamp = "";
229
				if (champValeurEstComboBox) {
230
					if (champValeurComboBox.getValeur() != null) {
1369 cyprien 231
						Valeur val = new Valeur(champValeurComboBox.getValeur());
232
						valeurChamp = val.getNom();
1287 cyprien 233
					}
234
				} else {
235
					valeurChamp = champValeurTxt.getValue();
236
				}
1369 cyprien 237
 
1287 cyprien 238
				// validation de la valeur avant ajout
239
				if ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut))	{
240
					MessageBox.alert(titreErreur, valeurVideMsg, null);
241
				} else if (valeurs.get(valeurChamp) != null){
242
					MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);
243
				} else {
244
					if (validationMasque != null && !valeurChamp.matches(validationMasque)) 	{
245
						MessageBox.alert(titreErreur, valeurNonValideMsg, null);
1369 cyprien 246
					} else { // VALIDATION OK
247
						Valeur type = new Valeur(champTypesComboBox.getValeur());
248
						String typeNomStr = type.getNom();
249
						String typeIdStr = type.getId();
1287 cyprien 250
 
1369 cyprien 251
						if (typeIdStr.trim().equals(""))	{
1287 cyprien 252
							MessageBox.alert(Mediateur.i18nM.titreErreurSaisie(), Mediateur.i18nM.typeChampMulti(), null);
253
						} else {
1369 cyprien 254
							ajouterValeur(valeurChamp, typeNomStr, typeIdStr);
1287 cyprien 255
						}
256
					}
257
				}
258
			}
259
		});
260
	}
261
 
262
	private void ajouterValeurAuRecapitulatif(String texte, String id) {
263
		String texteRecapitulatif = "";
264
		if (champRecapitulatif.getValue() != null)	{
265
			texteRecapitulatif = champRecapitulatif.getValue();
266
		}
267
		texteRecapitulatif += id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte + aDonnee.SEPARATEUR_VALEURS;
268
		champRecapitulatif.setValue(texteRecapitulatif);
269
	}
270
}