Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1292 Rev 2042
1
package org.tela_botanica.client.vues.observation.filtres;
1
package org.tela_botanica.client.vues.observation.filtres;
2
import org.tela_botanica.client.interfaces.Filtrable;
2
import org.tela_botanica.client.interfaces.Filtrable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
-
 
5
import org.tela_botanica.client.util.MotsClesUtilitaire;
-
 
6
 
5
import com.google.gwt.user.client.Window;
7
import com.google.gwt.user.client.Window;
6
import com.gwtext.client.core.EventObject;
8
import com.gwtext.client.core.EventObject;
7
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.Node;
8
import com.gwtext.client.data.NodeTraversalCallback;
10
import com.gwtext.client.data.NodeTraversalCallback;
9
import com.gwtext.client.data.Tree;
11
import com.gwtext.client.data.Tree;
10
import com.gwtext.client.dd.DragData;
12
import com.gwtext.client.dd.DragData;
11
import com.gwtext.client.dd.DragDrop;
13
import com.gwtext.client.dd.DragDrop;
12
import com.gwtext.client.dd.DropTargetConfig;
14
import com.gwtext.client.dd.DropTargetConfig;
13
import com.gwtext.client.widgets.Button;
15
import com.gwtext.client.widgets.Button;
14
import com.gwtext.client.widgets.Component;
16
import com.gwtext.client.widgets.Component;
15
import com.gwtext.client.widgets.Panel;
17
import com.gwtext.client.widgets.Panel;
16
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
18
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
17
import com.gwtext.client.widgets.event.PanelListenerAdapter;
19
import com.gwtext.client.widgets.event.PanelListenerAdapter;
18
import com.gwtext.client.widgets.form.TextField;
20
import com.gwtext.client.widgets.form.TextField;
19
import com.gwtext.client.widgets.layout.VerticalLayout;
21
import com.gwtext.client.widgets.layout.VerticalLayout;
20
import com.gwtext.client.widgets.menu.BaseItem;
22
import com.gwtext.client.widgets.menu.BaseItem;
21
import com.gwtext.client.widgets.menu.Item;
23
import com.gwtext.client.widgets.menu.Item;
22
import com.gwtext.client.widgets.menu.Menu;
24
import com.gwtext.client.widgets.menu.Menu;
23
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
25
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
24
import com.gwtext.client.widgets.tree.DropNodeCallback;
26
import com.gwtext.client.widgets.tree.DropNodeCallback;
25
import com.gwtext.client.widgets.tree.MultiSelectionModel;
27
import com.gwtext.client.widgets.tree.MultiSelectionModel;
26
import com.gwtext.client.widgets.tree.TreeDragData;
28
import com.gwtext.client.widgets.tree.TreeDragData;
27
import com.gwtext.client.widgets.tree.TreeEditor;
29
import com.gwtext.client.widgets.tree.TreeEditor;
28
import com.gwtext.client.widgets.tree.TreeNode;
30
import com.gwtext.client.widgets.tree.TreeNode;
29
import com.gwtext.client.widgets.tree.TreePanel;
31
import com.gwtext.client.widgets.tree.TreePanel;
30
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
32
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
31
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
33
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
32
 
34
 
33
public class ArbreMotsClesObservationVue extends Panel implements Rafraichissable, Filtrable {
35
public class ArbreMotsClesObservationVue extends Panel implements Rafraichissable, Filtrable {
34
 
36
 
35
		/**
37
		/**
36
		 * Le médiateur associé à la vue
38
		 * Le médiateur associé à la vue
37
		 */
39
		 */
38
		private ObservationMediateur oMediateur = null;
40
		private ObservationMediateur oMediateur = null;
39
 
41
 
40
		/**
42
		/**
41
		 * Le treepanel qui affiche l'arbre
43
		 * Le treepanel qui affiche l'arbre
42
		 */
44
		 */
43
		private static TreePanel arbreMotsCles = null;
45
		private static TreePanel arbreMotsCles = null;
44
		/**
46
		/**
45
		 * L'éditeur qui permet de modifier les mots clés dans l'arbre
47
		 * L'éditeur qui permet de modifier les mots clés dans l'arbre
46
		 */
48
		 */
47
		private TreeEditor te = null;
49
		private TreeEditor te = null;
48
		/**
50
		/**
49
		 * Le textfield associé à l'éditeur
51
		 * Le textfield associé à l'éditeur
50
		 */
52
		 */
51
		private TextField tfEdit = null;
53
		private TextField tfEdit = null;
52
		/**
54
		/**
53
		 * Bouton de validation
55
		 * Bouton de validation
54
		 */
56
		 */
55
		private Button ajouterMotCle = null;
57
		private Button ajouterMotCle = null;
56
		/**
58
		/**
57
		 * Une string permettant connaitre les mots clés cochés en cours séparés par
59
		 * Une string permettant connaitre les mots clés cochés en cours séparés par
58
		 * des virgules
60
		 * des virgules
59
		 */
61
		 */
60
		private String motsClesEnCours = "";
62
		private String motsClesEnCours = "";
61
		/**
63
		/**
62
		 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
64
		 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
63
		 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
65
		 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
64
		 * du conteneur n'ai été effectué)
66
		 * du conteneur n'ai été effectué)
65
		 */
67
		 */
66
		private String[] motsClesEnAttente = new String[0];
68
		private String[] motsClesEnAttente = new String[0];
67
		/**
69
		/**
68
		 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
70
		 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
69
		 * noeud
71
		 * noeud
70
		 */
72
		 */
71
		private boolean ajoutNoeud = false;
73
		private boolean ajoutNoeud = false;
72
		/**
74
		/**
73
		 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
75
		 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
74
		 * noeud
76
		 * noeud
75
		 */
77
		 */
76
		private boolean modifNoeud = false;
78
		private boolean modifNoeud = false;
77
		/**
79
		/**
78
		 * Booléen d'instanciation du conteneur
80
		 * Booléen d'instanciation du conteneur
79
		 */
81
		 */
80
		private boolean arbreCharge = false;
82
		private boolean arbreCharge = false;
81
		
83
		
82
		/**
84
		/**
83
		 * Booléen nécessaire pour l'affichage
85
		 * Booléen nécessaire pour l'affichage
84
		 * 
86
		 * 
85
		 */
87
		 */
86
		private boolean estInstancie = false;
88
		private boolean estInstancie = false;
87
		
89
		
88
		/**
90
		/**
89
		 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
91
		 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
90
		 */
92
		 */
91
		private boolean motsCleInitialises;
93
		private boolean motsCleInitialises;
92
		
94
		
93
		private Component livue = null;
95
		private Component livue = null;
94
		
96
		
95
		MultiSelectionModel msModel = null;
97
		MultiSelectionModel msModel = null;
-
 
98
 
-
 
99
		private String cheminTemporaireAjout = null;
96
 
100
 
97
		/**
101
		/**
98
		 * Constructeur sans paramètre (privé car interdit d'utilisation)
102
		 * Constructeur sans paramètre (privé car interdit d'utilisation)
99
		 */
103
		 */
100
		@SuppressWarnings("unused")
104
		@SuppressWarnings("unused")
101
		private ArbreMotsClesObservationVue() {
105
		private ArbreMotsClesObservationVue() {
102
			super();
106
			super();
103
		}
107
		}
104
 
108
 
105
		/**
109
		/**
106
		 * Constructeur avec paramètre
110
		 * Constructeur avec paramètre
107
		 * 
111
		 * 
108
		 * @param im
112
		 * @param im
109
		 *            le médiateur à associer
113
		 *            le médiateur à associer
110
		 */
114
		 */
111
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
115
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
112
			// on crée le panel
116
			// on crée le panel
113
			super("Projets");
117
			super("Projets");
114
			
118
			
115
			this.setLayout(new VerticalLayout());
119
			this.setLayout(new VerticalLayout());
116
			oMediateur = om;
120
			oMediateur = om;
117
			
121
			
118
			setBorder(false);
122
			setBorder(false);
119
			setCollapsible(true);
123
			setCollapsible(true);
120
			setTitleCollapse(true);
124
			setTitleCollapse(true);
121
			setAutoScroll(true);
125
			setAutoScroll(true);
122
 
126
 
123
			// on ajoute les listeners
127
			// on ajoute les listeners
124
			ajouterListenersPanel();
128
			ajouterListenersPanel();
125
 
129
 
126
		}
130
		}
