Subversion Repositories eFlore/Applications.cel

Rev

Rev 2 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 5
Line 1... Line 1...
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
Line 2... Line -...
2
 
-
 
3
 
-
 
4
 
2
 
5
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
Line 6... Line 4...
6
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
7
 
5
 
Line 19... Line 17...
19
import com.gwtext.client.widgets.tree.TreeNode;
17
import com.gwtext.client.widgets.tree.TreeNode;
20
import com.gwtext.client.widgets.tree.TreePanel;
18
import com.gwtext.client.widgets.tree.TreePanel;
21
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
19
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
Line 22... Line 20...
22
 
20
 
23
/**
21
/**
24
 * Arbre des mots clés, qui est une vue rafraichissable,
22
 * Arbre des mots clés, qui est une vue rafraichissable, qui contient des mots
-
 
23
 * clés cochables et réorganisables à volonté
25
 * qui contient des mots clés cochables et réorganisables à volonté
24
 * 
26
 * @author aurelien
25
 * @author aurelien
27
 *
26
 * 
28
 */
27
 */
Line 48... Line 47...
48
	/**
47
	/**
49
	 * Bouton de validation
48
	 * Bouton de validation
50
	 */
49
	 */
51
	private Button valider = null ;
50
	private Button valider = null;
52
	/**
51
	/**
53
	 * Une string permettant connaitre les mots clés cochés en cours séparés par des virgules
52
	 * Une string permettant connaitre les mots clés cochés en cours séparés par
-
 
53
	 * 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
-
 
59
	 * du conteneur n'ai été effectué)
59
	 */
60
	 */
60
	private String[] motsClesEnAttente ; 
61
	private String[] motsClesEnAttente;
61
	/**
62
	/**
62
	 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un noeud
63
	 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
-
 
64
	 * noeud
63
	 */
65
	 */
64
	private boolean ajoutNoeud = false ;
66
	private boolean ajoutNoeud = false;
65
	/**
67
	/**
66
	 * Booléen d'évènement qui sert à savoir si on est en train de modifier un noeud
68
	 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
-
 
69
	 * noeud
67
	 */
70
	 */
68
	private boolean modifNoeud = false ;
71
	private boolean modifNoeud = false;
69
	/**
72
	/**
70
	 * Booléen d'instanciation du conteneur
73
	 * Booléen d'instanciation du conteneur
71
	 */
74
	 */
Line 77... Line 80...
77
	
80
 
78
	/**
81
	/**
79
	 * Constructeur sans paramètre (privé car interdit d'utilisation)
82
	 * Constructeur sans paramètre (privé car interdit d'utilisation)
80
	 */
83
	 */
81
	@SuppressWarnings("unused")
84
	@SuppressWarnings("unused")
82
	private ArbreMotsClesVue()
-
 
83
	{
85
	private ArbreMotsClesVue() {
84
		super() ;
86
		super();
Line 85... Line 87...
85
	}
87
	}
86
	
88
 
-
 
89
	/**
-
 
90
	 * Constructeur avec paramètre
87
	/**
91
	 * 
88
	 * Constructeur avec paramètre
92
	 * @param im
89
	 * @param im le médiateur à associer
93
	 *            le médiateur à associer
90
	 */
-
 
91
	public ArbreMotsClesVue(ImageMediateur im)
94
	 */
92
	{
95
	public ArbreMotsClesVue(ImageMediateur im) {
93
		// on crée le panel
96
		// on crée le panel
94
		super("Mots clés") ;
97
		super("Mots clés");
Line 131... Line 134...
131
		
134
 
Line 132... Line 135...
132
	}
135
	}
133
	
136
 
-
 
137
	/**
134
	/**
138
	 * Acesseur pour le médiateur
135
	 * Acesseur pour le médiateur
139
	 * 
136
	 * @return le médiateur associé à la vue
140
	 * @return le médiateur associé à la vue
Line 137... Line 141...
137
	 */
141
	 */
Line 138... Line 142...
138
	private ImageMediateur GetIMediateur() {
142
	private ImageMediateur GetIMediateur() {
Line 139... Line 143...
139
		
143
 
140
		return iMediateur ;
144
		return iMediateur;
-
 
145
 
141
		
146
	}
142
	}
147
 
143
	
148
	/**
144
	/**
149
	 * Acesseur pour l'arbre des mots clés
145
	 * Acesseur pour l'arbre des mots clés
150
	 * 
Line 146... Line 151...
146
	 * @return le panel contenant l'arbre
151
	 * @return le panel contenant l'arbre
147
	 */
