Subversion Repositories eFlore/Applications.coel

Rev

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

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