Subversion Repositories eFlore/Applications.coel

Rev

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

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