Subversion Repositories eFlore/Applications.cel

Rev

Rev 109 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 109 Rev 128
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import java.util.Comparator;
3
import java.util.Comparator;
4
import java.util.Iterator;
4
import java.util.Iterator;
5
 
5
 
6
import org.tela_botanica.client.interfaces.Filtrable;
6
import org.tela_botanica.client.interfaces.Filtrable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.modeles.DateObservation;
8
import org.tela_botanica.client.modeles.DateObservation;
9
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
9
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
10
import org.tela_botanica.client.modeles.ListeDateObservation;
10
import org.tela_botanica.client.modeles.ListeDateObservation;
11
import org.tela_botanica.client.modeles.ListeEntiteGeographiqueObservation;
11
import org.tela_botanica.client.modeles.ListeEntiteGeographiqueObservation;
12
import org.tela_botanica.client.modeles.ListeObservation;
12
import org.tela_botanica.client.modeles.ListeObservation;
13
import org.tela_botanica.client.modeles.Observation;
13
import org.tela_botanica.client.modeles.Observation;
14
import org.tela_botanica.client.observation.ObservationMediateur;
14
import org.tela_botanica.client.observation.ObservationMediateur;
15
 
15
 
16
import com.google.gwt.core.client.GWT;
16
import com.google.gwt.core.client.GWT;
17
import com.google.gwt.json.client.JSONArray;
17
import com.google.gwt.json.client.JSONArray;
18
import com.google.gwt.json.client.JSONObject;
18
import com.google.gwt.json.client.JSONObject;
19
import com.google.gwt.user.client.Window;
19
import com.google.gwt.user.client.Window;
20
import com.google.gwt.user.client.ui.Label;
20
import com.google.gwt.user.client.ui.Label;
21
import com.gwtext.client.data.Node;
21
import com.gwtext.client.data.Node;
22
import com.gwtext.client.data.NodeTraversalCallback;
22
import com.gwtext.client.data.NodeTraversalCallback;
23
import com.gwtext.client.data.Tree;
23
import com.gwtext.client.data.Tree;
24
import com.gwtext.client.data.event.NodeListenerAdapter;
24
import com.gwtext.client.data.event.NodeListenerAdapter;
25
import com.gwtext.client.widgets.Component;
25
import com.gwtext.client.widgets.Component;
26
import com.gwtext.client.widgets.Panel;
26
import com.gwtext.client.widgets.Panel;
27
import com.gwtext.client.widgets.event.PanelListenerAdapter;
27
import com.gwtext.client.widgets.event.PanelListenerAdapter;
28
import com.gwtext.client.widgets.tree.TreeNode;
28
import com.gwtext.client.widgets.tree.TreeNode;
29
import com.gwtext.client.widgets.tree.TreePanel;
29
import com.gwtext.client.widgets.tree.TreePanel;
30
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
30
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
31
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
31
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
32
import com.gwtext.client.core.EventObject;
32
import com.gwtext.client.core.EventObject;
33
import com.gwtext.client.core.Ext;
33
import com.gwtext.client.core.Ext;
34
import com.gwtext.client.core.ExtElement;
34
import com.gwtext.client.core.ExtElement;
35
 
35
 
36
/**
36
/**
37
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
37
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
38
 * cliquable
38
 * cliquable
39
 * 
39
 * 
40
 * @author aurelien
40
 * @author aurelien
41
 * 
41
 * 
42
 */
42
 */
