Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2211 → Rev 2212

/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.ui.xml
New file
0,0 → 1,36
<!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'>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="formulaireCommentaire.css" />
<g:VerticalPanel styleName="{style.formulaireProposition}">
<g:Label text="{constants.ajouterCommentaire}" styleName="titre"/>
<g:Label text="{constants.infoProposerCommentaire}" styleName="petit"/>
<g:HTML><br /></g:HTML>
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.colonneGauche}">
<g:Label text="{constants.vous}" styleName="sousTitre"/>
<g:Label text="{constants.infoVous}" styleName="petit" />
<g:HTMLPanel styleName="{style.zoneNom}">
<g:Label text="{constants.nom}" styleName="petit" />
<g:TextBox ui:field="nom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePrenom}">
<g:Label text="{constants.prenom}" styleName="petit" />
<g:TextBox ui:field="prenom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneEmail}">
<g:Label text="Votre adresse email : " styleName="petit" />
<g:TextBox ui:field="courriel" />
</g:HTMLPanel>
<g:HTML><br /></g:HTML>
<g:Label text="{constants.commentaire}" styleName="sousTitre"/>
<g:TextArea ui:field="commentaire" styleName="{style.commentaire}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationCommentaire" styleName="{style.boutonProposer} arrondi"/>
</g:VerticalPanel>
</ui:UiBinder>
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentairePresenteur.java
New file
0,0 → 1,210
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire;
 
import java.util.Date;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.Observation;
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.services.rest.CommentaireService;
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback;
 
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.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulaireCommentairePresenteur extends Presenteur {
 
// le meme presenteur gere les commentaires pour les observations et pour
// les possesseurs de commentaires, mais la logique est differente, d'ou la
// necessité de separer les deux objets metiers
private Observation observation;
 
private InterventionForum possesseurDeCommentaires;
 
public interface Vue extends IsWidget {
 
public HasText getNomObjet();
 
public HasText getPrenomObjet();
 
public String getNom();
 
public String getPrenom();
 
public String getCourriel();
 
public abstract HasText getCommentaire();
 
public abstract HasClickHandlers getBoutonValidationCommentaire();
 
public void afficherStyleErreurNom(String styleErreur);
 
public void supprimerStyleErreurNom(String styleErreur);
 
public void afficherStyleErreurPrenom(String styleErreur);
 
public void supprimerStyleErreurPrenom(String styleErreur);
public void afficherStyleErreurCourriel(String styleErreur);
 
public void supprimerStyleErreurCourriel(String styleErreur);
 
public void afficherStyleErreurCommentaire(String styleErreur);
 
public void supprimerStyleErreurCommentaire(String styleErreur);
 
void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel);
 
public HasText getCourrielObjet();
}
 
private Vue vue;
private CommentaireService commentaireService;
 
public FormulaireCommentairePresenteur(Observation observation, CommentaireService commentaireService, Vue vue) {
this.observation = observation;
this.vue = vue;
this.commentaireService = commentaireService;
}
 
public FormulaireCommentairePresenteur(InterventionForum possesseurDeCommentaires, CommentaireService commentaireService, Vue vue) {
this.possesseurDeCommentaires = possesseurDeCommentaires;
this.commentaireService = commentaireService;
this.vue = vue;
}
 
public void go(HasWidgets composite) {
remplirAvecInfosUtilisateur();
composite.add(vue.asWidget());
gererEvenements();
}
 
private void remplirAvecInfosUtilisateur() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if (utilisateur.estIdentifie()) {
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom(), utilisateur.getCourriel());
}
}
 
protected void gererEvenements() {
vue.getBoutonValidationCommentaire().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
if (!validerSaisie()) {
return;
}
 
surValidationCommentaire();
}
});
}
 
public void surValidationCommentaire() {
String texteCommentaire = vue.getCommentaire().getText();
String idUtilisateur = null;
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) {
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
}
 
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel());
final Commentaire commentaire = new Commentaire(contributeur, new Date(), texteCommentaire);
 
