Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 30 | Rev 38 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 30 Rev 36
Line 1... Line 1...
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
Line 2... Line -...
2
 
-
 
Line 3... Line 2...
3
import java.util.HashMap;
2
 
4
 
3
 
5
import org.tela_botanica.client.image.ImageMediateur;
-
 
6
import org.tela_botanica.client.interfaces.Rafraichissable;
-
 
7
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
-
 
8
 
4
import org.tela_botanica.client.image.ImageMediateur;
9
import com.google.gwt.core.client.JavaScriptObject;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import com.google.gwt.user.client.Window;
-
 
11
import com.gwtext.client.core.EventObject;
6
import com.google.gwt.user.client.Window;
12
import com.gwtext.client.core.ExtElement;
7
import com.gwtext.client.core.EventObject;
13
import com.gwtext.client.data.Node;
8
import com.gwtext.client.data.Node;
14
import com.gwtext.client.data.NodeTraversalCallback;
-
 
15
import com.gwtext.client.data.Tree;
-
 
16
import com.gwtext.client.dd.DD;
-
 
17
import com.gwtext.client.dd.DragData;
-
 
18
import com.gwtext.client.dd.DragDrop;
9
import com.gwtext.client.data.NodeTraversalCallback;
19
import com.gwtext.client.widgets.BoxComponent;
-
 
20
import com.gwtext.client.widgets.Button;
-
 
21
import com.gwtext.client.widgets.Component;
-
 
22
import com.gwtext.client.widgets.Container;
10
import com.gwtext.client.data.Tree;
23
import com.gwtext.client.widgets.Editor;
-
 
24
import com.gwtext.client.widgets.Panel;
11
import com.gwtext.client.widgets.Button;
25
import com.gwtext.client.widgets.event.ButtonListener;
-
 
26
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-
 
27
import com.gwtext.client.widgets.event.ComponentListener;
-
 
28
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
-
 
29
import com.gwtext.client.widgets.event.ContainerListener;
-
 
30
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
-
 
31
import com.gwtext.client.widgets.event.EditorListener;
-
 
32
import com.gwtext.client.widgets.event.EditorListenerAdapter;
-
 
33
import com.gwtext.client.widgets.event.PanelListenerAdapter;
12
import com.gwtext.client.widgets.Panel;
34
import com.gwtext.client.widgets.form.Field;
13
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
35
import com.gwtext.client.widgets.form.TextField;
14
import com.gwtext.client.widgets.form.TextField;
36
import com.gwtext.client.widgets.layout.RowLayout;
-
 
37
import com.gwtext.client.widgets.layout.RowLayoutData;
-
 
38
import com.gwtext.client.widgets.menu.Menu;
15
import com.gwtext.client.widgets.layout.RowLayout;
39
import com.gwtext.client.widgets.tree.DropNodeCallback;
16
import com.gwtext.client.widgets.layout.RowLayoutData;
40
import com.gwtext.client.widgets.tree.TreeEditor;
17
import com.gwtext.client.widgets.tree.TreeEditor;
41
import com.gwtext.client.widgets.tree.TreeNode;
-
 
42
import com.gwtext.client.widgets.tree.TreePanel;
18
import com.gwtext.client.widgets.tree.TreeNode;
Line -... Line 19...
-
 
19
import com.gwtext.client.widgets.tree.TreePanel;
-
 
20
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
-
 
21
 
-
 
22
/**
-
 
23
 * Arbre des mots clés, qui est une vue rafraichissable,
-
 
24
 * qui contient des mots clés cochables et réorganisables à volonté
43
import com.gwtext.client.widgets.tree.event.TreePanelListener;
25
 * @author aurelien
Line -... Line 26...
-
 
26
 *
-
 
27
 */
-
 
28
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
44
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
29
 
Line -... Line 30...
-
 
30
	/**
-
 
31
	 * Le médiateur associé à la vue
-
 
32
	 */
45
 
33
	private ImageMediateur iMediateur = null ;
