Subversion Repositories eFlore/Applications.coel

Rev

Rev 1909 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.composants;


import org.tela_botanica.client.Coel;
import org.tela_botanica.client.ComposantClass;
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.UtilisateurAsyncDao;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.event.ButtonEvent;
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.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.user.client.ui.HTML;

public class LicenceFenetre extends Dialog implements Rafraichissable{
        
        private Constantes i18nC = null;
        protected Button validerBouton = null;
        private Button annulerBouton = null;
        
        private String messageErreurTpl = "<div id='" + ComposantId.DIV_IDENTIFICATION_MSG + "'>{message}</div>";
        private LayoutContainer messageErreur;
        private HTML texteLicence;
        private String licenceTpl = "<div class='{css_corps}'>{licence}</div>";
        private IdentificationFenetre fenetreIdentification;
        private CheckBox accepter;
        
        public LicenceFenetre(IdentificationFenetre vueARafraichir)      {

                fenetreIdentification = vueARafraichir;

                setSize(500, 300);
                setPlain(true);
                setHeadingHtml("Licence d'utilisation");
                setIcon(Images.ICONES.application());
                setLayout(new RowLayout());
                setButtons(Dialog.OKCANCEL);

                messageErreur = new LayoutContainer();
                messageErreur.setLayout(new FitLayout());
                add(messageErreur);

                LayoutContainer licence = new LayoutContainer();
                licence.setSize("98%", "75%");
                licence.setStyleAttribute("padding", "5px");
                licence.setLayout(new FlowLayout());
                licence.setScrollMode(Scroll.AUTO);

                texteLicence = new HTML();
                licence.add(texteLicence);
                add(licence);

                LayoutContainer cbContainer = new LayoutContainer(new ColumnLayout());
                accepter = new CheckBox();
                cbContainer.add(accepter);
                add(cbContainer);
                
                Text txtAccepter = new Text(Mediateur.i18nC.licenceJaccepte());
                txtAccepter.setStyleAttribute("padding", "3px");
                cbContainer.add(txtAccepter);
                setClosable(false);
                
                show();
                initialiserComposants();
        }
        
        public void initialiserComposants()     {
                Params licenceParam = new Params();
                licenceParam.set("message", Mediateur.i18nC.licenceAccepter());
                messageErreur.el().setInnerHtml(Format.substitute(messageErreurTpl, licenceParam));
                
                Params parametres = new Params();
                String licence = Mediateur.i18nC.licence();
                parametres.set("licence", licence);
                parametres.set("css_corps", ComposantClass.DETAIL_CORPS_CONTENU);
                texteLicence.setHTML(Format.substitute(licenceTpl, parametres));
        }

        @Override
        protected void createButtons() {
                // FIXME : l'instanciation dans le constructeur ne marche pas pour cette méthode...
                i18nC = Mediateur.i18nC;
                
                getButtonBar().removeAll();
                
                validerBouton = new Button(i18nC.valider());
                validerBouton.setItemId(OK);
                validerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                onButtonPressed(ce.getButton());
                        }
                });
                
                annulerBouton = new Button(i18nC.annuler());
                annulerBouton.setItemId(CANCEL);
                annulerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                onButtonPressed(ce.getButton());
                        }
                });
                
                addButton(annulerBouton);
                addButton(validerBouton);
        }
        
        @Override
        protected void onButtonPressed(Button button) {
                if (Dialog.OK.equals(button.getItemId()))       {
                        button.setEnabled(false);
                        boolean licenceAcceptee = accepter.getValue();
                        if (licenceAcceptee == true)    {
                                ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).accepterLicence(this);
                        } else  {
                                hide();
                        }
                } else {
                        hide();
                }
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof Information)    {
                        Information info = (Information) nouvellesDonnees;
                        if (info.getType().equals("maj_licence")) {
                                String licence = info.getDonnee(0).toString();
                                if (licence.equals("1")) {
                                        if (fenetreIdentification != null && fenetreIdentification.isVisible()) {
                                                // si on est en train de se logger depuis Coel
                                                fenetreIdentification.onSubmit();
                                        } else {
                                                // si on était loggé depuis ailleurs par le SSO,
                                                // get état utilisateur forcé pour rafraîchir l'état de l'utilisateur maitnenant
                                                // que la licence est acceptée - on pourrait sûrement faire mieux
                                                // (ne pas rappeler le SSO ?)
                                                Mediateur lePutainDeMediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
                                                UtilisateurAsyncDao uad = new UtilisateurAsyncDao(lePutainDeMediateur);
                                                uad.getEtatUtilisateur();
                                        }
                                        hide();
                                } else  {
                                        //Licence non acceptée, on masque la fenêtre pour laisser 
                                        // affiché la fenêtre d'identification qui est en erreur. 
                                        hide();
                                }
                        }
                }
                
        }
        

}