Subversion Repositories eFlore/Applications.del

Rev

Rev 1437 | Details | Compare with Previous | 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();
1393 aurelien 119
		final String referentiel = propositionDetermination.getReferentiel();
1437 aurelien 120
		if (nn != null && !nn.equals(0) && !nn.equals("0") && referentiel != null && !referentiel.equals("")) {
1196 gduche 121
			vue.ajouterLienEspece();
122
			vue.getEspece().addClickHandler(new ClickHandler() {
123
 
124
				@Override
125
				public void onClick(ClickEvent event) {
126
					Config config = new Config();
1393 aurelien 127
					String efloreUrlFicheTpl = config.getUrl("efloreTaxon");
1437 aurelien 128
					String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", referentiel.substring(0,5)+"-nn-"+nn);
1393 aurelien 129
					Window.open(efloreUrlFiche, "Fiche eflore", null);
1196 gduche 130
				}
131
			});
132
		}
133
 
134
		final String idContributeur = propositionDetermination.getContributeur().getId();
1283 aurelien 135
		if (idContributeur != null && !idContributeur.equals("0")) {
1196 gduche 136
			vue.ajouterLienAuteur();
137
			vue.getAuteur().addClickHandler(new ClickHandler() {
138
				@Override
139
				public void onClick(ClickEvent event) {
140
					Config config = new Config();
141
					Window.open(config.getUrl("annuaire") + idContributeur, "Consultation de l'annuaire", null);
142
				}
143
			});
144
		}
145
	}
146
 
147
	private void ajouterCommentaire(Commentaire proposition) {
148
		ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), proposition);
149
		vue.ajouterInterventionCommentaire(proposition, arbreCommentairePresenteur.getArbreCommentaireVue());
150
	}
151
 
152
	private void calculerEtAfficherVoteDetermination(BarreRepartitionVotePresenteur barreRepartitionVotePresenteur, PropositionDetermination propositionDetermination) {
153
		MoyenneVote votes = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination);
154
		barreRepartitionVotePresenteur.afficherVotes(votes);
155
	}
156
 
157
	private void gererEvenements() {
158
		if (this.nbVotes > 0) {
159
			vue.setNbVotes(this.nbVotes);
160
			vue.ajouterLienVotes();
161
			vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
162
				@Override
163
				public void onClick(ClickEvent event) {
164
					if (nbVotes > 0) {
165
						FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
166
								new FenetreOverlayDefilanteVue());
167
						DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
168
								new DetailListeVotesDeterminationVue());
169
						fenetreOverlaySimplePresenteur
170
								.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
171
						detailListeVotesDeterminationPresenteur
172
								.afficherVotes((PropositionDetermination) interventionForum);
173
					}
174
				}
175
			});
176
		} else {
177
			vue.masquerLienVotes();
178
		}
179
 
180
		vue.getRepondre().addClickHandler(new ClickHandler() {
181
			@Override
182
			public void onClick(ClickEvent event) {
183
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(interventionForum, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
184
				overlay = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
185
				overlay.ouvrirFenetreModale(commentairePresenteur);
186
			}
187
		});
188
 
189
		vue.getConteneurInterventionMouseOver().addMouseOverHandler(new MouseOverHandler() {
190
			@Override
191
			public void onMouseOver(MouseOverEvent event) {
192
				if(peutSupprimerIntervention()) {
193
					vue.afficherLienSuppression();
194
				}
195
			}
196
		});
197
 
198
		vue.getConteneurInterventionMouseOut().addMouseOutHandler(new MouseOutHandler() {
199
			@Override
200
			public void onMouseOut(MouseOutEvent event) {
201
				if(peutSupprimerIntervention()) {
202
					vue.cacherLienSuppression();
203
				}
204
			}
205
		});
206
 
207
		vue.getLienSuppression().addClickHandler(new ClickHandler() {
208
			@Override
209
			public void onClick(ClickEvent event) {
210
 
211
				String message = "";
212
				if (interventionForum instanceof PropositionDetermination) {
213
					message = I18n.getVocabulary().confirmationSuppressionDetermination();
214
				} else if (interventionForum instanceof Commentaire) {
215
					message = I18n.getVocabulary().confirmationSuppressionCommentaire();
216
				}
217
 
218
				if(Window.confirm(message)) {
219
					supprimerIntervention();
220
				}
221
			}
222
		});
223
		vue.cacherLienSuppression();
224
 
225
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
226
			@Override
227
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
228
				if(overlay != null && overlay.fenetreModaleEstOuverte()) {
229
					overlay.fermerFenetreModale();
230
				}
231
			}
232
		});
233
 
234
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
235
			@Override
236
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
237
				if(overlay != null && overlay.fenetreModaleEstOuverte()) {
238
					overlay.fermerFenetreModale();
239
				}
240
			}
241
		});
242
	}
243
 
244
	private boolean peutSupprimerIntervention() {
245
		return (!interventionForum.aDesCommentaires() && interventionForum.getContributeur() != null && interventionForum.getContributeur().getId().equals(CacheClient.getInstance().getUtilisateur().getId()));
246
	}
247
 
248
	private void supprimerIntervention() {
249
		if(interventionForum instanceof PropositionDetermination) {
250
			propositionDeterminationService.supprimerProposition((PropositionDetermination)interventionForum, new SuppressionPropositionDeterminationCallback() {
251
				@Override
252
				public void surRetour(String objetRetour) {
253
					CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
254
					BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionDetermination((PropositionDetermination)interventionForum));
255
				}
256
			});
257
		}
258
 
259
		if(interventionForum instanceof Commentaire) {
260
			commentaireService.supprimerCommentaire((Commentaire)interventionForum, new SuppressionCommentaireCallback() {
261
				@Override
262
				public void surRetour(String objetRetour) {
263
					CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
264
					BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionCommentaire((Commentaire)interventionForum));
265
				}
266
			});
267
		}
268
	}
269
}