-
 
34
	
-
 
35
	/**
-
 
36
	 * Le treepanel qui affiche l'arbre
46
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
37
	 */
-
 
38
	private TreePanel arbreMotsCles = null ;
-
 
39
	/**
-
 
40
	 * L'éditeur qui permet de modifier les mots clés dans l'arbre
47
 
41
	 */
-
 
42
	private TreeEditor te = null ;
-
 
43
	/**
-
 
44
	 * Le textfield associé à l'éditeur
48
	private ImageMediateur iMediateur = null ;
45
	 */
-
 
46
	private TextField tfEdit = null ;
-
 
47
	/**
-
 
48
	 * Bouton de validation
49
	
49
	 */
-
 
50
	private Button valider = null ;
-
 
51
	/**
-
 
52
	 * Une string permettant connaitre les mots clés cochés en cours séparés par des virgules
-
 
53
	 */
50
	private TreePanel arbreMotsCles = null ;
54
	private String motsClesEnCours = "" ;
-
 
55
	/**
-
 
56
	 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre 
-
 
57
	 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu du conteneur n'ai été effectué)
51
	private TreeEditor te = null ;
58
	 */
-
 
59
	private String[] motsClesEnAttente ; 
-
 
60
	/**
-
 
61
	 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un noeud
52
	private TextField tfEdit = null ;
62
	 */
-
 
63
	private boolean ajoutNoeud = false ;
-
 
64
	/**
-
 
65
	 * Booléen d'évènement qui sert à savoir si on est en train de modifier un noeud
53
	private Button valider = null ;
66
	 */
-
 
67
	private boolean modifNoeud = false ;
-
 
68
	/**
-
 
69
	 * Booléen d'instanciation du conteneur
54
	private String motsClesEnCours = "" ;
70
	 */
Line -... Line 71...
-
 
71
	private boolean estInstancie = false ;
-
 
72
	/**
-
 
73
	 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
-
 
74
	 */
-
 
75
	private boolean motsCleInitialises ;
-
 
76
	
-
 
77
	/**
-
 
78
	 * Constructeur sans paramètre (privé car interdit d'utilisation)
-
 
79
	 */
-
 
80
	private ArbreMotsClesVue()
-
 
81
	{
-
 
82
		super() ;
55
	private String[] motsClesEnAttente ; 
83
	}
56
	private boolean ajoutNoeud = false ;
84
	
-
 
85
	/**
57
	private boolean modifNoeud = false ;
86
	 * Constructeur avec paramètre
58
	private boolean estInstancie = false ;
87
	 * @param im le médiateur à associer
59
	private boolean motsCleInitialises ;
88
	 */
Line -... Line 89...
-
 
89
	public ArbreMotsClesVue(ImageMediateur im)
60
	
