Subversion Repositories eFlore/Applications.coel

Rev

Rev 517 | Rev 895 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.composants;

import org.tela_botanica.client.ComposantId;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.Utilisateur;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.KeyListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.util.Params;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.HtmlContainer;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
import com.google.gwt.core.client.GWT;

public class IdentificationFenetre extends Dialog implements Rafraichissable {

        protected TextField<String> login;
        protected TextField<String> motDePasse;
        protected Button reinitialiserBouton;
        protected Button validerBouton;
        private Button annulerBouton;
        protected Status status;
        private String zoneInfoTpl;
        private HtmlContainer zoneInfoHtml;

        public IdentificationFenetre() {
                FormLayout layout = new FormLayout();
                layout.setLabelWidth(110);
                layout.setDefaultWidth(220);
                setLayout(layout);

                setButtonAlign(HorizontalAlignment.RIGHT);
            setButtons("");
                setIcon(Images.ICONES.utilisateur());
                setHeading("Collections en ligne - Identification");
                setModal(true);
                setBodyBorder(true);
                setBodyStyle("padding: 10px;background: none");
                setWidth(450);
                setResizable(false);
                setAutoWidth(false);
                
                KeyListener keyListener = new KeyListener() {
                        public void componentKeyUp(ComponentEvent event) {
                                validate();
                        }

                };

                zoneInfoHtml = new HtmlContainer();
                zoneInfoTpl = "<div id='"+ComposantId.DIV_IDENTIFICATION_MSG+"'>{0}</div>";
                //zoneInfoHtml.setHtml(Format.substitute(zoneInfoTpl, (new Params()).add("")));
                zoneInfoHtml.hide();
                add(zoneInfoHtml);
                
                login = new TextField<String>();
                login.setMinLength(4);
                login.setFieldLabel("Courriel");
                login.addKeyListener(keyListener);
                add(login);

                motDePasse = new TextField<String>();
                motDePasse.setMinLength(4);
                motDePasse.setPassword(true);
                motDePasse.setFieldLabel("Mot de passe");
                motDePasse.addKeyListener(keyListener);
                add(motDePasse);

                setFocusWidget(login);
        }
        
        @Override
        protected void createButtons() {
                super.createButtons();
            status = new Status();
            status.setBusy("Vérification...");
            status.hide();
            status.setAutoWidth(true);
            getButtonBar().add(status);
            
            getButtonBar().add(new FillToolItem());
            
                reinitialiserBouton = new Button("Réinitialiser");
                reinitialiserBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                login.reset();
                                motDePasse.reset();
                                validate();
                                login.focus();
                        }

                });

                validerBouton = new Button("Valider");
                validerBouton.disable(); // Par défaut : dois être en mode disable
                validerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                onSubmit();
                        }
                });
                
                annulerBouton = new Button("Annuler");
                annulerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                hide();
                        }
                });

                
                addButton(reinitialiserBouton);
                addButton(annulerBouton);
                addButton(validerBouton);
        }

        protected void onSubmit() {
                status.show();
            getButtonBar().disable();
                //IdentificationFenetre.this.hide();
                ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).connecterUtilisateur(login.getValue(), motDePasse.getValue());
        }

        protected boolean hasValue(TextField<String> field) {
                return field.getValue() != null && field.getValue().length() > 0;
        }

        protected void validate() {
                validerBouton.setEnabled(hasValue(login) && hasValue(motDePasse) && motDePasse.getValue().length() > 3);
        }

        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof Information) {
                        Information info = (Information) nouvellesDonnees;
                        if (info.getType().equals("maj_utilisateur")) {
                                Utilisateur utilisateurCourant = ((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT));
                                if (utilisateurCourant.isIdentifie() == false) {
                                        status.hide();
                                    getButtonBar().enable();
                                        validate();
                                        zoneInfoHtml.setHtml(Format.substitute(zoneInfoTpl, (new Params()).add("Mauvais login ou mot de passe")));
                                        zoneInfoHtml.show();
                                        layout();
                                } else {
                                        hide();
                                }
                        }
                } else {
                        GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
                
        }

}