127
		
131
		
128
		/**
132
		/**
129
		 * Ajoute les listeners pour le rendu du panel
133
		 * Ajoute les listeners pour le rendu du panel
130
		 */
134
		 */
131
		private void ajouterListenersPanel() {
135
		private void ajouterListenersPanel() {
132
			  this.addListener(new PanelListenerAdapter() {
136
			  this.addListener(new PanelListenerAdapter() {
133
 
137
 
134
				// on instancie réellement les composants au moment du rendu pour
138
				// on instancie réellement les composants au moment du rendu pour
135
				// accélérer l'affichage
139
				// accélérer l'affichage
136
				// et éviter des bugs
140
				// et éviter des bugs
137
				@Override
141
				@Override
138
				public void onRender(Component component) {
142
				public void onRender(Component component) {
139
					
143
					
140
					livue = oMediateur.getListeObservation();
144
					livue = oMediateur.getListeObservation();
141
					
145
					
142
					// on crée le conteneur de l'arbre
146
					// on crée le conteneur de l'arbre
143
					arbreMotsCles = new TreePanel();
147
					arbreMotsCles = new TreePanel();
144
					// on permet le drag and drop dans l'arbre
148
					// on permet le drag and drop dans l'arbre
145
					//arbreMotsCles.setEnableDD(true);
149
					//arbreMotsCles.setEnableDD(true);
146
					arbreMotsCles.setId("x-view-tree-keyword-obs");
150
					arbreMotsCles.setId("x-view-tree-keyword-obs");
147
					
151
					
148
					
152
					
149
					msModel = new MultiSelectionModel();
153
					msModel = new MultiSelectionModel();
150
					arbreMotsCles.setSelectionModel(msModel);
154
					arbreMotsCles.setSelectionModel(msModel);
151
 
155
 
152
					// on crée une racine pour l'arbre
156
					// on crée une racine pour l'arbre
153
					TreeNode root = new TreeNode("Projets");
157
					TreeNode root = new TreeNode("Projets");
154
					root.setId("racine_obs");
158
					root.setId("racine_obs");
155
					String[] usObject = { "Projets", "racine_obs" };
159
					String[] usObject = { "Projets", "racine_obs" };
156
					root.setUserObject(usObject);
160
					root.setUserObject(usObject);
157
					root.setExpandable(true);
161
					root.setExpandable(true);
158
					
162
					
159
					arbreMotsCles.setRootNode(root);
163
					arbreMotsCles.setRootNode(root);
160
					
164
					
161
					// on crée l'éditeur pour l'arbre
165
					// on crée l'éditeur pour l'arbre
162
					tfEdit = new TextField();
166
					tfEdit = new TextField();
163
					te = new TreeEditor(arbreMotsCles, tfEdit);
167
					te = new TreeEditor(arbreMotsCles, tfEdit);
164
					ajouterMotCle = new Button("Ajouter un projet");
168
					ajouterMotCle = new Button("Ajouter un projet");
165
					arbreMotsCles.add(te);
169
					arbreMotsCles.add(te);
166
					
170
					
167
					arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
171
					arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
168
						@Override
172
						@Override
169
						public void onClick(Node node, EventObject e) {
173
						public void onClick(Node node, EventObject e) {
170
							if(!arbreCharge) {
174
							if(!arbreCharge) {
171
								expand();
175
								expand();
172
							}
176
							}
173
						}
177
						}
174
 
178
 
175
						@Override
179
						@Override
176
						public void onExpand(Node node) {
180
						public void onExpand(Node node) {
177
							if(!arbreCharge) {
181
							if(!arbreCharge) {
178
								obtenirArbreMotsCles();
182
								obtenirArbreMotsCles();
179
								arbreCharge = true;
183
								arbreCharge = true;
180
							}
184
							}
181
						}
185
						}
182
					});
186
					});
183
 
187
 
184
					// on interdit le drag and drop dans l'arbre
188
					// on interdit le drag and drop dans l'arbre
185
					arbreMotsCles.setRootVisible(true);
189
					arbreMotsCles.setRootVisible(true);
186
					arbreMotsCles.setBorder(false);
190
					arbreMotsCles.setBorder(false);
187
					
191
					
188
					// on met en forme le layout
192
					// on met en forme le layout
189
					add(arbreMotsCles);
193
					add(arbreMotsCles);
190
					add(ajouterMotCle);
194
					add(ajouterMotCle);
191
 
195
 
192
					// enfin on considère le composant comme instancié
196
					// enfin on considère le composant comme instancié
193
					estInstancie = true;
197
					estInstancie = true;
194
					
198
					
195
					configDragAndDrop();
199
					configDragAndDrop();
196
					
200
					
197
					// on ajoute les listeners d'évenements
201
					// on ajoute les listeners d'évenements
198
					ajouterListeners();					
202
					ajouterListeners();					
199
				}
203
				}
200
 
204
 
201
			});
