Subversion Repositories eFlore/Applications.cel

Rev

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

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