Subversion Repositories eFlore/Applications.coel

Rev

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

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