205
			});
202
		}
206
		}
203
 
207
 
204
		/**
208
		/**
205
		 * Acesseur pour le médiateur
209
		 * Acesseur pour le médiateur
206
		 * 
210
		 * 
207
		 * @return le médiateur associé à la vue
211
		 * @return le médiateur associé à la vue
208
		 */
212
		 */
209
		private ObservationMediateur getOMediateur() {
213
		private ObservationMediateur getOMediateur() {
210
 
214
 
211
			return oMediateur;
215
			return oMediateur;
212
 
216
 
213
		}
217
		}
214
 
218
 
215
		/**
219
		/**
216
		 * Acesseur pour l'arbre des mots clés
220
		 * Acesseur pour l'arbre des mots clés
217
		 * 
221
		 * 
218
		 * @return le panel contenant l'arbre
222
		 * @return le panel contenant l'arbre
219
		 */
223
		 */
220
		public TreePanel getArbreMotsCles() {
224
		public TreePanel getArbreMotsCles() {
221
			return arbreMotsCles;
225
			return arbreMotsCles;
222
		}
226
		}
223
 
227
 
224
		/**
228
		/**
225
		 * Accesseur pour l'éditeur
229
		 * Accesseur pour l'éditeur
226
		 * 
230
		 * 
227
		 * @return l'éditeur associé à l'arbre
231
		 * @return l'éditeur associé à l'arbre
228
		 */
232
		 */
229
		public TreeEditor getTe() {
233
		public TreeEditor getTe() {
230
			return te;
234
			return te;
231
		}
235
		}
232
 
236
 
233
		/**
237
		/**
234
		 * Acesseur pour le TextField associé à l'éditeur
238
		 * Acesseur pour le TextField associé à l'éditeur
235
		 * 
239
		 * 
236
		 * @return le champ texte associé à l'éditeur
240
		 * @return le champ texte associé à l'éditeur
237
		 */
241
		 */
238
		public TextField getTfEdit() {
242
		public TextField getTfEdit() {
239
			return tfEdit;
243
			return tfEdit;
240
		}
244
		}
241
 
245
 
242
		/**
246
		/**
243
		 * Ajoute les listeners nécessaires pour la gestion des évènements
247
		 * Ajoute les listeners nécessaires pour la gestion des évènements
244
		 */
248
		 */
