Subversion Repositories eFlore/Applications.cel

Rev

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

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