Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
60 jpm 1
package org.tela_botanica.client.composants;
2
 
358 jp_milcent 3
import org.tela_botanica.client.ComposantId;
61 jpm 4
import org.tela_botanica.client.Mediateur;
1015 jpm 5
import org.tela_botanica.client.i18n.Constantes;
516 jp_milcent 6
import org.tela_botanica.client.images.Images;
358 jp_milcent 7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.modeles.Information;
9
import org.tela_botanica.client.modeles.Utilisateur;
61 jpm 10
 
517 jp_milcent 11
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
60 jpm 12
import com.extjs.gxt.ui.client.event.ButtonEvent;
13
import com.extjs.gxt.ui.client.event.ComponentEvent;
1015 jpm 14
import com.extjs.gxt.ui.client.event.Events;
60 jpm 15
import com.extjs.gxt.ui.client.event.KeyListener;
16
import com.extjs.gxt.ui.client.event.SelectionListener;
358 jp_milcent 17
import com.extjs.gxt.ui.client.util.Format;
18
import com.extjs.gxt.ui.client.util.Params;
60 jpm 19
import com.extjs.gxt.ui.client.widget.Dialog;
358 jp_milcent 20
import com.extjs.gxt.ui.client.widget.HtmlContainer;
498 jp_milcent 21
import com.extjs.gxt.ui.client.widget.Status;
60 jpm 22
import com.extjs.gxt.ui.client.widget.button.Button;
23
import com.extjs.gxt.ui.client.widget.form.TextField;
24
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
498 jp_milcent 25
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
358 jp_milcent 26
import com.google.gwt.core.client.GWT;
1015 jpm 27
import com.google.gwt.event.dom.client.KeyCodes;
60 jpm 28
 
358 jp_milcent 29
public class IdentificationFenetre extends Dialog implements Rafraichissable {
1015 jpm 30
 
31
	private Mediateur mediateur = null;
32
	private Constantes i18nC = null;
33
	protected TextField<String> login = null;
34
	protected TextField<String> motDePasse = null;
35
	protected Button reinitialiserBouton = null;
36
	protected Button validerBouton = null;
37
	private Button annulerBouton = null;
38
	protected Status status = null;
39
	private String zoneInfoTpl = null;
40
	private HtmlContainer zoneInfoHtml = null;
60 jpm 41
 
1015 jpm 42
	public IdentificationFenetre(Mediateur mediateurCourrant) {
43
		mediateur = mediateurCourrant;
44
		i18nC = Mediateur.i18nC;
45
 
46
		initialiserSquelettes();
47
 
61 jpm 48
		FormLayout layout = new FormLayout();
358 jp_milcent 49
		layout.setLabelWidth(110);
50
		layout.setDefaultWidth(220);
61 jpm 51
		setLayout(layout);
60 jpm 52
 
517 jp_milcent 53
		setButtonAlign(HorizontalAlignment.RIGHT);
54
	    setButtons("");
516 jp_milcent 55
		setIcon(Images.ICONES.utilisateur());
1015 jpm 56
		setHeading(i18nC.appliNom()+" - "+i18nC.identificationTitre());
61 jpm 57
		setModal(true);
58
		setBodyBorder(true);
59
		setBodyStyle("padding: 10px;background: none");
358 jp_milcent 60
		setWidth(450);
61 jpm 61
		setResizable(false);
64 jpm 62
		setAutoWidth(false);
63
 
1015 jpm 64
 
61 jpm 65
		KeyListener keyListener = new KeyListener() {
66
			public void componentKeyUp(ComponentEvent event) {
1015 jpm 67
				valider();
61 jpm 68
			}
1015 jpm 69
			@SuppressWarnings("unchecked")
70
			public void componentKeyPress(ComponentEvent evenement) {
71
				if (evenement.getKeyCode() == KeyCodes.KEY_ENTER) {
72
					TextField<String> champ = (TextField<String>) evenement.getSource();
73
					if (champ.getFieldLabel().equals(i18nC.motDePasse())) {
74
						validerBouton.fireEvent(Events.Select);
75
					}
76
				}
77
			}
61 jpm 78
		};
60 jpm 79
 
358 jp_milcent 80
		zoneInfoHtml = new HtmlContainer();
81
		zoneInfoHtml.hide();
82
		add(zoneInfoHtml);
83
 
66 jpm 84
		login = new TextField<String>();
85
		login.setMinLength(4);
1015 jpm 86
		login.setFieldLabel(i18nC.login());
66 jpm 87
		login.addKeyListener(keyListener);
88
		add(login);
60 jpm 89
 
66 jpm 90
		motDePasse = new TextField<String>();
91
		motDePasse.setMinLength(4);
92
		motDePasse.setPassword(true);
1015 jpm 93
		motDePasse.setFieldLabel(i18nC.motDePasse());
66 jpm 94
		motDePasse.addKeyListener(keyListener);
95
		add(motDePasse);
60 jpm 96
 
66 jpm 97
		setFocusWidget(login);
61 jpm 98
	}
277 jp_milcent 99
 
1015 jpm 100
	private void initialiserSquelettes() {
101
		zoneInfoTpl = "<div id='"+ComposantId.DIV_IDENTIFICATION_MSG+"'>{0}</div>";
102
	}
103
 
61 jpm 104
	@Override
105
	protected void createButtons() {
498 jp_milcent 106
		super.createButtons();
1015 jpm 107
		// FIXME : l'instanciation dans le constructeur ne marche pas pour cette méthode...
108
		i18nC = Mediateur.i18nC;
109
 
110
		status = new Status();
111
	    status.setBusy(i18nC.identificationVerification());
498 jp_milcent 112
	    status.hide();
113
	    status.setAutoWidth(true);
114
	    getButtonBar().add(status);
115
 
116
	    getButtonBar().add(new FillToolItem());
117
 
1015 jpm 118
		reinitialiserBouton = new Button(i18nC.reinitialiser());
66 jpm 119
		reinitialiserBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
61 jpm 120
			public void componentSelected(ButtonEvent ce) {
1106 jpm 121
				zoneInfoHtml.hide();
66 jpm 122
				login.reset();
123
				motDePasse.reset();
1106 jpm 124
				status.clearStatus("");
1015 jpm 125
				valider();
66 jpm 126
				login.focus();
1106 jpm 127
				layout();
61 jpm 128
			}
60 jpm 129
 
61 jpm 130
		});
