Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2211 → Rev 2212

/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/ForumVue.ui.xml
New file
0,0 → 1,11
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="forum.css" />
<g:HTMLPanel>
<g:HTMLPanel ui:field='panneauInterventions' styleName="{style.table}" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/ForumPresenteur.java
New file
0,0 → 1,125
package org.tela_botanica.del.client.composants.forum;
 
import java.util.Collections;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur;
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionVue;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.GestionnaireEvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.utils.ComparateurPropositionDetermination;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ForumPresenteur {
 
public interface Vue extends IsWidget {
 
public abstract HasWidgets getPanneauInterventions();
 
public abstract void vider();
}
 
private Vue vue;
 
public ForumPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
chargerDeterminations();
composite.add(vue.asWidget());
 
gererEvenements();
}
 
private void chargerDeterminations() {
 
vue.vider();
List<PropositionDetermination> interventions = CacheClient.getInstance().getObservationCourante().getPropositionDeterminations();
Collections.sort(interventions, new ComparateurPropositionDetermination());
for (InterventionForum interventionCourante : interventions) {
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
presenteur.go(vue.getPanneauInterventions());
ajouterCommentairesRecursivement(interventionCourante, presenteur);
}
List<Commentaire> commentaires = CacheClient.getInstance().getObservationCourante().getCommentairesForum();
for (InterventionForum interventionCourante : commentaires) {
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
presenteur.go(vue.getPanneauInterventions());
ajouterCommentairesRecursivement(interventionCourante, presenteur);
}
}
 
private void ajouterCommentairesRecursivement(InterventionForum interventionCourante, ForumInterventionPresenteur presenteur) {
List<Commentaire> fils = interventionCourante.getListeCommentaires();
for (InterventionForum interventionFils : fils) {
ForumInterventionPresenteur presenteurFils = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionFils, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
ajouterCommentairesRecursivement(interventionFils, presenteurFils);
presenteur.ajouterEnfant(presenteurFils);
}
}
 
private void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
 
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionDetermination.TYPE, new GestionnaireEvenementSuppressionDetermination() {
 
@Override
public void onSuppressionDetermination(EvenementSuppressionDetermination event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionCommentaire.TYPE, new GestionnaireEvenementSuppressionCommentaire() {
 
@Override
public void onSuppressionCommentaire(EvenementSuppressionCommentaire event) {
chargerDeterminations();
}
});
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
// ceci permet d'avoir un classement à jour des déterminations à chaque vote
// à voir si ça ne fait pas trop ramer les petites machines
chargerDeterminations();
}
});
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/interventions/forumIntervention.css
New file
0,0 → 1,82
.nombreVotes {
width:15px;
height:16px;
padding-left: 10px;
float:right;
margin-left:10px;
}
 
.infobulle {
background: none repeat scroll 0 0 #1A5AC3;
color: white;
font-size: 11px;
height: 11px;
line-height: 0.9;
margin-left: 2px;
margin-top: 8px;
min-width: 7px;
padding: 1px;
position: absolute;
}
 
.proposition {
width:550px;
padding:10px;
background:#EEE;
margin-bottom:5px;
}
.nom {
margin-right:4px;
margin-top:1px;
}
.le {
margin-top:1px;
}
.date {
margin-left:3px;
margin-top:1px;
}
.determination {
clear:left;
float:left;
margin-top:1px;
margin-right:3px;
}
.nomtaxon {
float:left;
font-size:15px;
}
.voter div{
font-size:18px;
color:#333;
text-align:right;
margin-bottom:-3px;
}
.commentaire {
clear:left
}
.daccord {
clear:left;
margin-right:5px;
}
.repondre {
margin-top:3px;
float:left;
cursor:pointer;
margin-bottom:5px;
font-size:10px;
}
 
.suppression {
width:15px;
height:16px;
background:url('./img/cancel.png') no-repeat;
cursor: pointer;
margin-top:-15px;
margin-left:99%;
position:relative;
}
 