245
		private void ajouterListeners() {
249
		private void ajouterListeners() {
-
 
250
			
-
 
251
			final Rafraichissable r = this;
246
			arbreMotsCles.addListener(new TreePanelListenerAdapter() {
252
			arbreMotsCles.addListener(new TreePanelListenerAdapter() {
247
 
253
 
248
				// gestion du clic sur un noeud
254
				// gestion du clic sur un noeud
249
				@Override
255
				@Override
250
				public void onClick(TreeNode node, EventObject e) {
256
				public void onClick(TreeNode node, EventObject e) {
251
 
257
 
252
					e.stopEvent();
258
					e.stopEvent();
253
					boolean multi = false;
259
					boolean multi = false;
254
					if(e.hasModifier()) {
260
					if(e.hasModifier()) {
255
						multi = true;
261
						multi = true;
256
					}
262
					}
257
					gererClicNoeud(node,multi);
263
					gererClicNoeud(node,multi);
258
				}
264
				}
259
 
265
 
260
				// gestion du clic droit sur un noeud
266
				// gestion du clic droit sur un noeud
261
				@Override
267
				@Override
262
				public void onContextMenu(TreeNode node, EventObject e) {
268
				public void onContextMenu(TreeNode node, EventObject e) {
263
 
269
 
264
					e.stopEvent();
270
					e.stopEvent();
265
					montrerContextMenuArbre(node, e, getTe());
271
					montrerContextMenuArbre(node, e, getTe());
266
 
272
 
267
				}
273
				}
268
 
274
 
269
				// gestion du double clic sur un noeud
275
				// gestion du double clic sur un noeud
270
				@Override
276
				@Override
271
				public void onDblClick(TreeNode node, EventObject e) {
277
				public void onDblClick(TreeNode node, EventObject e) {
272
 
278
 
273
					modifNoeud = true;
279
					modifNoeud = true;
274
					if (!node.getId().equals("racine_obs")) {
280
					if (!node.getId().equals("racine_obs")) {
275
						te.startEdit(node);
281
						te.startEdit(node);
276
					}
282
					}
277
				}
283
				}
278
 
284
 
279
				// gestion de la modification du texte d'un noeud
285
				// gestion de la modification du texte d'un noeud
280
				@Override
286
				@Override
281
				public void onTextChange(TreeNode node, String text, String oldText) {
287
				public void onTextChange(TreeNode node, String text, String oldText) {
282
 
288
 
283
					// on récupère les informations associées au noeud
289
					// on récupère les informations associées au noeud
284
					TreeNode nd = node;
290
					TreeNode nd = node;
285
					String[] usObject = new String[2];
291
					String[] usObject = new String[2];
286
					usObject[0] = text;
292
					usObject[0] = text;
287
					usObject[1] = ((String[]) nd.getUserObject())[1];
293
					usObject[1] = ((String[]) nd.getUserObject())[1];
288
					nd.setUserObject(usObject);
294
					nd.setUserObject(usObject);
289
 
295
 
290
					// si c'est un nouveau noeud
296
					// si c'est un nouveau noeud
291
					if (ajoutNoeud) {
297
					if (ajoutNoeud) {
292
						// on notifie le médiateur de l'ajout et on lui passe
298
						// on notifie le médiateur de l'ajout et on lui passe
293
						// l'arbre
299
						// l'arbre
294
						getOMediateur().ajouterMotCleDansArbre(nd,
300
						getOMediateur().ajouterMotCleDansArbre(nd,
295
								getArbreMotsCles().getTree());
301
								getArbreMotsCles().getTree(), r);
296
						// et considère l'ajout achevé
302
						// et considère l'ajout achevé
297
						ajoutNoeud = false;
303
						ajoutNoeud = false;
298
					}
304
					}
299
					// si c'est noeud déjà existant
305
					// si c'est noeud déjà existant
300
					else {
306
					else {
301
						if (modifNoeud) {
307
						if (modifNoeud) {
302
							// on notifie le médiateur de la modification et on lui
308
							// on notifie le médiateur de la modification et on lui
303
							// passe l'arbre
309
							// passe l'arbre
304
							getOMediateur().modifierMotCleDansArbre(nd,
310
							getOMediateur().modifierMotCleDansArbre(nd,
305
									getArbreMotsCles().getTree());
311
									getArbreMotsCles().getTree());
306
							// et on considère la modification achevée
312
							// et on considère la modification achevée
307
							modifNoeud = false;
313
							modifNoeud = false;
308
						}
314
						}
309
					}
315
					}
310
 
-
 
-
 
316
					arbreMotsCles.disable();
311
				}
317
				}
312
 
318
 
313
				// gestion du déplacement d'un noeud
319
				// gestion du déplacement d'un noeud
314
				@Override
320
				@Override
315
				public void onMoveNode(Tree tree, TreeNode node,
321
				public void onMoveNode(Tree tree, TreeNode node,
316
						TreeNode oldParent, TreeNode newParent, int index) {
322
						TreeNode oldParent, TreeNode newParent, int index) {
317
					// on notifie le médiateur et on lui passe l'arbre
323
					// on notifie le médiateur et on lui passe l'arbre
318
					getOMediateur().deplacerMotCleDansArbre(node,
324
					getOMediateur().deplacerMotCleDansArbre(node,
319
							getArbreMotsCles().getTree());
325
							getArbreMotsCles().getTree());
320
				}
326
				}
321
				
327
				
322
				@Override
328
				@Override
323
				public boolean doBeforeNodeDrop(TreePanel treePanel,
329
				public boolean doBeforeNodeDrop(TreePanel treePanel,
324
						TreeNode target, DragData dragData,
330
						TreeNode target, DragData dragData,
325
						String point, DragDrop source,
331
						String point, DragDrop source,
326
						TreeNode dropNode,
332
						TreeNode dropNode,
327
						DropNodeCallback dropNodeCallback) {
333
						DropNodeCallback dropNodeCallback) {
328
					
334
					
329
					if(dragData instanceof TreeDragData) {
335
					if(dragData instanceof TreeDragData) {
330
						return true;
336
						return true;
331
					}
337
					}
332
						
338
						
333
					String idMotCle = ((String[])target.getUserObject())[1];
339
					String idMotCle = ((String[])target.getUserObject())[1];
334
					
340
					
335
					if(oMediateur.gererDDObsSurMotCle(target, dragData)) {
341
					if(oMediateur.gererDDObsSurMotCle(target, dragData)) {
336
						
342
						
337
						cocherMotCle(idMotCle);
343
						cocherMotCle(idMotCle);
338
						return true;
344
						return true;
339
					}
345
					}
340
					
346
					
341
					return false;
347
					return false;
342
				}
348
				}
343
 
349
 
344
 
350
 
345
				@Override
351
				@Override
346
				public void onNodeDrop(TreePanel treePanel,
352
				public void onNodeDrop(TreePanel treePanel,
347
						TreeNode target, DragData dragData,
353
						TreeNode target, DragData dragData,
348
						String point, DragDrop source, TreeNode dropNode) {
354
						String point, DragDrop source, TreeNode dropNode) {
349
 
355
 
350
					
356
					
351
				}
357
				}
352
 
358
 
353
			});
359
			});
354
 
360
 
355
			// gestion de la validation
361
			// gestion de la validation
356
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
362
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
357
 
363
 
358
				// lors du clic
364
				// lors du clic
359
				@Override
365
				@Override
360
				public void onClick(Button button, EventObject e) {
366
				public void onClick(Button button, EventObject e) {
361
					
367
					
362
					TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
368
					TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
363
					TreeNode noeudAjout;
369
					TreeNode noeudAjout;
364
					if(noeuds.length > 0) {
370
					if(noeuds.length > 0) {
365
						noeudAjout = noeuds[noeuds.length - 1];
371
						noeudAjout = noeuds[noeuds.length - 1];
366
					} else {
372
					} else {
367
						noeudAjout = arbreMotsCles.getRootNode();
373
						noeudAjout = arbreMotsCles.getRootNode();
368
					}
374
					}
369
 
375
 
370
					ajouterNoeud(noeudAjout);
376
					ajouterNoeud(noeudAjout);
371
					
377
					
372
				}
378
				}
373
			});
379
			});
374
 
380
 
375
		}
