Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
69 jpm 1
package org.tela_botanica.client.modeles;
2
 
3
import java.io.Serializable;
1173 jpm 4
import java.util.Arrays;
385 gduche 5
import java.util.Collection;
248 gduche 6
import java.util.HashMap;
193 jp_milcent 7
import java.util.Iterator;
248 gduche 8
import java.util.LinkedList;
1173 jpm 9
import java.util.List;
306 jp_milcent 10
import java.util.Map;
193 jp_milcent 11
import java.util.Set;
306 jp_milcent 12
import java.util.TreeSet;
69 jpm 13
 
949 jpm 14
import org.tela_botanica.client.util.Debug;
233 jp_milcent 15
import org.tela_botanica.client.util.UtilArray;
1369 cyprien 16
import org.tela_botanica.client.util.UtilString;
233 jp_milcent 17
 
534 gduche 18
import com.extjs.gxt.ui.client.core.FastMap;
69 jpm 19
import com.extjs.gxt.ui.client.data.BaseModelData;
602 jp_milcent 20
import com.google.gwt.core.client.GWT;
385 gduche 21
import com.google.gwt.http.client.URL;
775 jpm 22
import com.google.gwt.json.client.JSONObject;
69 jpm 23
 
193 jp_milcent 24
/**
25
 * @author jpm
26
 *
27
 */
