Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 168 Rev 195
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Filtrable;
4
import org.tela_botanica.client.interfaces.Filtrable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.observation.ObservationMediateur;
6
import org.tela_botanica.client.observation.ObservationMediateur;
7
 
-
 
8
import com.google.gwt.core.client.JavaScriptObject;
-
 
9
import com.google.gwt.user.client.Window;
7
 
10
import com.google.gwt.user.client.ui.Label;
8
import com.google.gwt.user.client.ui.Label;
11
import com.gwtext.client.core.EventObject;
9
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.data.Node;
10
import com.gwtext.client.data.Node;
13
import com.gwtext.client.data.NodeTraversalCallback;
11
import com.gwtext.client.data.NodeTraversalCallback;
14
import com.gwtext.client.data.Tree;
12
import com.gwtext.client.data.Tree;
15
import com.gwtext.client.widgets.Button;
13
import com.gwtext.client.widgets.Button;
16
import com.gwtext.client.widgets.Component;
14
import com.gwtext.client.widgets.Component;
17
import com.gwtext.client.widgets.Container;
-
 
18
import com.gwtext.client.widgets.Panel;
15
import com.gwtext.client.widgets.Panel;
19
import com.gwtext.client.widgets.event.ButtonListener;
-
 
20
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
16
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
21
import com.gwtext.client.widgets.event.ContainerListener;
-
 
22
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
-
 
23
import com.gwtext.client.widgets.event.PanelListenerAdapter;
17
import com.gwtext.client.widgets.event.PanelListenerAdapter;
24
import com.gwtext.client.widgets.layout.RowLayout;
18
import com.gwtext.client.widgets.layout.RowLayout;
25
import com.gwtext.client.widgets.layout.RowLayoutData;
19
import com.gwtext.client.widgets.layout.RowLayoutData;
26
import com.gwtext.client.widgets.menu.Menu;
-
 
27
import com.gwtext.client.widgets.tree.TreeNode;
20
import com.gwtext.client.widgets.tree.TreeNode;
28
import com.gwtext.client.widgets.tree.TreePanel;
21
import com.gwtext.client.widgets.tree.TreePanel;
29
import com.gwtext.client.widgets.tree.event.TreeNodeListener;
-
 
30
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
22
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
31
 
23
 
32
/**
24
/**
33
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
25
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
34
 * cliquable
26
 * cliquable
35
 * 
27
 * 
36
 * @author aurelien
28
 * @author aurelien
37
 * 
29
 * 
38
 */
30
 */