.labelVoter {
padding-left:9px;
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.ui.xml
New file
0,0 → 1,39
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="forumIntervention.css" />
<g:FocusPanel ui:field="proposition" styleName="{style.proposition}">
<g:HTMLPanel>
<g:Button ui:field="boutonValidationTaxon" text="&#x2714;" styleName="bouton boutonValiderTaxon" />
<g:HTMLPanel ui:field="conteneurIntermediaireProposition" styleName="conteneurIntermediaireProposition" >
<g:FocusPanel ui:field="conteneurLienSuppression" styleName="{style.suppression}">
<g:HTML ui:field="supprimer" />
</g:FocusPanel>
<g:HTMLPanel styleName="gauche nettoyage" ui:field="zoneDetermination">
<g:Label ui:field="nomTaxon" styleName="{style.nomtaxon} nomTaxonProposition" />
</g:HTMLPanel>
<g:HTMLPanel styleName="droite" ui:field="zoneVoter">
<g:HorizontalPanel>
<g:Label text="Score " styleName="petit" />
<g:Label text="Voter" styleName="{style.labelVoter} petit" />
</g:HorizontalPanel>
<g:HTMLPanel ui:field="voter" styleName="{style.voter} gauche" />
<g:FocusPanel ui:field="conteneurPanneauVotes" styleName="{style.nombreVotes}">
<g:HTML ui:field="nbVotesHtml" styleName="{style.infobulle}"/>
</g:FocusPanel>
</g:HTMLPanel>
<g:Label text="Détermination proposée par " ui:field="labelDeterminationProposee" styleName="{style.determination} petit" />
<g:Label ui:field="nom" styleName="{style.nom} petit gauche" />
<g:Label text="le" styleName="{style.le} gauche petit"/>
<g:Label ui:field="date" styleName="{style.date} gauche petit"/>
<g:Label ui:field="commentaire" styleName="{style.commentaire}"/>
<g:Label text="Répondre" styleName="{style.repondre} labelLien" ui:field="repondre"/>
<g:HTML><br /></g:HTML>
<g:HTMLPanel ui:field="zoneEnfants"></g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</g:FocusPanel>
</ui:UiBinder>
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionPresenteur.java
New file
0,0 → 1,362
package org.tela_botanica.del.client.composants.forum.interventions;
 
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.forum.ArbreCommentairePresenteur;
import org.tela_botanica.del.client.composants.forum.ArbreCommentaireVue;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.CommentaireService;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
import org.tela_botanica.del.client.utils.ModerationUtils;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ForumInterventionPresenteur {
 
public interface Vue extends IsWidget {
void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires);
void ajouterInterventionCommentaire(Commentaire commentaire, IsWidget arbreCommentaires);
HasClickHandlers getRepondre();
HasWidgets getEnfants();
HasClickHandlers getLienSuppression();
void afficherLienSuppression();
void cacherLienSuppression();
HasMouseOverHandlers getConteneurInterventionMouseOver();
HasMouseOutHandlers getConteneurInterventionMouseOut();
HasClickHandlers getEspece();
void ajouterLienEspece();
HasClickHandlers getAuteur();
void ajouterLienAuteur();
void cacherDeterminationProposee();
void ajouterLienVotes();
void masquerLienVotes();
void setNbVotes(int votes);
public HasClickHandlers getZoneNbVotes();
public HasClickHandlers getBoutonValidationTaxon();
void cacherBoutonValidationTaxon();
void afficherBoutonValidationTaxon();
}
 
private Vue vue;
 
private InterventionForum interventionForum;
private CommentaireService commentaireService;
private PropositionDeterminationService propositionDeterminationService;
private FenetreOverlaySimplePresenteur overlay;
 
private int nbVotes;
private HandlerRegistration validationTaxonHandler;
public ForumInterventionPresenteur(Vue vue, InterventionForum interventionForum, CommentaireService commentaireService, PropositionDeterminationService propositionDeterminationService) {
this.vue = vue;
this.interventionForum = interventionForum;
this.commentaireService = commentaireService;
this.propositionDeterminationService = propositionDeterminationService;
}
 
public void go(HasWidgets composite) {
chargerIntervention();
composite.add(vue.asWidget());
gererEvenements();
}
public void ajouterEnfant(ForumInterventionPresenteur presenteur) {
presenteur.go(vue.getEnfants());
}
 
private void chargerIntervention() {
if (interventionForum instanceof PropositionDetermination) {
ajouterPropositionDetermination((PropositionDetermination) interventionForum);
} else if (interventionForum instanceof Commentaire) {
ajouterCommentaire((Commentaire) interventionForum);
vue.cacherDeterminationProposee();
}
}
 
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
final PropositionDetermination cetteProposition = propositionDetermination;
this.nbVotes = propositionDetermination.getVotesDeterminations().size();
BarreRepartitionVotePresenteur barreRepartitionVotePresenteur = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret());
barreRepartitionVotePresenteur.toggleNomEspece();
calculerEtAfficherVoteDetermination(barreRepartitionVotePresenteur, propositionDetermination);
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), propositionDetermination);
vue.ajouterInterventionDetermination(propositionDetermination, barreRepartitionVotePresenteur.getBarreRepartitionVoteVue(), arbreCommentairePresenteur.getArbreCommentaireVue());
final String nn = propositionDetermination.getNumNomenclatural();
final String referentiel = propositionDetermination.getReferentiel();
// @TODO harmoniser les valeurs qui veulent dire "y en n'a pas" plutôt que !equals("kedal") :-/
if (nn != null && !nn.isEmpty() && !nn.equals(0) && !nn.equals("0") && referentiel != null && !referentiel.isEmpty()) {
vue.ajouterLienEspece();
vue.getEspece().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
String efloreUrlFicheTpl = config.getUrl("efloreTaxon");
// découpage pseudo-intelligent du nom de référentiel
String refFmt;
int positionDeuxPoints = referentiel.indexOf(':');
if (positionDeuxPoints == -1) {
refFmt = referentiel;
} else {
refFmt = referentiel.substring(0, positionDeuxPoints);
}
String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", refFmt+"-nn-"+nn);
Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions"));
}
});
}
gererAffichageBoutonValidationTaxon(cetteProposition);
final String idContributeur = propositionDetermination.getContributeur().getId();
if (idContributeur != null && !idContributeur.equals("0")) {
vue.ajouterLienAuteur();
vue.getAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("profil") + idContributeur, "Consultation de l'annuaire", config.getInfo("popupOptions"));
}
});
}
}
 
