Subversion Repositories eFlore/Applications.coel

Rev

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

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