Subversion Repositories eFlore/Applications.cel

Rev

Rev 335 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 335 Rev 339
Line 4... Line 4...
4
import org.tela_botanica.client.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
5
import org.tela_botanica.client.vues.observation.ListeObservationVue;
5
import org.tela_botanica.client.vues.observation.ListeObservationVue;
Line 6... Line 6...
6
 
6
 
7
import com.google.gwt.core.client.GWT;
7
import com.google.gwt.core.client.GWT;
-
 
8
import com.google.gwt.core.client.JavaScriptObject;
8
import com.google.gwt.core.client.JavaScriptObject;
9
import com.google.gwt.i18n.client.NumberFormat;
9
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.ui.KeyboardListener;
11
import com.google.gwt.user.client.ui.KeyboardListener;
11
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.data.Node;
13
import com.gwtext.client.data.Node;
Line 28... Line 29...
28
import com.gwtext.client.widgets.event.PanelListenerAdapter;
29
import com.gwtext.client.widgets.event.PanelListenerAdapter;
29
import com.gwtext.client.widgets.form.TextField;
30
import com.gwtext.client.widgets.form.TextField;
30
import com.gwtext.client.widgets.grid.GridDragData;
31
import com.gwtext.client.widgets.grid.GridDragData;
31
import com.gwtext.client.widgets.grid.GridView;
32
import com.gwtext.client.widgets.grid.GridView;
32
import com.gwtext.client.widgets.layout.VerticalLayout;
33
import com.gwtext.client.widgets.layout.VerticalLayout;
-
 
34
import com.gwtext.client.widgets.menu.BaseItem;
-
 
35
import com.gwtext.client.widgets.menu.Item;
-
 
36
import com.gwtext.client.widgets.menu.Menu;
-
 
37
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
33
import com.gwtext.client.widgets.tree.DropNodeCallback;
38
import com.gwtext.client.widgets.tree.DropNodeCallback;
34
import com.gwtext.client.widgets.tree.MultiSelectionModel;
39
import com.gwtext.client.widgets.tree.MultiSelectionModel;
35
import com.gwtext.client.widgets.tree.TreeDragData;
40
import com.gwtext.client.widgets.tree.TreeDragData;
36
import com.gwtext.client.widgets.tree.TreeDropZone;
41
import com.gwtext.client.widgets.tree.TreeDropZone;
37
import com.gwtext.client.widgets.tree.TreeDropZoneConfig;
42
import com.gwtext.client.widgets.tree.TreeDropZoneConfig;
Line 120... Line 125...
120
		 * @param im
125
		 * @param im
121
		 *            le médiateur à associer
126
		 *            le médiateur à associer
122
		 */
127
		 */
123
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
128
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
124
			// on crée le panel
129
			// on crée le panel
125
			super("Mots clés");
130
			super("Projets");
Line 126... Line 131...
126
			
131
			
127
			this.setLayout(new VerticalLayout());
132
			this.setLayout(new VerticalLayout());
Line 128... Line 133...
128
			oMediateur = om;
133
			oMediateur = om;
Line 158... Line 163...
158
					
163
					
159
					msModel = new MultiSelectionModel();
164
					msModel = new MultiSelectionModel();
Line 160... Line 165...
160
					arbreMotsCles.setSelectionModel(msModel);
165
					arbreMotsCles.setSelectionModel(msModel);
161
 
166
 
162
					// on crée une racine pour l'arbre
167
					// on crée une racine pour l'arbre
163
					TreeNode root = new TreeNode("Tags");
168
					TreeNode root = new TreeNode("Projets");
164
					root.setId("racine_obs");
169
					root.setId("racine_obs");
165
					String[] usObject = { "Mots clés", "racine_obs" };
170
					String[] usObject = { "Projets", "racine_obs" };
Line 166... Line 171...
166
					root.setUserObject(usObject);
171
					root.setUserObject(usObject);
Line 167... Line 172...
167
					root.setExpandable(true);
172
					root.setExpandable(true);
168
					
173
					
169
					arbreMotsCles.setRootNode(root);
174
					arbreMotsCles.setRootNode(root);
170
					
175
					
171
					// on crée l'éditeur pour l'arbre
176
					// on crée l'éditeur pour l'arbre
Line 172... Line 177...
172
					tfEdit = new TextField();
177
					tfEdit = new TextField();
173
					te = new TreeEditor(arbreMotsCles, tfEdit);
178
					te = new TreeEditor(arbreMotsCles, tfEdit);