43
public class ArbreDateObservationFiltreVue extends Panel implements Rafraichissable,
43
public class ArbreDateObservationFiltreVue extends Panel implements Rafraichissable,
44
		Filtrable {
44
		Filtrable {
45
 
45
 
46
	/**
46
	/**
47
	 * Le médiateur associé à la vue
47
	 * Le médiateur associé à la vue
48
	 */
48
	 */
49
	private ObservationMediateur	observationMediateur		= null;
49
	private ObservationMediateur	observationMediateur		= null;
50
 
50
 
51
	/**
51
	/**
52
	 * Les localites en cours
52
	 * Les localites en cours
53
	 */
53
	 */
54
	private String donneesDateEnCours = "";
54
	private String donneesDateEnCours = "";
55
 
55
 
56
	/**
56
	/**
57
	 * Le treepanel qui affiche l'arbre
57
	 * Le treepanel qui affiche l'arbre
58
	 */
58
	 */
59
	private TreePanel arbreDonneesDates = null;
59
	private TreePanel arbreDonneesDates = null;
60
 
60
 
61
	/**
61
	/**
62
	 * La structure de donnees qui stocke l'arbre. Utilisee a ce niveau car trop liee a la vue
62
	 * La structure de donnees qui stocke l'arbre. Utilisee a ce niveau car trop liee a la vue
63
	 */
63
	 */
64
	
64
	
65
	private Tree donneesDates = new Tree();
65
	private Tree donneesDates = new Tree();
66
	
66
	
67
	/**
67
	/**
68
	 * booléen d'initialisation
68
	 * booléen d'initialisation
69
	 */
69
	 */
70
	private boolean estInstancie = false;
70
	private boolean estInstancie = false;
71
 
71
 
72
	/**
72
	/**
73
	 * booléen d'etat
73
	 * booléen d'etat
74
	 */
74
	 */
75
	private boolean filtreModifie = false;
75
	private boolean filtreModifie = false;
76
	
76
	
77
	private boolean arbreCharge = false ;
77
	private boolean arbreCharge = false ;
78
 
78
 
79
	private String nomFiltre = "" ;
79
	private String nomFiltre = "" ;
80
	
80
	
81
	/**
81
	/**
82
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
82
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
83
	 */
83
	 */
84
	@SuppressWarnings("unused")
84
	@SuppressWarnings("unused")
85
	private ArbreDateObservationFiltreVue() {
85
	private ArbreDateObservationFiltreVue() {
86
		super();
86
		super();
87
	}
87
	}
88
 
88
 
89
	/**
89
	/**
90
	 * Constructeur avec paramètres
90
	 * Constructeur avec paramètres
91
	 * 
91
	 * 
92
	 * @param im
92
	 * @param im
93
	 *            le médiateur à associer
93
	 *            le médiateur à associer
94
	 */
94
	 */
95
	public ArbreDateObservationFiltreVue(ObservationMediateur obs) {
95
	public ArbreDateObservationFiltreVue(ObservationMediateur obs) {
96
 
96
 
97
		// on crée le panel
97
		// on crée le panel
98
		super("Dates");
98
		super("Dates");
99
		
99
		
100
		this.observationMediateur = obs;
100
		this.observationMediateur = obs;
101
 
101
 
102
		arbreDonneesDates = new TreePanel();
102
		arbreDonneesDates = new TreePanel();
103
 
103
 
104
		this.setPaddings(5);
104
		this.setPaddings(5);
105
 
105
 
106
		this.setCollapsible(true);
106
		this.setCollapsible(true);
107
		this.setAutoWidth(true);
107
		this.setAutoWidth(true);
108
		
108
		
109
		if (GWT.isScript()) {
109
		if (GWT.isScript()) {
110
			setAutoScroll(true);
110
			setAutoScroll(true);
111
		}
111
		}
112
 
112
 
113
		// on ajoute les listeners
113
		// on ajoute les listeners
114
		ajouterListenersPanel();
114
		ajouterListenersPanel();
115
		estInstancie = false;
115
		estInstancie = false;
116
	}
116
	}
117
 
117
 
118
	/**
118
	/**
119
	 * Ajoute les listeners pour le rendu du panel
119
	 * Ajoute les listeners pour le rendu du panel
120
	 */
120
	 */
121
	private void ajouterListenersPanel() {
121
	private void ajouterListenersPanel() {
122
		  this.addListener(new PanelListenerAdapter() {
122
		  this.addListener(new PanelListenerAdapter() {
123
 
123
 
124
			// on instancie réellement les composants au moment du rendu pour
124
			// on instancie réellement les composants au moment du rendu pour
125
			// accélérer l'affichage
125
			// accélérer l'affichage
126
			// et éviter des bugs
126
			// et éviter des bugs
127
			public void onRender(Component component) {
127
			public void onRender(Component component) {
128
 
128
 
129
				// on interdit le drag and drop dans l'arbre
129
				// on interdit le drag and drop dans l'arbre
130
				arbreDonneesDates.setEnableDD(false);
130
				arbreDonneesDates.setEnableDD(false);
131
				arbreDonneesDates.setId("x-view-tree-filter-date");
131
				arbreDonneesDates.setId("x-view-tree-filter-date");
132
				arbreDonneesDates.setAutoWidth(false);
132
				arbreDonneesDates.setAutoWidth(false);
133
				
133
				
134
				arbreDonneesDates.setBorder(false);
134
				arbreDonneesDates.setBorder(false);
135
 
135
 
136
				// on crée une racine pour l'arbre
136
				// on crée une racine pour l'arbre
137
				TreeNode root = new TreeNode("Dates");
137
				TreeNode root = new TreeNode("Dates");
138
				root.setId("racine_date");
138
				root.setId("racine_date");
139
				String[] usObject = { "Dates" };
139
				String[] usObject = { "Dates" };
140
				root.setUserObject(usObject);
140
				root.setUserObject(usObject);
141
 
141
 
142
				arbreDonneesDates.setRootNode(root);
142
				arbreDonneesDates.setRootNode(root);
143
				arbreDonneesDates.setRootVisible(true);
143
				arbreDonneesDates.setRootVisible(true);
144
				arbreDonneesDates.setBorder(false);
144
				arbreDonneesDates.setBorder(false);
145
				root.setExpandable(true) ;
145
				root.setExpandable(true) ;
146
 
146
 
147
				add(arbreDonneesDates);
147
				add(arbreDonneesDates);
148
 
148
 
149
				// on ajoute les listeners d'évenements
149
				// on ajoute les listeners d'évenements
150
				ajouterListeners();
150
				ajouterListeners();
151
 
151
 
152
				
152
				
153
				// enfin on considère le composant comme instancié
153
				// enfin on considère le composant comme instancié
154
				estInstancie = true;
154
				estInstancie = true;
155
 
155
 
156
				
156
				
157
			}
157
			}
158
 
158
 
159
		});
159
		});
160
	}
160
	}
161
 
161
 
162
	
162
	
163
	
163
	
164
	/**
164
	/**
165
	 * ajoute les listeners pour les boutons et le cochage des entites
165
	 * ajoute les listeners pour les boutons et le cochage des entites
166
	 */
166
	 */
167
	private void ajouterListeners() {
167
	private void ajouterListeners() {
168
		
168
		
169
		arbreDonneesDates.addListener(new TreePanelListenerAdapter() {
169
		arbreDonneesDates.addListener(new TreePanelListenerAdapter() {
170
			
170
			
171
			public void onClick(TreeNode node, EventObject e) {
171
			public void onClick(TreeNode node, EventObject e) {
172
				
172
				
173
				nomFiltre = "" ;
173
				nomFiltre = "" ;
174
				donneesDateEnCours = "" ;
174
				donneesDateEnCours = "" ;
175
				String nomPere = "" ;
175
				String nomPere = "" ;
176
				String nomGrandPere = "" ;
176
				String nomGrandPere = "" ;
177
				
177
				
178
				switch(node.getDepth()) 
178
				switch(node.getDepth()) 
179
				{
179
				{
180
					case 0:
180
					case 0:
181
						if(!arbreCharge)
181
						if(!arbreCharge)
182
						{
182
						{
183
							ExtElement masked = Ext.get(arbreDonneesDates.getId());
-
 
184
							masked.mask("Chargement");
-
 
185
							arbreCharge = true ;
183
						/*	arbreCharge = true ;
186
							observationMediateur.obtenirDatesObservation() ;
184
							observationMediateur.obtenirDatesObservation() ;*/
-
 
185
							arbreDonneesDates.getRootNode().expand();
187
						}
186
						}
188
						else 
187
						else 
189
						{
188
						{
190
							observationMediateur.obtenirNombreObservation() ;
189
							observationMediateur.obtenirNombreObservation() ;
191
						}
190
						}
192
						return ;
191
						return ;
193
					case 3: nomFiltre += "annee,mois,jour";
192
					case 3: nomFiltre += "annee,mois,jour";
194
						nomPere = ((String[])node.getParentNode().getUserObject())[1] ;
193
						nomPere = ((String[])node.getParentNode().getUserObject())[1] ;
195
						nomGrandPere = ((String[])node.getParentNode().getParentNode().getUserObject())[1] ;
194
						nomGrandPere = ((String[])node.getParentNode().getParentNode().getUserObject())[1] ;
196
						donneesDateEnCours += nomGrandPere+","+nomPere+","+((String[])node.getUserObject())[1] ;
195
						donneesDateEnCours += nomGrandPere+","+nomPere+","+((String[])node.getUserObject())[1] ;
197
						break;
196
						break;
198
					case 2: nomFiltre += "annee,mois"; 
197
					case 2: nomFiltre += "annee,mois"; 
199
						nomPere = ((String[])node.getParentNode().getUserObject())[1] ;
198
						nomPere = ((String[])node.getParentNode().getUserObject())[1] ;
200
						donneesDateEnCours += nomPere+","+((String[])node.getUserObject())[1] ;
199
						donneesDateEnCours += nomPere+","+((String[])node.getUserObject())[1] ;
201
						break;
200
						break;
202
					case 1: nomFiltre += "annee"; 
201
					case 1: nomFiltre += "annee"; 
203
						donneesDateEnCours += ((String[])node.getUserObject())[1] ;
202
						donneesDateEnCours += ((String[])node.getUserObject())[1] ;
204
						break;
203
						break;
205
					default: 
204
					default: 
206
						break;
205
						break;
207
				}
206
				}
208
				
207
				
209
				filtreModifie = true ;
208
				filtreModifie = true ;
210
				observationMediateur.obtenirNombreObservation() ;
209
				observationMediateur.obtenirNombreObservation() ;
211
				
210
				
212
			}
211
			}
213
			
212
			
214
		}) ;
213
		}) ;
215
		
214
		
216
		arbreDonneesDates.getRootNode().addListener(new TreeNodeListenerAdapter() {
215
		arbreDonneesDates.getRootNode().addListener(new TreeNodeListenerAdapter() {
217
			
216
			
218
			public void onExpand(Node node) {
217
			public void onExpand(Node node) {
219
				if(!arbreCharge)
218
				if(!arbreCharge)
220
				{
219
				{
221
					ExtElement masked = Ext.get(arbreDonneesDates.getId());
-
 
222
					masked.mask("Chargement");
-
 
223
					observationMediateur.obtenirDatesObservation() ;
220
					observationMediateur.obtenirDatesObservation() ;
224
					arbreCharge = true ;
221
					arbreCharge = true ;
225
				}
222
				}
226
			}
223
			}
227
			
224
			
228
		}) ;
225
		}) ;
229
	}
226
	}
230
 
227
 
231
	/**
228
	/**
232
	 * Méthode héritée de l'interface rafraichissable
229
	 * Méthode héritée de l'interface rafraichissable
233
	 */
230
	 */
234
	public void rafraichir(Object nouvelleDonnees,
231
	public void rafraichir(Object nouvelleDonnees,
235
			boolean repandreRaffraichissement) {
232
			boolean repandreRaffraichissement) {
236
		
233
		
237
		if (nouvelleDonnees instanceof ListeDateObservation) {
234
		if (nouvelleDonnees instanceof ListeDateObservation) {
238
		
235
		
239
			String annee=null;
236
			String annee=null;
240
			String mois=null;
237
			String mois=null;
241
			String jour=null;
238
			String jour=null;
242
			
239
			
243
			ListeDateObservation data = (ListeDateObservation) nouvelleDonnees ;
240
			ListeDateObservation data = (ListeDateObservation) nouvelleDonnees ;
244
		
241
		
245
				// on crée un arbre vide
242
				// on crée un arbre vide
246
				TreeNode root = new TreeNode();
243
				TreeNode root = new TreeNode();
247
				root.setId("racine_date");
244
				root.setId("racine_date");
248
				root.setText("Dates");
245
				root.setText("Dates");
249
				String[] usObjRoot = { "Dates", "Dates"};
246
				String[] usObjRoot = { "Dates", "Dates"};
250
				root.setUserObject(usObjRoot);
247
				root.setUserObject(usObjRoot);
251
				donneesDates.setRootNode(root);
248
				donneesDates.setRootNode(root);
252
			
249
			
253
			// on la parse et on récupère les informations qui nous interessent
250
			// on la parse et on récupère les informations qui nous interessent
254
			for (Iterator<String> it= data.keySet().iterator(); it.hasNext();) {
251
			for (Iterator<String> it= data.keySet().iterator(); it.hasNext();) {
255
				
252
				
256
				DateObservation ent=(DateObservation) data.get(it.next());
253
				DateObservation ent=(DateObservation) data.get(it.next());
257
				
254
				
258
				annee= ent.getAnnee() ;
255
				annee= ent.getAnnee() ;
259
				mois= ent.getMois() ;
256
				mois= ent.getMois() ;
260
				String moisLettre = renvoyerMois(Integer.parseInt(mois)) ;
257
				String moisLettre = renvoyerMois(Integer.parseInt(mois)) ;
261
				jour= ent.getJour() ;
258
				jour= ent.getJour() ;
262
				
259
				
263
				if(annee.contains("0000")) {
260
				if(annee.contains("0000")) {
264
					annee="Inconnue" ;
261
					annee="Inconnue" ;
265
				}
262
				}
266
				
263
				
267
				if(jour.contains("00")) {
264
				if(jour.contains("00")) {
268
					jour="Inconnue" ;
265
					jour="Inconnue" ;
269
				}
266
				}
270
				
267
				
271
				Node noeudMemeAnnee = donneesDates.getNodeById(""+annee);
268
				Node noeudMemeAnnee = donneesDates.getNodeById(""+annee);
272
				// si la région existe déjà
269
				// si la région existe déjà
273
					if(noeudMemeAnnee != null)
270
					if(noeudMemeAnnee != null)
274
					{
271
					{
275
						// on teste si la localité existe
272
						// on teste si la localité existe
276
						Node noeudMemeMois = donneesDates.getNodeById(""+(annee+mois));
273
						Node noeudMemeMois = donneesDates.getNodeById(""+(annee+mois));
277
						if(noeudMemeMois != null)
274
						if(noeudMemeMois != null)
278
						{
275
						{
279
							// enfin on teste si le lieu dit existe
276
							// enfin on teste si le lieu dit existe
280
							Node noeudMemeJour = donneesDates.getNodeById(""+(annee+mois+jour));
277
							Node noeudMemeJour = donneesDates.getNodeById(""+(annee+mois+jour));
281
							if(noeudMemeJour != null)
278
							if(noeudMemeJour != null)
282
							{
279
							{
283
								// tous les noeuds existent déjà, normalement ça ne devrait pas arriver
280
								// tous les noeuds existent déjà, normalement ça ne devrait pas arriver
284
							}
281
							}
285
							else
282
							else
286
							{
283
							{
287
								// enfin on ne crée que le noeud du lieu dit
284
								// enfin on ne crée que le noeud du lieu dit
288
								TreeNode node_jour = new TreeNode();
285
								TreeNode node_jour = new TreeNode();
289
								node_jour.setId(""+(annee+mois+jour));
286
								node_jour.setId(""+(annee+mois+jour));
290
								node_jour.setText(jour);
287
								node_jour.setText(jour);
291
								noeudMemeMois.appendChild(node_jour) ;
288
								noeudMemeMois.appendChild(node_jour) ;
292
								String[] usObj = {jour,jour};
289
								String[] usObj = {jour,jour};
293
								node_jour.setUserObject(usObj);
290
								node_jour.setUserObject(usObj);
294
							}
291
							}
295
						}
292
						}
296
						else
293
						else
297
						{
294
						{
298
							TreeNode node_mois = new TreeNode();
295
							TreeNode node_mois = new TreeNode();
299
							node_mois.setId(""+(annee+mois));
296
							node_mois.setId(""+(annee+mois));
300
							node_mois.setText(moisLettre);
297
							node_mois.setText(moisLettre);
301
							noeudMemeAnnee.appendChild(node_mois) ;
298
							noeudMemeAnnee.appendChild(node_mois) ;
302
							String[] usObj = {moisLettre,mois};
299
							String[] usObj = {moisLettre,mois};
303
							node_mois.setUserObject(usObj);
300
							node_mois.setUserObject(usObj);
304
							
301
							
305
							TreeNode node_jour = new TreeNode();
302
							TreeNode node_jour = new TreeNode();
306
							node_jour.setId(""+(annee+mois+jour));
303
							node_jour.setId(""+(annee+mois+jour));
307
							node_jour.setText(jour);
304
							node_jour.setText(jour);
308
							node_mois.appendChild(node_jour) ;
305
							node_mois.appendChild(node_jour) ;
309
							String[] usObj2 = {jour,jour};
306
							String[] usObj2 = {jour,jour};
310
							node_jour.setUserObject(usObj2);
307
							node_jour.setUserObject(usObj2);
311
							
308
							
312
						}
309
						}
313
					}
310
					}
314
					else
311
					else
315
					{
312
					{
316
						TreeNode node_annee = new TreeNode();
313
						TreeNode node_annee = new TreeNode();
317
						node_annee.setId(""+annee);
314
						node_annee.setId(""+annee);
318
						node_annee.setText(annee);
315
						node_annee.setText(annee);
319
						root.appendChild(node_annee) ;
316
						root.appendChild(node_annee) ;
320
						String[] usObj = {annee, annee};
317
						String[] usObj = {annee, annee};
321
						node_annee.setUserObject(usObj);
318
						node_annee.setUserObject(usObj);
322
						
319
						
323
						TreeNode node_mois = new TreeNode();
320
						TreeNode node_mois = new TreeNode();
324
						node_mois.setId(""+(annee+mois));
321
						node_mois.setId(""+(annee+mois));
325
						node_mois.setText(moisLettre);
322
						node_mois.setText(moisLettre);
326
						node_annee.appendChild(node_mois) ;
323
						node_annee.appendChild(node_mois) ;
327
						String[] usObj2 = {moisLettre,mois};
324
						String[] usObj2 = {moisLettre,mois};
328
						node_mois.setUserObject(usObj2);
325
						node_mois.setUserObject(usObj2);
329
						
326
						
330
						TreeNode node_jour = new TreeNode();
327
						TreeNode node_jour = new TreeNode();
331
						node_jour.setId(""+(annee+mois+jour));
328
						node_jour.setId(""+(annee+mois+jour));
332
						node_jour.setText(jour);
329
						node_jour.setText(jour);
333
						node_mois.appendChild(node_jour) ;
330
						node_mois.appendChild(node_jour) ;
334
						String[] usObj3 = {jour,jour};
331
						String[] usObj3 = {jour,jour};
335
						node_jour.setUserObject(usObj3);
332
						node_jour.setUserObject(usObj3);
336
					}
333
					}
337
 
334
 
338
				}
335
				}
339
			
336
			
340
				// on vide tous les noeuds
337
				// on vide tous les noeuds
341
				arbreDonneesDates.getRootNode().eachChild(new NodeTraversalCallback() {
338
				arbreDonneesDates.getRootNode().eachChild(new NodeTraversalCallback() {
342
	
339
	
343
					public boolean execute(Node node) {
340
					public boolean execute(Node node) {
344
	
341
	
345
						node.remove();
342
						node.remove();
346
						return true;
343
						return true;
347
					}
344
					}
348
	
345
	
349
				});
346
				});
350
 
347
 
351
				// et on recopie le nouvel arbre
348
				// et on recopie le nouvel arbre
352
				copierFilsNoeud(donneesDates.getRootNode(), arbreDonneesDates
349
				copierFilsNoeud(donneesDates.getRootNode(), arbreDonneesDates
353
						.getRootNode());
350
						.getRootNode());
354
	
351
	
355
				// on trie
352
				// on trie
356
				root.sort(comparerNoeuds()) ;
353
				root.sort(comparerNoeuds()) ;
357
				
354
				
358
				// si l'arbre n'était pas encore considéré comme instancié
355
				// si l'arbre n'était pas encore considéré comme instancié
359
				if (!estInstancie) {
356
				if (!estInstancie) {
360
					// on signale que oui
357
					// on signale que oui
361
					estInstancie = true;
358
					estInstancie = true;
362
				}
359
				}
363
				
-
 
364
				ExtElement masked = Ext.get(arbreDonneesDates.getId());
-
 
365
				masked.unmask();
360
				
366
	
361
	
367
				// l'état du filtre est réinitialisé
362
				// l'état du filtre est réinitialisé
368
				filtreModifie = false;
363
				filtreModifie = false;
369
				//show() ;
364
				//show() ;
370
				doLayout();
365
				doLayout();
371
 
366
 
372
			}
367
			}
373
		
368
		
374
		if(nouvelleDonnees instanceof Observation)
369
		if(nouvelleDonnees instanceof Observation)
375
		{			
370
		{
-
 
371
			// si l'arbre n'est pas encore chargé, on ne tient pas compte de l'ajout
-
 
372
			// l'arbre complet sera de toute façon renvoyé plus tard lors du premier chargement
-
 
373
			// de l'arbre
-
 
374
			if(!arbreCharge) {
-
 
375
				return;
-
 
376
			}
-
 
377
			
376
			Observation ent = (Observation)nouvelleDonnees ;
378
			Observation ent = (Observation)nouvelleDonnees ;
377
			String dateSpl[] = ent.getDate().split("/") ;
379
			String dateSpl[] = ent.getDate().split("/") ;
378
			
380
			
379
			String annee= dateSpl[2];
381
			String annee= dateSpl[2];
380
			String mois= dateSpl[1];
382
			String mois= dateSpl[1];
381
			String jour= dateSpl[0];
383
			String jour= dateSpl[0];
382
			
384
			
383
			String moisLettre = renvoyerMois(Integer.parseInt(mois)) ;
385
			String moisLettre = renvoyerMois(Integer.parseInt(mois)) ;
384
			
386
			
385
			Node root = arbreDonneesDates.getRootNode() ;
387
			Node root = arbreDonneesDates.getRootNode() ;
386
			
388
			
387
			if(annee.contains("0000") || annee.equals(null)) {
389
			if(annee.contains("0000") || annee.equals(null)) {
388
				annee="Inconnue" ;
390
				annee="Inconnue" ;
389
			}
391
			}
390
			
392
			
391
			if(jour.contains("00") || jour.equals(null)) {
393
			if(jour.contains("00") || jour.equals(null)) {
392
				jour="Inconnue" ;
394
				jour="Inconnue" ;
393
			}
395
			}
394
			
396
			
395
			Node noeudMemeAnnee = donneesDates.getNodeById(""+annee);
397
			Node noeudMemeAnnee = donneesDates.getNodeById(""+annee);
396
			// si la région existe déjà
398
			// si la région existe déjà
397
				if(noeudMemeAnnee != null)
399
				if(noeudMemeAnnee != null)
398
				{	
400
				{	
399
					// on teste si la localité existe
401
					// on teste si la localité existe
400
					Node noeudMemeMois = donneesDates.getNodeById(""+(annee+mois));
402
					Node noeudMemeMois = donneesDates.getNodeById(""+(annee+mois));
401
					if(noeudMemeMois != null)
403
					if(noeudMemeMois != null)
402
					{
404
					{
403
						// enfin on teste si le lieu dit existe
405
						// enfin on teste si le lieu dit existe
404
						Node noeudMemeJour = donneesDates.getNodeById(""+(annee+mois+jour));
406
						Node noeudMemeJour = donneesDates.getNodeById(""+(annee+mois+jour));
405
						if(noeudMemeJour != null)
407
						if(noeudMemeJour != null)
406
						{
408
						{
407
							// tous les noeuds existent déjà, normalement ça ne devrait pas arriver
409
							// tous les noeuds existent déjà, normalement ça ne devrait pas arriver
408
						}
410
						}
409
						else
411
						else
410
						{
412
						{
411
							// enfin on ne crée que le noeud du lieu dit
413
							// enfin on ne crée que le noeud du lieu dit
412
							TreeNode node_jour = new TreeNode();
414
							TreeNode node_jour = new TreeNode();
413
							node_jour.setId(""+(annee+mois+jour));
415
							node_jour.setId(""+(annee+mois+jour));
414
							node_jour.setText(jour);
416
							node_jour.setText(jour);
415
							String[] usObj = {jour,jour};
417
							String[] usObj = {jour,jour};
416
							node_jour.setUserObject(usObj);
418
							node_jour.setUserObject(usObj);
417
							noeudMemeMois.appendChild(node_jour) ;
419
							noeudMemeMois.appendChild(node_jour) ;
418
							
420
							
419
							root.sort(comparerNoeuds()) ;
421
							root.sort(comparerNoeuds()) ;
420
						}
422
						}
421
					}
423
					}
422
					else
424
					else
423
					{
425
					{
424
						TreeNode node_mois = new TreeNode();
426
						TreeNode node_mois = new TreeNode();
425
						node_mois.setId(""+(annee+mois));
427
						node_mois.setId(""+(annee+mois));
426
						node_mois.setText(moisLettre);
428
						node_mois.setText(moisLettre);
427
						String[] usObj = {moisLettre,mois};
429
						String[] usObj = {moisLettre,mois};
428
						node_mois.setUserObject(usObj);
430
						node_mois.setUserObject(usObj);
429
						noeudMemeAnnee.appendChild(node_mois) ;
431
						noeudMemeAnnee.appendChild(node_mois) ;
430
						
432
						
431
						Window.alert("on crée on nouveau mois "+node_mois.getId()) ;
433
						Window.alert("on crée on nouveau mois "+node_mois.getId()) ;
432
						
434
						
433
						TreeNode node_jour = new TreeNode();
435
						TreeNode node_jour = new TreeNode();
434
						node_jour.setId(""+(annee+mois+jour));
436
						node_jour.setId(""+(annee+mois+jour));
435
						node_jour.setText(jour);
437
						node_jour.setText(jour);
436
						String[] usObj2 = {jour,jour};
438
						String[] usObj2 = {jour,jour};
437
						node_jour.setUserObject(usObj2);
439
						node_jour.setUserObject(usObj2);
438
						node_mois.appendChild(node_jour) ;
440
						node_mois.appendChild(node_jour) ;
439
						
441
						
440
						root.sort(comparerNoeuds()) ;
442
						root.sort(comparerNoeuds()) ;
441
					}
443
					}
442
			}
444
			}
443
			else
445
			else
444
			{
446
			{
445
				
447
				
446
				TreeNode node_annee = new TreeNode();
448
				TreeNode node_annee = new TreeNode();
447
				node_annee.setId(""+annee);
449
				node_annee.setId(""+annee);
448
				node_annee.setText(annee);
450
				node_annee.setText(annee);
449
				String[] usObj = {annee,annee};
451
				String[] usObj = {annee,annee};
450
				node_annee.setUserObject(usObj);
452
				node_annee.setUserObject(usObj);
451
				root.appendChild(node_annee) ;
453
				root.appendChild(node_annee) ;
452
				
454
				
453
				TreeNode node_mois = new TreeNode();
455
				TreeNode node_mois = new TreeNode();
454
				node_mois.setId(""+(annee+mois));
456
				node_mois.setId(""+(annee+mois));
455
				node_mois.setText(moisLettre);
457
				node_mois.setText(moisLettre);
456
				String[] usObj2 = {moisLettre,mois};
458
				String[] usObj2 = {moisLettre,mois};
457
				node_mois.setUserObject(usObj2);
459
				node_mois.setUserObject(usObj2);
458
				node_annee.appendChild(node_mois) ;
460
				node_annee.appendChild(node_mois) ;
459
				
461
				
460
				TreeNode node_jour = new TreeNode();
462
				TreeNode node_jour = new TreeNode();
461
				node_jour.setId(""+(annee+mois+jour));
463
				node_jour.setId(""+(annee+mois+jour));
462
				node_jour.setText(jour);
464
				node_jour.setText(jour);
463
				String[] usObj3 = {jour,jour};
465
				String[] usObj3 = {jour,jour};
464
				node_jour.setUserObject(usObj3);
466
				node_jour.setUserObject(usObj3);
465
				node_mois.appendChild(node_jour) ;
467
				node_mois.appendChild(node_jour) ;
466
				
468
				
467
				// TODO : améliorer la compararaison des noeuds
469
				// TODO : améliorer la compararaison des noeuds
468
				root.sort(comparerNoeuds()) ;
470
				root.sort(comparerNoeuds()) ;
469
			}
471
			}
470
				
472
				
471
				arbreDonneesDates.doLayout() ;
473
				arbreDonneesDates.doLayout() ;
472
		}
474
		}
473
	}
475
	}
474
 
476
 
475
 
477
 
476
	/**
478
	/**
477
	 * Accesseur pour le panneau contenant l'arbre
479
	 * Accesseur pour le panneau contenant l'arbre
478
	 * 
480
	 * 
479
	 * @return le panneau de l'arbre des mots clés
481
	 * @return le panneau de l'arbre des mots clés
480
	 */
482
	 */
481
	public TreePanel getArbreMotsCles() {
483
	public TreePanel getArbreMotsCles() {
482
		return arbreDonneesDates;
484
		return arbreDonneesDates;
483
	}
485
	}
484
 
486
 
485
	/**
487
	/**
486
	 * Méthode héritée de Filtrable renvoie le nom du filtre
488
	 * Méthode héritée de Filtrable renvoie le nom du filtre
487
	 */
489
	 */
488
	public String renvoyerNomFiltre() {
490
	public String renvoyerNomFiltre() {
489
 
491
 
490
		return "Dates";
492
		return "Dates";
491
	}
493
	}
492
 
494
 
493
	/**
495
	/**
494
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
496
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
495
	 * 
497
	 * 
496
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
498
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
497
	 */
499
	 */
498
	public String[] renvoyerValeursAFiltrer() {
500
	public String[] renvoyerValeursAFiltrer() {
499
 
501
 
500
		valider();
502
		valider();
501
		
503
		
502
		String valeursFiltrees[] = {nomFiltre, donneesDateEnCours } ;
504
		String valeursFiltrees[] = {nomFiltre, donneesDateEnCours } ;
503
 
505
 
504
		return valeursFiltrees;
506
		return valeursFiltrees;
505
	}
507
	}
506
 
508
 
507
	/**
509
	/**
508
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
510
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
509
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
511
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
510
	 * 
512
	 * 
511
	 * @param ndPereOriginal
513
	 * @param ndPereOriginal
512
	 *            le père des noeuds de l'arbre original
514
	 *            le père des noeuds de l'arbre original
513
	 * @param ndPereCopie
515
	 * @param ndPereCopie
514
	 *            le père qui va recevoir les copies
516
	 *            le père qui va recevoir les copies
515
	 */
517
	 */
516
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
518
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
517
		if (ndPereCopie != null && ndPereOriginal != null) {
519
		if (ndPereCopie != null && ndPereOriginal != null) {
518
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
520
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
519
 
521
 
520
			for (int i = 0; i < ndNodeFils.length; i++) {
522
			for (int i = 0; i < ndNodeFils.length; i++) {
521
 
523
 
522
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
524
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
523
				TreeNode child = new TreeNode(usObj[0]);
525
				TreeNode child = new TreeNode(usObj[0]);
524
				child.setUserObject(usObj);
526
				child.setUserObject(usObj);
525
				ndPereCopie.appendChild(child);
527
				ndPereCopie.appendChild(child);
526
 
528
 
527
				if (!ndNodeFils[i].isLeaf()) {
529
				if (!ndNodeFils[i].isLeaf()) {
528
					copierFilsNoeud(ndNodeFils[i], child);
530
					copierFilsNoeud(ndNodeFils[i], child);
529
				}
531
				}
530
 
532
 
531
			}
533
			}
532
		}
534
		}
533
	}
535
	}
