Rev 1661 | 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.i18n.Constantes;
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 org.tela_botanica.client.util.Debug;
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.Events;
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.event.dom.client.KeyCodes;
public class IdentificationFenetre extends Dialog implements Rafraichissable {
private Mediateur mediateur = null;
private Constantes i18nC = null;
protected TextField<String> login = null;
protected TextField<String> motDePasse = null;
protected Button validerBouton = null;
private Button annulerBouton = null;
protected Status status = null;
private String zoneInfoTpl = null;
private HtmlContainer zoneInfoHtml = null;
public IdentificationFenetre(Mediateur mediateurCourrant) {
mediateur = mediateurCourrant;
i18nC = Mediateur.i18nC;
initialiserSquelettes();
FormLayout layout = new FormLayout();
layout.setLabelWidth(110);
layout.setDefaultWidth(220);
setLayout(layout);
setButtonAlign(HorizontalAlignment.RIGHT);
setButtons("");
setIcon(Images.ICONES.utilisateur());
setHeadingHtml(Registry.get(RegistreId.APPLI_NOM)+" - "+i18nC.identificationTitre());
setModal(true);
setBodyBorder(true);
setBodyStyle("padding: 10px;background: none");
setWidth(450);
setResizable(false);
setAutoWidth(false);
KeyListener keyListener = new KeyListener() {
public void componentKeyUp(ComponentEvent event) {
valider();
}
@SuppressWarnings("unchecked")
public void componentKeyPress(ComponentEvent evenement) {
if (evenement.getKeyCode() == KeyCodes.KEY_ENTER) {
TextField<String> champ = (TextField<String>) evenement.getSource();
if (champ.getFieldLabel().equals(i18nC.motDePasse())) {
validerBouton.fireEvent(Events.Select);
}
}
}
};
zoneInfoHtml = new HtmlContainer();
zoneInfoHtml.hide();
add(zoneInfoHtml);
login = new TextField<String>();
login.setMinLength(4);
login.setFieldLabel(i18nC.login());
login.addKeyListener(keyListener);
add(login);
motDePasse = new TextField<String>();
motDePasse.setMinLength(4);
motDePasse.setPassword(true);
motDePasse.setFieldLabel(i18nC.motDePasse());
motDePasse.addKeyListener(keyListener);
add(motDePasse);
setFocusWidget(login);
}
private void initialiserSquelettes() {
zoneInfoTpl = "<div id='"+ComposantId.DIV_IDENTIFICATION_MSG+"'>{0}</div>";
}
@Override
protected void createButtons() {
super.createButtons();
// FIXME : l'instanciation dans le constructeur ne marche pas pour cette méthode...
i18nC = Mediateur.i18nC;
status = new Status();
status.setBusy(i18nC.identificationVerification());
status.hide();
status.setAutoWidth(true);
getButtonBar().add(status);
getButtonBar().add(new FillToolItem());
validerBouton = new Button(i18nC.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(i18nC.annuler());
annulerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
hide();
}
});
addButton(annulerBouton);
addButton(validerBouton);
}
protected void onSubmit() {
status.show();
getButtonBar().disable();
mediateur.connecterUtilisateur(login.getValue(), motDePasse.getValue());
}
protected boolean avoirValeur(TextField<String> field) {
return field.getValue() != null && field.getValue().length() > 0;
}
protected void valider() {
validerBouton.setEnabled(avoirValeur(login) && avoirValeur(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 = mediateur.getUtilisateur();
if (!utilisateurCourant.isIdentifie() || !utilisateurCourant.avoirLicenceAcceptee()) {
// Licence n'a jamais été acceptée
if (utilisateurCourant.getLicence().equals("")) {
afficherErreur(i18nC.identificationMauvaise());
// NON à la licence
} else if (utilisateurCourant.getLicence().equals("0")){
afficherErreur(i18nC.licenceAccepter());
mediateur.afficherFenetreLicence(this);
// Cas inconnu
} else {
hide();
}
} else {
hide();
}
}
} else {
Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
}
}
public void afficherErreur(String erreur) {
status.hide();
getButtonBar().enable();
valider();
zoneInfoHtml.setHtml(Format.substitute(zoneInfoTpl, (new Params()).add(erreur)));
zoneInfoHtml.show();
layout();
}
}