Subversion Repositories eFlore/Applications.del

Rev

Rev 1283 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1196 gduche 1
package org.tela_botanica.del.client.composants.forum.interventions;
2
 
3
import org.tela_botanica.del.client.cache.CacheClient;
4
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
5
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
6
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
7
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
8
import org.tela_botanica.del.client.composants.forum.ArbreCommentairePresenteur;
9
import org.tela_botanica.del.client.composants.forum.ArbreCommentaireVue;
10
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
11
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue;
12
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur;
13
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
14
import org.tela_botanica.del.client.config.Config;
15
import org.tela_botanica.del.client.i18n.I18n;
16
import org.tela_botanica.del.client.modeles.Commentaire;
17
import org.tela_botanica.del.client.modeles.InterventionForum;
18
import org.tela_botanica.del.client.modeles.MoyenneVote;
19
import org.tela_botanica.del.client.modeles.PropositionDetermination;
20
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
21
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
22
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
23
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
24
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
25
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
26
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination;
27
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
28
import org.tela_botanica.del.client.services.rest.CommentaireService;
29
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
30
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
31
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
32
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
33
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback;
34
 
35
import com.google.gwt.event.dom.client.ClickEvent;
36
import com.google.gwt.event.dom.client.ClickHandler;
37
import com.google.gwt.event.dom.client.HasClickHandlers;
38
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
39
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
40
import com.google.gwt.event.dom.client.MouseOutEvent;
41
import com.google.gwt.event.dom.client.MouseOutHandler;
42
import com.google.gwt.event.dom.client.MouseOverEvent;
43
import com.google.gwt.event.dom.client.MouseOverHandler;
44
import com.google.gwt.user.client.Window;
45
import com.google.gwt.user.client.ui.HasWidgets;
46
import com.google.gwt.user.client.ui.IsWidget;
47
 
48
public class ForumInterventionPresenteur {
49
 
50
	public interface Vue extends IsWidget {
51
		void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires);
52
		void ajouterInterventionCommentaire(Commentaire commentaire, IsWidget arbreCommentaires);
53
		HasClickHandlers getRepondre();
54
		HasWidgets getEnfants();
55
		HasClickHandlers getLienSuppression();
56
		void afficherLienSuppression();
57
		void cacherLienSuppression();
58
		HasMouseOverHandlers getConteneurInterventionMouseOver();
59
		HasMouseOutHandlers getConteneurInterventionMouseOut();
60
		HasClickHandlers getEspece();
61
		void ajouterLienEspece();
62
		HasClickHandlers getAuteur();
63
		void ajouterLienAuteur();
64
		void cacherDeterminationProposee();
65
		void ajouterLienVotes();
66
		void masquerLienVotes();
67
		void setNbVotes(int votes);
68
		public HasClickHandlers getZoneNbVotes();
69
	}
70
 
71
	private Vue vue;
72
 
73
	private InterventionForum interventionForum;
74
 
75
	private CommentaireService commentaireService;
76
 
77
	private PropositionDeterminationService propositionDeterminationService;
78
 
79
	private FenetreOverlaySimplePresenteur overlay;
80
 
81
	private int nbVotes;
82
 
83
	public ForumInterventionPresenteur(Vue vue, InterventionForum interventionForum, CommentaireService commentaireService, PropositionDeterminationService propositionDeterminationService) {
84
		this.vue = vue;
85
		this.interventionForum = interventionForum;
86
		this.commentaireService = commentaireService;
87
		this.propositionDeterminationService = propositionDeterminationService;
88
	}
89
 
90
	public void go(HasWidgets composite) {
91
		chargerIntervention();
92
		composite.add(vue.asWidget());
93
		gererEvenements();
94
	}
95
 
96
	public void ajouterEnfant(ForumInterventionPresenteur presenteur) {
97
		presenteur.go(vue.getEnfants());
98
	}
99
 
100
	private void chargerIntervention() {
101
		if (interventionForum instanceof PropositionDetermination) {
102
			ajouterPropositionDetermination((PropositionDetermination) interventionForum);
103
		} else if (interventionForum instanceof Commentaire) {
104
			ajouterCommentaire((Commentaire) interventionForum);
105
			vue.cacherDeterminationProposee();
106
		}
107
	}
108
 
109
	private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
110
		this.nbVotes = propositionDetermination.getVotesDeterminations().size();
111
 
112
		BarreRepartitionVotePresenteur barreRepartitionVotePresenteur = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret());
113
		barreRepartitionVotePresenteur.toggleNomEspece();
114
		calculerEtAfficherVoteDetermination(barreRepartitionVotePresenteur, propositionDetermination);
115
		ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), propositionDetermination);
116
		vue.ajouterInterventionDetermination(propositionDetermination, barreRepartitionVotePresenteur.getBarreRepartitionVoteVue(), arbreCommentairePresenteur.getArbreCommentaireVue());
117
 
118
		final String nn = propositionDetermination.getNumNomenclatural();
