| 1320 | gduche | 1 | package org.tela_botanica.client.synchronisation;
 | 
        
           |  |  | 2 |   | 
        
           |  |  | 3 | import java.util.HashMap;
 | 
        
           |  |  | 4 | import java.util.LinkedList;
 | 
        
           |  |  | 5 | import java.util.List;
 | 
        
           |  |  | 6 |   | 
        
           |  |  | 7 | import org.tela_botanica.client.Mediateur;
 | 
        
           |  |  | 8 | import org.tela_botanica.client.RegistreId;
 | 
        
           |  |  | 9 | import org.tela_botanica.client.interfaces.Rafraichissable;
 | 
        
           |  |  | 10 | import org.tela_botanica.client.modeles.Information;
 | 
        
           |  |  | 11 | import org.tela_botanica.client.util.Debug;
 | 
        
           |  |  | 12 |   | 
        
           |  |  | 13 | import com.extjs.gxt.ui.client.Registry;
 | 
        
           |  |  | 14 | import com.extjs.gxt.ui.client.widget.Info;
 | 
        
           |  |  | 15 | import com.google.gwt.core.client.GWT;
 | 
        
           |  |  | 16 | import com.google.gwt.user.client.Window;
 | 
        
           |  |  | 17 |   | 
        
           |  |  | 18 | public class Sequenceur implements Rafraichissable{
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 | 	private HashMap<Integer, Requete> requetes;
 | 
        
           |  |  | 21 | 	private int numeroSequence;
 | 
        
           |  |  | 22 | 	private int marqueurRetour = 1;
 | 
        
           |  |  | 23 | 	private Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
 | 
        
           |  |  | 24 |   | 
        
           |  |  | 25 | 	public Sequenceur()	{
 | 
        
           |  |  | 26 | 		requetes = new HashMap<Integer, Requete>();
 | 
        
           |  |  | 27 | 		numeroSequence = 0;
 | 
        
           |  |  | 28 | 	}
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 | 	// Retourne le numéro du séquenceur
 | 
        
           |  |  | 31 | 	public int lancerRequeteSynchrone(Rafraichissable vueARafraichir)	{
 | 
        
           |  |  | 32 | 		if (numeroSequence == 0)	{
 | 
        
           |  |  | 33 | 			mediateur.activerChargement("Chargement en cours... Veuillez patienter");
 | 
        
           |  |  | 34 | 		}
 | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 | 		numeroSequence++;
 | 
        
           | 1367 | cyprien | 37 | 		if (Mediateur.DEBUG) System.out.println("==> Sequenceur : Envoi requete n°" + numeroSequence);
 | 
        
           | 1320 | gduche | 38 | 		Requete requete = new Requete(vueARafraichir, numeroSequence);
 | 
        
           |  |  | 39 | 		requetes.put(numeroSequence, requete);
 | 
        
           | 1367 | cyprien | 40 |   | 
        
           | 1320 | gduche | 41 | 		return numeroSequence;
 | 
        
           |  |  | 42 | 	}
 | 
        
           |  |  | 43 |   | 
        
           | 1373 | cyprien | 44 | 	//Offrir la possibilité d'enfiler (=mettre à la fin d'une file d'attente) un rafraichissement dont on a déjà le retour
 | 
        
           |  |  | 45 | 	public int enfilerRafraichissement(Rafraichissable vueARafraichir, Object nouvellesDonnees)	{
 | 
        
           | 1320 | gduche | 46 | 		if (numeroSequence == 0)	{
 | 
        
           |  |  | 47 | 			mediateur.activerChargement("Chargement en cours... Veuillez patienter");
 | 
        
           |  |  | 48 | 		}
 | 
        
           |  |  | 49 | 		numeroSequence++;
 | 
        
           | 1367 | cyprien | 50 | 		if (Mediateur.DEBUG) System.out.println("|| Sequenceur : Empiler n°" + numeroSequence);
 | 
        
           | 1320 | gduche | 51 | 		Requete requete = new Requete(vueARafraichir, numeroSequence);
 | 
        
           |  |  | 52 | 		Reponse reponse = new Reponse(nouvellesDonnees, numeroSequence);
 | 
        
           |  |  | 53 | 		requetes.put(numeroSequence, requete);
 | 
        
           |  |  | 54 | 		rafraichir(reponse);
 | 
        
           | 1367 | cyprien | 55 | 		mediateur.desactiverChargement();
 | 
        
           | 1320 | gduche | 56 | 		return numeroSequence;
 | 
        
           |  |  | 57 | 	}
 | 
        
           |  |  | 58 |   | 
        
           |  |  | 59 | 	public void rafraichir(Object nouvellesDonnees) {
 | 
        
           | 1367 | cyprien | 60 |   | 
        
           | 1320 | gduche | 61 | 		try	{
 | 
        
           |  |  | 62 | 			Reponse reponse = (Reponse) nouvellesDonnees;
 | 
        
           | 1367 | cyprien | 63 | 			if (Mediateur.DEBUG) System.out.println("<== Sequenceur : Réception d'une réponse, n°" + reponse.obtenirNumeroSequence() + ", marqueur retour " + marqueurRetour);
 | 
        
           | 1320 | gduche | 64 |   | 
        
           |  |  | 65 | 			if (reponse.obtenirNumeroSequence() == marqueurRetour)	{
 | 
        
           |  |  | 66 | 				// Si le numéro de séquence du retour correspond au marqueur, on rafraichit
 | 
        
           |  |  | 67 | 				Requete requete = requetes.get(marqueurRetour);
 | 
        
           | 1367 | cyprien | 68 | 				if (Mediateur.DEBUG) System.out.println("<|-- Sequenceur : Retourne paquet n°"+reponse.obtenirNumeroSequence()+" à "+requete.getVueARafraichir().getClass().toString());
 | 
        
           |  |  | 69 | 				requete.rafraichir(reponse.obtenirRetour());
 | 
        
           |  |  | 70 | 				mediateur.desactiverChargement();
 | 
        
           | 1320 | gduche | 71 | 				requetes.remove(marqueurRetour);
 | 
        
           |  |  | 72 | 				marqueurRetour++;
 | 
        
           |  |  | 73 | 				avancerSequence();
 | 
        
           |  |  | 74 | 			} else {
 | 
        
           |  |  | 75 | 				// Sinon, on enregistre le retour
 | 
        
           |  |  | 76 | 				requetes.get(reponse.obtenirNumeroSequence()).setRetour(reponse);
 | 
        
           |  |  | 77 | 			}
 | 
        
           |  |  | 78 | 		} catch (ClassCastException e)	{
 | 
        
           | 1367 | cyprien | 79 | 			if (Mediateur.DEBUG) {
 | 
        
           |  |  | 80 | 				System.out.println("<== Sequenceur : Réception d'une réponse incorrecte");
 | 
        
           |  |  | 81 | 				System.out.println("    Le séquenceur ne peut recevoir que des Reponse");
 | 
        
           |  |  | 82 | 				System.out.println("    > nouvellesDonnees = "+nouvellesDonnees.getClass().toString());
 | 
        
           |  |  | 83 | 			}
 | 
        
           |  |  | 84 | 			mediateur.desactiverChargement();
 | 
        
           | 1320 | gduche | 85 | 		}
 | 
        
           |  |  | 86 | 	}
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 | 	public int obtenirNumeroSequence()	{
 | 
        
           |  |  | 89 | 		return this.numeroSequence;
 | 
        
           |  |  | 90 | 	}
 | 
        
           |  |  | 91 |   | 
        
           |  |  | 92 | 	public void avancerSequence()	{
 | 
        
           |  |  | 93 | 		if (requetes.size()>0)	{
 | 
        
           | 1367 | cyprien | 94 | 			// on récupère la première requete dans la file
 | 
        
           | 1320 | gduche | 95 | 			Requete premiereRequete = requetes.get(marqueurRetour);
 | 
        
           | 1367 | cyprien | 96 | 			if (premiereRequete!=null && premiereRequete.hasResponse())	{
 | 
        
           |  |  | 97 | 				if (Mediateur.DEBUG) System.out.println("<|-- Sequenceur : Retourne paquet n°"+premiereRequete.obtenirReponse().obtenirNumeroSequence()+" à "+premiereRequete.getVueARafraichir().getClass().toString());
 | 
        
           | 1320 | gduche | 98 | 				premiereRequete.rafraichir();
 | 
        
           | 1367 | cyprien | 99 | 				mediateur.desactiverChargement();
 | 
        
           | 1320 | gduche | 100 | 				requetes.remove(marqueurRetour);
 | 
        
           |  |  | 101 | 				marqueurRetour++;
 | 
        
           |  |  | 102 | 				avancerSequence();
 | 
        
           |  |  | 103 | 			}
 | 
        
           | 1367 | cyprien | 104 | 		}
 | 
        
           | 1320 | gduche | 105 | 	}
 | 
        
           |  |  | 106 |   | 
        
           |  |  | 107 |   | 
        
           |  |  | 108 | }
 |