90
	{
-
 
91
		// on crée le panel
61
	public ArbreMotsClesVue(ImageMediateur im)
92
		super("Mots clés") ;
Line -... Line 93...
-
 
93
		this.setLayout(new RowLayout());
62
	{
94
		iMediateur = im ;
63
		super("Mots clés") ;
95
		
64
		this.setLayout(new RowLayout());
96
		// on crée le conteneur de l'arbre
65
		iMediateur = im ;
97
		arbreMotsCles = new TreePanel() ;
Line 66... Line 98...
66
		
98
		// on permet le drag and drop dans l'arbre
67
		arbreMotsCles = new TreePanel() ;
99
		arbreMotsCles.setEnableDD(true) ;
68
		arbreMotsCles.setEnableDD(true) ;
100
		
Line -... Line 101...
-
 
101
		// on crée une racine pour l'arbre
69
		
102
		TreeNode root = new TreeNode("Tags") ;
70
		TreeNode root = new TreeNode("Tags") ;
103
		root.setId("racine") ;
71
		root.setId("racine") ;
104
		String[] usObject = {"Mots clés" , "racine" } ;
72
		String[] usObject = {"Mots clés" , "racine" } ;
105
		root.setUserObject(usObject) ;
-
 
106
		
-
 
107
		arbreMotsCles.setRootNode(root) ;
73
		root.setUserObject(usObject) ;
108
		arbreMotsCles.setRootVisible(false) ;
74
		
109
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
Line -... Line 110...
-
 
110
		
75
		arbreMotsCles.setRootNode(root) ;
111
		// on crée l'éditeur pour l'arbre
Line 76... Line 112...
76
		arbreMotsCles.setRootVisible(false) ;
112
		tfEdit = new TextField() ;
Line -... Line 113...
-
 
113
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
-
 
114
		valider = new Button("Appliquer") ;
-
 
115
		arbreMotsCles.add(te) ;
-
 
116
		
77
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
117
		// on met en forme le layout
Line 78... Line 118...
78
		
118
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
Line 79... Line 119...
79
		tfEdit = new TextField() ;
119
		this.add(valider,new RowLayoutData("10%")) ;
Line 80... Line 120...
80
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
120
		
-
 
121
		// on ajoute les listeners
81
		valider = new Button("Appliquer") ;
122
		ajouterListeners() ;
82
		arbreMotsCles.add(te) ;
123
		
83
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
124
	}
84
		this.add(valider,new RowLayoutData("10%")) ;
125
	
85
		
126
	/**
Line 86... Line 127...
86
		ajouterListeners() ;
127
	 * Acesseur pour le médiateur
87
		
128
	 * @return le médiateur associé à la vue
-
 
129
	 */
88
	}
130
	private ImageMediateur GetIMediateur() {
89
	
131
		
90
	private ImageMediateur GetIMediateur() {
132
		return iMediateur ;
91
		
133
		
Line 92... Line 134...
92
		return iMediateur ;
134
	}
-
 
135
	
93
		
136
	/**
94
	}
137
	 * Acesseur pour l'arbre des mots clés
95
	
138
	 * @return le panel contenant l'arbre
96
	/**
139
	 */
97
	 * @return the arbreMotsCles
140
	public TreePanel getArbreMotsCles() {
Line -... Line 141...
-
 
141
		return arbreMotsCles;
-
 
142
	}
-
 
143
 
98
	 */
144
	/**
99
	public TreePanel getArbreMotsCles() {
145
	 * Accesseur pour l'éditeur
100
		return arbreMotsCles;
146
	 * @return l'éditeur associé à l'arbre
Line -... Line 147...
-
 
147
	 */
101
	}
