Subversion Repositories eFlore/Applications.del

Rev

Rev 1206 | Rev 1222 | 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;
22
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraPresenteur;
23
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraVue;
24
 
1203 gduche 25
import com.google.gwt.event.dom.client.ChangeEvent;
26
import com.google.gwt.event.dom.client.ChangeHandler;
1196 gduche 27
import com.google.gwt.event.dom.client.ClickEvent;
28
import com.google.gwt.event.dom.client.ClickHandler;
1203 gduche 29
import com.google.gwt.event.dom.client.HasChangeHandlers;
1196 gduche 30
import com.google.gwt.event.dom.client.HasClickHandlers;
31
import com.google.gwt.user.client.Window;
32
import com.google.gwt.user.client.ui.HasWidgets;
33
import com.google.gwt.user.client.ui.IsWidget;
1203 gduche 34
import com.google.gwt.user.client.ui.ListBox;
1196 gduche 35
import com.google.gwt.user.client.ui.Panel;
36
 
37
public class MoteurPictofloraPresenteur {
38
 
39
	public interface Vue extends IsWidget {
40
		public HasWidgets getZoneResultats();
41
 
42
		public HasWidgets getZoneRecherche();
43
 
44
		public void ajouterVue(HasWidgets composite);
45
 
1203 gduche 46
		public void setListeProtocoles(ListBox listeProtocoles);
47
 
48
		public HasChangeHandlers getListeProtocoles();
49
 
50
		public void ajouterProtocole(String NomProtocole, String idProtocole);
51
 
52
		public void selectionnerProtocole(int index);
53
 
54
		public String getNomProtocoleSelectionne();
55
 
56
		public int getIdProtocoleSelectionne();
57
 
58
		public void ajouterProtocoles(List<Protocole> protocoles);
59
 
60
		public void mettreAJourDescriptionProtocoleCourant(Protocole protocoleCourant);
61
 
1196 gduche 62
	}
63
 
64
	private Vue vue;
65
	private ProtocoleService protocoleService;
1203 gduche 66
	private List<Protocole> protocoles;
1196 gduche 67
 
68
	/**
69
	 * Constructeur
70
	 * */
71
	public MoteurPictofloraPresenteur(Vue vue, ProtocoleService protocoleService) {
72
		this.vue = vue;
73
		this.protocoleService = protocoleService;
1203 gduche 74
		chargerProtocoles();
1196 gduche 75
 
76
		// TODO: le code ci dessous sert à ne pas recharger les protocoles
77
		// à chaque fois, voir si on peut le factoriser quelque part
78
		if (CacheClient.getInstance().getProtocoleCourant() == null) {
79
			if (CacheClient.getInstance().getListeProtocoles() == null) {
80
				protocoleService.getProtocoles(new ProtocolesCallback() {
81
 
82
					@Override
83
					public void surRetour(ProtocoleServiceResultat protocolesRecus) {
84
						CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
85
						if (protocolesRecus.getProtocoles().size() > 0) {
86
							CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(0));
87
						} else {
88
							// TODO afficher message indiquant que la liste des
89
							// protocoles de votes n'est pas fourni
90
						}
91
					}
92
				});
93
			} else {
94
				CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
95
			}
96
		}
97
		gererEvenements();
98
	}
99
 
100
	private void gererEvenements() {
1203 gduche 101
 
102
		vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {
103
			@Override
104
			public void onChange(ChangeEvent event) {
105
				surChangementProtocole();
106
			}
107
		});
108
 
1196 gduche 109
	}
1203 gduche 110
 
111
	private void chargerProtocoles() {
112
		// test pour ne pas charger les protocoles déjà chargés
113
		// TODO: faire un systeme de cache gérés par les web service eux même
114
		if (CacheClient.getInstance().getListeProtocoles() == null) {
115
			protocoleService.getProtocoles(new ProtocolesCallback() {
1196 gduche 116
 
1203 gduche 117
				@Override
118
				public void surRetour(ProtocoleServiceResultat protocolesRecus) {
119
					protocoles = protocolesRecus.getProtocoles();
120
					remplirListeProtocole(protocoles);
1219 aurelien 121
					surChangementProtocole();
1203 gduche 122
				}
123
			});
124
		} else {
125
			protocoles = CacheClient.getInstance().getListeProtocoles();
126
			remplirListeProtocole(CacheClient.getInstance().getListeProtocoles());
127
		}
128
	}
129
 
130
	public void surChangementProtocole() {
131
		Protocole protocoleCourant = null;
132
		for (Protocole protocole : protocoles) {
133
			if (protocole.getId() == vue.getIdProtocoleSelectionne()) {
134
				protocoleCourant = protocole;
135
			}
136
		}
137
		vue.mettreAJourDescriptionProtocoleCourant(protocoleCourant);
138
		CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
139
		EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
140
		BusEvenementiel.getInstance().fireEvent(evenement);
141
	}
142
 
143
	private void remplirListeProtocole(List<Protocole> protocoles) {
144
		vue.ajouterProtocoles(protocoles);
145
		if (CacheClient.getInstance().getProtocoleCourant() == null) {
146
			vue.selectionnerProtocole(0);
147
			vue.mettreAJourDescriptionProtocoleCourant(protocoles.get(0));
148
		} else {
149
			vue.mettreAJourDescriptionProtocoleCourant(CacheClient.getInstance().getProtocoleCourant());
150
		}
151
	}
152
 
1196 gduche 153
	public void go(HasWidgets composite) {
154
		vue.ajouterVue(composite);
155
		chargerMoteurRechercheAvancee();
156
	}
157
 
158
	public void chargerMoteurRechercheAvancee() {
159
		MoteurRecherchePresenteur presenteurRecherche = new MoteurRecherchePresenteur(new MoteurRechercheVue(""), ModeRecherche.MODE_IMAGE) {
160
			public void lancerRecherche() {
161
				chercherImages();
162
			}
163
		};
164
		presenteurRecherche.go(vue.getZoneRecherche());
165
	}
166
 
167
	public void chercherImages() {
168
		vue.getZoneResultats().clear();
169
		new ResultatPictofloraPresenteur(new ImageServiceConcret(), new ProtocoleServiceConcret(), new ResultatPictofloraVue()).go(vue.getZoneResultats());
170
	}
171
 
172
	public HasWidgets getZoneResultats() {
173
		return vue.getZoneResultats();
174
	}
175
}