Subversion Repositories eFlore/Applications.del

Rev

Rev 1777 | Rev 1834 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1777 Rev 1830
1
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
1
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
2
 
2
 
3
import java.util.List;
3
import java.util.List;
4
 
4
 
5
import org.tela_botanica.del.client.cache.CacheClient;
5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
6
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
7
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
7
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
8
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
8
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
9
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
9
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
10
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
10
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
11
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
11
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
12
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
12
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
13
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
13
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
14
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
14
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
15
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
15
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
16
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
16
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
17
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
17
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
18
import org.tela_botanica.del.client.composants.rss.RssVue;
18
import org.tela_botanica.del.client.composants.rss.RssVue;
19
import org.tela_botanica.del.client.config.Config;
19
import org.tela_botanica.del.client.config.Config;
20
import org.tela_botanica.del.client.i18n.I18n;
20
import org.tela_botanica.del.client.i18n.I18n;
21
import org.tela_botanica.del.client.modeles.Image;
21
import org.tela_botanica.del.client.modeles.Image;
22
import org.tela_botanica.del.client.modeles.ModeRecherche;
22
import org.tela_botanica.del.client.modeles.ModeRecherche;
23
import org.tela_botanica.del.client.modeles.MoyenneVote;
23
import org.tela_botanica.del.client.modeles.MoyenneVote;
24
import org.tela_botanica.del.client.modeles.Observation;
24
import org.tela_botanica.del.client.modeles.Observation;
25
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
25
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
26
import org.tela_botanica.del.client.modeles.PropositionDetermination;
26
import org.tela_botanica.del.client.modeles.PropositionDetermination;
27
import org.tela_botanica.del.client.modeles.Utilisateur;
27
import org.tela_botanica.del.client.modeles.Utilisateur;
28
import org.tela_botanica.del.client.modeles.VoteDetermination;
28
import org.tela_botanica.del.client.modeles.VoteDetermination;
29
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
29
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
30
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
30
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
31
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
31
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
32
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
32
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
33
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
33
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
34
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
34
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
35
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
35
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
36
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
36
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
37
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
37
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
38
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
38
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
39
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
39
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
-
 
40
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
-
 
41
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.GestionnaireEvenementValidationPropositionDetermination;
40
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
42
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
41
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
43
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
42
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
44
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
43
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
45
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
44
import org.tela_botanica.del.client.services.rest.ObservationService;
46
import org.tela_botanica.del.client.services.rest.ObservationService;
45
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
47
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
46
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
48
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
47
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
49
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
48
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
50
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
49
import org.tela_botanica.del.client.utils.ModerationUtils;
51
import org.tela_botanica.del.client.utils.ModerationUtils;
50
import org.tela_botanica.del.client.utils.URLUtils;
52
import org.tela_botanica.del.client.utils.URLUtils;
51
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
53
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
52
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
54
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
53
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
55
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
54
import org.tela_botanica.del.client.composants.forum.ForumVue;
56
import org.tela_botanica.del.client.composants.forum.ForumVue;
55
 
57
 
56
import com.google.gwt.core.shared.GWT;
58
import com.google.gwt.core.shared.GWT;
57
import com.google.gwt.event.dom.client.ClickEvent;
59
import com.google.gwt.event.dom.client.ClickEvent;
58
import com.google.gwt.event.dom.client.ClickHandler;
60
import com.google.gwt.event.dom.client.ClickHandler;
59
import com.google.gwt.event.dom.client.HasClickHandlers;
61
import com.google.gwt.event.dom.client.HasClickHandlers;
60
import com.google.gwt.user.client.Window;
62
import com.google.gwt.user.client.Window;
61
import com.google.gwt.user.client.ui.Button;
63
import com.google.gwt.user.client.ui.Button;
62
import com.google.gwt.user.client.ui.HasWidgets;
64
import com.google.gwt.user.client.ui.HasWidgets;
63
import com.google.gwt.user.client.ui.IsWidget;
65
import com.google.gwt.user.client.ui.IsWidget;
64
import com.google.gwt.user.client.ui.Panel;
66
import com.google.gwt.user.client.ui.Panel;
65
 
67
 