private void gererAffichageBoutonValidationTaxon(final PropositionDetermination cetteProposition) {
if (doitAfficherBoutonValidation(cetteProposition)) {
vue.afficherBoutonValidationTaxon();
if(validationTaxonHandler != null) {
validationTaxonHandler.removeHandler();
}
validationTaxonHandler = vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) {
validerProposition(cetteProposition);
}
}
});
} else {
vue.cacherBoutonValidationTaxon();
}
}
 
private void ajouterCommentaire(Commentaire proposition) {
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), proposition);
vue.ajouterInterventionCommentaire(proposition, arbreCommentairePresenteur.getArbreCommentaireVue());
}
 
private void calculerEtAfficherVoteDetermination(BarreRepartitionVotePresenteur barreRepartitionVotePresenteur, PropositionDetermination propositionDetermination) {
MoyenneVote votes = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination);
barreRepartitionVotePresenteur.afficherVotes(votes);
}
private void gererEvenements() {
if (this.nbVotes > 0) {
vue.setNbVotes(this.nbVotes);
vue.ajouterLienVotes();
vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbVotes > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
new DetailListeVotesDeterminationVue());
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
detailListeVotesDeterminationPresenteur
.afficherVotes((PropositionDetermination) interventionForum);
}
}
});
} else {
vue.masquerLienVotes();
}
vue.getRepondre().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(interventionForum, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
overlay = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
overlay.ouvrirFenetreModale(commentairePresenteur);
}
});
vue.getConteneurInterventionMouseOver().addMouseOverHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
if(peutSupprimerIntervention()) {
vue.afficherLienSuppression();
}
}
});
vue.getConteneurInterventionMouseOut().addMouseOutHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
if(peutSupprimerIntervention()) {
vue.cacherLienSuppression();
}
}
});
 