174
					ajouterMotCle = new Button("Nouveau mot clé");
179
					ajouterMotCle = new Button("Ajouter un projet");
Line 266... Line 271...
266
 
271
 
267
				// gestion du clic droit sur un noeud
272
				// gestion du clic droit sur un noeud
Line 268... Line 273...
268
				public void onContextMenu(TreeNode node, EventObject e) {
273
				public void onContextMenu(TreeNode node, EventObject e) {
269
 
274
 
Line 270... Line 275...
270
					e.stopEvent();
275
					e.stopEvent();
Line 271... Line 276...
271
					getOMediateur().montrerContextMenuArbre(node, e, getTe());
276
					montrerContextMenuArbre(node, e, getTe());
272
 
277
 
Line 326... Line 331...
326
						TreeNode target, DragData dragData,
331
						TreeNode target, DragData dragData,
327
						String point, DragDrop source,
332
						String point, DragDrop source,
328
						TreeNode dropNode,
333
						TreeNode dropNode,
329
						DropNodeCallback dropNodeCallback) {
334
						DropNodeCallback dropNodeCallback) {
Line 330... Line 335...
330
					
335
					
331
					if(dragData instanceof GridDragData) {
-
 
332
																		
-
 
333
						Record[] obsALier = ((GridDragData)dragData).getSelections();
-
 
334
						
-
 
335
						String idObsALier[] = new String[obsALier.length];
-
 
336
						String idMotCle = ((String[])target.getUserObject())[1];
336
					if(dragData instanceof TreeDragData) {
-
 
337
						return true;
Line 337... Line -...
337
						String idObsALierString = "";
-
 
338
						
338
					}
-
 
339
						
339
						for(int i = 0; i < obsALier.length; i++) {
340
					String idMotCle = ((String[])target.getUserObject())[1];
340
							idObsALierString += obsALier[i].getAsString("ordre_observation")+", ";
-
 
Line 341... Line -...
341
							idObsALier[i] = obsALier[i].getAsString("ordre_observation");
-
 
342
						}
341
					
343
						
342
					if(oMediateur.gererDDObsSurMotCle(target, dragData)) {
344
						if(Window.confirm("lier les observations "+idObsALierString+" au mot clé "+target.getText()+" ?")) {
343
						
-
 
344
						cocherMotCle(idMotCle);
345
							oMediateur.mettreAjourMotsCles(idMotCle, idObsALier);
345
						return true;
346
						}
346
					}
Line 347... Line 347...
347
					}	
347
					
348
					return true;
348
					return false;
349
				}
349
				}
-
 
350
 
Line 350... Line 351...
350
 
351
 
Line 351... Line 352...
351
 