if (observation != null) {
commentaire.setObservation(observation);
commentaire.setParent(null);
} else if (possesseurDeCommentaires != null) {
commentaire.setObservation(CacheClient.getInstance().getObservationCourante());
commentaire.setParent(possesseurDeCommentaires);
}
commentaireService.ajouterCommentaire(commentaire, new AjoutCommentaireCallback() {
 
@Override
public void surRetour(String idNouveauCommentaire) {
commentaire.setId(idNouveauCommentaire);
if (observation != null) {
observation.getInterventionsForum().add(commentaire);
} else if (possesseurDeCommentaires != null) {
possesseurDeCommentaires.getListeCommentaires().add(commentaire);
}
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutCommentaire(commentaire));
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
}
 
private boolean validerSaisie() {
 
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getNomObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurNom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurNom(styleErreur);
}
};
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getPrenomObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurPrenom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurPrenom(styleErreur);
}
};
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getCourrielObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurCourriel(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurCourriel(styleErreur);
}
};
 
ValidateurChampTexteNonNul validateurCommentaire = new ValidateurChampTexteNonNul(vue.getCommentaire()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurCommentaire(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurCommentaire(styleErreur);
}
};
boolean nomSaisi = validateurNom.valider();
boolean prenomSaisi = validateurPrenom.valider();
boolean courrielSaisi = validateurCourriel.valider();
boolean commentaireSaisi = validateurCommentaire.valider();
 
return nomSaisi && prenomSaisi && courrielSaisi && commentaireSaisi;
}
 
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.java
New file
0,0 → 1,126
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire;
 
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.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireCommentaireVue extends Composite implements FormulaireCommentairePresenteur.Vue {
@UiField
public TextBox nom, prenom, courriel;
 
@UiField
public TextArea commentaire;
 
@UiField
public Button boutonValidationCommentaire;
 
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulaireCommentaireVue> {
};
 
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class);
 
public FormulaireCommentaireVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public String getNom() {
return nom.getText();
}
@Override
public String getPrenom() {
return prenom.getText();
}
 
@Override
public TextArea getCommentaire() {
return commentaire;
}
 
@Override
public Button getBoutonValidationCommentaire() {
return boutonValidationCommentaire;
}
@Override
public void afficherStyleErreurCommentaire(String styleErreur) {
commentaire.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurCommentaire(String styleErreur) {
commentaire.removeStyleName(styleErreur);
}
@Override
public void afficherStyleErreurNom(String styleErreur) {
nom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurNom(String styleErreur) {
nom.removeStyleName(styleErreur);
}
@Override
public void afficherStyleErreurPrenom(String styleErreur) {
prenom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurPrenom(String styleErreur) {
prenom.removeStyleName(styleErreur);
}
@Override
public void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel) {
this.nom.setText(nom);
this.nom.setEnabled(false);
this.prenom.setText(prenom);
this.prenom.setEnabled(false);
this.courriel.setText(courriel);
this.courriel.setEnabled(false);
}
 
@Override
public HasText getNomObjet() {
return nom;
}
@Override
public HasText getPrenomObjet() {
return prenom;
}
 
@Override
public String getCourriel() {
return courriel.getText();
}
 
@Override
public void afficherStyleErreurCourriel(String styleErreur) {
courriel.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurCourriel(String styleErreur) {
courriel.removeStyleName(styleErreur);
}
 
@Override
public HasText getCourrielObjet() {
return courriel;
}
}
/branches/v1.12-aluminium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/formulaireCommentaire.css
New file
0,0 → 1,69
.formulaireProposition {
z-index: 1500;
padding: 50px;
background: white;
width: 300px;
margin: 0 auto;
margin-top: 75px;
}
 
.boutonProposer:hover {
background-color: #AAA
}
 
.colonneGauche,.colonneDroite {
width: 250px;
}
 
.colonneGauche {
padding-right: 30px
}
 
.colonneGauche select {
width: 100%
}
 
.colonneGauche input {
width: 95%
}
 
.commentaire {
width: 250px;
height: 100px
}
 
.propositionTaxon {
width: 100%;
height: 30px;
}
 
.boutonProposer {
border: solid 1px #AAA;
cursor: pointer;
float: left;
margin-top: 10px;
margin-bottom: 5px;
margin-right: 30px;
float: right;
background: url(./img/add.png) no-repeat 5px 7px #DDD;
padding: 5px;
padding-left: 25px;
cursor: pointer
}
 
 
.zoneNom {
width:30%;
float:left;
margin-right:5px;
}
 
.zonePrenom {
width:30%;
float:left;
}
 
.zoneEmail {
clear:left;
padding-top:5px;
}