Subversion Repositories eFlore/Applications.del

Rev

Rev 1467 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1196 gduche 1
package org.tela_botanica.del.client.vues.pictoflora.moteur;
2
 
1203 gduche 3
import java.util.List;
4
 
1196 gduche 5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
7
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
8
import org.tela_botanica.del.client.modeles.ModeRecherche;
1203 gduche 9
import org.tela_botanica.del.client.modeles.Protocole;
1196 gduche 10
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
1203 gduche 11
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
12
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
1196 gduche 13
import org.tela_botanica.del.client.services.rest.ImageServiceConcret;
14
import org.tela_botanica.del.client.services.rest.ProtocoleService;
15
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
16
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
17
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraPresenteur;
18
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraVue;
19
 
1203 gduche 20
import com.google.gwt.event.dom.client.ChangeEvent;
21
import com.google.gwt.event.dom.client.ChangeHandler;
22
import com.google.gwt.event.dom.client.HasChangeHandlers;
1196 gduche 23
import com.google.gwt.user.client.ui.HasWidgets;
24
import com.google.gwt.user.client.ui.IsWidget;
1203 gduche 25
import com.google.gwt.user.client.ui.ListBox;
1196 gduche 26
 
27
public class MoteurPictofloraPresenteur {
28
 
29
	public interface Vue extends IsWidget {
30
		public HasWidgets getZoneResultats();
31
 
32
		public HasWidgets getZoneRecherche();
33
 
34
		public void ajouterVue(HasWidgets composite);
35
 
1203 gduche 36
		public void setListeProtocoles(ListBox listeProtocoles);
37
 
38
		public HasChangeHandlers getListeProtocoles();
39
 
40
		public void ajouterProtocole(String NomProtocole, String idProtocole);
41
 
42
		public void selectionnerProtocole(int index);
43
 
1222 gduche 44
		public void selectionnerProtocoleParProtocole(Protocole protocole);
45
 
1203 gduche 46
		public String getNomProtocoleSelectionne();
47
 
48
		public int getIdProtocoleSelectionne();
49
 
50
		public void ajouterProtocoles(List<Protocole> protocoles);
51
 
52
		public void mettreAJourDescriptionProtocoleCourant(Protocole protocoleCourant);
53
 
1196 gduche 54
	}
55
 
56
	private Vue vue;
57
	private ProtocoleService protocoleService;
1203 gduche 58
	private List<Protocole> protocoles;
1196 gduche 59
 
60
	/**
61
	 * Constructeur
62
	 * */
63
	public MoteurPictofloraPresenteur(Vue vue, ProtocoleService protocoleService) {
1222 gduche 64
 
1196 gduche 65
		this.vue = vue;
66
		this.protocoleService = protocoleService;
1203 gduche 67
		chargerProtocoles();
1196 gduche 68
 
69
		// TODO: le code ci dessous sert à ne pas recharger les protocoles
70
		// à chaque fois, voir si on peut le factoriser quelque part
71
		if (CacheClient.getInstance().getProtocoleCourant() == null) {
72
			if (CacheClient.getInstance().getListeProtocoles() == null) {
73
				protocoleService.getProtocoles(new ProtocolesCallback() {
74
 
75
					@Override
76
					public void surRetour(ProtocoleServiceResultat protocolesRecus) {
77
						CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
78
						if (protocolesRecus.getProtocoles().size() > 0) {
1404 aurelien 79
							if(protocoles == null) {
80
								protocoles = protocolesRecus.getProtocoles();
81
							}
1226 gduche 82
							//Vérifier qu'on n'a pas demandé un protocole particulier en paramètre
1501 aurelien 83
							String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
1226 gduche 84
							if (parametre != null) {
85
								for (Protocole protocoleCourant : protocoles) {
86
										if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
87
											CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
88
										}
89
								}
1501 aurelien 90
								CacheClient.getInstance().setIdProtocoleEnAttente(null);
1226 gduche 91
							} else {
92
								CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(0));
93
							}
1196 gduche 94
						} else {
95
							// TODO afficher message indiquant que la liste des
96
							// protocoles de votes n'est pas fourni
97
						}
98
					}
99
				});
100
			} else {
101
				CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
102
			}
103
		}