352
				public void onNodeDrop(TreePanel treePanel,
Line 361... Line 362...
361
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
362
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
Line 362... Line 363...
362
 
363
 
363
				// lors du clic
364
				// lors du clic
Line -... Line 365...
-
 
365
				public void onClick(Button button, EventObject e) {
-
 
366
					
-
 
367
					TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
-
 
368
					TreeNode noeudAjout;
-
 
369
					if(noeuds.length > 0) {
364
				public void onClick(Button button, EventObject e) {
370
						noeudAjout = noeuds[noeuds.length - 1];
-
 
371
					} else {
-
 
372
						noeudAjout = arbreMotsCles.getRootNode();
-
 
373
					}
Line 365... Line 374...
365
					
374
 
366
					ajouterNoeud(arbreMotsCles.getRootNode());
375
					ajouterNoeud(noeudAjout);
Line 367... Line 376...
367
					
376
					
Line 374... Line 383...
374
		/**
383
		/**
375
		 * Configure le drag 'n drop pour la liste
384
		 * Configure le drag 'n drop pour la liste
376
		 */
385
		 */
377
		private void configDragAndDrop()
386
		private void configDragAndDrop()
378
		{
387
		{
379
 
-
 
380
			// on fabrique la nouvelle configuration
388
			// on fabrique la nouvelle configuration
381
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
389
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
382
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
390
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
383
			//arbreMotsCles.setEnableDD(true);
391
			//arbreMotsCles.setEnableDD(true);
384
			arbreMotsCles.setEnableDrag(true);
392
			arbreMotsCles.setEnableDrag(true);
385
			arbreMotsCles.setEnableDrop(true);
393
			arbreMotsCles.setEnableDrop(true);
386
			DropTargetConfig dtc = new DropTargetConfig();		
394
			DropTargetConfig dtc = new DropTargetConfig();		
387
			dtc.setdDdGroup("ObsMotsClesGroup"); 
395
			dtc.setdDdGroup("ObsMotsClesGroup"); 
388
			               
-
 
389
	         DropTarget tg = new DropTarget(livue, dtc) {  
-
 
390
	             public boolean notifyDrop(DragSource source, EventObject e,  
-
 
391
	                   DragData data) {  
-
 
392
	            	 
-
 
393
	                 return true;  
-
 
394
	             }  
-
 
395
	   
-
 
396
	             public String notifyOver(DragSource source, EventObject e,  
-
 
397
	                   DragData data) {  
-
 
398
	                return "x-dd-drop-ok";  
-
 
399
	             }  
-
 
400
	         };  
-
 
401
		}
396
		}
Line 402... Line 397...
402
 
397
 
403
		/**
398
		/**
404
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
399
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
Line 416... Line 411...
416
		 *            le noeud à supprimer
411
		 *            le noeud à supprimer
417
		 */
412
		 */
418
		public void supprimerNoeud(TreeNode n) {
413
		public void supprimerNoeud(TreeNode n) {
419
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
414
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
420
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
415
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
-
 
416
				
-
 
417
				if(Window.confirm("Etes vous sur de vouloir supprimer ce projet ?")) {
421
				// on détache le noeud et on le détruit
418
					// on détache le noeud et on le détruit
422
				n.getParentNode().removeChild(n);
419
					n.getParentNode().removeChild(n);
423
				n.destroy();
420
					n.destroy();
424
				// puis on en notifie le médiateur en lui passant le noeud supprimé
421
					// puis on en notifie le médiateur en lui passant le noeud supprimé
425
				// et l'arbre
422
					// et l'arbre
426
				getOMediateur()
423
					getOMediateur()
427
						.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
424
							.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
-
 
425
				}
428
			} else {
426
			} else {
429
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
427
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
430
				// son erreur
428
				// son erreur
431
				Window.alert("Impossible de supprimer la racine de l'arbre");
429
				Window.alert("Impossible de supprimer la racine de l'arbre");
432
			}
430
			}
Line 469... Line 467...
469
		 * 
467
		 * 
470
		 * @param node
468
		 * @param node
471
		 */
469
		 */
472
		public void gererClicNoeud(TreeNode node, boolean multi) {
470
		public void gererClicNoeud(TreeNode node, boolean multi) {
Line -... Line 471...
-
 
471
			
-
 
472
			if(!arbreCharge) {
-
 
473
				obtenirArbreMotsCles();
-
 
474
			} else {
-
 
475
				if(multi) {
473
			
476
				}
474
			//((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
-
 
475
			motsClesEnCours = node.getId();
477
				((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
-
 
478
				oMediateur.obtenirNombreObservation();
476
			oMediateur.obtenirNombreObservation();
479
			}
Line 477... Line 480...
477
		}
480
		}
478
 
481
 
479
		/**
482
		/**
Line 490... Line 493...
490
				getArbreMotsCles().getRootNode().cascade(
493
				getArbreMotsCles().getRootNode().cascade(
491
						new NodeTraversalCallback() {
494
						new NodeTraversalCallback() {
Line 492... Line 495...
492
 
495
 
493
							// pour chaque noeud
496
							// pour chaque noeud
494
							public boolean execute(Node node) {
-
 
495
 
-
 
496
								//getArbreMotsCles().getNodeById(node.getId())
-
 
Line 497... Line 497...
497
								//.getUI().toggleCheck(false);
497
							public boolean execute(Node node) {
498
								
498
								
499
								// on parcourt le tableau des mots clés
499
								// on parcourt le tableau des mots clés
500
								for (int i = 0; i < motsClesIds.length; i++) {
500
								for (int i = 0; i < motsClesIds.length; i++) {
501
									// si le mot clé fait partie des id à cocher on
501
									// si le mot clé fait partie des id à cocher on
502
									// le coche
502
									// le coche
503
									String usObject[] = (String[]) node
503
									String usObject[] = (String[]) node
Line 504... Line 504...
504
											.getUserObject();
504
											.getUserObject();
-
 
505
									String nodeId = usObject[1];
505
									String nodeId = usObject[1];
506
 
506
 
507
									if (nodeId.equals(motsClesIds[i])) {
Line 507... Line 508...
507
									if (nodeId.equals(motsClesIds[i])) {
508
										
508
											//getArbreMotsCles().getNodeById(nodeId+"_obs")
509
										getArbreMotsCles().getNodeById(nodeId)
509
											//		.getUI().toggleCheck(true);
510
										.getUI().getTextEl().addClassName("x-tree-node-text-kw");
-
 
511
										
-
 
512
											return true;
-
 
513
									}
-
 
514
								}
-
 
515
								
-
 
516
								if((getArbreMotsCles().getNodeById(node.getId()).getUI().getTextEl()) != null) {
-
 
517
									getArbreMotsCles().getNodeById(node.getId())
510
										
518
									.getUI().getTextEl().removeClassName("x-tree-node-text-kw");
511
											return true;
519
								}
512
									}
520
 
Line 513... Line 521...
513
								}
521
								
514
								// et on passe au suivant
522
								// et on passe au suivant
515
								return true;
523
								return true;
516
							}
524
							}
517
 
525
 
518
						});
526
						});
-
 
527
			}
-
 
528
			else {
-
 
529
				motsClesEnAttente = motsClesIds ;
-
 
530
			}
-
 
531
		}
-
 
532
		
-
 
533
		public void cocherMotCle(String motCleId) {
-
 
534
			getArbreMotsCles().getNodeById(motCleId)
-
 
535
			.getUI().getTextEl().addClassName("x-tree-node-text-kw");
-
 
536
		}
-
 
537
		
-
 
538
		public void initialiser() {
-
 
539
			
-
 
540
			arbreCharge = false ;
-
 
541
			motsClesEnCours = "";
-
 
542
			arbreMotsCles.collapseAll();
-
 
543
			// on vide l'ancien arbre
-
 
544
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
-
 
545
			for (int i = 0; i < rootChild.length; i++) {
-
 
546
				
-
 
547
				rootChild[i].remove();
-
 
548
			}
-
 
549
			
-
 
550
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
-
 
551
				
-
 
552
				public void onExpand(Node node) {
-
 
553
					if(!arbreCharge)
-
 
554
					{
-
 
555
						obtenirArbreMotsCles() ;
-
 
556
						arbreCharge = true ;
Line 519... Line 557...
519
			}
557
					}
520
			else {
558
				}
521
				motsClesEnAttente = motsClesIds ;
559
				
522
			}
560
			}) ;
Line 550... Line 588...
550
				if (!arbreCharge) {
588
				if (!arbreCharge) {
551
					// on signale que oui
589
					// on signale que oui
552
					arbreCharge = true;
590
					arbreCharge = true;
553
				}
591
				}
Line 554... Line 592...
554
 
592
 
555
				/*
593
				
556
				// s'il y a des mots clés en attente (lors du premier rendering)
594
				// s'il y a des mots clés en attente (lors du premier rendering)
557
				if (motsCleInitialises == false && motsClesEnAttente != null) {
595
				if (motsCleInitialises == false && motsClesEnAttente != null) {
558
					// on les coche
596
					// on les coche
559
					// cocherMotsCles(motsClesEnAttente) ;
597
					cocherMotsCles(motsClesEnAttente) ;
560
					motsCleInitialises = true;
598
					motsCleInitialises = true;
Line 561... Line 599...
561
				}
599
				}
562
				
600
				
563
				if(motsClesEnAttente.length > 0) {
601
				if(motsClesEnAttente.length > 0) {
564
							cocherMotsCles(motsClesEnAttente);
602
					cocherMotsCles(motsClesEnAttente);
Line 565... Line 603...
565
				}*/
603
				}
566
			}
604
			}
567
 
605
 
-
 
606
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
-
 
607
			// nouvelle obs)
-
 
608
			if (nouvelleDonnees instanceof String) {
-
 
609
				
568
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
610
				String chaineMc = (String)nouvelleDonnees;
569
			// nouvelle obs)
611
				String[] motsClesIds = chaineMc.split(";");
570
			if (nouvelleDonnees instanceof String[]) {
612
				
571
				// et que l'arbre est instancié
613
				// et que l'arbre est instancié
572
				if (arbreCharge) {
614
				if (arbreCharge) {
573
					// le tableau de String contient les id des mots clés associés à
-
 
574
					// l'image
615
					// le tableau de String contient les id des mots clés associés à
Line 575... Line 616...
575
					// on coche les mots clés contenu dans le tableau
616
					// l'image
576
					String[] motsClesIds = (String[]) nouvelleDonnees;
617
					// on coche les mots clés contenu dans le tableau
577
					cocherMotsCles(motsClesIds);
618
					cocherMotsCles(motsClesIds);
578
					
619
					
579
				}
620
				}
580
				// si l'arbre n'est pas encore instancié on met les mots clés en
621
				// si l'arbre n'est pas encore instancié on met les mots clés en
581
				// attente
622
				// attente
582
				else {
623
				else {
Line 583... Line 624...
583
					motsClesEnAttente = (String[]) nouvelleDonnees;
624
					motsClesEnAttente = (String[]) motsClesIds;
-
 
625
				}
584
				}
626
			}
-
 
627
		}
585
			}
628
 
Line 586... Line 629...
586
		}
