New file |
0,0 → 1,107 |
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() { |
this.mediateur = mediateur; |
//requetes = new LinkedList<Requete>(); |
requetes = new HashMap<Integer, Requete>(); |
numeroSequence = 0; |
} |
|
// Retourne le numéro du séquenceur |
public int lancerRequeteSynchrone(Rafraichissable vueARafraichir) { |
if (numeroSequence == 0) { |
mediateur.activerChargement("Chargement en cours... Veuillez patienter"); |
} |
|
numeroSequence++; |
System.out.println("lancer Requete " + numeroSequence); |
Requete requete = new Requete(vueARafraichir, numeroSequence); |
//requetes.add(requete); |
requetes.put(numeroSequence, requete); |
return numeroSequence; |
} |
|
//Offrir la possibilité d'empiler à la suite des traitements un rafraichissement dont on a déjà le retour |
public int empilerRafraichissement(Rafraichissable vueARafraichir, Object nouvellesDonnees) { |
if (numeroSequence == 0) { |
mediateur.activerChargement("Chargement en cours... Veuillez patienter"); |
} |
numeroSequence++; |
System.out.println("empiler " + numeroSequence); |
Requete requete = new Requete(vueARafraichir, numeroSequence); |
Reponse reponse = new Reponse(nouvellesDonnees, numeroSequence); |
requetes.put(numeroSequence, requete); |
rafraichir(reponse); |
return numeroSequence; |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
|
try { |
Reponse reponse = (Reponse) nouvellesDonnees; |
System.out.println("rafraichir " + 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); |
requete.setRetour(reponse); |
requete.rafraichir(); |
requetes.remove(marqueurRetour); |
marqueurRetour++; |
avancerSequence(); |
} else { |
// Sinon, on enregistre le retour |
requetes.get(reponse.obtenirNumeroSequence()).setRetour(reponse); |
|
// Vérifier que les requetes précédentes ont été exécutées si elles ont eues un retour |
//avancerSequence(); |
} |
} catch (ClassCastException e) { |
Debug.log("Le séquencuer ne peut recevoir que des Reponse"); |
} |
} |
|
public int obtenirNumeroSequence() { |
return this.numeroSequence; |
} |
|
public void avancerSequence() { |
if (requetes.size()>0) { |
Requete premiereRequete = requetes.get(marqueurRetour); |
System.out.println("premiere Requete " + premiereRequete ); |
if (premiereRequete!=null && premiereRequete.aRetour()) { |
premiereRequete.rafraichir(); |
requetes.remove(marqueurRetour); |
marqueurRetour++; |
avancerSequence(); |
} |
} else { |
mediateur.desactiverChargement(); |
} |
|
} |
|
|
} |