381
		}
376
		
382
		
377
		
383
		
378
		/**
384
		/**
379
		 * Configure le drag 'n drop pour la liste
385
		 * Configure le drag 'n drop pour la liste
380
		 */
386
		 */
381
		private void configDragAndDrop()
387
		private void configDragAndDrop()
382
		{
388
		{
383
			// on fabrique la nouvelle configuration
389
			// on fabrique la nouvelle configuration
384
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
390
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
385
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
391
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
386
			//arbreMotsCles.setEnableDD(true);
392
			//arbreMotsCles.setEnableDD(true);
387
			arbreMotsCles.setEnableDrag(true);
393
			arbreMotsCles.setEnableDrag(true);
388
			arbreMotsCles.setEnableDrop(true);
394
			arbreMotsCles.setEnableDrop(true);
389
			DropTargetConfig dtc = new DropTargetConfig();		
395
			DropTargetConfig dtc = new DropTargetConfig();		
390
			dtc.setdDdGroup("ObsMotsClesGroup"); 
396
			dtc.setdDdGroup("ObsMotsClesGroup"); 
391
		}
397
		}
392
 
398
 
393
		/**
399
		/**
394
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
400
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
395
		 */
401
		 */
396
		public void obtenirArbreMotsCles() {
402
		public void obtenirArbreMotsCles() {
397
 
403
 
398
			getOMediateur().obtenirArbreMotsCles(this);
404
			getOMediateur().obtenirArbreMotsCles(this);
399
 
405
 
400
		}
406
		}
401
 
407
 
402
		/**
408
		/**
403
		 * Supprime un noeud de l'arbre
409
		 * Supprime un noeud de l'arbre
404
		 * 
410
		 * 
405
		 * @param n
411
		 * @param n
406
		 *            le noeud à supprimer
412
		 *            le noeud à supprimer
407
		 */
413
		 */
408
		public void supprimerNoeud(TreeNode n) {
414
		public void supprimerNoeud(TreeNode n) {
409
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
415
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
410
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
416
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
411
				
417
				
412
				if(Window.confirm("Etes vous sur de vouloir supprimer ce projet ?")) {
418
				if(Window.confirm("Etes vous sur de vouloir supprimer ce projet ?")) {
413
					// on détache le noeud et on le détruit
419
					// on détache le noeud et on le détruit
414
					n.getParentNode().removeChild(n);
420
					n.getParentNode().removeChild(n);
415
					n.destroy();
421
					n.destroy();
416
					// puis on en notifie le médiateur en lui passant le noeud supprimé
422
					// puis on en notifie le médiateur en lui passant le noeud supprimé
417
					// et l'arbre
423
					// et l'arbre
418
					getOMediateur()
424
					getOMediateur()
419
							.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
425
							.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
420
				}
426
				}
421
			} else {
427
			} else {
422
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
428
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
423
				// son erreur
429
				// son erreur
424
				Window.alert("Impossible de supprimer la racine de l'arbre");
430
				Window.alert("Impossible de supprimer la racine de l'arbre");
425
			}
431
			}
426
		}
432
		}
427
 
433
 
428
		/**
434
		/**
429
		 * Ajoute un noeud dans l'arbre au parent donné
435
		 * Ajoute un noeud dans l'arbre au parent donné
430
		 * 
436
		 * 
431
		 * @param parent
437
		 * @param parent
432
		 *            le futur parent du noeud à ajouter
438
		 *            le futur parent du noeud à ajouter
433
		 */
439
		 */
434
		public void ajouterNoeud(TreeNode parent) {
440
		public void ajouterNoeud(TreeNode parent) {
435
 
441
 
436
			// on met l'ajout du noeud à vrai
442
			// on met l'ajout du noeud à vrai
437
			ajoutNoeud = true;
443
			ajoutNoeud = true;
438
			// on crée un nouveau noeud vide
444
			// on crée un nouveau noeud vide
439
			TreeNode nd = new TreeNode("");
445
			TreeNode nd = new TreeNode("");
440
			nd.setCls("x-view-treenode-keyword");
446
			nd.setCls("x-view-treenode-keyword");
441
			// on associe un objet au noeud qui contient des infos
447
			// on associe un objet au noeud qui contient des infos
442
			String[] usObject = new String[2];
448
			String[] usObject = new String[2];
443
			// l'objet contient le nom du noeud
449
			// l'objet contient le nom du noeud
444
			usObject[0] = "";
450
			usObject[0] = "";
445
			usObject[1] = genererIdMotCle(nd);
-
 
446
			nd.setId(usObject[1]);
451
			usObject[1] = "";
-
 
452
			
447
			nd.setUserObject(usObject);
453
			nd.setUserObject(usObject);
448
			// l'identifiant d'un noeud c'est son hashcode
454
			// l'identifiant d'un noeud c'est son hashcode
449
			// l'objet associé au noeud contient aussi son identifiant
455
			// l'objet associé au noeud contient aussi son identifiant
450
 
456
 
451
			// on le concatène au parent et on étend ses enfants
457
			// on le concatène au parent et on étend ses enfants
452
			parent.appendChild(nd);
458
			parent.appendChild(nd);
-
 
459
			// en attendant qu'il soit ajouté on lui affecte son chemin en tant qu'id
-
 
460
			// ce qui permettra de le retrouver et de lui affecter son id sur retour du web service
-
 
461
			cheminTemporaireAjout  = MotsClesUtilitaire.construireChemin(nd);
-
 
462
			nd.setId(cheminTemporaireAjout);
453
			parent.expand();
463
			parent.expand();
454
			// enfin on place le curseur et on fait apparaitre le champ d'édition
464
			// enfin on place le curseur et on fait apparaitre le champ d'édition
455
			// pour que l'utilisateur nomme son mot clé
465
			// pour que l'utilisateur nomme son mot clé
456
			te.startEdit(nd);
466
			te.startEdit(nd);
457
 
-
 
458
		}
467
		}
459
 
468
		