534
 
536
 
535
	/**
537
	/**
536
	 * Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
538
	 * Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
537
	 */
539
	 */
538
	public boolean renvoyerEtatFiltre() {
540
	public boolean renvoyerEtatFiltre() {
539
 
541
 
540
		return filtreModifie;
542
		return filtreModifie;
541
	}
543
	}
542
 
544
 
543
	public void valider() {
545
	public void valider() {
544
		
546
		
545
		if (estInstancie) {
547
		if (estInstancie) {
546
			
548
			
547
		}
549
		}
548
	}
550
	}
549
	
551
	
550
	public Comparator<TreeNode> comparerNoeuds()
552
	public Comparator<TreeNode> comparerNoeuds()
551
	{
553
	{
552
		return new Comparator<TreeNode>() {
554
		return new Comparator<TreeNode>() {
553
 
555
 
554
			public int compare(TreeNode o1, TreeNode o2) {
556
			public int compare(TreeNode o1, TreeNode o2) {
555
				
557
				
556
				String n1 = ((String[])o1.getUserObject())[1] ;
558
				String n1 = ((String[])o1.getUserObject())[1] ;
557
				String n2 = ((String[])o2.getUserObject())[1] ;
559
				String n2 = ((String[])o2.getUserObject())[1] ;
558
				
560
				
559
				return n1.compareTo(n2) ;
561
				return n1.compareTo(n2) ;
560
			}
562
			}
561
			
563
			
562
		} ;
564
		} ;
563
	}
565
	}
