Subversion Repositories eFlore/Applications.del

Rev

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