152
	 */
-
 
153
	public TreePanel getArbreMotsCles() {
148
	public TreePanel getArbreMotsCles() {
154
		return arbreMotsCles;
149
		return arbreMotsCles;
155
	}
150
	}
156
 
151
 
157
	/**
152
	/**
158
	 * Accesseur pour l'éditeur
Line 153... Line 159...
153
	 * Accesseur pour l'éditeur
159
	 * 
154
	 * @return l'éditeur associé à l'arbre
160
	 * @return l'éditeur associé à l'arbre
-
 
161
	 */
155
	 */
162
	public TreeEditor getTe() {
156
	public TreeEditor getTe() {
163
		return te;
157
		return te;
164
	}
158
	}
165
 
159
 
166
	/**
Line 160... Line 167...
160
	/**
167
	 * Acesseur pour le TextField associé à l'éditeur
161
	 * Acesseur pour le TextField associé à l'éditeur
168
	 * 
162
	 * @return le champ texte associé à l'éditeur
169
	 * @return le champ texte associé à l'éditeur
163
	 */
170
	 */
164
	public TextField getTfEdit() {
-
 
165
		return tfEdit;
171
	public TextField getTfEdit() {
Line 166... Line 172...
166
	}
172
		return tfEdit;
167
	
173
	}
Line 189... Line 195...
189
		
195
 
190
			// gestion du double clic sur un noeud
196
			// gestion du double clic sur un noeud
Line 191... Line 197...
191
			public void onDblClick(TreeNode node, EventObject e) {
197
			public void onDblClick(TreeNode node, EventObject e) {
192
				
198
 
193
				modifNoeud = true ;
-
 
194
				if(! node.getId().equals("racine"))
199
				modifNoeud = true;
195
				{
200
				if (!node.getId().equals("racine")) {
196
					te.startEdit(node);
201
					te.startEdit(node);
Line 197... Line 202...
197
				}
202
				}
Line 206... Line 211...
206
				usObject[0] = text ;
211
				usObject[0] = text;
207
				usObject[1] = ((String[])nd.getUserObject())[1] ;
212
				usObject[1] = ((String[]) nd.getUserObject())[1];
208
				nd.setUserObject(usObject) ;
213
				nd.setUserObject(usObject);
Line 209... Line 214...
209
				
214
 
210
				// si c'est un nouveau noeud
215
				// si c'est un nouveau noeud
211
				if(ajoutNoeud)
-
 
212
				{
216
				if (ajoutNoeud) {
-
 
217
					// on notifie le médiateur de l'ajout et on lui passe
213
					// on notifie le médiateur de l'ajout et on lui passe l'arbre
218
					// l'arbre
-
 
219
					GetIMediateur().ajouterMotCleDansArbre(nd,
214
					GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
220
							getArbreMotsCles().getTree());
215
					// et considière l'ajout achevé
221
					// et considière l'ajout achevé
216
					ajoutNoeud = false ;
222
					ajoutNoeud = false;
217
				}
223
				}
218
				// si c'est noeud déjà existant
224
				// si c'est noeud déjà existant
219
				else
-
 
220
				{
225
				else {
221
					if(modifNoeud)
-
 
222
					{
226
					if (modifNoeud) {
-
 
227
						// on notifie le médiateur de la modification et on lui
223
						// on notifie le médiateur de la modification et on lui passe l'arbre
228
						// passe l'arbre
-
 
229
						GetIMediateur().modifierMotCleDansArbre(nd,
224
						GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
230
								getArbreMotsCles().getTree());
225
						// et on considère la modification achevée
231
						// et on considère la modification achevée
226
						modifNoeud = false ;
232
						modifNoeud = false;
227
					}
233
					}
Line 228... Line 234...
228
				}
234
				}
Line 229... Line 235...
229
				
235
 
230
			}
236
			}
231
			
-
 
-
 
237
 
232
			// gestion du déplacement d'un noeud
238
			// gestion du déplacement d'un noeud
233
			public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
