Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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