629
		private String genererIdMotCle(TreeNode nd) {
587
 
630
			
588
		private String genererIdMotCle(TreeNode nd) {
631
			double IdMC = (nd.hashCode() + (Math.random() * 10000));			
Line 618... Line 661...
618
			}
661
			}
619
		}
662
		}
Line 620... Line 663...
620
		
663
		
Line -... Line 664...
-
 
664
		public void raz() {
-
 
665
			
-
 
666
			arbreCharge = false ;
-
 
667
			arbreMotsCles.collapseAll();
-
 
668
			arbreMotsCles.clear() ;
-
 
669
			
-
 
670
			// on crée une racine pour l'arbre
-
 
671
			TreeNode root = new TreeNode("Projets");
-
 
672
			root.setId("racine_obs");
-
 
673
			String[] usObject = { "Projets", "racine_obs" };
-
 
674
			root.setUserObject(usObject);
-
 
675
			root.setExpandable(true);
-
 
676
 
-
 
677
			arbreMotsCles.setRootNode(root);
-
 
678
			
-
 
679
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
-
 
680
				
-
 
681
				public void onExpand(Node node) {
-
 
682
					if(!arbreCharge)
-
 
683
					{
-
 
684
						obtenirArbreMotsCles() ;
-
 
685
						arbreCharge = true ;
-
 
686
					}
-
 
687
				}
-
 
688
				
-
 
689
			}) ;
