Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
41 aurelien 1
package org.tela_botanica.del.client.vues.plateformedetermination;
2
 
629 aurelien 3
import java.util.Iterator;
170 aurelien 4
import java.util.List;
5
 
181 benjamin 6
import org.tela_botanica.del.client.cache.CacheClient;
648 benjamin 7
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
8
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
688 aurelien 9
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
10
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
648 benjamin 11
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
12
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
625 gduche 13
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
447 gduche 14
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
477 benjamin 15
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
16
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
262 aurelien 17
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
552 benjamin 18
import org.tela_botanica.del.client.modeles.ModeRecherche;
170 aurelien 19
import org.tela_botanica.del.client.modeles.MoyenneVote;
966 gduche 20
import org.tela_botanica.del.client.modeles.Observation;
847 aurelien 21
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
629 aurelien 22
import org.tela_botanica.del.client.modeles.Protocole;
814 aurelien 23
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
248 aurelien 24
import org.tela_botanica.del.client.modeles.VoteDetermination;
25
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
658 benjamin 26
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
27
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
248 aurelien 28
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
29
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
30
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
31
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
170 aurelien 32
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
960 benjamin 33
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
847 aurelien 34
import org.tela_botanica.del.client.services.rest.ObservationService;
960 benjamin 35
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
629 aurelien 36
import org.tela_botanica.del.client.services.rest.ProtocoleService;
847 aurelien 37
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
814 aurelien 38
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
72 aurelien 39
import org.tela_botanica.del.client.vues.plateformedetermination.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
46 aurelien 40
import org.tela_botanica.del.client.vues.plateformedetermination.forum.ForumPresenteur;
303 aurelien 41
import org.tela_botanica.del.client.vues.plateformedetermination.forum.ForumVue;
650 gduche 42
import org.tela_botanica.del.client.vues.plateformedetermination.ligneProtocole.LigneProtocolePresenteur;
43
import org.tela_botanica.del.client.vues.plateformedetermination.ligneProtocole.LigneProtocoleVue;
41 aurelien 44
 
262 aurelien 45
import com.google.gwt.event.dom.client.ClickEvent;
46
import com.google.gwt.event.dom.client.ClickHandler;
939 benjamin 47
import com.google.gwt.user.client.Window;
303 aurelien 48
import com.google.gwt.user.client.ui.Button;
41 aurelien 49
import com.google.gwt.user.client.ui.HasWidgets;
303 aurelien 50
import com.google.gwt.user.client.ui.IsWidget;
625 gduche 51
import com.google.gwt.user.client.ui.Panel;
41 aurelien 52
 
262 aurelien 53
public class DeterminationPresenteur extends Presenteur {
135 gduche 54
 
966 gduche 55
	/**
56
	 * Vue de l'interface de détermination
57
	 * */
602 aurelien 58
	public interface Vue extends IsWidget {
625 gduche 59
		public Panel getForum();
60
		public Panel getDetailImageObservation();
61
		public Panel getFormulaireRechercheEflore();
62
		public Panel getVoteProtocole();
303 aurelien 63
		public Button getBoutonAjoutProposition();
658 benjamin 64
		public Button getBoutonAjoutCommentaire();
947 gduche 65
		public Button getBoutonAjoutPropositionBas();
66
		public Button getBoutonAjoutCommentaireBas();
447 gduche 67
		public HasWidgets getMetadonnees();
649 gduche 68
		public HasWidgets getNouvelleLigneProtocole();
645 gduche 69
		public void afficherNomTaxonProbable(String nomTaxon);
303 aurelien 70
	}
436 benjamin 71
 
303 aurelien 72
	private Vue vue;
966 gduche 73
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
436 benjamin 74
 
966 gduche 75
	// Déclaration des services à utiliser
957 benjamin 76
	private ProtocoleService protocoleService;
77
	private ObservationService observationService;
183 gduche 78
 
966 gduche 79
	private CacheClient cache = CacheClient.getInstance();
80
 
81
 
957 benjamin 82
	public DeterminationPresenteur(Vue vue, ObservationService observationService, ProtocoleService protocoleService) {
303 aurelien 83
		this.vue = vue;
966 gduche 84
		this.protocoleService = protocoleService;
957 benjamin 85
		this.observationService = observationService;
41 aurelien 86
	}
135 gduche 87
 
847 aurelien 88
	public void go(final HasWidgets composite) {
939 benjamin 89
 
966 gduche 90
		// TODO afficher une icone de chargement si le chargement devient trop long
854 aurelien 91
		// car tout l'écran est asynchrone ici
967 aurelien 92
		Observation observationCourante = cache.getObservationCourante();
966 gduche 93
		observationService.getObservation(observationCourante.getId(), new ObservationsCallback() {
939 benjamin 94
 
95
			@Override
96
			public void surRetour(ObservationServiceResultat objetRetour) {
967 aurelien 97
				cache.setImageCourante(cache.getObservationCourante().getImages().get(0));
939 benjamin 98
 
967 aurelien 99
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION).go(vue.getMetadonnees());
100
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante()).go(vue.getDetailImageObservation());
436 benjamin 101
 
847 aurelien 102
				chargerEtAjouterLignesVotesProtocole();
103
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
104
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
629 aurelien 105
 
847 aurelien 106
				calculerEtAfficherVoteDeterminationPlusPopulaire();
107
				composite.add(vue.asWidget());
939 benjamin 108
 
847 aurelien 109
			}
939 benjamin 110
 
111
			@Override
112
			public void surErreur(String messageErreur) {
113
				Window.alert(messageErreur);
114
			}
115
		});