39
public class ArbreMotsClesFiltreVue extends Panel implements Rafraichissable,
31
public class ArbreMotsClesFiltreVue extends Panel implements Rafraichissable,
40
		Filtrable {
32
		Filtrable {
41
 
33
 
42
	/**
34
	/**
43
	 * Le médiateur associé à la vue
35
	 * Le médiateur associé à la vue
44
	 */
36
	 */
45
	private ImageMediateur iMediateur = null;
37
	private ImageMediateur iMediateur = null;
46
	
38
	
47
	/**
39
	/**
48
	 * Le médiateur associé à la vue
40
	 * Le médiateur associé à la vue
49
	 */
41
	 */
50
	private ObservationMediateur oMediateur = null;
42
	private ObservationMediateur oMediateur = null;
51
	
43
	
52
	/**
44
	/**
53
	 * Les mots clés en cours
45
	 * Les mots clés en cours
54
	 */
46
	 */
55
	private String motsClesEncours = "";
47
	private String motsClesEncours = "";
56
 
48
 
57
	/**
49
	/**
58
	 * Le treepanel qui affiche l'arbre
50
	 * Le treepanel qui affiche l'arbre
59
	 */
51
	 */
60
	private static TreePanel arbreMotsCles = null;
52
	private static TreePanel arbreMotsCles = null;
61
 
53
 
62
	/**
54
	/**
63
	 * booléen d'initialisation
55
	 * booléen d'initialisation
64
	 */
56
	 */
65
	private boolean estInstancie = false;
57
	private boolean estInstancie = false;
66
	
58
	
67
	private boolean arbreInitialise = false;
59
	private boolean arbreInitialise = false;
68
 
60
 
69
	/**
61
	/**
70
	 * booléen d'etat
62
	 * booléen d'etat
71
	 */
63
	 */
72
	private boolean filtreModifie = false;
64
	private boolean filtreModifie = false;
73
	
65
	
74
	/**
66
	/**
75
	 * prefixe pour générer des ids adaptées
67
	 * prefixe pour générer des ids adaptées
76
	 */
68
	 */
77
	private String prefixe = "_filtre" ;
69
	private String prefixe = "_filtre" ;
78
	
70
	
79
	private final String prefixeImg = "_images" ;
71
	private final String prefixeImg = "_images" ;
80
	
72
	
81
	private final String prefixeObs = "_obs" ;
73
	private final String prefixeObs = "_obs" ;
82
 
74
 
83
	/**
75
	/**
84
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
76
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
85
	 */
77
	 */
86
	@SuppressWarnings("unused")
78
	@SuppressWarnings("unused")
87
	private ArbreMotsClesFiltreVue() {
79
	private ArbreMotsClesFiltreVue() {
88
		super();
80
		super();
89
	}
81
	}
90
 
82
 
91
	/**
83
	/**
92
	 * Constructeur avec paramètres
84
	 * Constructeur avec paramètres
93
	 * 
85
	 * 
94
	 * @param im
86
	 * @param im
95
	 *            le médiateur à associer
87
	 *            le médiateur à associer
96
	 */
88
	 */
97
	public ArbreMotsClesFiltreVue(ImageMediateur im) {
89
	public ArbreMotsClesFiltreVue(ImageMediateur im) {
98
 
90
 
99
		// on crée le panel
91
		// on crée le panel
100
		super();
92
		super();
101
		iMediateur = im;
93
		iMediateur = im;
102
		this.prefixe += prefixeImg;
94
		this.prefixe += prefixeImg;
103
		Label labelRecherche = new Label("Par mots clés :");
95
		Label labelRecherche = new Label("Par mots clés :");
104
		add(labelRecherche);
96
		add(labelRecherche);
105
		initialiserPanel();
97
		initialiserPanel();
106
	}
98
	}
107
	
99
	
108
	/**
100
	/**
109
	 * Constructeur avec paramètres
101
	 * Constructeur avec paramètres
110
	 * 
102
	 * 
111
	 * @param im
103
	 * @param im
112
	 *            le médiateur à associer
104
	 *            le médiateur à associer
113
	 */
105
	 */
114
	public ArbreMotsClesFiltreVue(ObservationMediateur om) {
106
	public ArbreMotsClesFiltreVue(ObservationMediateur om) {
115
 
107
 
116
		// on crée le panel
108
		// on crée le panel
117
		super();
109
		super();
118
		oMediateur = om;
110
		oMediateur = om;
119
		this.prefixe += prefixeObs;
111
		this.prefixe += prefixeObs;
120
		initialiserPanel();
112
		initialiserPanel();
121
		
113
		
122
		this.setLayout(new RowLayout());
114
		this.setLayout(new RowLayout());
123
 
115
 
124
	}
116
	}
125
	
117
	
126
	public void initialiserPanel() {
118
	public void initialiserPanel() {
127
		// on crée le conteneur de l'arbre
119
		// on crée le conteneur de l'arbre
128
		arbreMotsCles = new TreePanel();
120
		arbreMotsCles = new TreePanel();
129
		arbreMotsCles.setId("x-view-tree-filter"+prefixe);
121
		arbreMotsCles.setId("x-view-tree-filter"+prefixe);
130
 
122
 
131
		// on crée une racine pour l'arbre
123
		// on crée une racine pour l'arbre
132
		TreeNode root = new TreeNode("Tags");
124
		TreeNode root = new TreeNode("Tags");
133
		root.setId("racine"+prefixe);
125
		root.setId("racine"+prefixe);
134
		String[] usObject = { "Mots clés", "racine" };
126
		String[] usObject = { "Mots clés", "racine" };
135
		root.setUserObject(usObject);
127
		root.setUserObject(usObject);
136
		
128
		
137
		root.setExpandable(true);
129
		root.setExpandable(true);
138
		
130
		
139
		arbreMotsCles.setRootNode(root);
131
		arbreMotsCles.setRootNode(root);
140
		
132
		
141
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
133
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
142
 
134
 
143
			public void onClick(Node node, EventObject e) {
135
			public void onClick(Node node, EventObject e) {
144
				if(!arbreInitialise) {
136
				if(!arbreInitialise) {
145
					expand();
137
					expand();
146
				}
138
				}
147
			}
139
			}
148
 
140
 
149
			public void onExpand(Node node) {
141
			public void onExpand(Node node) {
150
				if(!arbreInitialise) {
142
				if(!arbreInitialise) {
151
					obtenirArbreMotsCles();
143
					obtenirArbreMotsCles();
152
					arbreInitialise = true;
144
					arbreInitialise = true;
153
				}
145
				}
154
			}
146
			}
155
 
147
 
156
		});
148
		});