621
		public void raz() {
690
			
Line 622... Line 691...
622
			
691
			motsClesEnCours  = "";
623
		}
692
		}
624
 
693
 
Line 632... Line 701...
632
			return null;
701
			return null;
633
		}
702
		}
Line 634... Line 703...
634
 
703
 
Line 635... Line 704...
635
		public String[] renvoyerValeursAFiltrer() {
704
		public String[] renvoyerValeursAFiltrer() {
Line -... Line 705...
-
 
705
			
-
 
706
			String val = "";
636
			
707
			
-
 
708
			TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
-
 
709
			
-
 
710
			for(int i = 0; i< noeuds.length ; i++) {
-
 
711
				if(noeuds[i].getDepth() > 0) {
Line 637... Line 712...
637
			String val = motsClesEnCours;
712
					val += ";"+noeuds[i].getId();
-
 
713
				}
-
 
714
			}
Line 638... Line 715...
638
			
715
			
639
			String[] valeursFiltres = {"mots_cles", val};
716
			val = val.replaceFirst(";", "");
Line 640... Line 717...
640
			
717
			
641
			GWT.log(val);
718
			String[] valeursFiltres = {"mots_cles", val};
Line 642... Line 719...
642
			
719
			
-
 
720
			return valeursFiltres;
-
 
721
		}
-
 
722
 
-
 
723
		public void valider() {
-
 
724
			// TODO Auto-generated method stub
-
 
725
			
-
 
726
		}
-
 
727
		
-
 
728
 
-
 
729
		public void montrerContextMenuArbre(final TreeNode n, EventObject e,
-
 
730
				TreeEditor te) {
-
 
731
				Menu mn = new Menu();
-
 
732
				final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
-
 
733
						"Ajouter un projet");
-
 
734
				final com.gwtext.client.widgets.menu.Item suppN = new Item(
-
 
735
						"Supprimer projet");
-
 
736
 
-
 
737
				mn.addItem(ajoutN);
-
 
738
				mn.addItem(suppN);
-
 
739
 
-
 
740
				mn.addListener(new MenuListenerAdapter() {
-
 
741
 
-
 
742
					public void onItemClick(BaseItem item, EventObject e) {
-
 
743
						if (item.equals(suppN)) {
-
 
744
							supprimerNoeud(n);
-
 
745
						}
-
 
746
						if (item.equals(ajoutN)) {
643
			return valeursFiltres;
747
							ajouterNoeud(n);