Subversion Repositories eFlore/Applications.cel

Rev

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

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