104
		gererEvenements();
105
	}
106
 
107
	private void gererEvenements() {
1203 gduche 108
 
109
		vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {
110
			@Override
111
			public void onChange(ChangeEvent event) {
112
				surChangementProtocole();
113
			}
114
		});
115
 
1196 gduche 116
	}
1203 gduche 117
 
118
	private void chargerProtocoles() {
119
		// test pour ne pas charger les protocoles déjà chargés
120
		// TODO: faire un systeme de cache gérés par les web service eux même
121
		if (CacheClient.getInstance().getListeProtocoles() == null) {
122
			protocoleService.getProtocoles(new ProtocolesCallback() {
1196 gduche 123
 
1203 gduche 124
				@Override
125
				public void surRetour(ProtocoleServiceResultat protocolesRecus) {
126
					protocoles = protocolesRecus.getProtocoles();
127
					remplirListeProtocole(protocoles);
1219 aurelien 128
					surChangementProtocole();
1203 gduche 129
				}
130
			});
131
		} else {
132
			protocoles = CacheClient.getInstance().getListeProtocoles();
133
			remplirListeProtocole(CacheClient.getInstance().getListeProtocoles());
134
		}
135
	}
136
 
137
	public void surChangementProtocole() {
138
		Protocole protocoleCourant = null;
139
		for (Protocole protocole : protocoles) {
140
			if (protocole.getId() == vue.getIdProtocoleSelectionne()) {
141
				protocoleCourant = protocole;
142
			}
143
		}
144
		vue.mettreAJourDescriptionProtocoleCourant(protocoleCourant);
145
		CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
146
		EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
147
		BusEvenementiel.getInstance().fireEvent(evenement);
1501 aurelien 148
		CacheClient.getInstance().mettreAjourUrlCourante();
1203 gduche 149
	}
150
 
151
	private void remplirListeProtocole(List<Protocole> protocoles) {
1222 gduche 152
		//si un paramètre est passé dans l'url, on sélectionne un protocole
1501 aurelien 153
		String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
1222 gduche 154
		if (parametre != null) {
155
			for (Protocole protocoleCourant : protocoles) {
1501 aurelien 156
				if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
157
					CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
158
				}
1222 gduche 159
			}
160
		}
1501 aurelien 161
 
1203 gduche 162
		vue.ajouterProtocoles(protocoles);
163
		if (CacheClient.getInstance().getProtocoleCourant() == null) {
164
			vue.selectionnerProtocole(0);
165
			vue.mettreAJourDescriptionProtocoleCourant(protocoles.get(0));
166
		} else {
1222 gduche 167
			vue.selectionnerProtocoleParProtocole(CacheClient.getInstance().getProtocoleCourant());
1203 gduche 168
			vue.mettreAJourDescriptionProtocoleCourant(CacheClient.getInstance().getProtocoleCourant());
169
		}
1501 aurelien 170
		CacheClient.getInstance().mettreAjourUrlCourante();
1203 gduche 171
	}
172
 
1196 gduche 173
	public void go(HasWidgets composite) {
174
		vue.ajouterVue(composite);
175
		chargerMoteurRechercheAvancee();
176
	}
177
 
178
	public void chargerMoteurRechercheAvancee() {
179
		MoteurRecherchePresenteur presenteurRecherche = new MoteurRecherchePresenteur(new MoteurRechercheVue(""), ModeRecherche.MODE_IMAGE) {
180
			public void lancerRecherche() {
181
				chercherImages();
182
			}
183
		};
184
		presenteurRecherche.go(vue.getZoneRecherche());
185
	}
186
 
187
	public void chercherImages() {
188
		vue.getZoneResultats().clear();
1467 aurelien 189
		CacheClient.getInstance().mettreAjourUrlCourante();
1196 gduche 190
		new ResultatPictofloraPresenteur(new ImageServiceConcret(), new ProtocoleServiceConcret(), new ResultatPictofloraVue()).go(vue.getZoneResultats());
191
	}
192
 
193
	public HasWidgets getZoneResultats() {
194
		return vue.getZoneResultats();
195
	}
196
}