fr.univlorraine.mondossierweb.MdwTouchkitUI.java Source code

Java tutorial

Introduction

Here is the source code for fr.univlorraine.mondossierweb.MdwTouchkitUI.java

Source

/**
 *
 *  ESUP-Portail MONDOSSIERWEB - Copyright (c) 2016 ESUP-Portail consortium
 *
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
package fr.univlorraine.mondossierweb;

import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import lombok.Getter;
import lombok.Setter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.bridge.SLF4JBridgeHandler;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.core.env.Environment;
import org.springframework.mobile.device.Device;
import org.springframework.mobile.device.DeviceUtils;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Component;

import com.vaadin.addon.touchkit.annotations.OfflineModeEnabled;
import com.vaadin.addon.touchkit.ui.NavigationManager;
import com.vaadin.addon.touchkit.ui.TabBarView;
import com.vaadin.addon.touchkit.ui.TabBarView.SelectedTabChangeEvent;
import com.vaadin.addon.touchkit.ui.TabBarView.SelectedTabChangeListener;
import com.vaadin.annotations.StyleSheet;
import com.vaadin.annotations.Theme;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.navigator.ViewProvider;
import com.vaadin.server.FontAwesome;
import com.vaadin.server.Page.UriFragmentChangedEvent;
import com.vaadin.server.Page.UriFragmentChangedListener;
import com.vaadin.server.Page;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinSession;
import com.vaadin.shared.Position;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.spring.navigator.SpringViewProvider;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.TabSheet.Tab;
import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.ui.UI;

import fr.univlorraine.mondossierweb.beans.Etape;
import fr.univlorraine.mondossierweb.beans.Etudiant;
import fr.univlorraine.mondossierweb.controllers.ConfigController;
import fr.univlorraine.mondossierweb.controllers.EtudiantController;
import fr.univlorraine.mondossierweb.controllers.FavorisController;
import fr.univlorraine.mondossierweb.controllers.ListeInscritsController;
import fr.univlorraine.mondossierweb.controllers.RechercheArborescenteController;
import fr.univlorraine.mondossierweb.controllers.UiController;
import fr.univlorraine.mondossierweb.controllers.UserController;
import fr.univlorraine.mondossierweb.utils.PropertyUtils;
import fr.univlorraine.mondossierweb.utils.Utils;
import fr.univlorraine.mondossierweb.views.AccesBloqueView;
import fr.univlorraine.mondossierweb.views.AccesRefuseView;
import fr.univlorraine.mondossierweb.views.CalendrierMobileView;
import fr.univlorraine.mondossierweb.views.ErreurView;
import fr.univlorraine.mondossierweb.views.FavorisMobileView;
import fr.univlorraine.mondossierweb.views.InformationsAnnuellesMobileView;
import fr.univlorraine.mondossierweb.views.ListeInscritsMobileView;
import fr.univlorraine.mondossierweb.views.NotesDetailMobileView;
import fr.univlorraine.mondossierweb.views.NotesMobileView;
import fr.univlorraine.mondossierweb.views.RechercheMobileView;
import fr.univlorraine.mondossierweb.views.windows.LoadingIndicatorWindow;
import fr.univlorraine.tools.vaadin.GoogleAnalyticsTracker;
import fr.univlorraine.tools.vaadin.LogAnalyticsTracker;
import fr.univlorraine.tools.vaadin.PiwikAnalyticsTracker;
import gouv.education.apogee.commun.transverse.exception.WebBaseException;

@Scope("prototype")
@Component
@Theme("valo-ul")
@StyleSheet("mobileView.css")
@SuppressWarnings("serial")
@OfflineModeEnabled(false)
public class MdwTouchkitUI extends GenericUI {

    private Logger LOG = LoggerFactory.getLogger(MdwTouchkitUI.class);

    /**
     * Nombre maximum de tentatives de reconnexion lors d'une dconnexion.
     */
    private static final int TENTATIVES_RECO = 3;

    /* Redirige java.util.logging vers SLF4j */
    static {
        SLF4JBridgeHandler.install();
    }
    /* Injections */
    @Resource
    private transient ApplicationContext applicationContext;
    @Resource
    private transient Environment environment;
    @Resource
    private transient UserController userController;
    @Resource
    private transient UiController uiController;
    @Resource
    private transient RechercheArborescenteController rechercheArborescenteController;
    @Resource
    private transient EtudiantController etudiantController;
    @Resource
    private transient ListeInscritsController listeInscritsController;
    @Resource
    private transient FavorisController favorisController;
    @Resource
    private transient ConfigController configController;
    @Resource
    private InformationsAnnuellesMobileView informationsAnnuellesMobileView;
    @Resource
    private CalendrierMobileView calendrierMobileView;
    @Resource
    private NotesMobileView notesMobileView;
    @Resource
    private NotesDetailMobileView notesDetailMobileView;

    //Indicateur de chargement
    private LoadingIndicatorWindow loadingIndicatorWindow = new LoadingIndicatorWindow();

    //La vue par laquelle on est arriv au trombinoscope
    @Getter
    private String trombinoscopeFromView;

    //La vue par laquelle on est arriv  la recherche
    @Getter
    @Setter
    private String rechercheFromView;

    //La vue par laquelle on est arriv au dossier tudiant
    @Getter
    private String dossierEtuFromView;

    //le NavigationManager pour l'affichage des notes et du dtail des notes
    private NavigationManager noteNavigationManager;

    //La barre de menu affiche dans le dossier tudiant
    private TabBarView menuEtudiant;

    //Onglet infoAnnuelles du dossier tudiant
    private Tab tabInfoAnnuelles;

    //Onglet Calendrier du dossier tudiant
    private Tab tabCalendrier;

    //Onglet notes du dossier tudiant
    private Tab tabNotes;

    //Etape concernes par le dtail des notes
    @Setter
    @Getter
    private Etape etapeDetailNotes;

    //vrai si on consulte les notes en vue enseignant
    @Setter
    @Getter
    private boolean vueEnseignantNotesEtResultats;

    //Le contenu principal de la page
    private CssLayout contentLayout = new CssLayout();

    /** The view provider. */
    @Resource
    private SpringViewProvider viewProvider;

    /** Gestionnaire de vues tudiant*/
    @Getter
    private final Navigator navigator = new Navigator(this, contentLayout);

    /**
     * @see com.vaadin.ui.UI#getCurrent()
     */
    public static MdwTouchkitUI getCurrent() {
        return (MdwTouchkitUI) UI.getCurrent();
    }

    @Override
    protected void init(VaadinRequest request) {

        VaadinSession.getCurrent().setErrorHandler(e -> {
            Throwable cause = e.getThrowable();
            while (cause instanceof Throwable) {
                /* Gre les accs non autoriss */
                if (cause instanceof AccessDeniedException) {
                    Notification.show(cause.getMessage(), Type.ERROR_MESSAGE);
                    afficherMessageAccesRefuse();
                    return;
                }
                if (cause != null && cause.getClass() != null) {
                    String simpleName = cause.getClass().getSimpleName();
                    if (PropertyUtils.getListeErreursAIgnorer().contains(simpleName)) {
                        Notification.show(cause.getMessage(), Type.ERROR_MESSAGE);
                        navigator.navigateTo(ErreurView.NAME);
                        return;
                    }
                }
                cause = cause.getCause();
            }
            /* Traite les autres erreurs normalement */
            LOG.error(e.getThrowable().toString(), e.getThrowable());
            // Affiche de la vue d'erreur
            navigator.navigateTo(ErreurView.NAME);
        });

        //Le contenu principal n'est pas scrollable. Par contre les lment  l'intrieur pourront l'tre
        setStyleName("v-noscrollableelement");

        //Le contentLayout prend toute la place disponible
        contentLayout.setSizeFull();

        /* Affiche le nom de l'application dans l'onglet du navigateur */
        getPage().setTitle(environment.getRequiredProperty("app.name"));

        /* Gestion de l'acces a un dossier prcis via url deepLinking (ne peut pas tre fait dans navigator 
        car le fragment ne correspond pas  une vue existante) */
        getPage().addUriFragmentChangedListener(new UriFragmentChangedListener() {
            public void uriFragmentChanged(UriFragmentChangedEvent source) {

                //On bloque l'accs aux vues desktop
                /*   if(!Utils.isViewMobile(source.getUriFragment())){
                   afficherMessageAccesRefuse();
                }*/

                //Si l'application est en maintenance on bloque l'accs
                if (!applicationActive() && !source.getUriFragment().contains(AccesBloqueView.NAME)) {
                    afficherMessageMaintenance();
                }
            }
        });

        /* Ex de Device Detection */
        Device currentDevice = DeviceUtils.getCurrentDevice((HttpServletRequest) request);
        if (currentDevice.isMobile())
            LOG.debug("device : mobile");
        if (currentDevice.isTablet())
            LOG.debug("device : tablet");
        if (currentDevice.isNormal())
            LOG.debug("device : normal");

        //Paramtrage du comportement en cas de perte de connexion
        configReconnectDialog();

        /* Construit le gestionnaire de vues */
        navigator.addProvider(viewProvider);
        navigator.setErrorProvider(new ViewProvider() {
            @Override
            public String getViewName(final String viewAndParameters) {
                return ErreurView.NAME;
            }

            @Override
            public View getView(final String viewName) {
                return viewProvider.getView(ErreurView.NAME);
            }
        });

        navigator.addViewChangeListener(new ViewChangeListener() {

            private static final long serialVersionUID = 9183991275107545154L;

            @Override
            public boolean beforeViewChange(ViewChangeEvent event) {

                //On bloque l'accs aux vues desktop
                if (!Utils.isViewMobile(event.getViewName())) {
                    return false;
                }

                //Si l'application est en maintenance on bloque l'accs
                if (!applicationActive() && !event.getViewName().equals(AccesBloqueView.NAME)) {
                    afficherMessageMaintenance();
                    return false;
                }

                return true;
            }

            @Override
            public void afterViewChange(ViewChangeEvent event) {
                // TODO Auto-generated method stub

            }

        });

        //init du tracker
        initAnalyticsTracker();

        //contentLayout est le contenu principal de la page
        setContent(contentLayout);

        // Si l'utilisateur est enseignant ou tudiant
        if (userController.isEnseignant() || userController.isEtudiant()) {

            if (!applicationActive()) {
                afficherMessageMaintenance();
            } else {

                //On rcupre l'IP du client
                GenericUI.getCurrent().getIpClient();

                // Si l'utilisateur est enseignant
                if (userController.isEnseignant()) {

                    //On consultera les notes en vue enseignant
                    vueEnseignantNotesEtResultats = true;
                    //On se rend par dfaut  la vue des favoris
                    navigator.navigateTo(FavorisMobileView.NAME);
                    //On affiche le message d'intro
                    afficherMessageIntroEnseignants();

                } else {
                    // Si l'utilisateur est tudiant
                    //On consultera les notes en vue etudiant
                    vueEnseignantNotesEtResultats = false;
                    //On rcupre le codetu de l'tudiant
                    String codetu = daoCodeLoginEtudiant.getCodEtuFromLogin(userController.getCurrentUserName());
                    etudiant = new Etudiant(codetu);
                    try {
                        //On rcupre l'tat-civil et les adresses de l'tudiant
                        etudiantController.recupererEtatCivil();
                        //Si on a eu une erreur  la rcupration de l'tat-civil
                        if (GenericUI.getCurrent().getEtudiant() == null) {
                            navigator.navigateTo(ErreurView.NAME);
                        } else {
                            //On rcupre le calendrier de l'tudiant
                            etudiantController.recupererCalendrierExamens();
                            //On rcupre les notes de l'tudiant
                            etudiantController.recupererNotesEtResultats(etudiant);
                            //On affiche le dossier
                            navigateToDossierEtudiant();
                        }
                    } catch (WebBaseException ex) {
                        LOG.error(
                                "Probleme avec le WS lors de la recherche de l'tat-civil pour etudiant dont codetu est : "
                                        + codetu,
                                ex);
                        navigator.navigateTo(ErreurView.NAME);
                    } catch (Exception ex) {
                        LOG.error("Probleme lors de la recherche de l'tat-civil pour etudiant dont codetu est : "
                                + codetu, ex);
                        navigator.navigateTo(ErreurView.NAME);
                    }

                }
            }
        } else {
            //Utilisateur ni enseignant, ni tudiant, on le redirige vers la vue accs refus
            afficherMessageAccesRefuse();
        }

    }

    private void afficherMessageMaintenance() {
        setContent(contentLayout);
        navigator.navigateTo(AccesBloqueView.NAME);
    }

    private void afficherMessageAccesRefuse() {
        setContent(contentLayout);
        navigator.navigateTo(AccesRefuseView.NAME);
    }

    /**
     * Affiche du message d'intro pour les enseignants
     */
    private void afficherMessageIntroEnseignants() {
        afficherMessageIntro(applicationContext.getMessage("helpWindowMobile.text.enseignant", null, getLocale()));

    }

    /**
     * Affiche du message d'intro
     */
    private void afficherMessageIntro(String text) {

        Notification note = new Notification(text, "", Notification.TYPE_TRAY_NOTIFICATION, true);
        note.setPosition(Position.MIDDLE_CENTER);
        note.setDelayMsec(6000);
        note.show(this.getPage());

        /**
         * ANCIENNE VERSION AVEC POPUP WINDOW
         */
        /*
        //Recuperer dans la base si l'utilisateur a une prfrence pour l'affichage le message
        String val  = userController.getPreference(Utils.SHOW_MESSAGE_INTRO_MOBILE_PREFERENCE);
            
        //Par dfaut on affiche le message
        boolean afficherMessage = true;
            
        //Si on a une prfrence pour l'utilisateur en ce qui concerne l'affichage du message d'accueil mobile
        if(StringUtils.hasText(val)){
           //On rcupre ce choix dans afficherMessage
           afficherMessage = Boolean.valueOf(val);
        }
            
        //Si on doit afficher le message
        if(afficherMessage){
            
           //Cration de la pop-pup contenant le message
           HelpMobileWindow hbw = new HelpMobileWindow(text,applicationContext.getMessage("helpWindow.defaultTitle", null, getLocale()),true);
            
           //Sur la fermeture de la fentre
           hbw.addCloseListener(g->{
        //On va enregistrer en base que l'utilisateur ne souhaite plus afficher le message si la checkbox propose par la pop-up a t coche
        boolean choix = hbw.getCheckBox().getValue();
        //Test si l'utilisateur a coch la case pour ne plus afficher le message
        if(choix){
           //mettre a jour dans la base de donnes
           userController.updatePreference(Utils.SHOW_MESSAGE_INTRO_MOBILE_PREFERENCE, "false");
        }
           });
            
           //Affichage de la pop_up
           UI.getCurrent().addWindow(hbw);
            
        }
         */
    }

    /**
     * Affichage de la vue Liste Inscrits depuis la vue Search
     * @param parameterMap
     */
    public void navigateToListeInscritsFromSearch(Map<String, String> parameterMap) {
        trombinoscopeFromView = RechercheMobileView.NAME;
        navigateToListeInscrits(parameterMap);
    }

    /**
     * Affichage de la vue Liste Inscrits depuis la vue Favoris
     * @param parameterMap
     */
    public void navigateToListeInscritsFromFavoris(Map<String, String> parameterMap) {
        trombinoscopeFromView = FavorisMobileView.NAME;
        navigateToListeInscrits(parameterMap);
    }

    /**
     * Affichage du dossier d'un tudiant depuis la vue listeInscrits
     */
    public void navigateToDossierEtudiantFromListeInscrits() {
        dossierEtuFromView = ListeInscritsMobileView.NAME;
        navigateToDossierEtudiant();
    }

    /**
     * Affichage du dossier d'un tudiant depuis la vue Search
     */
    public void navigateToDossierEtudiantFromSearch() {
        dossierEtuFromView = RechercheMobileView.NAME;
        navigateToDossierEtudiant();
    }

    /**
     * Affichage du dossier d'un tudiant
     */
    public void navigateToDossierEtudiant() {
        //On indique au navigator qu'on va aller sur la vue InformationsAnnuellesMobileView pour informer Piwik
        navigator.navigateTo(InformationsAnnuellesMobileView.NAME);
        //Refresh des vues du dossier tudiant avec les donnes de l'tudiant
        informationsAnnuellesMobileView.refresh();
        calendrierMobileView.refresh();
        notesMobileView.refresh();

        //Si le menu tudiant n'a jamais t initialis
        if (menuEtudiant == null) {
            //cration du menu tudiant
            initMenuEtudiant();
        }
        //On affiche la vue infoAnnuelles par dfaut
        menuEtudiant.setSelectedTab(tabInfoAnnuelles);

        //Le contenu principal de la page devient le tabBarView reprsentant le dossier tudiant
        setContent(menuEtudiant);
    }

    /**
     * Cration du menu tudiant
     */
    private void initMenuEtudiant() {

        //Si le menuEtudiant n'a jamais t initialis
        if (menuEtudiant == null) {
            //On cr le menuEtudiant
            menuEtudiant = new TabBarView();
        }

        //Cration de l'onglet Informations
        tabInfoAnnuelles = menuEtudiant.addTab(informationsAnnuellesMobileView,
                applicationContext.getMessage("mobileUI.infoannuelles.title", null, getLocale()), FontAwesome.INFO);
        tabInfoAnnuelles.setId("tabInfoAnnuelles");

        //Cration de l'onglet Calendrier
        tabCalendrier = menuEtudiant.addTab(calendrierMobileView,
                applicationContext.getMessage("mobileUI.calendrier.title", null, getLocale()),
                FontAwesome.CALENDAR);
        tabCalendrier.setId("tabCalendrier");

        //Si le navigationManager des notes est null
        if (noteNavigationManager == null) {
            //On cr le navigationManager
            noteNavigationManager = new NavigationManager();
        }
        //le composant affich dans le navigationManager est la vue des notes
        noteNavigationManager.setCurrentComponent(notesMobileView);
        //le composant suivant  afficher dans le navigationManager est la vue du dtail des notes
        noteNavigationManager.setNextComponent(notesDetailMobileView);
        //Cration de l'onglet Rsultats
        tabNotes = menuEtudiant.addTab(noteNavigationManager,
                applicationContext.getMessage("mobileUI.resultats.title", null, getLocale()), FontAwesome.LIST);
        tabNotes.setId("tabNotes");

        //Dtection du retour sur la vue du dtail des notes pour mettre  jour le JS
        menuEtudiant.addListener(new SelectedTabChangeListener() {
            @Override
            public void selectedTabChange(SelectedTabChangeEvent event) {
                //test si on se rend sur la vue des notes
                if (menuEtudiant.getSelelectedTab().equals(tabNotes)) {
                    //test si on se rend sur le dtail des notes
                    if (noteNavigationManager.getCurrentComponent().equals(notesDetailMobileView)) {
                        //On met  jour le JS (qui est normalement perdu, sans explication)
                        notesDetailMobileView.refreshJavascript();
                    }
                }

                //test si on se rend sur la vue calendrier
                if (menuEtudiant.getSelelectedTab().equals(tabCalendrier)) {
                    /* Message d'info */
                    if (applicationContext.getMessage(CalendrierMobileView.NAME + ".message.info", null,
                            getLocale()) != null) {
                        Notification note = new Notification(applicationContext
                                .getMessage(CalendrierMobileView.NAME + ".message.info", null, getLocale()), "",
                                Notification.TYPE_TRAY_NOTIFICATION, true);
                        note.setPosition(Position.MIDDLE_CENTER);
                        note.setDelayMsec(6000);
                        note.show(Page.getCurrent());
                        //Notification.show("", applicationContext.getMessage(CalendrierMobileView.NAME+".message.info", null, getLocale()), Notification.TYPE_TRAY_NOTIFICATION);
                    }
                }
            }
        });

    }

    /**
     * Affichage de la liste des inscrits  partir des infos en paramtre
     * @param parameterMap
     */
    public void navigateToListeInscrits(Map<String, String> parameterMap) {
        //Si on a des paramtres renseigns
        if (parameterMap != null) {
            //On rcupre a liste des inscrits
            listeInscritsController.recupererLaListeDesInscrits(parameterMap, null, this);
        }
        //On affiche la vue ListeInscrits
        navigator.navigateTo(ListeInscritsMobileView.NAME);
    }

    /**
     * Affichage de la vue Favoris
     */
    public void navigateTofavoris() {
        navigator.navigateTo(FavorisMobileView.NAME);
    }

    /**
     * Affichage de la vue par laquelle on est arrive  la recherche
     */
    public void backFromSearch() {
        if (rechercheFromView == null || rechercheFromView.equals(FavorisMobileView.NAME)) {
            navigator.navigateTo(FavorisMobileView.NAME);
        } else {
            if (rechercheFromView.equals(InformationsAnnuellesMobileView.NAME)) {
                navigateToDossierEtudiant();
            }
        }
    }

    /**
     * Affichage de la vue Search
     */
    public void navigateToRecherche(String fromView) {
        if (fromView != null) {
            rechercheFromView = fromView;
        }
        setContent(contentLayout);
        navigator.navigateTo(RechercheMobileView.NAME);
    }

    /**
     * Affichage de la vue listeInscrits
     */
    public void navigateToListeInscrits() {
        setContent(contentLayout);
        navigator.navigateTo(ListeInscritsMobileView.NAME);
    }

    /**
     * Affichage de la vue contenant le rsum des notes (cad on vient du dtail des notes)
     */
    public void navigateToResumeNotes() {
        //Si le navigationManager n'est pas null
        if (noteNavigationManager != null) {
            //On raffiche la vue prcdente du navigationManager
            noteNavigationManager.navigateBack();
        }

    }

    /**
     * Affichage de la vue contenant le dtail des notes  partir de l'tape en paramtre
     * @param etape
     */
    public void navigateToDetailNotes(Etape etape) {
        //Si le navigationManager n'est pas null
        if (noteNavigationManager != null) {
            //On refresh la vue du dtail des notes
            notesDetailMobileView.refresh(etape, etudiant.getCod_etu());
            //On navigue sur la vue du dtail des notes
            noteNavigationManager.navigateTo(notesDetailMobileView);
        }

    }

    private boolean applicationActive() {
        return configController.isApplicationMobileActive()
                && ((userController.isEtudiant() && configController.isPartieEtudiantActive())
                        || (userController.isEnseignant() && configController.isPartieEnseignantActive()));
    }

    public void startBusyIndicator() {
        addWindow(loadingIndicatorWindow);
    }

    public void stopBusyIndicator() {
        loadingIndicatorWindow.close();
    }

    /**
     * Initialise le tracker d'activit.
     */
    private void initAnalyticsTracker() {
        if (environment.getProperty("piwik.tracker.url") instanceof String
                && environment.getProperty("piwik.site.id") instanceof String) {
            analyticsTracker = new PiwikAnalyticsTracker(this, environment.getProperty("piwik.tracker.url"),
                    environment.getProperty("piwik.site.id"));
        } else if (environment.getProperty("google.analytics.account") instanceof String) {
            analyticsTracker = new GoogleAnalyticsTracker(this,
                    environment.getProperty("google.analytics.account"));
        } else {
            analyticsTracker = new LogAnalyticsTracker();
        }
        analyticsTracker.trackNavigator(navigator);
    }

    /**
     * Configure la reconnexion en cas de dconnexion.
     */
    private void configReconnectDialog() {
        getReconnectDialogConfiguration().setDialogModal(true);
        getReconnectDialogConfiguration().setReconnectAttempts(TENTATIVES_RECO);
        getReconnectDialogConfiguration()
                .setDialogText(applicationContext.getMessage("vaadin.reconnectDialog.text", null, getLocale()));
        getReconnectDialogConfiguration().setDialogTextGaveUp(
                applicationContext.getMessage("vaadin.reconnectDialog.textGaveUp", null, getLocale()));
    }

}