460
		/**
469
		/**
461
		 * Fonction de gestion sur le clic sur le noeud
470
		 * Fonction de gestion sur le clic sur le noeud
462
		 * 
471
		 * 
463
		 * @param node
472
		 * @param node
464
		 */
473
		 */
465
		public void gererClicNoeud(TreeNode node, boolean multi) {
474
		public void gererClicNoeud(TreeNode node, boolean multi) {
466
			
475
			
467
			if(!arbreCharge) {
476
			if(!arbreCharge) {
468
				obtenirArbreMotsCles();
477
				obtenirArbreMotsCles();
469
			} else {
478
			} else {
470
				if(multi) {
479
				if(multi) {
471
				}
480
				}
472
				((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
481
				((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
473
				oMediateur.obtenirNombreObservation();
482
				oMediateur.obtenirNombreObservation();
474
			}
483
			}
475
		}
484
		}
476
 
485
 
477
		/**
486
		/**
478
		 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
487
		 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
479
		 * clés à cocher
488
		 * clés à cocher
480
		 * 
489
		 * 
481
		 * @param motsClesIds
490
		 * @param motsClesIds
482
		 *            un tableau contenant les identifiants des mots clés à cocher
491
		 *            un tableau contenant les identifiants des mots clés à cocher
483
		 */
492
		 */
484
		public void cocherMotsCles(final String[] motsClesIds) {
493
		public void cocherMotsCles(final String[] motsClesIds) {
485
			if (getArbreMotsCles() != null
494
			if (getArbreMotsCles() != null
486
					&& getArbreMotsCles().getRootNode() != null) {
495
					&& getArbreMotsCles().getRootNode() != null) {
487
				// à partir de la racine
496
				// à partir de la racine
488
				getArbreMotsCles().getRootNode().cascade(
497
				getArbreMotsCles().getRootNode().cascade(
489
						new NodeTraversalCallback() {
498
						new NodeTraversalCallback() {
490
 
499
 
491
							// pour chaque noeud
500
							// pour chaque noeud
492
							@Override
501
							@Override
493
							public boolean execute(Node node) {
502
							public boolean execute(Node node) {
494
								
503
								
495
								// on parcourt le tableau des mots clés
504
								// on parcourt le tableau des mots clés
496
								for (int i = 0; i < motsClesIds.length; i++) {
505
								for (int i = 0; i < motsClesIds.length; i++) {
497
									// si le mot clé fait partie des id à cocher on
506
									// si le mot clé fait partie des id à cocher on
498
									// le coche
507
									// le coche
499
									String usObject[] = (String[]) node
508
									String usObject[] = (String[]) node
500
											.getUserObject();
509
											.getUserObject();
501
									String nodeId = usObject[1];
510
									String nodeId = usObject[1];
502
 
511
 
503
									if (nodeId.equals(motsClesIds[i])) {
512
									if (nodeId.equals(motsClesIds[i])) {
504
										
513
										
505
										getArbreMotsCles().getNodeById(nodeId)
514
										getArbreMotsCles().getNodeById(nodeId)
506
										.getUI().getTextEl().addClassName("x-tree-node-text-kw");
515
										.getUI().getTextEl().addClassName("x-tree-node-text-kw");
507
										
516
										
508
											return true;
517
											return true;
509
									}
518
									}
510
								}
519
								}
511
								
520
								
512
								if((getArbreMotsCles().getNodeById(node.getId()).getUI().getTextEl()) != null) {
521
								if((getArbreMotsCles().getNodeById(node.getId()).getUI().getTextEl()) != null) {
513
									getArbreMotsCles().getNodeById(node.getId())
522
									getArbreMotsCles().getNodeById(node.getId())
514
									.getUI().getTextEl().removeClassName("x-tree-node-text-kw");
523
									.getUI().getTextEl().removeClassName("x-tree-node-text-kw");
515
								}
524
								}
516
 
525
 
517
								
526
								
518
								// et on passe au suivant
527
								// et on passe au suivant
519
								return true;
528
								return true;
520
							}
529
							}
521
 
530
 
522
						});
531
						});
523
			}
532
			}
524
			else {
533
			else {
525
				motsClesEnAttente = motsClesIds ;
534
				motsClesEnAttente = motsClesIds ;
526
			}
535
			}
527
		}
536
		}
528
		
537
		
529
		public void cocherMotCle(String motCleId) {
538
		public void cocherMotCle(String motCleId) {
530
			getArbreMotsCles().getNodeById(motCleId)
539
			getArbreMotsCles().getNodeById(motCleId)
531
			.getUI().getTextEl().addClassName("x-tree-node-text-kw");
540
			.getUI().getTextEl().addClassName("x-tree-node-text-kw");
532
		}
541
		}
533
		
542
		
534
		public void initialiser() {
543
		public void initialiser() {
535
			
544
			
536
			arbreCharge = false ;
545
			arbreCharge = false ;
537
			motsClesEnCours = "";
546
			motsClesEnCours = "";
538
			arbreMotsCles.collapseAll();
547
			arbreMotsCles.collapseAll();
539
			// on vide l'ancien arbre
548
			// on vide l'ancien arbre
540
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
549
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
541
			for (int i = 0; i < rootChild.length; i++) {
550
			for (int i = 0; i < rootChild.length; i++) {
542
				
551
				
543
				rootChild[i].remove();
552
				rootChild[i].remove();
544
			}
553
			}
545
			
554
			
546
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
555
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
547
				
556
				
548
				@Override
557
				@Override
549
				public void onExpand(Node node) {
558
				public void onExpand(Node node) {
550
					if(!arbreCharge)
559
					if(!arbreCharge)
551
					{
560
					{
552
						obtenirArbreMotsCles() ;
561
						obtenirArbreMotsCles() ;
553
						arbreCharge = true ;
562
						arbreCharge = true ;
554
					}
563
					}
555
				}
564
				}
556
				
565
				
557
			}) ;
566
			}) ;
558
		}
567
		}
559
 
568
 