239
			public void onMoveNode(Tree tree, TreeNode node,
-
 
240
					TreeNode oldParent, TreeNode newParent, int index) {
234
			{
241
				// on notifie le médiateur et on lui passe l'arbre
Line 235... Line 242...
235
				// on notifie le médiateur et on lui passe l'arbre
242
				GetIMediateur().deplacerMotCleDansArbre(node,
Line 236... Line 243...
236
				GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
243
						getArbreMotsCles().getTree());
Line 245... Line 252...
245
			public void onClick(Button button, EventObject e) {
252
			public void onClick(Button button, EventObject e) {
Line 246... Line 253...
246
				
253
 
247
				// on vide les mots clés en cours
254
				// on vide les mots clés en cours
248
				motsClesEnCours = "" ;
255
				motsClesEnCours = "";
249
				// pour chaque noeud à partir de la racine
256
				// pour chaque noeud à partir de la racine
-
 
257
				getArbreMotsCles().getRootNode().cascade(
Line 250... Line 258...
250
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
258
						new NodeTraversalCallback() {
251
					
259
 
Line 252... Line 260...
252
					// on éxécute une fonction
260
							// on éxécute une fonction
-
 
261
							public boolean execute(Node node) {
253
					public boolean execute(Node node) {
262
 
-
 
263
								// on récupère le mot clé associé au noeud et
254
					
264
								// ses infos
255
							// on récupère le mot clé associé au noeud et ses infos
265
								TreeNode tn = getArbreMotsCles().getNodeById(
-
 
266
										node.getId());
256
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
267
 
-
 
268
								String[] usObject = (String[]) tn
257
 
269
										.getUserObject();
258
								String[] usObject =  (String[])tn.getUserObject() ;
270
								GetIMediateur().mettreAjourMotsClesId(
259
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
-
 
260
									
271
										usObject[0], usObject[1]);
-
 
272
 
261
									if(tn.getUI().isChecked())
273
								if (tn.getUI().isChecked()) {
262
									{
274
									// et les concatène à la string des mots
Line 263... Line 275...
263
										// et les concatène à la string des mots clés en cours
275
									// clés en cours
264
										motsClesEnCours += usObject[1]+"," ;
276
									motsClesEnCours += usObject[1] + ",";
Line 265... Line 277...
265
									}
277
								}
Line 266... Line 278...
266
							
278
 
-
 
279
								return true;
267
							return true ;
280
							}
-
 
281
 
268
					}
282
						});
269
					
283
 
Line 270... Line 284...
270
				});
284
				// enfin on notifie le médiateur et on lui passe l'arbre et la
Line 285... Line 299...
285
		
299
 
Line 286... Line 300...
286
	}
300
	}
287
 
301
 
-
 
302
	/**
-
 
303
	 * Supprime un noeud de l'arbre
288
	/**
304
	 * 
289
	 * Supprime un noeud de l'arbre
305
	 * @param n
290
	 * @param n le noeud à supprimer
306
	 *            le noeud à supprimer
291
	 */
-
 
292
	public void supprimerNoeud(TreeNode n)
307
	 */
293
	{
308
	public void supprimerNoeud(TreeNode n) {
294
		// si ça n'est pas la racine (qu'on ne peut pas supprimer)
-
 
295
		if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
309
		// si ça n'est pas la racine (qu'on ne peut pas supprimer)
296
		{
310
		if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
297
			// on détache le noeud et on le détruit
311
			// on détache le noeud et on le détruit
298
			n.getParentNode().removeChild(n);
312
			n.getParentNode().removeChild(n);
-
 
313
			n.destroy();
-
 
314
			// puis on en notifie le médiateur en lui passant le noeud supprimé
299
			n.destroy() ;
315
			// et l'arbre
300
			// puis on en notifie le médiateur en lui passant le noeud supprimé et l'arbre
-
 
301
			GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
316
			GetIMediateur()
302
		}
-
 
303
		else
317
					.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
-
 
318
		} else {
304
		{
319
			// si l'utilisateur tente de supprimer la racine, on l'avertit de
305
			// si l'utilisateur tente de supprimer la racine, on l'avertit de son erreur
320
			// son erreur
306
			Window.alert("Impossible de supprimer la racine de l'arbre") ;
321
			Window.alert("Impossible de supprimer la racine de l'arbre");
Line 307... Line 322...
307
		}
322
		}
308
	}
323
	}
-
 
324
 
-
 
325
	/**
309
	
326
	 * Ajoute un noeud dans l'arbre au parent donné
310
	/**
327
	 * 
311
	 * Ajoute un noeud dans l'arbre au parent donné
328
	 * @param parent
312
	 * @param parent le futur parent du noeud à ajouter
-
 
Line 313... Line 329...
313
	 */
329
	 *            le futur parent du noeud à ajouter
314
	public void ajouterNoeud(TreeNode parent)
330
	 */