vue.getLienSuppression().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String message = "";
if (interventionForum instanceof PropositionDetermination) {
message = I18n.getVocabulary().confirmationSuppressionDetermination();
} else if (interventionForum instanceof Commentaire) {
message = I18n.getVocabulary().confirmationSuppressionCommentaire();
}
if(Window.confirm(message)) {
supprimerIntervention();
}
}
});
vue.cacherLienSuppression();
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if(overlay != null && overlay.fenetreModaleEstOuverte()) {
overlay.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if(overlay != null && overlay.fenetreModaleEstOuverte()) {
overlay.fermerFenetreModale();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
if (interventionForum instanceof PropositionDetermination) {
gererAffichageBoutonValidationTaxon((PropositionDetermination)interventionForum);
}
}
});
}
private boolean peutSupprimerIntervention() {
boolean estPropositionInitiale = false;
boolean estPropositionRetenue = false;
if(interventionForum instanceof PropositionDetermination) {
estPropositionInitiale = ((PropositionDetermination)interventionForum).estPropositionInitiale();
estPropositionRetenue = ((PropositionDetermination)interventionForum).estPropositionRetenue();
}
return (!interventionForum.aDesCommentaires() &&
interventionForum.getContributeur() != null &&
interventionForum.getContributeur().getId().equals(CacheClient.getInstance().getUtilisateur().getId())
&& !estPropositionInitiale
&& !estPropositionRetenue);
}
private void supprimerIntervention() {
if(interventionForum instanceof PropositionDetermination) {
propositionDeterminationService.supprimerProposition((PropositionDetermination)interventionForum, new SuppressionPropositionDeterminationCallback() {
@Override
public void surRetour(String objetRetour) {
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionDetermination((PropositionDetermination)interventionForum));
}
});
}
if(interventionForum instanceof Commentaire) {
commentaireService.supprimerCommentaire((Commentaire)interventionForum, new SuppressionCommentaireCallback() {
@Override
public void surRetour(String objetRetour) {
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionCommentaire((Commentaire)interventionForum));
}
});
}
}
private boolean doitAfficherBoutonValidation(PropositionDetermination propositionDetermination) {
boolean estPropositionRetenue = propositionDetermination.estPropositionRetenue();
String numNomProp = propositionDetermination.getNumNomenclatural();
String referentielProp = propositionDetermination.getReferentiel();
boolean aUnNumNom = (numNomProp != null && !numNomProp.trim().equals("") && !numNomProp.trim().equals("0"));
boolean aUnReferentiel = (referentielProp != null && !referentielProp.trim().equals("") && !referentielProp.trim().equals("0"));
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
boolean estAuteurObservation = false;
if(utilisateur != null) {
estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(CacheClient.getInstance().getObservationCourante().getIdAuteur());
}
boolean peutValiderObservation = ModerationUtils.utilisateurPeutValiderObservation(CacheClient.getInstance().getUtilisateur(), CacheClient.getInstance().getObservationCourante());
return (peutValiderObservation || estAuteurObservation) && aUnReferentiel && aUnNumNom && !estPropositionRetenue;
}
private void validerProposition(PropositionDetermination propositionDetermination) {
final PropositionDetermination cetteProposition = propositionDetermination;
PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret();
propositionDetermination.setValideePar(CacheClient.getInstance().getUtilisateur().getId());
propositionService.validerProposition(propositionDetermination, new ValidationPropositionCallback() {
@Override
public void surRetour(String objetRetour) {
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPropositionDetermination(cetteProposition));
}
});
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.java
New file
0,0 → 1,203
package org.tela_botanica.del.client.composants.forum.interventions;
 
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur.Vue;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ForumInterventionVue extends Composite implements Vue {
 
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class);
 
interface ForumUIiBinder extends UiBinder<Widget, ForumInterventionVue> {
};
 
@UiField
FocusPanel proposition;
 
@UiField
Label nom, nomTaxon, date, commentaire, repondre, labelDeterminationProposee;
@UiField
HTMLPanel conteneurIntermediaireProposition, voter, zoneVoter, zoneDetermination, zoneEnfants;
@UiField
Button boutonValidationTaxon;
@UiField
FocusPanel conteneurLienSuppression;
@UiField
HTML supprimer, nbVotesHtml;
@UiField
FocusPanel conteneurPanneauVotes;
public ForumInterventionVue() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public HasClickHandlers getLienSuppression() {
return conteneurLienSuppression;
}
@Override
public void afficherLienSuppression() {
conteneurLienSuppression.removeStyleName("invisible");
}
@Override
public void cacherLienSuppression() {
conteneurLienSuppression.addStyleName("invisible");
}
 
@Override
public void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires) {
 
nom.setText(determination.getAuteur());
nomTaxon.setText(determination.getEspece());
voter.add(barreRepartition);
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(determination.getDate()));
commentaire.setText(determination.getCommentaire());
if (determination.estFils()) {
proposition.setStyleName("enfant");
}
if(determination.estPropositionInitiale()) {
labelDeterminationProposee.setText(I18n.getVocabulary().determinationOriginalePar());
labelDeterminationProposee.addStyleName("indicationPropositionInitiale");
} else {
labelDeterminationProposee.setText(I18n.getVocabulary().determinationProposeePar());
}
if(determination.estPropositionRetenue()) {
proposition.setTitle(I18n.getVocabulary().indicationPropositionValidee());
proposition.setStyleName("propositionRetenue");
}
 
boutonValidationTaxon.setTitle(I18n.getVocabulary().indicationValiderProposition());
conteneurIntermediaireProposition.addStyleName("propositionValidable");
}
 
@Override
public void ajouterInterventionCommentaire(Commentaire nouveauCommentaire, IsWidget arbreCommentaires) {
 
zoneVoter.setVisible(false);
zoneDetermination.setVisible(false);
nom.setText(nouveauCommentaire.getAuteur());
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(nouveauCommentaire.getDate()));
commentaire.setText(nouveauCommentaire.getCommentaire());
if (nouveauCommentaire.estFils()) {
proposition.setStyleName("enfant");
}
 