560
		/**
569
		/**
561
		 * Méthode héritée de l'interface rafraichissable
570
		 * Méthode héritée de l'interface rafraichissable
562
		 * 
571
		 * 
563
		 * @param nouvelleDonnees
572
		 * @param nouvelleDonnees
564
		 *            les nouvelles données pour l'objet
573
		 *            les nouvelles données pour l'objet
565
		 * @param repandreRafraichissement
574
		 * @param repandreRafraichissement
566
		 *            booleen qui dit si on doit répandre l'évenement
575
		 *            booleen qui dit si on doit répandre l'évenement
567
		 */
576
		 */
568
		@Override
577
		@Override
569
		public void rafraichir(Object nouvelleDonnees,
578
		public void rafraichir(Object nouvelleDonnees,
570
				boolean repandreRafraichissement) {
579
				boolean repandreRafraichissement) {
571
			
580
			
572
			if(nouvelleDonnees instanceof Tree) {
581
			if(nouvelleDonnees instanceof Tree) {
573
 
582
 
574
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
583
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
575
 
584
 
576
				// on prend sa racine et on l'attache à l'arbre des mots clés
585
				// on prend sa racine et on l'attache à l'arbre des mots clés
577
				Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
586
				Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
578
				for (int i = 0; i < rootChild.length; i++) {
587
				for (int i = 0; i < rootChild.length; i++) {
579
					
588
					
580
					rootChild[i].remove();
589
					rootChild[i].remove();
581
				}
590
				}
582
				
591
				
583
				copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
592
				MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
584
 
593
 
585
				// si l'arbre n'était pas encore considéré comme instancié
594
				// si l'arbre n'était pas encore considéré comme instancié
586
				if (!arbreCharge) {
595
				if (!arbreCharge) {
587
					// on signale que oui
596
					// on signale que oui
588
					arbreCharge = true;
597
					arbreCharge = true;
589
				}
598
				}
590
 
599
 
591
				
600
				
592
				// s'il y a des mots clés en attente (lors du premier rendering)
601
				// s'il y a des mots clés en attente (lors du premier rendering)
593
				if (motsCleInitialises == false && motsClesEnAttente != null) {
602
				if (motsCleInitialises == false && motsClesEnAttente != null) {
594
					// on les coche
603
					// on les coche
595
					cocherMotsCles(motsClesEnAttente) ;
604
					cocherMotsCles(motsClesEnAttente) ;
596
					motsCleInitialises = true;
605
					motsCleInitialises = true;
597
				}
606
				}
598
				
607
				
599
				if(motsClesEnAttente.length > 0) {
608
				if(motsClesEnAttente.length > 0) {
600
					cocherMotsCles(motsClesEnAttente);
609
					cocherMotsCles(motsClesEnAttente);
601
				}
610
				}
602
			}
611
			}
603
 
612
 
604
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
613
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
605
			// nouvelle obs)
614
			// nouvelle obs)
606
			if (nouvelleDonnees instanceof String) {
615
			if (nouvelleDonnees instanceof String) {
607
				
616
				
608
				String chaineMc = (String)nouvelleDonnees;
617
				String chaineMc = (String)nouvelleDonnees;
609
				String[] motsClesIds = chaineMc.split(";");
618
				String[] motsClesIds = chaineMc.split(";");
610
				
619
				
611
				// et que l'arbre est instancié
620
				// et que l'arbre est instancié
612
				if (arbreCharge) {
621
				if (arbreCharge) {
613
					// le tableau de String contient les id des mots clés associés à
622
					// le tableau de String contient les id des mots clés associés à
614
					// l'image
623
					// l'image
615
					// on coche les mots clés contenu dans le tableau
624
					// on coche les mots clés contenu dans le tableau
616
					cocherMotsCles(motsClesIds);
625
					cocherMotsCles(motsClesIds);
617
					
626
					
618
				}
627
				}
619
				// si l'arbre n'est pas encore instancié on met les mots clés en
628
				// si l'arbre n'est pas encore instancié on met les mots clés en
620
				// attente
629
				// attente
621
				else {
630
				else {
622
					motsClesEnAttente = motsClesIds;
631
					motsClesEnAttente = motsClesIds;
623
				}
632
				}
624
			}
633
			}
625
		}
-
 
626
 
-
 
627
		private String genererIdMotCle(TreeNode nd) {
-
 
628
			
-
 
629
			double IdMC = (nd.hashCode() + ((Math.random() * 10000) + 1));			
-
 
630
			return ""+IdMC;
-
 
631
		}
-
 
632
		
-
 
633
		/**
-
 
634
		 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
-
 
635
		 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
-
 
636
		 * 
-
 
637
		 * @param ndPereOriginal
634
			
638
		 *            le père des noeuds de l'arbre original
-
 
639
		 * @param ndPereCopie
635
			// reception d'un nouvel identifiant de mot clé
640
		 *            le père qui va recevoir les copies
-
 
641
		 */
-
 
642
		private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
636
			if(nouvelleDonnees instanceof Integer) {
643
			if (ndPereCopie != null && ndPereOriginal != null) {
637
				if(cheminTemporaireAjout != null) {
644
				Node[] ndNodeFils = ndPereOriginal.getChildNodes();
-
 
645
				
638
					String id = ((Integer)(nouvelleDonnees)).toString();
646
				for (int i = 0; i < ndNodeFils.length; i++) {
-
 
647
 
639
					TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
648
					String[] usObj = (String[]) ndNodeFils[i].getUserObject();
-
 
649
					TreeNode child = new TreeNode(usObj[0]);
-
 
650
					child.setId(usObj[1]);
640
					String[] userObj = {noeudEnAjout.getText(), id};
651
					child.setUserObject(usObj);
641
					noeudEnAjout.setUserObject(userObj);
652
					ndPereCopie.appendChild(child);
-
 
653
 
-
 
654
					if (!ndNodeFils[i].isLeaf()) {
642
					noeudEnAjout.setId(id);
655
						copierFilsNoeud(ndNodeFils[i], child);
-
 
656
					}
-
 
657
 
643
					cheminTemporaireAjout = null;
658
				}
644
				}
-
 
645
			}
-
 
646
			
659
			}
647
			arbreMotsCles.enable();
660
		}