69 jpm 28
public abstract class aDonnee extends BaseModelData implements Serializable {
29
 
30
	private static final long serialVersionUID = 3527760464061629791L;
748 jpm 31
 
1573 jpm 32
	public static final boolean SUPPRIMER_PREFIXE = true;
33
	public static final boolean GARDER_PREFIXE = false;
34
	public static final boolean INTEGRER_PROPRIETES = true;
789 jpm 35
	public static final String TYPE_AUTRE = "AUTRE";
36
	public static final String TYPE_TOTAL = "TOTAL";
37
	public static final String SEPARATEUR_TYPE_VALEUR = "##";
38
	public static final String SEPARATEUR_VALEURS = ";;";
39
	public static final String SEPARATEUR_DONNEES = "||";
875 jpm 40
	public static final String ETAT_AJOUTE = "A";
883 jpm 41
	public static final Object ETAT_MODIFIE = "M";
1042 gduche 42
	public static final String VALEUR_NULL = "NC";
1561 jpm 43
 
1257 gduche 44
	public HashMap<String, String> valeursInitiales = new HashMap<String, String>();
1561 jpm 45
	protected boolean removePrefix = true;
46
 
748 jpm 47
	protected abstract String getPrefixe();
1173 jpm 48
	protected abstract String[] getChampsObligatoires();
748 jpm 49
 
789 jpm 50
	public String getDateModification() {
51
		return (String) renvoyerValeurCorrecte("cmhl_date_modification");
52
	}
53
 
54
	public String getNotes() {
55
		return (String) renvoyerValeurCorrecte("cmhl_notes");
56
	}
57
 
58
	public String getIdModifierPar() {
59
		return (String) renvoyerValeurCorrecte("cmhl_ce_modifier_par");
60
	}
61
 
62
	public String getIdEtat() {
63
		return (String) renvoyerValeurCorrecte("cmhl_ce_etat");
64
	}
65
 
66
	public String getIp() {
67
		return (String) renvoyerValeurCorrecte("cmhl_ip");
68
	}
69
 
775 jpm 70
	protected void initialiserModele(JSONObject jsonObjet) {
71
		// l'objet JSON est une table de hachage
72
		Set<String> im = jsonObjet.keySet();
1173 jpm 73
		valeursInitiales = new HashMap<String, String>();
74
 
775 jpm 75
		// Parcourt pour chaque clé
76
		for (Iterator<String> it = im.iterator(); it.hasNext();) {
77
			// Si elle est associée à une valeur, nous l'ajoutons
78
			String cle = it.next();
1173 jpm 79
			if (cle.startsWith(getPrefixe()+"_") ||cle.matches("^_.+_$")) {
775 jpm 80
				// Suppression de l'abréviation du champ. Inutile dans le contexte d'un objet
81
				String cleObjet = cle.replaceFirst("^"+getPrefixe()+"_", "");
82
				// Sinon, nous ajoutons la clé avec une valeur vide
83
				String valeur = "";
84
				if (jsonObjet.get(cle).isString() != null) {
85
					valeur = jsonObjet.get(cle).isString().stringValue();
86
				}
1173 jpm 87
				valeursInitiales.put(cleObjet, valeur);
775 jpm 88
				this.set(cleObjet, valeur);
1173 jpm 89
			}
775 jpm 90
		}
91
	}
92
 
1569 jpm 93
	public void setValeurInitiale(String cleObjet, String valeur) {}
1561 jpm 94
 
69 jpm 95
	/**
96
	 * Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par
97
	 * cette fonction qui retire les charactères nuls qui font planter
1561 jpm 98
	 * l'affichage, il ne faut pas utiliser get directement.
99
	 * Elle ajoute aussi le préfixe au nom du champ si nécessaire.
69 jpm 100
	 *
1561 jpm 101
	 * @param cle le nom du champ sans le préfixe.
69 jpm 102
	 * @return la valeur associée à la clé
103
	 */
193 jp_milcent 104
	protected String renvoyerValeurCorrecte(String cle) {
188 jp_milcent 105
		String sortie = "";
1573 jpm 106
		cle = gererPrefixe(cle);
69 jpm 107
		if (this.get(cle) != null) {
891 aurelien 108
			String valeur = ""+this.get(cle);
188 jp_milcent 109
			if (! valeur.equals("null")) {
69 jpm 110
				char nullChar = '\u0000';
111
				String sNull = "" + nullChar;
112
				valeur = valeur.replaceAll(sNull, "");
188 jp_milcent 113
				sortie =  valeur;
69 jpm 114
			}
115
		}
891 aurelien 116
 
188 jp_milcent 117
		return sortie;
69 jpm 118
	}
233 jp_milcent 119
 
193 jp_milcent 120
	/**
1561 jpm 121
	 * Ajoute le préfixe au nom du champ si nécessaire.
122
	 *
123
	 * @param la clé du champ
124
	 * @param la valeur associé à la clé
125
	 */
126
	protected void setValeurCorrecte(String cle, String valeur) {
1573 jpm 127
		cle = gererPrefixe(cle);
1561 jpm 128
		set(cle, valeur);
129
	}
130
 
131
	/**
242 jp_milcent 132
	 * Ajoute un nouvel élément avec son type à une chaine dénormalisée.
133
	 * Champ de type "truk" contenant des valeurs séparées par ";;" qui elle même possèdent un type séparé par "##".
134
	 * Si l'élément existe déjà, il ne sera pas ajouté.
193 jp_milcent 135
	 *
136
	 * @param champ le nom du champ dénormalisé
137
	 * @param type le type de la valeur à ajouter
138
	 * @param valeur la valeur à ajouter
139
	 */
242 jp_milcent 140
	protected void ajouterChaineDenormaliseAvecType(String champ, String type, Object valeur) {
193 jp_milcent 141
		if (valeur instanceof String) {
142
			String chaineExistante = renvoyerValeurCorrecte(champ);
1369 cyprien 143
			if (UtilString.isEmpty(chaineExistante)) {
789 jpm 144
				this.set(champ, type+SEPARATEUR_TYPE_VALEUR+valeur);
193 jp_milcent 145
			} else {
242 jp_milcent 146
				// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
789 jpm 147
				if (!chaineExistante.matches("(^|"+SEPARATEUR_VALEURS+")"+type+SEPARATEUR_TYPE_VALEUR+valeur+"("+SEPARATEUR_VALEURS+"|$)")) {
148
					this.set(champ, chaineExistante+";;"+type+SEPARATEUR_TYPE_VALEUR+valeur);
242 jp_milcent 149
				}
193 jp_milcent 150
			}
151
		}
152
	}
119 jpm 153
 
306 jp_milcent 154
	protected void supprimerTypeDansChaineDenormalise(String champ, String type) {
155
		String chaineExistante = renvoyerValeurCorrecte(champ);
1369 cyprien 156
		if (!UtilString.isEmpty(chaineExistante)) {
789 jpm 157
			if (chaineExistante.matches("(?:^|.*"+SEPARATEUR_VALEURS+")"+type+SEPARATEUR_TYPE_VALEUR+".*")) {
158
				chaineExistante = chaineExistante.replaceFirst("(^|.*"+SEPARATEUR_VALEURS+")"+type+SEPARATEUR_TYPE_VALEUR+".*?("+SEPARATEUR_VALEURS+".*|$)", "$1$2");
159
				chaineExistante = chaineExistante.replaceAll("(.*)"+SEPARATEUR_VALEURS+SEPARATEUR_VALEURS+"(.*)", "$1"+SEPARATEUR_VALEURS+"$2");
160
				chaineExistante = chaineExistante.replaceAll("^"+SEPARATEUR_VALEURS+"(.*)", "$1");
161
				chaineExistante = chaineExistante.replaceAll("(.*)"+SEPARATEUR_VALEURS+"$", "$1");
306 jp_milcent 162
				this.set(champ, chaineExistante);
163
			}
164
		}
165
	}
166
 
167
	protected void remplacerTypeDansChaineDenormalise(String champ, String type, Object valeur) {
168
		if (valeur != null && !valeur.equals("")) {
169
			ajouterChaineDenormaliseAvecType(champ, type, valeur);
170
		} else {
171
			supprimerTypeDansChaineDenormalise(champ, type);
172
		}
173
	}
1569 jpm 174
 
233 jp_milcent 175
	/**
242 jp_milcent 176
	 * Ajoute un nouvel élément sans type à une chaine dénormalisée.
177
	 * Champ de type "truk" contenant seulement des valeurs séparées par ";;".
178
	 * Si l'élément existe déjà, il ne sera pas ajouté.
179
	 *
180
	 * @param champ le nom du champ dénormalisé
181
	 * @param valeur la valeur à ajouter
182
	 */
183
	protected void ajouterChaineDenormalise(String champ, Object valeur) {
184
		if (valeur instanceof String) {
185
			String chaineExistante = renvoyerValeurCorrecte(champ);
1369 cyprien 186
			if (UtilString.isEmpty(chaineExistante)) {
242 jp_milcent 187
				this.set(champ, valeur);
188
			} else {
189
				// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
789 jpm 190
				if (!chaineExistante.matches("(^|"+SEPARATEUR_VALEURS+")"+valeur+"("+SEPARATEUR_VALEURS+"|$)")) {
191
					this.set(champ, chaineExistante+SEPARATEUR_VALEURS+valeur);
242 jp_milcent 192
				}
193
			}
194
		}
195
	}
196
 
197
	/**
233 jp_milcent 198
	 * Permet de constuire correctement une chaine dénormalisée unique (champ de type "ce_truk").
199
	 *
200
	 * @param champ le nom du champ dénormalisé
201
	 * @param type le type de la valeur à ajouter
202
	 * @param valeur la valeur à ajouter
203
	 */
793 jpm 204
	protected void setChaineDenormaliseUnique(String champ, String type, String valeur) {
1573 jpm 205
		champ = gererPrefixe(champ);
1369 cyprien 206
		if (valeur == null || UtilString.isEmpty(valeur)) {
608 jp_milcent 207
			this.set(champ, "");
208
		} else if (valeur instanceof String) {
793 jpm 209
			if (((String) valeur).matches("^[0-9]+$")) {
210
				this.set(champ, valeur);
211
			} else {
212
				this.set(champ, type+SEPARATEUR_TYPE_VALEUR+valeur);
213
			}
233 jp_milcent 214
		}
215
	}
216
 
1573 jpm 217
	private String gererPrefixe(String champ) {
218
		String champMisAJour = null;
219
		String prefixe = getPrefixe()+"_";
220
		if (removePrefix) {
221
			champMisAJour = champ.replaceFirst(prefixe, "");
222
		} else {
223
			champMisAJour = (champ.startsWith(prefixe)) ? champ : prefixe+champ ;
224
		}
225
		return champMisAJour;
226
	}
227
 
245 jp_milcent 228
	/**
229
	 * Permet de récupérer pour l'affichage une chaine dénormalisée unique (champ de type "ce_truk").
230
	 *
231
	 * @param champ le nom du champ dénormalisé
232
	 */
233
	protected String getChaineDenormaliseUnique(String champ) {
793 jpm 234
		String valeur = renvoyerValeurCorrecte(champ);
245 jp_milcent 235
 
1369 cyprien 236
		if (!UtilString.isEmpty(valeur)) {
793 jpm 237
			valeur = valeur.replaceFirst("^"+TYPE_AUTRE+SEPARATEUR_TYPE_VALEUR, "");
245 jp_milcent 238
		}
239
 
793 jpm 240
		return valeur;
245 jp_milcent 241
	}
242
 
208 jp_milcent 243
	protected String getInfoDenormaliseParType(String chaineExistante, String type) {
244
		String sortie = "";
1369 cyprien 245
		if (!UtilString.isEmpty(chaineExistante)) {
789 jpm 246
			String[] valeurs = chaineExistante.split(SEPARATEUR_VALEURS);
208 jp_milcent 247
			for (int i = 0; i < valeurs.length; i++) {
789 jpm 248
				if (valeurs[i].startsWith(type+SEPARATEUR_TYPE_VALEUR)) {
249
					sortie =  valeurs[i].replaceFirst("^"+type+SEPARATEUR_TYPE_VALEUR, "");
208 jp_milcent 250
				}
251
			}
252
		}
253
		return sortie;
254
	}
255
 
233 jp_milcent 256
	/**
248 gduche 257
	 * Permet de récupérer une map avec toutes les valeurs de la chaine truk sous la forme clé => valeur
258
	 *
259
	 * @param champ le nom du champ dénormalisé
260
	 * @return map ou liste en fonction du type de chaine truk (list si champ;;champ;; map si type##champ;;)
261
	 */
262
	public Object getChaineDenormaliseAsMapOrList(String champ)	{
263
 
264
			Object retourObjet = null;
265
 
266
			String valeurChamp = renvoyerValeurCorrecte(champ);
252 gduche 267
 
268
			if ((valeurChamp!=null)&&(!valeurChamp.trim().equals("")))	{
789 jpm 269
				String[] valeurs = valeurChamp.split(SEPARATEUR_VALEURS);
252 gduche 270
 
271
				if (valeurs.length > 0)	{
789 jpm 272
					if (valeurs[0].contains(SEPARATEUR_TYPE_VALEUR))	{
252 gduche 273
						// Les champs sont typés, on en fait une Map
748 jpm 274
						HashMap<String,String> mapValeurs = new HashMap<String,String>();
252 gduche 275
						for (int i = 0; i < valeurs.length; i++)	{
789 jpm 276
							String typeEtValeur[] = valeurs[i].split(SEPARATEUR_TYPE_VALEUR);
277
							mapValeurs.put(typeEtValeur[1], typeEtValeur[0]);
252 gduche 278
						}
279
						retourObjet = mapValeurs;
248 gduche 280
					}
252 gduche 281
					else	{
282
 
283
						//Les champs ne sont pas typés, on en fait une Liste
748 jpm 284
						LinkedList<String> listeValeurs = new LinkedList<String>();
252 gduche 285
						for (int i = 0; i < valeurs.length; i++)	{
286
							if ((valeurs[i]!=null)&&(!valeurs[i].equals("")))	{
287
								listeValeurs.add(valeurs[i]);
288
							}
249 gduche 289
						}
252 gduche 290
						retourObjet = listeValeurs;
248 gduche 291
					}
252 gduche 292
 
248 gduche 293
				}
294
			}
295
 
296
			return retourObjet;
297
 
298
	}
299
 
300
	/**
233 jp_milcent 301
	 * Permet de modifier correctement une chaine dénormalisée (champ de type "truk").
302
	 * Remplace par la valeur de la première instance du type indiqué dans la chaine dénormalisée.
602 jp_milcent 303
	 * Si aucun type n'est trouvé, nous en ajoutons un avec la nouvelle valeur.
233 jp_milcent 304
	 *
305
	 * @param champ le nom du champ dénormalisé
306
	 * @param type le type de la valeur à modifier
307
	 * @param valeur la valeur pour le type en question
308
	 */
242 jp_milcent 309
	protected void modifierChaineDenormaliseParType(String champ, String type, Object valeur) {
608 jp_milcent 310
		if (valeur == null || valeur.equals("")) {
602 jp_milcent 311
			supprimerTypeDansChaineDenormalise(champ, type);
312
		} else if (valeur instanceof String) {
233 jp_milcent 313
			String chaineExistante = renvoyerValeurCorrecte(champ);
602 jp_milcent 314
 
1369 cyprien 315
			if (UtilString.isEmpty(chaineExistante)) {
789 jpm 316
				this.set(champ, type+SEPARATEUR_TYPE_VALEUR+valeur);
233 jp_milcent 317
			} else {
789 jpm 318
				String[] valeurs = chaineExistante.split(SEPARATEUR_VALEURS);
602 jp_milcent 319
				HashMap<String,String> valeursModifiees = new HashMap<String,String>();
233 jp_milcent 320
				for (int i = 0; i < valeurs.length; i++) {
789 jpm 321
					if (valeurs[i].startsWith(type+SEPARATEUR_TYPE_VALEUR)) {
322
						valeursModifiees.put(type, type+SEPARATEUR_TYPE_VALEUR+valeur);
323
					} else if (i == (valeurs.length -1) && !valeurs[i].startsWith(type+SEPARATEUR_TYPE_VALEUR)) {
324
						valeursModifiees.put(valeurs[i].split(SEPARATEUR_TYPE_VALEUR)[0], valeurs[i]);
325
						valeursModifiees.put(type, type+SEPARATEUR_TYPE_VALEUR+valeur);
602 jp_milcent 326
					} else {
789 jpm 327
						valeursModifiees.put(valeurs[i].split(SEPARATEUR_TYPE_VALEUR)[0], valeurs[i]);
233 jp_milcent 328
					}
329
				}
602 jp_milcent 330
				String[] tableauValeursModifiees = valeursModifiees.values().toArray(new String[valeursModifiees.size()]);
789 jpm 331
				this.set(champ, UtilArray.implode(tableauValeursModifiees, SEPARATEUR_VALEURS));
233 jp_milcent 332
			}
333
		}
334
	}
335
 
208 jp_milcent 336
	protected String getInfoDenormaliseParPosition(String chaineExistante, int position) {
337
		String sortie = "";
1369 cyprien 338
		if (!UtilString.isEmpty(chaineExistante)) {
789 jpm 339
			String[] valeurs = chaineExistante.split(SEPARATEUR_VALEURS);
208 jp_milcent 340
			if (valeurs.length >= position) {
341
				for (int i = 0; i < valeurs.length; i++) {
342
					if (i == (position - 1)) {
789 jpm 343
						if (valeurs[i].contains(SEPARATEUR_TYPE_VALEUR)) {
344
							sortie = valeurs[i].replaceFirst("^[^#]+"+SEPARATEUR_VALEURS, "");
208 jp_milcent 345
						} else {
603 jp_milcent 346
							sortie = valeurs[i];
208 jp_milcent 347
						}
348
						break;
349
					}
350
				}
351
			}
352
		}
353
		return sortie;
354
	}
355
 
233 jp_milcent 356
	/**
357
	 * Permet de modifier correctement une chaine dénormalisée (champ de type "truk").
358
	 * Remplace par la valeur l'instance dont la position a été indiquée.
242 jp_milcent 359
	 * Si la chaine dénormalisée est vide, l'élement est ajouté quelque soit la position indiquée.
360
	 * Si la position est supérieure au nombre d'élément de la chaine dénormalisé, rien n'est modifié.
233 jp_milcent 361
	 *
362
	 * @param champ le nom du champ dénormalisé
363
	 * @param position le type de la valeur à modifier
364
	 * @param valeur la valeur à remplacer à la position indiquée
365
	 */
242 jp_milcent 366
	protected void modifierChaineDenormaliseParPosition(String champ, int position, Object valeur) {
608 jp_milcent 367
		if (valeur == null || valeur.equals("")) {
603 jp_milcent 368
			supprimerChaineDenormaliseParPosition(champ, position);
369
		} else if (valeur instanceof String) {
233 jp_milcent 370
			String chaineExistante = renvoyerValeurCorrecte(champ);
1369 cyprien 371
			if (UtilString.isEmpty(chaineExistante)) {
603 jp_milcent 372
				this.set(champ, valeur);
373
			} else {
789 jpm 374
				String[] valeurs = chaineExistante.split(SEPARATEUR_VALEURS);
603 jp_milcent 375
				if (valeurs.length >= position) {
233 jp_milcent 376
					for (int i = 0; i < valeurs.length; i++) {
377
						if (i == (position - 1)) {
378
							valeurs[i] = (String) valeur;
379
							break;
380
						}
381
					}
789 jpm 382
					this.set(champ, UtilArray.implode(valeurs, SEPARATEUR_VALEURS));
233 jp_milcent 383
				}
384
			}
385
		}
386
	}
387
 
603 jp_milcent 388
	protected void supprimerChaineDenormaliseParPosition(String champ, int position) {
389
		String chaineExistante = renvoyerValeurCorrecte(champ);
1369 cyprien 390
		if (!UtilString.isEmpty(chaineExistante)) {
789 jpm 391
			String[] valeurs = chaineExistante.split(SEPARATEUR_VALEURS);
603 jp_milcent 392
			HashMap<String,String> valeursModifiees = new HashMap<String,String>();
393
			if (valeurs.length >= position) {
394
				for (int i = 0; i < valeurs.length; i++) {
395
					if (i != (position - 1)) {
396
						valeursModifiees.put(""+i, valeurs[i]);
397
					}
398
				}
399
				String[] tableauValeursModifiees = valeursModifiees.values().toArray(new String[valeursModifiees.size()]);
789 jpm 400
				this.set(champ, UtilArray.implode(tableauValeursModifiees, SEPARATEUR_VALEURS));
603 jp_milcent 401
			}
402
		}
403
	}
404
 
193 jp_milcent 405
	/** (non-Javadoc)
406
	 * @see java.lang.Object#toString()
407
	 */
408
	public String toString() {
409
		String sortie = "";
410
 
411
		// Champs du BaseModelData
412
		Set<String> proprietes = this.getProperties().keySet();
306 jp_milcent 413
		TreeSet<String> proprietesTriees = new TreeSet<String>(proprietes);
414
		for (Iterator<String> it = proprietesTriees.iterator(); it.hasNext();) {
193 jp_milcent 415
			String cle = it.next();
306 jp_milcent 416
			if (this.get(cle) != null && !this.get(cle).equals("")) {
949 jpm 417
				sortie += cle+" : "+this.get(cle).toString()+"\n";
202 jp_milcent 418
			}
193 jp_milcent 419
		}
420
 
421
		return sortie;
422
	}
306 jp_milcent 423
 
424
	public Boolean comparer(BaseModelData objetAComparer) {
425
		Boolean retour = true;
426
		Map<String, Object> a = this.getProperties();
427
		Map<String, Object> b = objetAComparer.getProperties();
428
		if (a.size() != b.size()) {
429
			retour = false;
430
		} else {
431
			Set<String> cles = a.keySet();
432
			Iterator<String> it = cles.iterator();
433
			while (it.hasNext()) {
434
				String cle = it.next();
435
				if (a.get(cle) != null && !a.get(cle).equals(b.get(cle))) {
436
					retour = false;
437
					break;
438
				}
439
			}
440
		}
441
		return retour;
442
	}
443
 
444
	public Object cloner(BaseModelData nouvelleInstance) {
445
		Map<String, Object> proprietes = this.getProperties();
446
		Set<String> cles = proprietes.keySet();
447
		for (Iterator<String> it = cles.iterator(); it.hasNext();) {
448
			String cle = it.next();
449
			nouvelleInstance.set(cle, this.get(cle));
450
		}
451
 
452
		return nouvelleInstance;
453
	}
385 gduche 454
 
455
	/**
748 jpm 456
	 * Renvoie une chaîne de caractère formatée et encodée pour POST avec toutes les propriétés du modèle
385 gduche 457
	 * */
748 jpm 458
	public String obtenirChainePOST() {
459
		String post = "";
385 gduche 460
 
748 jpm 461
		FastMap<?> proprietees = (FastMap<?>) getProperties();
462
		Collection<String> cles = proprietees.keySet();
463
		Iterator<String> it = cles.iterator();
385 gduche 464
 
465
		while (it.hasNext())	{
748 jpm 466
			String cle = it.next();
1292 cyprien 467
			//Les Radio Box couplées à la fonction autobind créent des variables gxt.RadioGroup.X, qu'il ne faut pas mettre dans la requête
974 gduche 468
			if (!cle.startsWith("gxt.")&&!cle.matches("^_.+_$"))	{
1173 jpm 469
 
470
				//Si, et seulement si, la valeur diffère de la valeur initiale OU la clé est dans les champs obligatoire
1292 cyprien 471
				if (Arrays.asList(getChampsObligatoires()).contains(getPrefixe() + "_" + cle) || ((valeursInitiales.get(cle) != null && !valeursInitiales.get(cle).equals(get(cle))) || valeursInitiales.get(cle) == null))	{
1569 jpm 472
					post += getPrefixe() + "_" +  cle + "=" + URL.encodeQueryString(renvoyerValeurCorrecte(cle));
1173 jpm 473
					if (it.hasNext())	{
474
						post += "&";
475
					}
826 gduche 476
				}
385 gduche 477
			}
478
		}
1292 cyprien 479
 
748 jpm 480
		return post;
786 jpm 481
	}
482
 
483
	/**
484
	 * Met à jour l'objet this avec les données de l'objet passé en paramêtre.
1569 jpm 485
	 */
786 jpm 486
	public void mettreAJour(aDonnee nouveau) {
487
		Collection<String> cles = nouveau.getProperties().keySet();
488
		Iterator<String> it = cles.iterator();
489
		while (it.hasNext())	{
490
			String cle = it.next();
491
			if (!this.get(cle).equals(nouveau.get(cle))) {
492
				this.set(cle, nouveau.get(cle));
493
			}
494
		}
495
	}
69 jpm 496
}