66
public class IdentiplanteDeterminationPresenteur extends Presenteur {
68
public class IdentiplanteDeterminationPresenteur extends Presenteur {
67
 
69
 
68
	/**
70
	/**
69
	 * Vue de l'interface de détermination
71
	 * Vue de l'interface de détermination
70
	 * */
72
	 * */
71
	public interface Vue extends IsWidget {
73
	public interface Vue extends IsWidget {
72
		public Panel getForum();
74
		public HasWidgets getForum();
73
 
75
 
74
		public Panel getDetailImageObservation();
76
		public HasWidgets getDetailImageObservation();
75
 
77
 
76
		public Panel getFormulaireRechercheEflore();
78
		public HasWidgets getFormulaireRechercheEflore();
77
 
79
 
78
		public Button getBoutonAjoutProposition();
80
		public HasClickHandlers getBoutonAjoutProposition();
79
 
81
 
80
		public Button getBoutonAjoutCommentaire();
82
		public HasClickHandlers getBoutonAjoutCommentaire();
81
 
83
 
82
		public Button getBoutonAjoutPropositionBas();
84
		public HasClickHandlers getBoutonAjoutPropositionBas();
83
 
85
 
84
		public Button getBoutonAjoutCommentaireBas();
86
		public HasClickHandlers getBoutonAjoutCommentaireBas();
85
		
87
		
86
		public HasClickHandlers getBoutonDepublierObs();
88
		public HasClickHandlers getBoutonDepublierObs();
87
 
89
 
88
		public HasWidgets getMetadonnees();
90
		public HasWidgets getMetadonnees();
89
 
91
 
90
		public void afficherNomTaxonProbable(String nomTaxon);
92
		public void afficherNomTaxonProbable(String nomTaxon);
91
		
93
		
92
		public HasClickHandlers getLienOuvrages();
94
		public HasClickHandlers getLienOuvrages();
93
		
95
		
94
		public HasClickHandlers getLienBonnier();
96
		public HasClickHandlers getLienBonnier();
95
		
97
		
96
		public HasClickHandlers getLienCles();
98
		public HasClickHandlers getLienCles();
97
		
99
		
98
		public HasClickHandlers getLienEflore();
100
		public HasClickHandlers getLienEflore();
99
	
101
	
100
		public HasWidgets getZoneRss();
102
		public HasWidgets getZoneRss();
101
 
-
 
102
		HasClickHandlers getBoutonValidationTaxon();
-
 
103
 
-
 
104
		void cacherBoutonValidationTaxon();
-
 
105
 
-
 
106
		void afficherBoutonValidationTaxon();
-
 
107
 
103
 
-
 
104
		public void viderMetadonnees();
-
 
105
		
108
		public void viderMetadonnees();
106
		public void viderForum();
109
		
107
		
110
		void afficherZoneActionsObs();
108
		void afficherZoneActionsObs();
111
		
109
		
112
		void cacherZoneActionsObs();
110
		void cacherZoneActionsObs();
113
	}
111
	}
114
 
112
 
115
	private Observation observation;
113
	private Observation observation;
116
	private Vue vue;
114
	private Vue vue;
117
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
115
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
118
 
116
 
119
	// Déclaration des services à utiliser
117
	// Déclaration des services à utiliser
120
	private ObservationService observationService;
118
	private ObservationService observationService;
121
 
119
 
122
	private CacheClient cache = CacheClient.getInstance();
120
	private CacheClient cache = CacheClient.getInstance();
123
	
121
	
124
	private PropositionDetermination propositionPlusPopulaire;
122
	private PropositionDetermination propositionPlusPopulaire;
125
 
123
 
126
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
124
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
127
		this.vue = vue;
125
		this.vue = vue;
128
		this.observationService = observationService;
126
		this.observationService = observationService;
129
	}
127
	}
130
 
128
 
