Subversion Repositories eFlore/Applications.coel

Rev

Rev 1468 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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