Subversion Repositories eFlore/Applications.coel

Rev

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

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