131
	public void go(final HasWidgets composite) {
129
	public void go(final HasWidgets composite) {
132
		// TODO afficher une icone de chargement si le chargement devient trop
130
		// TODO afficher une icone de chargement si le chargement devient trop
133
		// long
131
		// long
134
		// car tout l'écran est asynchrone ici
132
		// car tout l'écran est asynchrone ici
135
		String observationId = URLUtils.getURLSpecialParameterValue();
133
		String observationId = URLUtils.getURLSpecialParameterValue();
136
		observationService.getObservation(observationId, new ObservationsCallback() {
134
		observationService.getObservation(observationId, new ObservationsCallback() {
137
			@Override
135
			@Override
138
			public void surRetour(ObservationServiceResultat objetRetour) {
136
			public void surRetour(ObservationServiceResultat objetRetour) {
139
				observation = cache.getObservationCourante();
137
				observation = cache.getObservationCourante();
140
				afficherRss(cache.getObservationCourante());
138
				afficherRss(cache.getObservationCourante());
141
				// trouve l'image courante si elle n'est pas deja en cache
139
				// trouve l'image courante si elle n'est pas deja en cache
142
				List<Image> listeImages = cache.getObservationCourante().getImages();
140
				List<Image> listeImages = cache.getObservationCourante().getImages();
143
				if (listeImages.size() > 0) {
141
				if (listeImages.size() > 0) {
144
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
142
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
145
				} else {
143
				} else {
146
					CacheClient.getInstance().setImageCourante(null);
144
					CacheClient.getInstance().setImageCourante(null);
147
				}
145
				}
148
				
146
				
149
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
147
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
150
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
148
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
151
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
149
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
152
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
150
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
153
 
151
 
154
				composite.add(vue.asWidget());
152
				composite.add(vue.asWidget());
155
				calculerEtAfficherVoteDeterminationPlusPopulaire();
153
				calculerEtAfficherVoteDeterminationPlusPopulaire();
156
			}
154
			}
157
 
155
 
158
			@Override
156
			@Override
159
			public void surErreur(String messageErreur) {
157
			public void surErreur(String messageErreur) {
160
				Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
158
				Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
161
			}
159
			}
162
		});
160
		});
163
		afficherZoneActionsObs();
161
		afficherZoneActionsObs();
164
		gererEvenements();
162
		gererEvenements();
165
	}
163
	}
166
 
164
 
167
	public void afficherRss(Observation observation) {
165
	public void afficherRss(Observation observation) {
168
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
166
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
169
	}
167
	}
170
 
168
 
171
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
169
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
172
		if (cache.getObservationCourante() != null) {
170
		if (cache.getObservationCourante() != null) {
173
			Observation observation = cache.getObservationCourante();
171
			Observation observation = cache.getObservationCourante();
174
			String nomTaxon = observation.getNomRetenuFormateReferentiel();
172
			String nomTaxon = observation.getNomRetenuFormateReferentiel();
175
			List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
173
			List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
176
			if (votesOrdonnes.size() > 0) {
174
			if (votesOrdonnes.size() > 0) {
177
				nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
175
				nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
178
				propositionPlusPopulaire = votesOrdonnes.get(0).getPropositionAssociee();
176
				propositionPlusPopulaire = votesOrdonnes.get(0).getPropositionAssociee();
179
				
-
 
180
				if (doitAfficherBoutonValidation(votesOrdonnes)) {
-
 
181
					vue.afficherBoutonValidationTaxon();
-
 
182
				} else {
-
 
183
					vue.cacherBoutonValidationTaxon();
-
 
184
				}
-
 
185
			}
177
			}
186
			vue.afficherNomTaxonProbable(nomTaxon);
178
			vue.afficherNomTaxonProbable(nomTaxon);
187
		}
179
		}
188
	}
180
	}
189
	
-
 
190
	private boolean doitAfficherBoutonValidation(List<MoyenneVote> votesOrdonnes) {		
-
 
191
		boolean estPropositionRetenue = votesOrdonnes.get(0).getPropositionAssociee().estPropositionRetenue();
-
 
192
		String numNomProp = votesOrdonnes.get(0).getPropositionAssociee().getNumNomenclatural();
-
 
193
		String referentielProp = votesOrdonnes.get(0).getPropositionAssociee().getReferentiel();
-
 
194
		
-
 
195
		boolean aUnNumNom = (numNomProp != null && !numNomProp.trim().equals("") && !numNomProp.trim().equals("0"));
-
 
196
		boolean aUnReferentiel = (referentielProp != null && !referentielProp.trim().equals("") && !referentielProp.trim().equals("0"));
-
 
197
		
-
 
198
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
-
 
199
		boolean estAuteurObservation = false;
-
 
200
		if(utilisateur != null) {
-
 
201
			estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(cache.getObservationCourante().getIdAuteur());
-
 
202
		}
-
 
203
		boolean peutValiderObservation = ModerationUtils.utilisateurPeutValiderObservation(CacheClient.getInstance().getUtilisateur(), observation);
-
 
204
		return (peutValiderObservation || estAuteurObservation) && aUnReferentiel && aUnNumNom && !estPropositionRetenue;
-
 
205
	}
-
 
206
 
181
 