157
		
149
		
158
		this.setPaddings(5);
150
		this.setPaddings(5);
159
 
151
 
160
		this.setBorder(false);
152
		this.setBorder(false);
161
		this.setCollapsible(true);
153
		this.setCollapsible(true);
162
		this.setAutoWidth(true);
154
		this.setAutoWidth(true);
163
 
155
 
164
		// on ajoute les listeners
156
		// on ajoute les listeners
165
		ajouterListenersPanel();
157
		ajouterListenersPanel();
166
		estInstancie = false;
158
		estInstancie = false;
167
	}
159
	}
168
 
160
 
169
	/**
161
	/**
170
	 * Ajoute les listeners pour le rendu du panel
162
	 * Ajoute les listeners pour le rendu du panel
171
	 */
163
	 */
172
	private void ajouterListenersPanel() {
164
	private void ajouterListenersPanel() {
173
		this.addListener(new PanelListenerAdapter() {
165
		this.addListener(new PanelListenerAdapter() {
174
 
166
 
175
			// on instancie réellement les composants au moment du rendu pour
167
			// on instancie réellement les composants au moment du rendu pour
176
			// accélérer l'affichage
168
			// accélérer l'affichage
177
			// et éviter des bugs
169
			// et éviter des bugs
178
			public void onRender(Component component) {
170
			public void onRender(Component component) {
179
 
171
 
180
				// on interdit le drag and drop dans l'arbre
172
				// on interdit le drag and drop dans l'arbre
181
				arbreMotsCles.setEnableDD(false);
173
				arbreMotsCles.setEnableDD(false);
182
				arbreMotsCles.setAutoWidth(false);
174
				arbreMotsCles.setAutoWidth(false);
183
				arbreMotsCles.setAutoScroll(true);
175
				arbreMotsCles.setAutoScroll(true);
184
				arbreMotsCles.setBorder(false);
176
				arbreMotsCles.setBorder(false);
185
 
177
 
186
				// on met en forme le layout
178
				// on met en forme le layout
187
				((Panel) component).add(arbreMotsCles,new RowLayoutData("80%"));
179
				((Panel) component).add(arbreMotsCles,new RowLayoutData("80%"));
188
				
180
				
189
				if(iMediateur == null) {
181
				if(iMediateur == null) {
190
					Panel p = new Panel();
182
					Panel p = new Panel();
191
					p.setBorder(false);
183
					p.setBorder(false);
192
					Button valider = new Button("Rechercher") ; 
184
					Button valider = new Button("Rechercher") ; 
193
					valider.addListener(new ButtonListenerAdapter() {
185
					valider.addListener(new ButtonListenerAdapter() {
194
 
186
 
195
						public void onClick(Button button, EventObject e) {
187
						public void onClick(Button button, EventObject e) {
196
							getOMediateur().obtenirNombreObservation();
188
							getOMediateur().obtenirNombreObservation();
197
						}
189
						}
198
						
190
						
199
					});
191
					});
200
					p.add(valider,new RowLayoutData());
192
					p.add(valider,new RowLayoutData());
201
					add(p);
193
					add(p);
202
				}
194
				}
203
 
195
 
204
				// on ajoute les listeners d'évenements
196
				// on ajoute les listeners d'évenements
205
				ajouterListeners();
197
				ajouterListeners();
206
				//obtenirArbreMotsCles();
198
				//obtenirArbreMotsCles();
207
			}
199
			}
208
			
200
			
209
		});
201
		});
210
	}
202
	}
