Subversion Repositories eFlore/Applications.del

Rev

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