148
	public TreeEditor getTe() {
Line 102... Line 149...
102
 
149
		return te;
103
	/**
150
	}
104
	 * @return the te
151
 
Line 105... Line -...
105
	 */
-
 
-
 
152
	/**
106
	public TreeEditor getTe() {
153
	 * Acesseur pour le TextField associé à l'éditeur
Line 107... Line 154...
107
		return te;
154
	 * @return le champ texte associé à l'éditeur
108
	}
155
	 */
Line 109... Line 156...
109
 
156
	public TextField getTfEdit() {
Line -... Line 157...
-
 
157
		return tfEdit;
110
	/**
158
	}
Line 111... Line 159...
111
	 * @return the tfEdit
159
	
112
	 */
160
	/**
113
	public TextField getTfEdit() {
161
	 * Ajoute les listeners nécessaires pour la gestion des évènements
Line -... Line 162...
-
 
162
	 */
114
		return tfEdit;
163
	private void ajouterListeners()
Line 115... Line -...
115
	}
-
 
-
 
164
	{
116
	
165
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
117
	public void ajouterListeners()
166
			
118
	{
167
			// gestion du clic sur un noeud
119
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
168
			public void onClick(TreeNode node, EventObject e) {
120
			
169
				
Line -... Line 170...
-
 
170
				e.stopEvent() ;
121
			public void onClick(TreeNode node, EventObject e) {
171
				gererClicNoeud(node);
122
				
172
			}
-
 
173
 
123
				e.stopEvent() ;
174
			// gestion du clic droit sur un noeud
-
 
175
			public void onContextMenu(TreeNode node, EventObject e) {
124
				gererClicNoeud(node);
176
				
125
			}
177
					e.stopEvent() ;
-
 
178
					GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
126
 
179
				
127
			
180
			}
128
			public void onContextMenu(TreeNode node, EventObject e) {
181
		
129
				
182
			// gestion du double clic sur un noeud
-
 
183
			public void onDblClick(TreeNode node, EventObject e) {
-
 
184
				
130
					e.stopEvent() ;
185
				modifNoeud = true ;
Line 131... Line 186...
131
					GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
186
				te.startEdit(node);
Line -... Line 187...
-
 
187
			}
132
				
188
			
133
			}
189
			// gestion de la modification du texte d'un noeud 
-
 
190
			public void onTextChange(TreeNode node, String text, String oldText) {
134
		
191
 
135
			public void onDblClick(TreeNode node, EventObject e) {
192
				// on récupère les informations associées au noeud
Line 136... Line -...
136
				
-
 
-
 
193
				TreeNode nd = node ;
137
				modifNoeud = true ;
194
				String[] usObject = new String[2] ;
Line -... Line 195...
-
 
195
				usObject[0] = text ;
138
				te.startEdit(node);
196
				usObject[1] = ((String[])nd.getUserObject())[1] ;
139
			}
197
				nd.setUserObject(usObject) ;
-
 
198
				
140
			
199
				// si c'est un nouveau noeud
Line 141... Line 200...
141
			public void onTextChange(TreeNode node, String text, String oldText) {
200
				if(ajoutNoeud)
142
 
201
				{
143
				
202
					// on notifie le médiateur de l'ajout et on lui passe l'arbre
Line 183... Line 242...
183
				}
242
				}
184
			}
243
			}
Line 185... Line 244...
185
			
244
			
Line -... Line 245...
-
 
245
		}) ;
186
		}) ;
246
		
187
		
247
		// gestion de la validation
-
 
248
		valider.addListener(new ButtonListenerAdapter() {
188
		valider.addListener(new ButtonListenerAdapter() {
249
			
Line -... Line 250...
-
 
250
			// lors du clic
189
 
251
			public void onClick(Button button, EventObject e) {
-
 
252
				
190
			public void onClick(Button button, EventObject e) {
253
				// on vide les mots clés en cours
Line -... Line 254...
-
 
254
				motsClesEnCours = "" ;
191
				
255
				// pour chaque noeud à partir de la racine
Line -... Line 256...
-
 
256
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
192
				motsClesEnCours = "" ;
257
					
Line 193... Line 258...
193
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
258
					// on éxécute une fonction
194
					
259
					public boolean execute(Node node) {
Line 195... Line 260...
195
					public boolean execute(Node node) {
260
					
196
					
261
							// on récupère le mot clé associé au noeud et ses infos
-
 
262
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
197
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
263
 
198
 
264
								String[] usObject =  (String[])tn.getUserObject() ;
Line 199... Line 265...
199
								String[] usObject =  (String[])tn.getUserObject() ;
265
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
200
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
266
									
Line 201... Line 267...
201
									
267
									if(tn.getUI().isChecked())
Line -... Line 268...
-
 
268
									{
202
									if(tn.getUI().isChecked())
269
										// et les concatène à la string des mots clés en cours
203
									{
270
										motsClesEnCours += usObject[1]+"," ;
204
										motsClesEnCours += usObject[1]+"," ;
271
									}
Line 205... Line 272...
205
									}
272
							
Line -... Line 273...
-
 
273
							return true ;
-
 
274
					}
-
 
275
					
206
							
276
				});
Line 207... Line 277...
207
							return true ;
277
				
Line 208... Line 278...
208
					}
278
				// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
Line -... Line 279...
-
 
279
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
-
 
280
			}
-
 
281
		}) ;
209
					
282
		
210
				});
