Subversion Repositories eFlore/Applications.cel

Rev

Rev 2277 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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