60 jpm 131
 
1015 jpm 132
		validerBouton = new Button(i18nC.valider());
358 jp_milcent 133
		validerBouton.disable(); // Par défaut : dois être en mode disable
66 jpm 134
		validerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
61 jpm 135
			public void componentSelected(ButtonEvent ce) {
136
				onSubmit();
137
			}
138
		});
358 jp_milcent 139
 
1015 jpm 140
		annulerBouton = new Button(i18nC.annuler());
358 jp_milcent 141
		annulerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
142
			public void componentSelected(ButtonEvent ce) {
498 jp_milcent 143
				hide();
358 jp_milcent 144
			}
145
		});
146
 
517 jp_milcent 147
		addButton(reinitialiserBouton);
148
		addButton(annulerBouton);
149
		addButton(validerBouton);
61 jpm 150
	}
60 jpm 151
 
61 jpm 152
	protected void onSubmit() {
498 jp_milcent 153
		status.show();
154
	    getButtonBar().disable();
1015 jpm 155
		mediateur.connecterUtilisateur(login.getValue(), motDePasse.getValue());
61 jpm 156
	}
60 jpm 157
 
1015 jpm 158
	protected boolean avoirValeur(TextField<String> field) {
61 jpm 159
		return field.getValue() != null && field.getValue().length() > 0;
160
	}
60 jpm 161
 
1015 jpm 162
	protected void valider() {
163
		validerBouton.setEnabled(avoirValeur(login) && avoirValeur(motDePasse) && motDePasse.getValue().length() > 3);
61 jpm 164
	}
277 jp_milcent 165
 
845 gduche 166
	public void rafraichir(Object nouvellesDonnees) {
167
		if (nouvellesDonnees instanceof Information) {
168
			Information info = (Information) nouvellesDonnees;
358 jp_milcent 169
			if (info.getType().equals("maj_utilisateur")) {
1015 jpm 170
				Utilisateur utilisateurCourant = mediateur.getUtilisateur();
358 jp_milcent 171
				if (utilisateurCourant.isIdentifie() == false) {
895 gduche 172
						if (utilisateurCourant.getLicence().equals(""))	{
1015 jpm 173
							afficherErreur(i18nC.identificationMauvaise());
1021 jpm 174
						} else if (utilisateurCourant.getLicence().equals("0")){
1015 jpm 175
							afficherErreur(i18nC.licenceAccepter());
176
							mediateur.afficherFenetreLicence(this);
1021 jpm 177
						} else {
895 gduche 178
							hide();
179
						}
358 jp_milcent 180
				} else {
895 gduche 181
					if (utilisateurCourant.existeDansAnnuaire())	{
1015 jpm 182
						mediateur.mettreAJourPersonneAnnuaire(utilisateurCourant);
1021 jpm 183
					}
358 jp_milcent 184
					hide();
185
				}
895 gduche 186
			}
358 jp_milcent 187
		} else {
845 gduche 188
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
358 jp_milcent 189
		}
190
 
191
	}
895 gduche 192
 
193
	public void afficherErreur(String erreur)	{
194
		status.hide();
195
		getButtonBar().enable();
1015 jpm 196
		valider();
895 gduche 197
		zoneInfoHtml.setHtml(Format.substitute(zoneInfoTpl, (new Params()).add(erreur)));
198
		zoneInfoHtml.show();
199
		layout();
200
	}
358 jp_milcent 201
 
60 jpm 202
}