211
 
203
 
212
	/**
204
	/**
213
	 * ajoute les listeners pour les boutons et le cochage des mots clés
205
	 * ajoute les listeners pour les boutons et le cochage des mots clés
214
	 */
206
	 */
215
	private void ajouterListeners() {
207
	private void ajouterListeners() {
216
		
208
		
217
	}
209
	}
218
 
210
 
219
	/**
211
	/**
220
	 * Méthode héritée de l'interface rafraichissable
212
	 * Méthode héritée de l'interface rafraichissable
221
	 */
213
	 */
222
	public void rafraichir(Object nouvelleDonnees,
214
	public void rafraichir(Object nouvelleDonnees,
223
			boolean repandreRaffraichissement) {
215
			boolean repandreRaffraichissement) {
224
 
216
 
225
		// si on a reçu un arbre
217
		// si on a reçu un arbre
226
		if (nouvelleDonnees instanceof Tree) {
218
		if (nouvelleDonnees instanceof Tree) {
227
			Tree nouvelArbre = (Tree) nouvelleDonnees;
219
			Tree nouvelArbre = (Tree) nouvelleDonnees;
228
			
220
			
229
			// on vide tous les noeuds de l'ancien arbre
221
			// on vide tous les noeuds de l'ancien arbre
230
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
222
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
231
			for (int i = 0; i < rootChild.length; i++) {
223
			for (int i = 0; i < rootChild.length; i++) {
232
				
224
				
233
				rootChild[i].remove();
225
				rootChild[i].remove();
234
			}
226
			}
235
 
227
 
236
			// et on recopie le nouvel arbre
228
			// et on recopie le nouvel arbre
237
			copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles
229
			copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles
238
					.getRootNode());
230
					.getRootNode());
239
 
231
 
240
			// si l'arbre n'était pas encore considéré comme instancié
232
			// si l'arbre n'était pas encore considéré comme instancié
241
			if (!estInstancie) {
233
			if (!estInstancie) {
242
				// on signale que oui
234
				// on signale que oui
243
				estInstancie = true;
235
				estInstancie = true;
244
			}
236
			}
245
			
237
			
246
			if(!arbreInitialise) {
238
			if(!arbreInitialise) {
247
				arbreInitialise = true;
239
				arbreInitialise = true;
248
			}
240
			}
249
			
241
			
250
			arbreMotsCles.setRootNode(arbreMotsCles.getRootNode());
242
			arbreMotsCles.setRootNode(arbreMotsCles.getRootNode());
251
 
243
 
252
			// l'état du filtre est réinitialisé
244
			// l'état du filtre est réinitialisé
253
			filtreModifie = false;
245
			filtreModifie = false;
254
			doLayout() ;
246
			doLayout() ;
255
		}
247
		}
256
 
248
 
257
		if (nouvelleDonnees instanceof TreeNode) {
249
		if (nouvelleDonnees instanceof TreeNode) {
258
			TreeNode nd = (TreeNode) nouvelleDonnees;
250
			TreeNode nd = (TreeNode) nouvelleDonnees;
259
 
251
 
260
			// si le noeud n'existe pas déjà c'est un ajout
252
			// si le noeud n'existe pas déjà c'est un ajout
261
			if (arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe) == null) {
253
			if (arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe) == null) {
262
				// donc on ne fait rien de spécial
254
				// donc on ne fait rien de spécial
263
			}
255
			}
264
			// si le noeud existe déjà c'est un déplacement
256
			// si le noeud existe déjà c'est un déplacement
265
			else {
257
			else {
266
				// alors on supprime d'abord le noeud concerné
258
				// alors on supprime d'abord le noeud concerné
267
				arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe)
259
				arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe)
268
						.remove();
260
						.remove();
269
			}
261
			}
270
 
262
 
271
			// on chercher le père du nouveau noeud
263
			// on chercher le père du nouveau noeud
272
			Node ndPereOriginal = nd.getParentNode();
264
			Node ndPereOriginal = nd.getParentNode();
273
 
265
 
274
			
266
			
