/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/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/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="✔" 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/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 {} |