Subversion Repositories eFlore/Applications.coel

Rev

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