315
	{
331
	public void ajouterNoeud(TreeNode parent) {
316
		
332
 
Line 331... Line 347...
331
			// l'objet associé au noeud contient aussi son identifiant
347
		// l'objet associé au noeud contient aussi son identifiant
Line 332... Line 348...
332
			
348
 
333
			// on le concatène au parent et on étend ses enfants
349
		// on le concatène au parent et on étend ses enfants
334
			parent.appendChild(nd);
350
		parent.appendChild(nd);
335
			parent.expand() ;
351
		parent.expand();
-
 
352
		// enfin on place le curseur et on fait apparaitre le champ d'édition
336
			// enfin on place le curseur et on fait apparaitre le champ d'édition pour que l'utilisateur nomme son mot clé
353
		// pour que l'utilisateur nomme son mot clé
Line 337... Line -...
337
			te.startEdit(nd);
-
 
338
 
354
		te.startEdit(nd);
Line 339... Line 355...
339
		
355
 
340
	}
356
	}
-
 
357
 
341
	
358
	/**
342
	/**
359
	 * Coche le noeud s'il est décoché, le décoche sinon
343
	 * Coche le noeud s'il est décoché, le décoche sinon
360
	 * 
344
	 * @param node
-
 
345
	 */
361
	 * @param node
346
	public void gererClicNoeud(TreeNode node)
-
 
