Subversion Repositories eFlore/Applications.coel

Rev

Rev 471 | Rev 602 | 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;
385 gduche 4
import java.util.Collection;
306 jp_milcent 5
import java.util.Collections;
248 gduche 6
import java.util.HashMap;
193 jp_milcent 7
import java.util.Iterator;
248 gduche 8
import java.util.LinkedList;
306 jp_milcent 9
import java.util.List;
10
import java.util.Map;
193 jp_milcent 11
import java.util.Set;
306 jp_milcent 12
import java.util.TreeSet;
69 jpm 13
 
233 jp_milcent 14
import org.tela_botanica.client.util.UtilArray;
15
 
534 gduche 16
import com.extjs.gxt.ui.client.core.FastMap;
69 jpm 17
import com.extjs.gxt.ui.client.data.BaseModelData;
385 gduche 18
import com.google.gwt.http.client.URL;
69 jpm 19
 
193 jp_milcent 20
/**
21
 * @author jpm
22
 *
23
 */
69 jpm 24
public abstract class aDonnee extends BaseModelData implements Serializable {
25
 
26
	/**
27
	 * Identifiant pour sérialisé l'objet...
28
	 */
29
	private static final long serialVersionUID = 3527760464061629791L;
30
 
31
	/**
32
	 * Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par
33
	 * cette fonction qui retire les charactères nuls qui font planter
34
	 * l'affichage, il ne faut pas utiliser get directement
35
	 *
36
	 * @param cle
37
	 * @return la valeur associée à la clé
38
	 */
193 jp_milcent 39
	protected String renvoyerValeurCorrecte(String cle) {
188 jp_milcent 40
		String sortie = "";
69 jpm 41
		if (this.get(cle) != null) {
42
			String valeur = this.get(cle);
188 jp_milcent 43
			if (! valeur.equals("null")) {
69 jpm 44
				char nullChar = '\u0000';
45
				String sNull = "" + nullChar;
46
				valeur = valeur.replaceAll(sNull, "");
188 jp_milcent 47
				sortie =  valeur;
69 jpm 48
			}
49
		}
188 jp_milcent 50
		return sortie;
69 jpm 51
	}
233 jp_milcent 52
 
193 jp_milcent 53
	/**
242 jp_milcent 54
	 * Ajoute un nouvel élément avec son type à une chaine dénormalisée.
55
	 * Champ de type "truk" contenant des valeurs séparées par ";;" qui elle même possèdent un type séparé par "##".
56
	 * Si l'élément existe déjà, il ne sera pas ajouté.
193 jp_milcent 57
	 *
58
	 * @param champ le nom du champ dénormalisé
59
	 * @param type le type de la valeur à ajouter
60
	 * @param valeur la valeur à ajouter
61
	 */
242 jp_milcent 62
	protected void ajouterChaineDenormaliseAvecType(String champ, String type, Object valeur) {
193 jp_milcent 63
		if (valeur instanceof String) {
64
			String chaineExistante = renvoyerValeurCorrecte(champ);
65
			if (chaineExistante.equals("")) {
66
				this.set(champ, type+"##"+valeur);
67
			} else {
242 jp_milcent 68
				// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
69
				if (!chaineExistante.matches("(^|;;)"+type+"##"+valeur+"(;;|$)")) {
70
					this.set(champ, chaineExistante+";;"+type+"##"+valeur);
71
				}
193 jp_milcent 72
			}
73
		}
74
	}
119 jpm 75
 
306 jp_milcent 76
	protected void supprimerTypeDansChaineDenormalise(String champ, String type) {
77
		String chaineExistante = renvoyerValeurCorrecte(champ);
78
		if (!chaineExistante.equals("")) {
79
			// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
80
			if (chaineExistante.matches("(^|;;)"+type+"##")) {
81
				chaineExistante = chaineExistante.replaceFirst(type+"##", "");
82
				chaineExistante = chaineExistante.replaceAll(";;;;", ";;");
83
				chaineExistante = chaineExistante.replaceAll("(^;;|;;$)", "");
84
				this.set(champ, chaineExistante);
85
			}
86
		}
87
	}
88
 
89
	protected void remplacerTypeDansChaineDenormalise(String champ, String type, Object valeur) {
90
		if (valeur != null && !valeur.equals("")) {
91
			ajouterChaineDenormaliseAvecType(champ, type, valeur);
92
		} else {
93
			supprimerTypeDansChaineDenormalise(champ, type);
94
		}
95
	}
233 jp_milcent 96
	/**
242 jp_milcent 97
	 * Ajoute un nouvel élément sans type à une chaine dénormalisée.
98
	 * Champ de type "truk" contenant seulement des valeurs séparées par ";;".
99
	 * Si l'élément existe déjà, il ne sera pas ajouté.
100
	 *
101
	 * @param champ le nom du champ dénormalisé
102
	 * @param valeur la valeur à ajouter
103
	 */
104
	protected void ajouterChaineDenormalise(String champ, Object valeur) {
105
		if (valeur instanceof String) {
106
			String chaineExistante = renvoyerValeurCorrecte(champ);
107
			if (chaineExistante.equals("")) {
108
				this.set(champ, valeur);
109
			} else {
110
				// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
111
				if (!chaineExistante.matches("(^|;;)"+valeur+"(;;|$)")) {
112
					this.set(champ, chaineExistante+";;"+valeur);
113
				}
114
			}
115
		}
116
	}
117
 
118
	/**
233 jp_milcent 119
	 * Permet de constuire correctement une chaine dénormalisée unique (champ de type "ce_truk").
120
	 *
121
	 * @param champ le nom du champ dénormalisé
122
	 * @param type le type de la valeur à ajouter
123
	 * @param valeur la valeur à ajouter
124
	 */
125
	protected void setChaineDenormaliseUnique(String champ, String type, Object valeur) {
126
		if (valeur instanceof String) {
127
			this.set(champ, type+"##"+valeur);
128
		}
129
	}
130
 
245 jp_milcent 131
	/**
132
	 * Permet de récupérer pour l'affichage une chaine dénormalisée unique (champ de type "ce_truk").
133
	 *
134
	 * @param champ le nom du champ dénormalisé
135
	 */
136
	protected String getChaineDenormaliseUnique(String champ) {
137
		String sortie = renvoyerValeurCorrecte(champ);
138
 
139
		if (!sortie.equals("")) {
140
			sortie = sortie.replaceFirst("^AUTRE##", "");
141
		}
142
 
143
		return sortie;
144
	}
145
 
208 jp_milcent 146
	protected String getInfoDenormaliseParType(String chaineExistante, String type) {
147
		String sortie = "";
148
		if (!chaineExistante.equals("")) {
149
			String[] valeurs = chaineExistante.split(";;");
150
			for (int i = 0; i < valeurs.length; i++) {
151
				if (valeurs[i].startsWith(type+"##")) {
152
					sortie =  valeurs[i].replaceFirst("^"+type+"##", "");
153
				}
154
			}
155
		}
156
		return sortie;
157
	}
158
 
248 gduche 159
 
233 jp_milcent 160
	/**
248 gduche 161
	 * Permet de récupérer une map avec toutes les valeurs de la chaine truk sous la forme clé => valeur
162
	 *
163
	 * @param champ le nom du champ dénormalisé
164
	 * @return map ou liste en fonction du type de chaine truk (list si champ;;champ;; map si type##champ;;)
165
	 */
166
 
167
	public Object getChaineDenormaliseAsMapOrList(String champ)	{
168
 
169
			Object retourObjet = null;
170
 
171
			String valeurChamp = renvoyerValeurCorrecte(champ);
252 gduche 172
 
173
			if ((valeurChamp!=null)&&(!valeurChamp.trim().equals("")))	{
174
				String[] valeurs = valeurChamp.split(";;");
175
 
176
				if (valeurs.length > 0)	{
177
					if (valeurs[0].contains("##"))	{
178
						// Les champs sont typés, on en fait une Map
179
						HashMap mapValeurs = new HashMap();
180
						for (int i = 0; i < valeurs.length; i++)	{
181
							String typeEtValeur[] = valeurs[i].split("##");
471 gduche 182
							mapValeurs.put(typeEtValeur[1], typeEtValeur[0]);
252 gduche 183
						}
184
						retourObjet = mapValeurs;
248 gduche 185
					}
252 gduche 186
					else	{
187
 
188
						//Les champs ne sont pas typés, on en fait une Liste
189
						LinkedList listeValeurs = new LinkedList<String>();
190
						for (int i = 0; i < valeurs.length; i++)	{
191
							if ((valeurs[i]!=null)&&(!valeurs[i].equals("")))	{
192
								listeValeurs.add(valeurs[i]);
193
							}
249 gduche 194
						}
252 gduche 195
						retourObjet = listeValeurs;
248 gduche 196
					}
252 gduche 197
 
248 gduche 198
				}
199
			}
200
 
201
			return retourObjet;
202
 
203
	}
204
 
205
 
206
	/**
233 jp_milcent 207
	 * Permet de modifier correctement une chaine dénormalisée (champ de type "truk").
208
	 * Remplace par la valeur de la première instance du type indiqué dans la chaine dénormalisée.
209
	 *
210
	 * @param champ le nom du champ dénormalisé
211
	 * @param type le type de la valeur à modifier
212
	 * @param valeur la valeur pour le type en question
213
	 */
242 jp_milcent 214
	protected void modifierChaineDenormaliseParType(String champ, String type, Object valeur) {
233 jp_milcent 215
		if (valeur instanceof String) {
216
			String chaineExistante = renvoyerValeurCorrecte(champ);
217
			if (chaineExistante.equals("")) {
218
				this.set(champ, type+"##"+valeur);
219
			} else {
220
				String[] valeurs = chaineExistante.split(";;");
221
				for (int i = 0; i < valeurs.length; i++) {
222
					if (valeurs[i].startsWith(type+"##") || i == (valeurs.length -1)) {
223
						valeurs[i] = type+"##"+valeur;
224
						break;
225
					}
226
				}
227
				this.set(champ, UtilArray.implode(valeurs, ";;"));
228
			}
229
		}
230
	}
231
 
208 jp_milcent 232
	protected String getInfoDenormaliseParPosition(String chaineExistante, int position) {
233
		String sortie = "";
234
		if (!chaineExistante.equals("")) {
235
			String[] valeurs = chaineExistante.split(";;");
236
			if (valeurs.length >= position) {
237
				for (int i = 0; i < valeurs.length; i++) {
238
					if (i == (position - 1)) {
239
						if (valeurs[i].contains("##")) {
240
							sortie =  valeurs[i].replaceFirst("^[^#]+##", "");
241
						} else {
242
							sortie =  valeurs[i];
243
						}
244
						break;
245
					}
246
				}
247
			}
248
		}
249
		return sortie;
250
	}
251
 
233 jp_milcent 252
	/**
253
	 * Permet de modifier correctement une chaine dénormalisée (champ de type "truk").
254
	 * Remplace par la valeur l'instance dont la position a été indiquée.
242 jp_milcent 255
	 * Si la chaine dénormalisée est vide, l'élement est ajouté quelque soit la position indiquée.
256
	 * Si la position est supérieure au nombre d'élément de la chaine dénormalisé, rien n'est modifié.
233 jp_milcent 257
	 *
258
	 * @param champ le nom du champ dénormalisé
259
	 * @param position le type de la valeur à modifier
260
	 * @param valeur la valeur à remplacer à la position indiquée
261
	 */
242 jp_milcent 262
	protected void modifierChaineDenormaliseParPosition(String champ, int position, Object valeur) {
233 jp_milcent 263
		if (valeur instanceof String) {
264
			String chaineExistante = renvoyerValeurCorrecte(champ);
265
			if (!chaineExistante.equals("")) {
266
				String[] valeurs = chaineExistante.split(";;");
267
				if (valeurs.length == 0) {
268
					this.set(champ, valeur);
269
				} else if (valeurs.length >= position) {
270
					for (int i = 0; i < valeurs.length; i++) {
271
						if (i == (position - 1)) {
272
							valeurs[i] = (String) valeur;
273
							break;
274
						}
275
					}
276
					this.set(champ, UtilArray.implode(valeurs, ";;"));
277
				}
278
			}
279
		}
280
	}
281
 
119 jpm 282
	public String getDateModification() {
283
		return (String) renvoyerValeurCorrecte("cmhl_date_modification");
284
	}
285
 
286
	public String getNotes() {
287
		return (String) renvoyerValeurCorrecte("cmhl_notes");
288
	}
289
 
290
	public String getIdModifierPar() {
291
		return (String) renvoyerValeurCorrecte("cmhl_ce_modifier_par");
292
	}
293
 
294
	public String getIdEtat() {
295
		return (String) renvoyerValeurCorrecte("cmhl_ce_etat");
296
	}
297
 
298
	public String getIp() {
299
		return (String) renvoyerValeurCorrecte("cmhl_ip");
300
	}
193 jp_milcent 301
 
302
	/** (non-Javadoc)
303
	 * @see java.lang.Object#toString()
304
	 */
305
	public String toString() {
306
		String sortie = "";
307
 
308
		// Champs du BaseModelData
309
		Set<String> proprietes = this.getProperties().keySet();
306 jp_milcent 310
		TreeSet<String> proprietesTriees = new TreeSet<String>(proprietes);
311
		for (Iterator<String> it = proprietesTriees.iterator(); it.hasNext();) {
193 jp_milcent 312
			String cle = it.next();
306 jp_milcent 313
			if (this.get(cle) != null && !this.get(cle).equals("")) {
202 jp_milcent 314
				sortie += cle+" : "+this.get(cle)+"\n";
315
			}
193 jp_milcent 316
		}
317
 
318
		return sortie;
319
	}
306 jp_milcent 320
 
321
	public Boolean comparer(BaseModelData objetAComparer) {
322
		Boolean retour = true;
323
		Map<String, Object> a = this.getProperties();
324
		Map<String, Object> b = objetAComparer.getProperties();
325
		if (a.size() != b.size()) {
326
			retour = false;
327
		} else {
328
			Set<String> cles = a.keySet();
329
			Iterator<String> it = cles.iterator();
330
			while (it.hasNext()) {
331
				String cle = it.next();
332
				if (a.get(cle) != null && !a.get(cle).equals(b.get(cle))) {
333
					retour = false;
334
					break;
335
				}
336
			}
337
		}
338
 
339
		return retour;
340
	}
341
 
342
	public Object cloner(BaseModelData nouvelleInstance) {
343
		Map<String, Object> proprietes = this.getProperties();
344
		Set<String> cles = proprietes.keySet();
345
		for (Iterator<String> it = cles.iterator(); it.hasNext();) {
346
			String cle = it.next();
347
			nouvelleInstance.set(cle, this.get(cle));
348
		}
349
 
350
		return nouvelleInstance;
351
	}
385 gduche 352
 
353
	/**
354
	 * Renvoie une chaine de caractère formatée et encodée pour POST avec toutes les propriétés du modèle
355
	 * */
356
	public String obtenirChaineJSON() {
357
 
358
		String chaineJSON = "";
359
 
534 gduche 360
		FastMap hmProperties = (FastMap) getProperties();
385 gduche 361
		Collection<String> keys = hmProperties.keySet();
362
		Iterator<String> it = keys.iterator();
363
 
364
		while (it.hasNext())	{
365
			String key = it.next();
366
			chaineJSON += "cp_" +  key + "=" + hmProperties.get(key);
367
			if (it.hasNext())	{
368
				chaineJSON += "&";
369
			}
370
		}
371
 
372
		URL.encode(chaineJSON);
373
		return chaineJSON;
374
	}
69 jpm 375
}