Subversion Repositories eFlore/Applications.cel

Rev

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

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