207
	public void gererEvenements() {
-
 
208
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
-
 
209
			@Override
-
 
210
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
-
 
211
				calculerEtAfficherVoteDeterminationPlusPopulaire();
-
 
212
			};
-
 
213
		});
182
	public void gererEvenements() {
214
		
183
		
215
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
184
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
216
			@Override
185
			@Override
217
			public void onVoteDetermination(VoteDetermination event) {
186
			public void onVoteDetermination(VoteDetermination event) {
218
				calculerEtAfficherVoteDeterminationPlusPopulaire();
187
				calculerEtAfficherVoteDeterminationPlusPopulaire();
219
			}
188
			}
220
		});
189
		});
221
		
190
		
222
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
191
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
223
			@Override
192
			@Override
224
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
193
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
225
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
194
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
226
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
195
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
227
				}
196
				}
228
			}
197
			}
229
		});
198
		});
230
 
199
 
231
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
200
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
232
			@Override
201
			@Override
233
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
202
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
234
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
203
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
235
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
204
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
236
				}
205
				}
237
			}
206
			}
238
		});
207
		});
239
 
208
 
240
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
209
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
241
			@Override
210
			@Override
242
			public void onChangementImage(EvenementChangementImageValidation event) {
211
			public void onChangementImage(EvenementChangementImageValidation event) {
243
				vue.getDetailImageObservation().clear();
212
				vue.getDetailImageObservation().clear();
244
				new ObservationImagesPresenteur(
213
				new ObservationImagesPresenteur(
245
					new ObservationImagesVue(), 
214
					new ObservationImagesVue(), 
246
					cache.getObservationCourante(), 
215
					cache.getObservationCourante(), 
247
					CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
216
					CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
248
			}
217
			}
249
		});
218
		});
250
 
219
 
251
		ClickHandler clicAjoutProposition = new ClickHandler() {
220
		ClickHandler clicAjoutProposition = new ClickHandler() {
252
			@Override
221
			@Override
253
			public void onClick(ClickEvent event) {
222
			public void onClick(ClickEvent event) {
254
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
223
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
255
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
224
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
256
			}
225
			}
257
		};
226
		};
258
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
227
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
259
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
228
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
260
 
229
 
261
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
230
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
262
			@Override
231
			@Override
263
			public void onClick(ClickEvent event) {
232
			public void onClick(ClickEvent event) {
264
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
233
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
265
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
234
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
266
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
235
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
267
			}
236
			}
268
		};
237
		};
269
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
238
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
270
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
239
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
271
 
240
 
272
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
241
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
273
			@Override
242
			@Override
274
			public void onClick(ClickEvent event) {
243
			public void onClick(ClickEvent event) {
275
				Config config = new Config();
244
				Config config = new Config();
276
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
245
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
277
			}
246
			}
278
		});
247
		});
279
 
248
 
280
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
249
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
281
			@Override
250
			@Override
282
			public void onClick(ClickEvent event) {
251
			public void onClick(ClickEvent event) {
283
				Config config = new Config();
252
				Config config = new Config();
284
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
253
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
285
			}
254
			}
286
		});
255
		});
287
		
256
		
288
		vue.getLienCles().addClickHandler(new ClickHandler() {
257
		vue.getLienCles().addClickHandler(new ClickHandler() {
289
			@Override
258
			@Override
290
			public void onClick(ClickEvent event) {
259
			public void onClick(ClickEvent event) {
291
				Config config = new Config();
260
				Config config = new Config();
292
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
261
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
293
			}
262
			}
294
		});
263
		});
295
		
264
		
296
		vue.getLienEflore().addClickHandler(new ClickHandler() {
265
		vue.getLienEflore().addClickHandler(new ClickHandler() {
297
			@Override
266
			@Override
298
			public void onClick(ClickEvent event) {
267
			public void onClick(ClickEvent event) {
299
				Config config = new Config();
268
				Config config = new Config();
300
				Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
269
				Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
301
			}
270
			}
302
		});
271
		});
303
		
-
 
304
		vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() {
-
 
305
			@Override
-
 
306
			public void onClick(ClickEvent event) {
-
 
307
				if (Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) {
-
 
308
					validerPropositionPlusPopulaire();
-
 
309
				}
-
 
310
			}
-
 
311
		});
-
 
312
		
272
		
313
		vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
273
		vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
314
			@Override
274
			@Override
315
			public void onClick(ClickEvent event) {
275
			public void onClick(ClickEvent event) {
316
				GWT.log("Lancer evnt : EvenementDepublierObs");
276
				GWT.log("Lancer evnt : EvenementDepublierObs");
317
				if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
277
				if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
318
					BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
278
					BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
319
				}
279
				}
