Subversion Repositories eFlore/Applications.cel

Rev

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

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