Rev 989 | Rev 1077 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.commentaire;
import java.util.ArrayList;
import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampSliderPourcentage;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.MenuApplicationId;
import org.tela_botanica.client.modeles.commentaire.Commentaire;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.modeles.projet.ProjetListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilArray;
import org.tela_botanica.client.util.UtilString;
import org.tela_botanica.client.vues.Formulaire;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Validator;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
public class CommentaireForm extends Formulaire implements Rafraichissable {
private Commentaire commentaire;
private ComboBox<Projet> projetsCombo = null;
private TextField<String> titreChp;
private TextArea texteChp;
private ChampSliderPourcentage ponderationChp;
private CheckBox publicChp;
private static boolean formulaireValideOk = false;
private static boolean commentaireValideOk = false;
public CommentaireForm(Mediateur mediateurCourrant, String commentaireId) {
initialiserCommentaireForm(mediateurCourrant, commentaireId);
}
public CommentaireForm(Mediateur mediateurCourrant, String commentaireId, Rafraichissable vueARafraichirApresValidation) {
vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
initialiserCommentaireForm(mediateurCourrant, commentaireId);
}
private void initialiserCommentaireForm(Mediateur mediateurCourrant, String commentaireId) {
initialiserValidation();
commentaire = new Commentaire();
commentaire.setId(commentaireId);
String modeDeCreation = (UtilString.isEmpty(commentaire.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.COMMENTAIRE);
panneauFormulaire.setLayout(new FormLayout());
String titre = genererTitreFormulaire();
panneauFormulaire.setHeading(titre);
creerChamps();
if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
mediateur.selectionnerCommentaire(this, commentaireId);
}
}
private String genererTitreFormulaire() {
String titre = i18nC.commentaireTitreFormAjout();
if (mode.equals(Formulaire.MODE_MODIFIER)) {
titre = i18nC.commentaireTitreFormModif()+" - "+i18nC.id()+": "+commentaire.getId();
}
return titre;
}
private void creerChamps() {
projetsCombo = new ComboBox<Projet>();
projetsCombo.setTabIndex(tabIndex++);
projetsCombo.setFieldLabel(i18nC.projetChamp());
projetsCombo.setDisplayField("nom");
projetsCombo.setForceSelection(true);
projetsCombo.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (projetsCombo.getStore().findModel("nom", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
}
return retour;
}
});
projetsCombo.setTriggerAction(TriggerAction.ALL);
projetsCombo.setStore(new ListStore<Projet>());
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
projetsCombo.addListener(Events.Valid, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
Projet valeur = projetsCombo.getValue();
// Gestion du style obligatoire
projetsCombo.removeStyleName(ComposantClass.OBLIGATOIRE);
projetsCombo.removeStyleName(ComposantClass.OBLIGATOIRE_OK);
if (valeur != null) {
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE_OK);
} else {
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
}
}
});
panneauFormulaire.add(projetsCombo, new FormData(450, 0));
mediateur.selectionnerProjet(this, null);
titreChp = new TextField<String>();
titreChp.setFieldLabel(i18nC.commentaireTitre());
titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
panneauFormulaire.add(titreChp, new FormData(450, 0));
texteChp = new TextArea();
texteChp.setFieldLabel(i18nC.commentaireTexte());
panneauFormulaire.add(texteChp, new FormData(450, 250));
ponderationChp = new ChampSliderPourcentage(i18nC.commentairePonderation());
panneauFormulaire.add(ponderationChp, new FormData(450, 0));
publicChp = new CheckBox();
publicChp.setFieldLabel(i18nC.donneePublic());
panneauFormulaire.add(publicChp, new FormData(50, 0));
}
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Commentaire) {
// Si on a reçu les details d'une publication
rafraichirCommentaire((Commentaire) nouvellesDonnees);
} else if (nouvellesDonnees instanceof ProjetListe) {
ProjetListe projets = (ProjetListe) nouvellesDonnees;
Formulaire.rafraichirComboBox(projets, projetsCombo);
setValeurComboProjets();
} else if (nouvellesDonnees instanceof Information) {
rafraichirInformation((Information) nouvellesDonnees);
} else {
Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
}
if (etreValide()) {
initialiserValidation();
repandreRafraichissement();
controlerFermetureApresRafraichissement();
}
}
private void rafraichirCommentaire(Commentaire commentaireRecu) {
commentaire = commentaireRecu;
peuplerFormulaire();
}
private String getValeurComboProjets() {
String valeur = "";
if (projetsCombo.getValue() != null) {
valeur = projetsCombo.getValue().getId();
}
return valeur;
}
private void setValeurComboProjets() {
if (projetsCombo.getStore() != null ) {
if (mode.equals(Formulaire.MODE_MODIFIER) && commentaire != null) {
projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", commentaire.getIdProjet()));
} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", mediateur.getProjetId()));
}
}
}
private void rafraichirInformation(Information info) {
String type = info.getType();
if (type.equals("ajout_commentaire") || type.equals("modif_commentaire")) {
commentaireValideOk = true;
commentaire.setId((String) info.getDonnee(0));
}
}
private Boolean etreValide() {
Boolean valide = false;
Debug.log("formulaire"+formulaireValideOk+" - Commentaire :"+commentaireValideOk);
if (formulaireValideOk && commentaireValideOk) {
valide = true;
}
return valide;
}
private void initialiserValidation() {
formulaireValideOk = false;
commentaireValideOk = false;
}
private void repandreRafraichissement() {
if (vueExterneARafraichirApresValidation != null) {
String type = "commentaire_modifiee";
if (mode.equals(Formulaire.MODE_AJOUTER)) {
type = "commentaire_ajoutee";
}
Information info = new Information(type);
info.setDonnee(0, commentaire);
vueExterneARafraichirApresValidation.rafraichir(info);
}
}
public boolean soumettreFormulaire() {
formulaireValideOk = verifierFormulaire();
Debug.log("Form?"+formulaireValideOk);
if (formulaireValideOk) {
soumettreCommentaire();
}
return formulaireValideOk;
}
private void soumettreCommentaire() {
Commentaire commentaireCollectee = collecterCommentaire();
if (commentaireCollectee != null) {
Debug.log("Info public collectée ? ok");
if (mode.equals(Formulaire.MODE_AJOUTER)) {
mediateur.ajouterCommentaire(this, commentaireCollectee);
} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.modifierCommentaire(this, commentaireCollectee);
}
}
}
public boolean verifierFormulaire() {
boolean valide = true;
ArrayList<String> messages = new ArrayList<String>();
String titre = titreChp.getValue();
if (titre == null || titre.equals("")) {
messages.add(i18nC.commentaireMessageTitre());
}
if (messages.size() != 0) {
String[] tableauDeMessages = {};
tableauDeMessages = messages.toArray(tableauDeMessages);
MessageBox.alert(i18nC.erreurSaisieTitre(), UtilArray.implode(tableauDeMessages, "<br />"), null);
valide = false;
}
return valide;
}
private void peuplerFormulaire() {
setValeurComboProjets();
titreChp.setValue(commentaire.getTitre());
texteChp.setValue(commentaire.getTexte());
ponderationChp.peupler(commentaire.getPonderation());
boolean acces = (commentaire.etrePublic() ? true : false);
publicChp.setValue(acces);
}
private Commentaire collecterCommentaire() {
Commentaire commentaireCollectee = (Commentaire) commentaire.cloner(new Commentaire());
commentaireCollectee.setIdProjet(getValeurComboProjets());
String titre = titreChp.getValue();
commentaireCollectee.setTitre(titre);
String texte = texteChp.getValue();
commentaireCollectee.setTexte(texte);
String ponderation = ponderationChp.getValeur();
commentaireCollectee.setPonderation(ponderation);
String acces = (publicChp.getValue() ? "1" : "0");
commentaireCollectee.setPublic(acces);
Commentaire commentaireARetourner = null;
if (!commentaireCollectee.comparer(commentaire)) {
commentaireARetourner = commentaire = commentaireCollectee;
}
return commentaireARetourner;
}
public void reinitialiserFormulaire() {
if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.afficherFormPublication(commentaire.getId());
} else {
mediateur.afficherFormPublication(null);
}
}
}