283
	}
211
				
284
	
212
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
-
 
-
 
285
	/**
213
			}
286
	 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
214
		}) ;
287
	 */
-
 
288
	public void obtenirArbreMotsCles() {
215
		
289
		
216
	}
290
		GetIMediateur().obtenirArbreMotsCles(this) ;
-
 
291
		
217
	
292
	}
218
	public void obtenirArbreMotsCles() {
293
 
219
		
294
	/**
220
		GetIMediateur().obtenirArbreMotsCles(this) ;
295
	 * Supprime un noeud de l'arbre
-
 
296
	 * @param n le noeud à supprimer
221
		
297
	 */
222
	}
298
	public void supprimerNoeud(TreeNode n)
223
 
299
	{
Line -... Line 300...
-
 
300
		// si ça n'est pas la racine (qu'on ne peut pas supprimer)
-
 
301
		if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
-
 
302
		{
-
 
303
			// on détache le noeud et on le détruit
224
 
304
			n.getParentNode().removeChild(n);
225
	public void supprimerNoeud(TreeNode n)
305
			n.destroy() ;
226
	{
-
 
-
 
306
			// puis on en notifie le médiateur en lui passant le noeud supprimé et l'arbre
227
		
307
			GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
-
 
308
		}
228
		if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
309
		else
229
		{
310
		{
230
			n.getParentNode().removeChild(n);
311
			// si l'utilisateur tente de supprimer la racine, on l'avertit de son erreur
-
 
312
			Window.alert("Impossible de supprimer la racine de l'arbre") ;
231
			n.destroy() ;
313
		}
-
 
314
	}
232
			GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
315
	
-
 
316
	/**
233
		}
317
	 * Ajoute un noeud dans l'arbre au parent donné
-
 
318
	 * @param parent le futur parent du noeud à ajouter
234
		else
319
	 */
235
		{
320
	public void ajouterNoeud(TreeNode parent)
-
 
321
	{
-
 
322
		// on met l'ajout du noeud à vrai
236
			Window.alert("Impossible de supprimer la racine de l'arbre") ;
323
		ajoutNoeud = true ;
237
		}
324
		// on crée un nouveau noeud vide
-
 
325
		TreeNode nd = new TreeNode("");
238
	}
326
		nd.setIcon("tela.png") ;
239
	
327
		nd.setChecked(true);
Line -... Line 328...
-
 
328
		// on associe un objet au noeud qui contient des infos
-
 
329
		String[] usObject = new String[2] ;
-
 
330
		// l'objet contient le nom du noeud
-
 
331
		usObject[0] = "" ;
240
	public void ajouterNoeud(TreeNode parent)
332
		// l'identifiant d'un noeud c'est son hashcode
241
	{
333
		usObject[1] = Integer.toString(nd.hashCode()) ;
242
		
334
		// l'objet associé au noeud contient aussi son identifiant
243
		ajoutNoeud = true ;
335
		nd.setId(usObject[1]) ;
244
		TreeNode nd = new TreeNode("");
336
		nd.setUserObject(usObject) ;
Line 264... Line 356...
264
		{
356
		{
265
			node.getUI().toggleCheck(true) ;
357
			node.getUI().toggleCheck(true) ;
266
		}
358
		}
267
	}
359
	}
Line -... Line 360...
-
 
360
	
-
 
361
	/**
-
 
362
	 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots clés à cocher 
-
 
363
	 * @param motsClesIds un tableau contenant les identifiants des mots clés à cocher
268
	
364
	 */
269
	public void cocherMotsCles(final String[] motsClesIds)
365
	public void cocherMotsCles(final String[] motsClesIds)
270
	{
366
	{
271
		if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
367
		if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
-
 
368
		{
272
		{
369
			// à partir de la racine
Line -... Line 370...
-
 
370
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
273
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
371
	
Line -... Line 372...
-
 
372
				// pour chaque noeud
274
	
373
				public boolean execute(Node node) {
275
				public boolean execute(Node node) {
374
					
-
 
375
						// on parcourt le tableau des mots clés
276
					
376
						for(int i = 0 ; i < motsClesIds.length ; i++)
277
						for(int i = 0 ; i < motsClesIds.length ; i++)
377
						{
Line 278... Line 378...
278
						{
378
							// si le mot clé fait partie des id à cocher on le coche
Line 285... Line 385...
285
							{
385
							{
286
								getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
386
								getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
287
								return true ;
387
								return true ;
288
							}
388
							}
289
						}
389
						}
-
 
390
						// et on passe au suivant
290
						return true;
391
						return true;
291
				}
392
				}
Line 292... Line 393...
292
				
393
				
293
			}) ;
394
			}) ;
294
		}