119
		if (nn != null) {
120
			vue.ajouterLienEspece();
121
			vue.getEspece().addClickHandler(new ClickHandler() {
122
 
123
				@Override
124
				public void onClick(ClickEvent event) {
125
					Config config = new Config();
126
					Window.open(config.getUrl("efloreTaxon") + nn, "Fiche eflore", null);
127
				}
128
			});
129
		}
130
 
131
		final String idContributeur = propositionDetermination.getContributeur().getId();
132
		if (idContributeur != null) {
133
			vue.ajouterLienAuteur();
134
			vue.getAuteur().addClickHandler(new ClickHandler() {
135
				@Override
136
				public void onClick(ClickEvent event) {
137
					Config config = new Config();
138
					Window.open(config.getUrl("annuaire") + idContributeur, "Consultation de l'annuaire", null);
139
				}
140
			});
141
		}
142
	}
143
 
144
	private void ajouterCommentaire(Commentaire proposition) {
145
		ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), proposition);
146
		vue.ajouterInterventionCommentaire(proposition, arbreCommentairePresenteur.getArbreCommentaireVue());
147
	}
148
 
149
	private void calculerEtAfficherVoteDetermination(BarreRepartitionVotePresenteur barreRepartitionVotePresenteur, PropositionDetermination propositionDetermination) {
150
		MoyenneVote votes = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination);
151
		barreRepartitionVotePresenteur.afficherVotes(votes);
152
	}
153
 
154
	private void gererEvenements() {
155
		if (this.nbVotes > 0) {
156
			vue.setNbVotes(this.nbVotes);
157
			vue.ajouterLienVotes();
158
			vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
159
				@Override
160
				public void onClick(ClickEvent event) {
161
					if (nbVotes > 0) {
162
						FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
163
								new FenetreOverlayDefilanteVue());
164
						DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
165
								new DetailListeVotesDeterminationVue());
166
						fenetreOverlaySimplePresenteur
167
								.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
168
						detailListeVotesDeterminationPresenteur
169
								.afficherVotes((PropositionDetermination) interventionForum);
170
					}
171
				}
172
			});
173
		} else {
174
			vue.masquerLienVotes();
175
		}
176
 
177
		vue.getRepondre().addClickHandler(new ClickHandler() {
178
			@Override
179
			public void onClick(ClickEvent event) {
180
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(interventionForum, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
181
				overlay = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
182
				overlay.ouvrirFenetreModale(commentairePresenteur);
183
			}
184
		});
185
 
186
		vue.getConteneurInterventionMouseOver().addMouseOverHandler(new MouseOverHandler() {
187
			@Override
188
			public void onMouseOver(MouseOverEvent event) {
189
				if(peutSupprimerIntervention()) {
190
					vue.afficherLienSuppression();
191
				}
192
			}
193
		});
194
 
195
		vue.getConteneurInterventionMouseOut().addMouseOutHandler(new MouseOutHandler() {
196
			@Override
197
			public void onMouseOut(MouseOutEvent event) {
198
				if(peutSupprimerIntervention()) {
199
					vue.cacherLienSuppression();
200
				}
201
			}
202
		});
203
 
204
		vue.getLienSuppression().addClickHandler(new ClickHandler() {
205
			@Override
206
			public void onClick(ClickEvent event) {
207
 
208
				String message = "";
209
				if (interventionForum instanceof PropositionDetermination) {
210
					message = I18n.getVocabulary().confirmationSuppressionDetermination();
211
				} else if (interventionForum instanceof Commentaire) {
212
					message = I18n.getVocabulary().confirmationSuppressionCommentaire();
213
				}
214
 
215
				if(Window.confirm(message)) {
216
					supprimerIntervention();
217
				}
218
			}
219
		});
220
		vue.cacherLienSuppression();
221
 
222
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
223
			@Override
224
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
225
				if(overlay != null && overlay.fenetreModaleEstOuverte()) {
226
					overlay.fermerFenetreModale();
227
				}
228
			}
229
		});
230
 
231
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
232
			@Override
233
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
234
				if(overlay != null && overlay.fenetreModaleEstOuverte()) {
235
					overlay.fermerFenetreModale();
236
				}
237
			}
238
		});
239
	}
240
 
241
	private boolean peutSupprimerIntervention() {
242
		return (!interventionForum.aDesCommentaires() && interventionForum.getContributeur() != null && interventionForum.getContributeur().getId().equals(CacheClient.getInstance().getUtilisateur().getId()));
243
	}
244
 
245
	private void supprimerIntervention() {
246
		if(interventionForum instanceof PropositionDetermination) {
247
			propositionDeterminationService.supprimerProposition((PropositionDetermination)interventionForum, new SuppressionPropositionDeterminationCallback() {
248
				@Override
249
				public void surRetour(String objetRetour) {
250
					CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
251
					BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionDetermination((PropositionDetermination)interventionForum));
252
				}
253
			});
254
		}
255
 
256
		if(interventionForum instanceof Commentaire) {
257
			commentaireService.supprimerCommentaire((Commentaire)interventionForum, new SuppressionCommentaireCallback() {
258
				@Override
259
				public void surRetour(String objetRetour) {
260
					CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
261
					BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionCommentaire((Commentaire)interventionForum));
262
				}
263
			});
264
		}
265
	}
266
}