564
	
566
	
565
	public String renvoyerMois(int numMois) {
567
	public String renvoyerMois(int numMois) {
566
		
568
		
567
		switch (numMois) {
569
		switch (numMois) {
568
		case 1:
570
		case 1:
569
			return "janvier" ;
571
			return "janvier" ;
570
		case 2:
572
		case 2:
571
			return "fevrier" ;
573
			return "fevrier" ;
572
		case 3:
574
		case 3:
573
			return "mars" ;
575
			return "mars" ;
574
		case 4:
576
		case 4:
575
			return "avril" ;
577
			return "avril" ;
576
		case 5:
578
		case 5:
577
			return "mai" ;
579
			return "mai" ;
578
		case 6:
580
		case 6:
579
			return "juin" ;
581
			return "juin" ;
580
		case 7:
582
		case 7:
581
			return "juillet" ;
583
			return "juillet" ;
582
		case 8:
584
		case 8:
583
			return "août" ;
585
			return "août" ;
584
		case 9:
586
		case 9:
585
			return "septembre" ;
587
			return "septembre" ;
586
		case 10:
588
		case 10:
587
			return "octobre" ;
589
			return "octobre" ;
588
		case 11:
590
		case 11:
589
			return "novembre" ;
591
			return "novembre" ;
590
		case 12:
592
		case 12:
591
			return "décembre" ;
593
			return "décembre" ;
592
		default:
594
		default:
593
			return "Inconnue" ;
595
			return "Inconnue" ;
594
		}
596
		}
595
		
597
		
596
	}
598
	}