boutonValidationTaxon.setVisible(false);
}
@Override
public HasClickHandlers getRepondre() {
return repondre;
}
 
@Override
public HasWidgets getEnfants() {
return zoneEnfants;
}
 
@Override
public HasMouseOverHandlers getConteneurInterventionMouseOver() {
return proposition;
}
 
@Override
public HasMouseOutHandlers getConteneurInterventionMouseOut() {
return proposition;
}
public HasClickHandlers getEspece() {
return nomTaxon;
}
public void ajouterLienEspece() {
nomTaxon.addStyleName("labelLien");
}
public HasClickHandlers getAuteur() {
return nom;
}
public void ajouterLienAuteur() {
nom.addStyleName("lien");
nom.setTitle("Voir le profil");
}
public void cacherDeterminationProposee() {
labelDeterminationProposee.setVisible(false);
}
 
@Override
public void ajouterLienVotes() {
conteneurPanneauVotes.addStyleName("nombreVotes");
}
public void masquerLienVotes() {
conteneurPanneauVotes.removeStyleName("nombreVotes");
nbVotesHtml.setVisible(false);
}
 
@Override
public void setNbVotes(int votes) {
nbVotesHtml.setText(String.valueOf(votes));
}
@Override
public HasClickHandlers getZoneNbVotes() {
return this.conteneurPanneauVotes;
}
@Override
public HasClickHandlers getBoutonValidationTaxon() {
return this.boutonValidationTaxon;
}
@Override
public void cacherBoutonValidationTaxon() {
boutonValidationTaxon.setVisible(false);
}
@Override
public void afficherBoutonValidationTaxon() {
boutonValidationTaxon.setVisible(true);
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/ForumVue.java
New file
0,0 → 1,36
package org.tela_botanica.del.client.composants.forum;
 
 
import org.tela_botanica.del.client.composants.forum.ForumPresenteur.Vue;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class ForumVue extends Composite implements Vue {
 
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class);
 
interface ForumUIiBinder extends UiBinder<Widget, ForumVue> {
};
 
@UiField
HTMLPanel panneauInterventions;
 
public ForumVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HTMLPanel getPanneauInterventions() {
return panneauInterventions;
}
 
@Override
public void vider() {
panneauInterventions.clear();
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/ArbreCommentairePresenteur.java
New file
0,0 → 1,40
package org.tela_botanica.del.client.composants.forum;
 
import org.tela_botanica.del.client.modeles.InterventionForum;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ArbreCommentairePresenteur {
private InterventionForum possesseurDeCommentaires;
public interface Vue extends IsWidget {
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires);
}
private Vue vue;
public ArbreCommentairePresenteur(Vue vue, InterventionForum possesseurDeCommentaires) {
this.vue = vue;
this.possesseurDeCommentaires = possesseurDeCommentaires;
vue.creerArbreCommentaire(this.possesseurDeCommentaires);
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
public IsWidget getArbreCommentaireVue() {
return vue;
}
public InterventionForum getPossesseurDeCommentaires() {
return possesseurDeCommentaires;
}
public void gererEvenements() {
}
 
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/ArbreCommentaireVue.java
New file
0,0 → 1,50
package org.tela_botanica.del.client.composants.forum;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
 
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
 
public class ArbreCommentaireVue extends Tree implements ArbreCommentairePresenteur.Vue {
 
public ArbreCommentaireVue() {
super();
}
 
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires) {
TreeItem racineArbreCommentaires = new TreeItem();
addItem(racineArbreCommentaires);
 
if (possesseurDeCommentaires instanceof Commentaire) {
List<Commentaire> commentaires = new ArrayList<Commentaire>();
commentaires.add((Commentaire) possesseurDeCommentaires);
creerListeCommentaireRecursive(racineArbreCommentaires, commentaires);
} else {
creerListeCommentaireRecursive(racineArbreCommentaires, possesseurDeCommentaires.getListeCommentaires());
}
}
 
private void creerListeCommentaireRecursive(TreeItem parentTreeItem, List<Commentaire> commentaires) {
 
for (Commentaire commentaire : commentaires) {
String commentaireHTML = commentaire.getCommentaire();
HTML commentaireWidget = new HTML(commentaireHTML);
parentTreeItem.setWidget(commentaireWidget);
if (commentaire.getListeCommentaires().size() != 0) {
TreeItem childTreeItem = new TreeItem();
parentTreeItem.addItem(childTreeItem);
creerListeCommentaireRecursive(childTreeItem, commentaire.getListeCommentaires());
}
}
parentTreeItem.setState(true);
 
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/forum/forum.css
New file
0,0 → 1,0
.table {}