Subversion Repositories eFlore/Applications.coel

Rev

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