Subversion Repositories eFlore/Applications.cel

Rev

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

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