Subversion Repositories eFlore/Applications.del

Rev

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