648
		}
661
		
649
		
662
		public void raz() {
650
		public void raz() {
663
			
651
			
664
			arbreCharge = false ;
652
			arbreCharge = false ;
665
			arbreMotsCles.collapseAll();
653
			arbreMotsCles.collapseAll();
666
			arbreMotsCles.clear() ;
654
			arbreMotsCles.clear() ;
667
			
655
			
668
			// on crée une racine pour l'arbre
656
			// on crée une racine pour l'arbre
669
			TreeNode root = new TreeNode("Projets");
657
			TreeNode root = new TreeNode("Projets");
670
			root.setId("racine_obs");
658
			root.setId("racine_obs");
671
			String[] usObject = { "Projets", "racine_obs" };
659
			String[] usObject = { "Projets", "racine_obs" };
672
			root.setUserObject(usObject);
660
			root.setUserObject(usObject);
673
			root.setExpandable(true);
661
			root.setExpandable(true);
674
 
662
 
675
			arbreMotsCles.setRootNode(root);
663
			arbreMotsCles.setRootNode(root);
676
			
664
			
677
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
665
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
678
				
666
				
679
				@Override
667
				@Override
680
				public void onExpand(Node node) {
668
				public void onExpand(Node node) {
681
					if(!arbreCharge)
669
					if(!arbreCharge)
682
					{
670
					{
683
						obtenirArbreMotsCles() ;
671
						obtenirArbreMotsCles() ;
684
						arbreCharge = true ;
672
						arbreCharge = true ;
685
					}
673
					}
686
				}
674
				}
687
				
675
				
688
			}) ;
676
			}) ;
689
			
677
			
690
			motsClesEnCours  = "";
678
			motsClesEnCours  = "";
691
		}
679
		}
692
 
680
 
693
		@Override
681
		@Override
694
		public boolean renvoyerEtatFiltre() {
682
		public boolean renvoyerEtatFiltre() {
695
			// TODO Auto-generated method stub
683
			// TODO Auto-generated method stub
696
			return false;
684
			return false;
697
		}
685
		}
698
 
686
 
699
		@Override
687
		@Override
700
		public String renvoyerNomFiltre() {
688
		public String renvoyerNomFiltre() {
701
			// TODO Auto-generated method stub
689
			// TODO Auto-generated method stub
702
			return null;
690
			return null;
703
		}
691
		}
704
 
692
 
705
		@Override
693
		@Override
706
		public String[] renvoyerValeursAFiltrer() {
694
		public String[] renvoyerValeursAFiltrer() {
707
			
695
			
708
			String val = "";
696
			String val = "";
709
			
697
			
710
			TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
698
			TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
711
			
699
			
712
			for(int i = 0; i< noeuds.length ; i++) {
700
			for(int i = 0; i< noeuds.length ; i++) {
713
				if(noeuds[i].getDepth() > 0) {
701
				if(noeuds[i].getDepth() > 0) {
714
					val += ";"+noeuds[i].getId();
702
					val += ";"+noeuds[i].getId();
715
				}
703
				}
716
			}
704
			}
717
			
705
			
718
			val = val.replaceFirst(";", "");
706
			val = val.replaceFirst(";", "");
719
			
707
			
720
			String[] valeursFiltres = {"id_mots_cles", val};
708
			String[] valeursFiltres = {"id_mots_cles", val};
721
			
709
			
722
			return valeursFiltres;
710
			return valeursFiltres;
723
		}
711
		}
724
 
712
 
725
		@Override
713
		@Override
726
		public void valider() {
714
		public void valider() {
727
			// TODO Auto-generated method stub
715
			// TODO Auto-generated method stub
728
			
716
			
729
		}
717
		}
730
		
718
		
731
 
719
 
732
		public void montrerContextMenuArbre(final TreeNode n, EventObject e,
720
		public void montrerContextMenuArbre(final TreeNode n, EventObject e,
733
				TreeEditor te) {
721
				TreeEditor te) {
734
				Menu mn = new Menu();
722
				Menu mn = new Menu();
735
				final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
723
				final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
736
						"Ajouter un projet");
724
						"Ajouter un projet");
737
				final com.gwtext.client.widgets.menu.Item suppN = new Item(
725
				final com.gwtext.client.widgets.menu.Item suppN = new Item(
738
						"Supprimer projet");
726
						"Supprimer projet");
739
 
727
 
740
				mn.addItem(ajoutN);
728
				mn.addItem(ajoutN);
741
				mn.addItem(suppN);
729
				mn.addItem(suppN);
742
 
730
 
743
				mn.addListener(new MenuListenerAdapter() {
731
				mn.addListener(new MenuListenerAdapter() {
744
 
732
 
745
					@Override
733
					@Override
746
					public void onItemClick(BaseItem item, EventObject e) {
734
					public void onItemClick(BaseItem item, EventObject e) {
747
						if (item.equals(suppN)) {
735
						if (item.equals(suppN)) {
748
							supprimerNoeud(n);
736
							supprimerNoeud(n);
749
						}
737
						}
750
						if (item.equals(ajoutN)) {
738
						if (item.equals(ajoutN)) {
751
							ajouterNoeud(n);
739
							ajouterNoeud(n);
752
						}
740
						}
753
					}
741
					}
754
				});
742
				});
755
 
743
 
756
				mn.showAt(e.getXY());
744
				mn.showAt(e.getXY());
757
		}
745
		}
758
 
746
 
759
		@Override
747
		@Override
760
		public void viderFiltre() {
748
		public void viderFiltre() {
761
			arbreMotsCles.getSelectionModel().clearSelections();
749
			arbreMotsCles.getSelectionModel().clearSelections();
762
			motsClesEnCours = "";
750
			motsClesEnCours = "";
763
		}
751
		}
764
}
752
}