597
 
599
 
598
	public void raz() {
600
	public void raz() {
599
				
601
				
600
		arbreCharge = false ;
602
		arbreCharge = false ;
601
		arbreDonneesDates.clear() ;
603
		arbreDonneesDates.clear() ;
602
		
604
		
603
		TreeNode root = new TreeNode("Dates");
605
		TreeNode root = new TreeNode("Dates");
604
		root.setId("racine_date");
606
		root.setId("racine_date");
605
		String[] usObject = { "Dates" };
607
		String[] usObject = { "Dates" };
606
		root.setUserObject(usObject);
608
		root.setUserObject(usObject);
607
 
609
 
608
		arbreDonneesDates.setRootNode(root);
610
		arbreDonneesDates.setRootNode(root);
609
		
611
		
610
		arbreDonneesDates.getRootNode().addListener(new TreeNodeListenerAdapter() {
612
		arbreDonneesDates.getRootNode().addListener(new TreeNodeListenerAdapter() {
611
			
613
			
612
			public void onExpand(Node node) {
614
			public void onExpand(Node node) {
613
				if(!arbreCharge)
615
				if(!arbreCharge)
614
				{
616
				{
615
					observationMediateur.obtenirDatesObservation() ;
617
					observationMediateur.obtenirDatesObservation() ;
616
					arbreCharge = true ;
618
					arbreCharge = true ;
617
				}
619
				}
618
			}
620
			}
619
			
621
			
620
		}) ;
622
		}) ;
621
		
623
		
622
		this.doLayout() ;
624
		this.doLayout() ;
623
		
625
		
624
	}
626
	}
625
 
627
 
626
 
628
 
627
}
629
}