347
	{
362
	 */
348
		if(node.getUI().isChecked())
-
 
349
		{
363
	public void gererClicNoeud(TreeNode node) {
350
			node.getUI().toggleCheck(false) ;
-
 
351
		}
364
		if (node.getUI().isChecked()) {
352
		else
365
			node.getUI().toggleCheck(false);
353
		{
366
		} else {
Line 354... Line 367...
354
			node.getUI().toggleCheck(true) ;
367
			node.getUI().toggleCheck(true);
355
		}
368
		}
-
 
369
	}
-
 
370
 
-
 
371
	/**
356
	}
372
	 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
357
	
373
	 * clés à cocher
358
	/**
374
	 * 
359
	 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots clés à cocher 
-
 
-
 
375
	 * @param motsClesIds
360
	 * @param motsClesIds un tableau contenant les identifiants des mots clés à cocher
376
	 *            un tableau contenant les identifiants des mots clés à cocher
361
	 */
-
 
362
	public void cocherMotsCles(final String[] motsClesIds)
377
	 */
363
	{
378
	public void cocherMotsCles(final String[] motsClesIds) {
-
 
379
		if (getArbreMotsCles() != null
Line 364... Line 380...
364
		if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
380
				&& getArbreMotsCles().getRootNode() != null) {
365
		{
381
			// à partir de la racine
Line 366... Line 382...
366
			// à partir de la racine
382
			getArbreMotsCles().getRootNode().cascade(
367
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
383
					new NodeTraversalCallback() {
368
	
-
 
369
				// pour chaque noeud
384
 
-
 
385
						// pour chaque noeud
370
				public boolean execute(Node node) {
386
						public boolean execute(Node node) {
-
 
387
 
371
					
388
							// on parcourt le tableau des mots clés
Line 372... Line 389...
372
						// on parcourt le tableau des mots clés
389
							for (int i = 0; i < motsClesIds.length; i++) {
373
						for(int i = 0 ; i < motsClesIds.length ; i++)
390
								// si le mot clé fait partie des id à cocher on
374
						{
391
								// le coche
375
							// si le mot clé fait partie des id à cocher on le coche
392
								String usObject[] = (String[]) node
376
							String usObject[] = (String[])node.getUserObject() ;
393
										.getUserObject();
Line 377... Line 394...
377
							String nodeId = usObject[1] ;
394
								String nodeId = usObject[1];
-
 
395
 
378
										
396
								if (nodeId.equals(motsClesIds[i])) {
379
							if(nodeId.equals(motsClesIds[i]))
397
									getArbreMotsCles().getNodeById(nodeId)
380
							{
398
											.getUI().toggleCheck(true);
381
								getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
399
									return true;
Line 392... Line 410...
392
		}
410
		}
393
	}
411
	}
Line 394... Line 412...
394
	
412
 
395
	/**
413
	/**
-
 
414
	 * Méthode héritée de l'interface rafraichissable
-
 
415
	 * 
396
	 * Méthode héritée de l'interface rafraichissable
416
	 * @param nouvelleDonnees
-
 
417
	 *            les nouvelles données pour l'objet
397
	 * @param nouvelleDonnees les nouvelles données pour l'objet
418
	 * @param repandreRafraichissement
398
	 * @param repandreRafraichissement booleen qui dit si on doit répandre l'évenement
419
	 *            booleen qui dit si on doit répandre l'évenement
399
	 */
420
	 */
400
	public void rafraichir(Object nouvelleDonnees,
421
	public void rafraichir(Object nouvelleDonnees,
401
			boolean repandreRafraichissement) {
422
			boolean repandreRafraichissement) {
402
		// si on a reçu un arbre
423
		// si on a reçu un arbre
403
		if(nouvelleDonnees instanceof Tree)
-
 
404
		{
424
		if (nouvelleDonnees instanceof Tree) {
Line 405... Line 425...
405
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
425
			Tree nouvelArbre = (Tree) nouvelleDonnees;
406
				
-
 
407
				if(nouvelArbre.getRootNode().getChildNodes().length <= 0)
426
 
408
				{
427
			if (nouvelArbre.getRootNode().getChildNodes().length <= 0) {
409
					// on crée une racine pour l'arbre
428
				// on crée une racine pour l'arbre
410
					TreeNode root = new TreeNode("Tags") ;
429
				TreeNode root = new TreeNode("Tags");
411
					root.setId("racine") ;
430
				root.setId("racine");
Line 418... Line 437...
418
					for (int i = 0; i < rootChild.length; i++) {
437
			for (int i = 0; i < rootChild.length; i++) {
Line 419... Line 438...
419
						
438
 
420
						rootChild[i].remove() ;
439
				rootChild[i].remove();
Line 421... Line 440...
421
					}
440
			}
-
 
441
 
Line 422... Line 442...
422
					
442
			getArbreMotsCles().getRootNode().appendChild(
423
					getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
443
					nouvelArbre.getRootNode());
424
						
-
 
425
					// si l'arbre n'était pas encore considéré comme instancié
444
 
426
					if(!estInstancie)
445
			// si l'arbre n'était pas encore considéré comme instancié
427
					{
446
			if (!estInstancie) {
Line 428... Line 447...
428
						// on signale que oui
447
				// on signale que oui
429
						estInstancie = true ;
448
				estInstancie = true;
430
					}
-
 
431
					
449
			}
432
					// s'il y a des mots clés en attente (lors du premier rendering)
450
 
433
					if(motsCleInitialises == false && motsClesEnAttente != null)
451
			// s'il y a des mots clés en attente (lors du premier rendering)
434
					{
452
			if (motsCleInitialises == false && motsClesEnAttente != null) {
435
						// on les coche
453
				// on les coche
Line 436... Line -...
436
						//cocherMotsCles(motsClesEnAttente) ;
-
 
437
						motsCleInitialises = true ; 
454
				// cocherMotsCles(motsClesEnAttente) ;
-
 
455
				motsCleInitialises = true;
438
					}
456
			}
439
		}
-
 
440
		
457
		}
441
		
458
 
442
		// Si on reçoit un tableau de String (cas ou l'on séléectionne une nouvelle image)
-
 
443
		if(nouvelleDonnees instanceof String[])
459
		// Si on reçoit un tableau de String (cas ou l'on séléectionne une
-
 
460
		// nouvelle image)
444
		{
461
		if (nouvelleDonnees instanceof String[]) {
445
			// et que l'arbre est instancié
462
			// et que l'arbre est instancié
446
			if(estInstancie && nouvelleDonnees != null)
463
			if (estInstancie && nouvelleDonnees != null) {
447
			{
464
				// le tableau de String contient les id des mots clés associés à
448
				// le tableau de String contient les id des mots clés associés à l'image
465
				// l'image
449
				// on coche les mots clés contenu dans le tableau
466
				// on coche les mots clés contenu dans le tableau
450
				String[] motsClesIds = (String[])nouvelleDonnees ;		
467
				String[] motsClesIds = (String[]) nouvelleDonnees;
451
				cocherMotsCles(motsClesIds) ;		
468
				cocherMotsCles(motsClesIds);
452
			}
469
			}
453
			// si l'arbre n'est pas encore instancié on met les mots clés en attente
470
			// si l'arbre n'est pas encore instancié on met les mots clés en
454
			else
471
			// attente
Line 455... Line 472...
455
			{
472
			else {
456
				motsClesEnAttente = (String[])nouvelleDonnees ;
-
 
457
			}
473
				motsClesEnAttente = (String[]) nouvelleDonnees;
458
		}
474
			}
Line 459... Line 475...
459
	}
475
		}