Subversion Repositories eFlore/Applications.coel

Rev

Rev 1367 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
		this.mediateur = mediateur;
27
		//requetes = new LinkedList<Requete>();
28
		requetes = new HashMap<Integer, Requete>();
29
		numeroSequence = 0;
30
	}
31
 
32
	// Retourne le numéro du séquenceur
33
	public int lancerRequeteSynchrone(Rafraichissable vueARafraichir)	{
34
		if (numeroSequence == 0)	{
35
			mediateur.activerChargement("Chargement en cours... Veuillez patienter");
36
		}
37
 
38
		numeroSequence++;
39
		System.out.println("lancer Requete " + numeroSequence);
40
		Requete requete = new Requete(vueARafraichir, numeroSequence);
41
		//requetes.add(requete);
42
		requetes.put(numeroSequence, requete);
43
		return numeroSequence;
44
	}
45
 
46
	//Offrir la possibilité d'empiler à la suite des traitements un rafraichissement dont on a déjà le retour
47
	public int empilerRafraichissement(Rafraichissable vueARafraichir, Object nouvellesDonnees)	{
48
		if (numeroSequence == 0)	{
49
			mediateur.activerChargement("Chargement en cours... Veuillez patienter");
50
		}
51
		numeroSequence++;
52
		System.out.println("empiler " + numeroSequence);
53
		Requete requete = new Requete(vueARafraichir, numeroSequence);
54
		Reponse reponse = new Reponse(nouvellesDonnees, numeroSequence);
55
		requetes.put(numeroSequence, requete);
56
		rafraichir(reponse);
57
		return numeroSequence;
58
	}
59
 
60
	public void rafraichir(Object nouvellesDonnees) {
61
 
62
		try	{
63
			Reponse reponse = (Reponse) nouvellesDonnees;
64
			System.out.println("rafraichir " + reponse.obtenirNumeroSequence() + " marqueur retour " + marqueurRetour);
65
 
66
			if (reponse.obtenirNumeroSequence() == marqueurRetour)	{
67
				// Si le numéro de séquence du retour correspond au marqueur, on rafraichit
68
				Requete requete = requetes.get(marqueurRetour);
69
				requete.setRetour(reponse);
70
				requete.rafraichir();
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
				// Vérifier que les requetes précédentes ont été exécutées si elles ont eues un retour
79
				//avancerSequence();
80
			}
81
		} catch (ClassCastException e)	{
82
			Debug.log("Le séquencuer ne peut recevoir que des Reponse");
83
		}
84
	}
85
 
86
	public int obtenirNumeroSequence()	{
87
		return this.numeroSequence;
88
	}
89
 
90
	public void avancerSequence()	{
91
		if (requetes.size()>0)	{
92
			Requete premiereRequete = requetes.get(marqueurRetour);
93
			System.out.println("premiere Requete " + premiereRequete );
94
			if (premiereRequete!=null && premiereRequete.aRetour())	{
95
				premiereRequete.rafraichir();
96
				requetes.remove(marqueurRetour);
97
				marqueurRetour++;
98
				avancerSequence();
99
			}
100
		} else {
101
			mediateur.desactiverChargement();
102
		}
103
 
104
	}
105
 
106
 
107
}