275
			String idPereFiltre = ndPereOriginal.getId() +prefixe;
267
			String idPereFiltre = ndPereOriginal.getId() +prefixe;
276
 
268
 
277
			String[] usObj = (String[]) nd.getUserObject();
269
			String[] usObj = (String[]) nd.getUserObject();
278
			TreeNode child = new TreeNode(usObj[0]);
270
			TreeNode child = new TreeNode(usObj[0]);
279
			child.setId(usObj[1] +prefixe);
271
			child.setId(usObj[1] +prefixe);
280
			child.setChecked(false);
272
			child.setChecked(false);
281
			child.setUserObject(usObj);
273
			child.setUserObject(usObj);
282
			arbreMotsCles.getNodeById(idPereFiltre).appendChild(child);
274
			arbreMotsCles.getNodeById(idPereFiltre).appendChild(child);
283
 
275
 
284
			// et on ajoute le nouveau noeud à son père
276
			// et on ajoute le nouveau noeud à son père
285
			copierFilsNoeud(nd, child);
277
			copierFilsNoeud(nd, child);
286
			this.doLayout();
278
			this.doLayout();
287
		}
279
		}
288
 
280
 
289
		// si on reçoit une string
281
		// si on reçoit une string
290
		if (nouvelleDonnees instanceof String) {
282
		if (nouvelleDonnees instanceof String) {
291
			String idSupp = (String) nouvelleDonnees +prefixe;
283
			String idSupp = (String) nouvelleDonnees +prefixe;
292
			// c'est une suppression et si le noeud existe bien
284
			// c'est une suppression et si le noeud existe bien
293
			if (arbreMotsCles.getTree().getNodeById(idSupp) != null) {
285
			if (arbreMotsCles.getTree().getNodeById(idSupp) != null) {
294
				// on le supprime
286
				// on le supprime
295
				arbreMotsCles.getTree().getNodeById(idSupp).remove();
287
				arbreMotsCles.getTree().getNodeById(idSupp).remove();
296
			}
288
			}
297
			
289
			
298
		}
290
		}
299
 
291
 
300
	}
292
	}
301
 
293
 
302
	/**
294
	/**
303
	 * Accesseur pour le médiateur
295
	 * Accesseur pour le médiateur
304
	 * 
296
	 * 
305
	 * @return le médiateur associé
297
	 * @return le médiateur associé
306
	 */
298
	 */
307
	public ImageMediateur getIMediateur() {
299
	public ImageMediateur getIMediateur() {
308
		return iMediateur;
300
		return iMediateur;
309
	}
301
	}
310
	
302
	
311
	public ObservationMediateur getOMediateur() {
303
	public ObservationMediateur getOMediateur() {
312
		return oMediateur ;
304
		return oMediateur ;
313
	}
305
	}
314
 
306
 
315
	/**
307
	/**
316
	 * Accesseur pour le panneau contenant l'arbre
308
	 * Accesseur pour le panneau contenant l'arbre
317
	 * 
309
	 * 
318
	 * @return le panneau de l'arbre des mots clés
310
	 * @return le panneau de l'arbre des mots clés
319
	 */
311
	 */
320
	public TreePanel getArbreMotsCles() {
312
	public TreePanel getArbreMotsCles() {
321
		return arbreMotsCles;
313
		return arbreMotsCles;
322
	}
314
	}
323
 
315
 
324
	/**
316
	/**
325
	 * Méthode héritée de Filtrable renvoie le nom du filtre
317
	 * Méthode héritée de Filtrable renvoie le nom du filtre
326
	 */
318
	 */
327
	public String renvoyerNomFiltre() {
319
	public String renvoyerNomFiltre() {
328
 
320
 
329
		return "mots clés";
321
		return "mots clés";
330
	}
322
	}
331
 
323
 
332
	/**
324
	/**
333
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
325
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
334
	 * 
326
	 * 
335
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
327
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
336
	 */
328
	 */
