Subversion Repositories eFlore/Applications.coel

Rev

Rev 891 | Rev 974 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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