395
		}
Line -... Line 396...
-
 
396
	}
-
 
397
	
-
 
398
	/**
-
 
399
	 * Méthode héritée de l'interface rafraichissable
-
 
400
	 * @param nouvelleDonnees les nouvelles données pour l'objet
295
	}
401
	 * @param repandreRafraichissement booleen qui dit si on doit répandre l'évenement
296
	
402
	 */
Line -... Line 403...
-
 
403
	public void rafraichir(Object nouvelleDonnees,
297
	public void rafraichir(Object nouvelleDonnees,
404
			boolean repandreRafraichissement) {
298
			boolean repandreRafraichissement) {
405
		
299
		
406
		// si on a reçu un arbre
300
		if(nouvelleDonnees instanceof Tree)
407
		if(nouvelleDonnees instanceof Tree)
-
 
408
		{
301
		{
409
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
302
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
410
					
303
				
-
 
Line -... Line 411...
-
 
411
					// on prend sa racine et on l'attache à l'arbre des mots clés
-
 
412
					getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
-
 
413
					getArbreMotsCles().expandAll() ;
-
 
414
					
-
 
415
					// si l'arbre n'était pas encore considéré comme instancié
-
 
416
					if(!estInstancie)
-
 
417
					{
-
 
418
						// on signale que oui
304
					getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
419
						estInstancie = true ;
305
					getArbreMotsCles().expandAll() ;
420
					}
-
 
421
					
-
 
422
					// s'il y a des mots clés en attente (lors du premier rendering)
306
					estInstancie = true ;
423
					if(motsCleInitialises == false && motsClesEnAttente != null)
307
					
424
					{
308
					if(motsCleInitialises == false && motsClesEnAttente != null)
425
						// on les coche
309
					{
426
						// TODO: corriger le bug qui fait que ça ne marche pas la premiere fois !!!!
Line -... Line 427...
-
 
427
						cocherMotsCles(motsClesEnAttente) ;
-
 
428
						motsCleInitialises = true ; 
310
						cocherMotsCles(motsClesEnAttente) ;
429
					}
311
						motsCleInitialises = true ; 
430
		}
-
 
431
		
312
					}
432
		
313
		}
433
		// Si on reçoit un tableau de String (cas ou l'on séléectionne une nouvelle image)
-
 
434
		if(nouvelleDonnees instanceof String[])
-
 
435
		{
314
		
436
			// et que l'arbre est instancié
315
		if(nouvelleDonnees instanceof String[])
437
			if(estInstancie && nouvelleDonnees != null)
316
		{
-
 
317
			if(estInstancie && nouvelleDonnees != null)
438
			{
-
 
439
				// le tableau de String contient les id des mots clés associés à l'image
318
			{
440
				// on coche les mots clés contenu dans le tableau
319
				String[] motsClesIds = (String[])nouvelleDonnees ;		
441
				String[] motsClesIds = (String[])nouvelleDonnees ;		
320
				cocherMotsCles(motsClesIds) ;
442
				cocherMotsCles(motsClesIds) ;		
321
				
443
			}
322
			}
444
			// si l'arbre n'est pas encore instancié on met les mots clés en attente