337
	public String[] renvoyerValeursAFiltrer() {
329
	public String[] renvoyerValeursAFiltrer() {
338
 
330
 
339
		valider();
331
		valider();
340
		String[] valeursFiltrees = new String[2] ;
332
		String[] valeursFiltrees = new String[2] ;
341
		valeursFiltrees[1] = motsClesEncours;
333
		valeursFiltrees[1] = motsClesEncours;
342
		
334
		
343
		if(iMediateur != null) {
335
		if(iMediateur != null) {
344
			valeursFiltrees[0] = "ci_meta_mots_cles";
336
			valeursFiltrees[0] = "ci_meta_mots_cles";
345
		}
337
		}
346
		else
338
		else
347
		{
339
		{
348
			valeursFiltrees[0] = "mots_cles";
340
			valeursFiltrees[0] = "mots_cles";
349
		}
341
		}
350
 
342
 
351
		return valeursFiltrees;
343
		return valeursFiltrees;
352
	}
344
	}
353
 
345
 
354
	/**
346
	/**
355
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
347
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
356
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
348
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
357
	 * 
349
	 * 
358
	 * @param ndPereOriginal
350
	 * @param ndPereOriginal
359
	 *            le père des noeuds de l'arbre original
351
	 *            le père des noeuds de l'arbre original
360
	 * @param ndPereCopie
352
	 * @param ndPereCopie
361
	 *            le père qui va recevoir les copies
353
	 *            le père qui va recevoir les copies
362
	 */
354
	 */
363
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
355
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
364
		if (ndPereCopie != null && ndPereOriginal != null) {
356
		if (ndPereCopie != null && ndPereOriginal != null) {
365
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
357
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
366
			
358
			
367
			for (int i = 0; i < ndNodeFils.length; i++) {
359
			for (int i = 0; i < ndNodeFils.length; i++) {
368
 
360
 
369
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
361
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
370
				TreeNode child = new TreeNode(usObj[0]);
362
				TreeNode child = new TreeNode(usObj[0]);
371
				child.setId(usObj[1] +prefixe);
363
				child.setId(usObj[1] +prefixe);
372
				child.setChecked(false);
364
				child.setChecked(false);
373
				child.setUserObject(usObj);
365
				child.setUserObject(usObj);
374
				ndPereCopie.appendChild(child);
366
				ndPereCopie.appendChild(child);
375
 
367
 
376
				if (!ndNodeFils[i].isLeaf()) {
368
				if (!ndNodeFils[i].isLeaf()) {
377
					copierFilsNoeud(ndNodeFils[i], child);
369
					copierFilsNoeud(ndNodeFils[i], child);
378
				}
370
				}
379
 
371
 
380
			}
372
			}
381
		}
373
		}
382
	}
374
	}
383
 
375
 
384
	/**
376
	/**
385
	 * Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
377
	 * Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
386
	 */
378
	 */
387
	public boolean renvoyerEtatFiltre() {
379
	public boolean renvoyerEtatFiltre() {
388
 
380
 
389
		return filtreModifie;
381
		return filtreModifie;
390
	}
382
	}
391
	
383
	
392
	public void mettreAJourMotsCles(String valeur, String id) {
384
	public void mettreAJourMotsCles(String valeur, String id) {
393
		if(getIMediateur() != null) {
385
		if(getIMediateur() != null) {
394
			getIMediateur().mettreAjourMotsClesId(valeur,
386
			getIMediateur().mettreAjourMotsClesId(valeur,
395
				id);
387
				id);
396
		}
388
		}
397
		else
389
		else
398
		{
390
		{
399
			getOMediateur().mettreAjourMotsClesId(valeur, id);
391
			getOMediateur().mettreAjourMotsClesId(valeur, id);
400
		}
392
		}
401
	}
393
	}
402
	
394
	
403
	public void obtenirArbreMotsCles() {
395
	public void obtenirArbreMotsCles() {
404
		if(getIMediateur() != null) {
396
		if(getIMediateur() != null) {
405
			getIMediateur().obtenirArbreMotsCles(this);
397
			getIMediateur().obtenirArbreMotsCles(this);
406
		}
398
		}
407
		else
399
		else
408
		{
400
		{
409
			getOMediateur().obtenirArbreMotsCles(this);
401
			getOMediateur().obtenirArbreMotsCles(this);
410
		}
402
		}
411
	}
403
	}
412
 
404
 
