Subversion Repositories eFlore/Applications.cel

Rev

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

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