320
			}
280
			}
321
		});
281
		});
322
		
282
		
323
		BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
283
		BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
324
			@Override
284
			@Override
325
			public void onDepublicationObs(EvenementDepublierObs event) {
285
			public void onDepublicationObs(EvenementDepublierObs event) {
326
				GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
286
				GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
327
				if (event.getIdObs().equals(observation.getId())) {
287
				if (event.getIdObs().equals(observation.getId())) {
328
					depublierObs();
288
					depublierObs();
329
				}
289
				}
330
			}
290
			}
331
		});
291
		});
332
		
292
		
333
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
293
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
334
			@Override
294
			@Override
335
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
295
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
336
				afficherZoneActionsObs();
296
				afficherZoneActionsObs();
-
 
297
				//rechargerForum();
337
			}
298
			}
338
		});
299
		});
339
	}
300
		
-
 
301
		BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
340
	
302
			
341
	private void validerPropositionPlusPopulaire() {
-
 
342
		PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret();
-
 
343
		propositionPlusPopulaire.setValideePar(CacheClient.getInstance().getUtilisateur().getId());
-
 
344
		propositionService.validerProposition(propositionPlusPopulaire, new ValidationPropositionCallback() {
-
 
345
			@Override
303
			@Override
346
			public void surRetour(String objetRetour) {
304
			public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
347
				String observationId = URLUtils.getURLSpecialParameterValue();
305
				String observationId = URLUtils.getURLSpecialParameterValue();
348
				observationService.getObservation(observationId, new ObservationsCallback() {
306
				observationService.getObservation(observationId, new ObservationsCallback() {
349
 
307
 
350
					@Override
308
					@Override
351
					public void surRetour(ObservationServiceResultat objetRetour) {
309
					public void surRetour(ObservationServiceResultat objetRetour) {
352
						vue.viderMetadonnees();
310
						vue.viderMetadonnees();
353
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
311
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
354
						calculerEtAfficherVoteDeterminationPlusPopulaire();
312
						rechargerForum();
355
					}
313
					}
356
 
314
 
357
					@Override
315
					@Override
358
					public void surErreur(String messageErreur) {
316
					public void surErreur(String messageErreur) {
359
						Window.alert(messageErreur);
317
						Window.alert(messageErreur);
360
					}
318
					}
361
				});
319
				});	
362
			}
320
			}
363
		});
321
		});
364
	}
322
	}
-
 
323
	
-
 
324
	private void rechargerForum() {
-
 
325
		vue.viderForum();
-
 
326
		new ForumPresenteur(new ForumVue()).go(vue.getForum());
-
 
327
	}
365
	
328
	
366
	private void depublierObs() {
329
	private void depublierObs() {
367
		if (avoirUtilisateurAdmin()) {
330
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
368
			GWT.log("depublierObs :"+observation.getId());
331
			GWT.log("depublierObs :"+observation.getId());
369
			observationService.depublier(observation, new DepublicationObservationCallBack() {
332
			observationService.depublier(observation, new DepublicationObservationCallBack() {
370
				
333
				
371
				@Override
334
				@Override
372
				public void surRetour(String depublicationOk) {
335
				public void surRetour(String depublicationOk) {
373
					GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
336
					GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
374
					if (depublicationOk.equals("OK")) {
337
					if (depublicationOk.equals("OK")) {
375
						BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
338
						BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
376
					}
339
					}
377
				}
340
				}
378
			});
341
			});
379
		}
342
		}
380
	}
343
	}
381
	
344
	
382
	private void afficherZoneActionsObs() {
345
	private void afficherZoneActionsObs() {
383
		if (avoirUtilisateurAdmin()) {
346
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
384
			vue.afficherZoneActionsObs();
347
			vue.afficherZoneActionsObs();
385
		} else {
348
		} else {
386
			vue.cacherZoneActionsObs();
349
			vue.cacherZoneActionsObs();
387
		}
350
		}
388
	}
351
	}
389
	
-
 
390
	private boolean avoirUtilisateurAdmin() {
-
 
391
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
-
 
392
		boolean etreAdmin = false;
-
 
393
		if (utilisateur != null) {
-
 
394
			etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
-
 
395
		}
-
 
396
		return etreAdmin;
-
 
397
	}
-
 
398
}
352
}