413
	public void valider() {
405
	public void valider() {
414
		if (estInstancie) {
406
		if (estInstancie) {
415
			// on vide les mots clés en cours
407
			// on vide les mots clés en cours
416
			motsClesEncours = "";
408
			motsClesEncours = "";
417
			// pour chaque noeud à partir de la racine
409
			// pour chaque noeud à partir de la racine
418
			getArbreMotsCles().getRootNode().cascade(
410
			getArbreMotsCles().getRootNode().cascade(
419
					new NodeTraversalCallback() {
411
					new NodeTraversalCallback() {
420
 
412
 
421
						// on éxécute une fonction
413
						// on éxécute une fonction
422
						public boolean execute(Node node) {
414
						public boolean execute(Node node) {
423
 
415
 
424
							// on récupère le mot clé associé au noeud et ses
416
							// on récupère le mot clé associé au noeud et ses
425
							// infos
417
							// infos
426
							TreeNode tn = getArbreMotsCles().getNodeById(
418
							TreeNode tn = getArbreMotsCles().getNodeById(
427
									node.getId());
419
									node.getId());
428
 
420
 
429
							String[] usObject = (String[]) tn.getUserObject();
421
							String[] usObject = (String[]) tn.getUserObject();
430
							mettreAJourMotsCles(usObject[0], usObject[1]);
422
							mettreAJourMotsCles(usObject[0], usObject[1]);
431
 
423
 
432
							if (tn.getUI().isChecked()) {
424
							if (tn.getUI().isChecked()) {
433
								// et les concatène à la string des mots clés en
425
								// et les concatène à la string des mots clés en
434
								// cours
426
								// cours
435
								motsClesEncours += usObject[1] + ",";
427
								motsClesEncours += usObject[1] + ",";
436
							}
428
							}
437
 
429
 
438
							return true;
430
							return true;
439
						}
431
						}
440
 
432
 
441
					});
433
					});
442
 
434
 
443
			// on suppose que le filtre a change
435
			// on suppose que le filtre a change
444
			filtreModifie = true;
436
			filtreModifie = true;
445
		}
437
		}
446
	}
438
	}
447
 
439
 
448
	public void raz() {
440
	public void raz() {
449
		
441
		
450
		// on vide tous les noeuds de l'ancien arbre
442
		// on vide tous les noeuds de l'ancien arbre
451
		Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
443
		Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
452
		for (int i = 0; i < rootChild.length; i++) {
444
		for (int i = 0; i < rootChild.length; i++) {
453
			
445
			
454
			rootChild[i].remove();
446
			rootChild[i].remove();
455
		}
447
		}
456
		
448
		
457
		arbreInitialise = false ;
449
		arbreInitialise = false ;
458
		
450
		
459
		// on crée une racine pour l'arbre
451
		// on crée une racine pour l'arbre
460
		TreeNode root = new TreeNode("Tags");
452
		TreeNode root = new TreeNode("Tags");
461
		root.setId("racine"+prefixe);
453
		root.setId("racine"+prefixe);
462
		String[] usObject = { "Mots clés", "racine" };
454
		String[] usObject = { "Mots clés", "racine" };
463
		root.setUserObject(usObject);
455
		root.setUserObject(usObject);
464
		
456
		
465
		root.setExpandable(true);
457
		root.setExpandable(true);
466
		
458
		
467
		arbreMotsCles.setRootNode(root);
459
		arbreMotsCles.setRootNode(root);
468
		
460
		
469
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
461
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
470
 
462
 
471
			public void onClick(Node node, EventObject e) {
463
			public void onClick(Node node, EventObject e) {
472
				if(!arbreInitialise) {
464
				if(!arbreInitialise) {
473
					expand();
465
					expand();
474
				}
466
				}
475
			}
467
			}
476
 
468
 
477
			public void onExpand(Node node) {
469
			public void onExpand(Node node) {
478
				if(!arbreInitialise) {
470
				if(!arbreInitialise) {
479
					obtenirArbreMotsCles();
471
					obtenirArbreMotsCles();
480
					arbreInitialise = true;
472
					arbreInitialise = true;
481
				}
473
				}
482
			}
474
			}
483
		});
475
		});
484
	}
476
	}
485
 
477
 
486
}
478
}