New file |
0,0 → 1,109 |
package org.tela_botanica.client.synchronisation; |
|
import java.util.HashMap; |
import java.util.LinkedList; |
import java.util.List; |
|
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Information; |
import org.tela_botanica.client.util.Debug; |
|
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.widget.Info; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.user.client.Window; |
|
public class Sequenceur implements Rafraichissable{ |
|
private HashMap<Integer, Requete> requetes; |
private int numeroSequence; |
private int marqueurRetour = 1; |
private Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR); |
|
public Sequenceur() { |
requetes = new HashMap<Integer, Requete>(); |
numeroSequence = 0; |
} |
|
// Retourne le numéro du séquenceur |
public int lancerRequeteSynchrone(Rafraichissable vueARafraichir) { |
if (Mediateur.DEBUG_CHARGEMENT) System.out.println("[CHARGEMENT] lancerRequeteSynchrone("+vueARafraichir.getClass().getName()+")"); |
//if (numeroSequence == 0) { |
mediateur.activerChargement(this, "Chargement en cours... Veuillez patienter"); |
//} |
|
numeroSequence++; |
if (Mediateur.DEBUG) System.out.println("==> Sequenceur : Envoi requete n°" + numeroSequence); |
Requete requete = new Requete(vueARafraichir, numeroSequence); |
requetes.put(numeroSequence, requete); |
|
return numeroSequence; |
} |
|
//Offrir la possibilité d'enfiler (=mettre à la fin d'une file d'attente) un rafraichissement dont on a déjà le retour |
public int enfilerRafraichissement(Rafraichissable vueARafraichir, Object nouvellesDonnees) { |
//if (numeroSequence == 0) { |
mediateur.activerChargement(this, "Chargement en cours... Veuillez patienter"); |
//} |
numeroSequence++; |
if (Mediateur.DEBUG) System.out.println("|| Sequenceur : Empiler n°" + numeroSequence); |
Requete requete = new Requete(vueARafraichir, numeroSequence); |
Reponse reponse = new Reponse(nouvellesDonnees, numeroSequence); |
requetes.put(numeroSequence, requete); |
rafraichir(reponse); |
mediateur.desactiverChargement(this); |
return numeroSequence; |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
|
try { |
Reponse reponse = (Reponse) nouvellesDonnees; |
if (Mediateur.DEBUG) System.out.println("<== Sequenceur : Réception d'une réponse, n°" + reponse.obtenirNumeroSequence() + ", marqueur retour " + marqueurRetour); |
|
if (reponse.obtenirNumeroSequence() == marqueurRetour) { |
// Si le numéro de séquence du retour correspond au marqueur, on rafraichit |
Requete requete = requetes.get(marqueurRetour); |
if (Mediateur.DEBUG) System.out.println("<|-- Sequenceur : Retourne paquet n°"+reponse.obtenirNumeroSequence()+" à "+requete.getVueARafraichir().getClass().toString()); |
mediateur.desactiverChargement(this); |
requete.rafraichir(reponse.obtenirRetour()); |
requetes.remove(marqueurRetour); |
marqueurRetour++; |
avancerSequence(); |
} else { |
// Sinon, on enregistre le retour |
requetes.get(reponse.obtenirNumeroSequence()).setRetour(reponse); |
} |
} catch (ClassCastException e) { |
if (Mediateur.DEBUG) { |
System.out.println("<== Sequenceur : Réception d'une réponse incorrecte"); |
System.out.println(" Le séquenceur ne peut recevoir que des Reponse"); |
System.out.println(" > nouvellesDonnees = "+nouvellesDonnees.getClass().toString()); |
} |
mediateur.desactiverChargement(this); |
} |
} |
|
public int obtenirNumeroSequence() { |
return this.numeroSequence; |
} |
|
public void avancerSequence() { |
if (requetes.size()>0) { |
// on récupère la première requete dans la file |
Requete premiereRequete = requetes.get(marqueurRetour); |
if (premiereRequete!=null && premiereRequete.hasResponse()) { |
if (Mediateur.DEBUG) System.out.println("<|-- Sequenceur : Retourne paquet n°"+premiereRequete.obtenirReponse().obtenirNumeroSequence()+" à "+premiereRequete.getVueARafraichir().getClass().toString()); |
premiereRequete.rafraichir(); |
mediateur.desactiverChargement(this); |
requetes.remove(marqueurRetour); |
marqueurRetour++; |
avancerSequence(); |
} |
} |
} |
|
|
} |