Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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