248 aurelien 116
		gererEvenements();
41 aurelien 117
	}
645 gduche 118
 
814 aurelien 119
	private void chargerEtAjouterLignesVotesProtocole() {
966 gduche 120
		if (cache.getListeProtocoles() == null) {
814 aurelien 121
			protocoleService.getProtocoles(new ProtocolesCallback() {
939 benjamin 122
 
814 aurelien 123
				@Override
939 benjamin 124
				public void surRetour(ProtocoleServiceResultat protocolesRecus) {
814 aurelien 125
					List<Protocole> listeProtocoles = protocolesRecus.getProtocoles();
126
					ajouterLignesVotesProtocole(listeProtocoles);
127
				}
128
			});
129
		} else {
966 gduche 130
			List<Protocole> listeProtocoles = cache.getListeProtocoles();
814 aurelien 131
			ajouterLignesVotesProtocole(listeProtocoles);
132
		}
133
	}
939 benjamin 134
 
814 aurelien 135
	private void ajouterLignesVotesProtocole(List<Protocole> listeProtocoles) {
136
		for (Iterator<Protocole> iterator = listeProtocoles.iterator(); iterator.hasNext();) {
649 gduche 137
			Protocole protocole = iterator.next();
138
			LigneProtocolePresenteur presenteurLigneProtocole = new LigneProtocolePresenteur(protocole, new LigneProtocoleVue());
139
			presenteurLigneProtocole.go(vue.getNouvelleLigneProtocole());
629 aurelien 140
		}
141
	}
939 benjamin 142
 
170 aurelien 143
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
966 gduche 144
 
145
		Observation observation = cache.getObservationCourante();
146
		String nomTaxon = observation.getNomRetenu();
147
 
148
		List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
183 gduche 149
		if (votesOrdonnes.size() > 0) {
966 gduche 150
			nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
170 aurelien 151
		}
966 gduche 152
 
153
		vue.afficherNomTaxonProbable(nomTaxon);
170 aurelien 154
	}
436 benjamin 155
 
248 aurelien 156
	public void gererEvenements() {
157
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
158
			@Override
159
			public void onVoteDetermination(VoteDetermination event) {
160
				calculerEtAfficherVoteDeterminationPlusPopulaire();
161
			}
162
		});
436 benjamin 163
 
947 gduche 164
		ClickHandler clicAjoutProposition = new ClickHandler() {
262 aurelien 165
			@Override
166
			public void onClick(ClickEvent event) {
602 aurelien 167
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
960 benjamin 168
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
262 aurelien 169
			}
947 gduche 170
		};
171
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
172
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
966 gduche 173
 
947 gduche 174
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
658 benjamin 175
			@Override
176
			public void onClick(ClickEvent event) {
966 gduche 177
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
658 benjamin 178
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
179
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
180
			}
947 gduche 181
		};
182
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
183
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
436 benjamin 184
 
262 aurelien 185
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
186
			@Override
187
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
602 aurelien 188
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
189
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
262 aurelien 190
				}
191
			}
192
		});
939 benjamin 193
 
658 benjamin 194
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
195
 
196
			@Override
197
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
198
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
199
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
200
				}
201
			}
202
		});
248 aurelien 203
	}
41 aurelien 204
}