///////////////////////////////////////////////////// //Projet : ModeleSiteCLAS //Classe : Conteneur //Fichier : Conteneur.java //Cree le : 11/10/07 //Cette classe est le conteneur principal de l'application //Elle rassemble dans un rootPanel //- les bandeaux haut et bas de l'application //- un menu et une zone d'affichage pour l'application elle meme ///////////////////////////////////////////////////// package com.labinal.client; import org.gwtwidgets.client.util.WindowUtils; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.gwtext.client.core.Ext; import com.gwtext.client.widgets.MessageBox; import com.gwtext.client.widgets.MessageBox.AlertCallback; import com.labinal.client.common.Util; import com.labinal.client.common.myConstants; import com.labinal.client.common.myMessages; import com.labinal.client.dto.DTOInfoUser; import com.labinal.client.ihm.BrowserHistory; import com.labinal.client.ihm.PageLogin; import com.labinal.client.ihm.editionGrilleCompetences.EditionGrilleCompetences; import com.labinal.client.ihm.elementsTemplate.BasDePage; import com.labinal.client.ihm.elementsTemplate.HautDePage; import com.labinal.client.ihm.elementsTemplate.MenuGauche; import com.labinal.client.ihm.elementsTemplate.StatusBar; import com.labinal.client.ihm.gestionCompetence.GestionCompetence; import com.labinal.client.ihm.gestionDossierOperateur.GestionDossierOperateur; import com.labinal.client.ihm.gestionFamilleMetier.GestionFamilleMetier; import com.labinal.client.ihm.gestionMetier.GestionMetier; import com.labinal.client.ihm.gestionOperateur.GestionOperateur; import com.labinal.client.ihm.gestionOperation.GestionOperation; import com.labinal.client.ihm.gestionProfil.GestionProfil; import com.labinal.client.ihm.operatorMonthlySheetManagement.OperatorMonthlySheetManagement; import com.labinal.client.ihm.rechercheCompetence.RechercheCompetence; import com.labinal.client.ihm.rechercheOperateur.RechercheOperateur; import com.labinal.client.ihm.saisieFicheActivite.SaisieFicheActivite; import com.labinal.client.ihm.saisieFormation.SaisieFormation; import com.labinal.client.ihm.service.ServiceManagement; import com.labinal.client.ihm.trainingManagement.TrainingManagement; import com.labinal.client.services.SvcAuthentification; import com.labinal.client.services.SvcAuthentificationAsync; import com.labinal.client.services.SvcEtatcompetence; import com.labinal.client.services.SvcEtatcompetenceAsync; import com.labinal.client.services.SvcUtils; import com.labinal.client.services.SvcUtilsAsync; import com.labinal.client.widgets.Composite; /** * Cette classe est le conteneur principal de l'application Elle rassemble dans un rootPanel - les bandeaux haut et bas de l'application - un menu et une zone d'affichage pour l'application elle meme * * @author Sogeti */ public class Conteneur implements EntryPoint { private static RootPanel monRootPanel; private static Conteneur instance; private myConstants constants = (myConstants) GWT.create(myConstants.class); private myMessages messages = (myMessages) GWT.create(myMessages.class); /** * Déclaration du compteur nécéssaire pour le grisage de l'IHM lors des traitements */ private int cptTempo = 0; private String orientation = "vertical"; private boolean visibiliteMenu = false; private StatusBar statusBar; private HautDePage hautDePage; private BasDePage basDePage; // private Menu menu; private MenuGauche menu; private PageLogin pageLogin; private Composite pageCourante = null; /** * Objet complexe contenant toutes les informations relatives a l'utilisateur */ private static DTOInfoUser user; private String division = null; private String locale = null; /** * Déclaration des services RPC */ private final SvcEtatcompetenceAsync svcEtat = (SvcEtatcompetenceAsync) GWT.create(SvcEtatcompetence.class); private SvcUtilsAsync svcUtils = (SvcUtilsAsync) GWT.create(SvcUtils.class); private SvcAuthentificationAsync serviceAuthentification = (SvcAuthentificationAsync) GWT.create(SvcAuthentification.class); private ServiceDefTarget endpointAuthentification; private String moduleRelativeURLAuthentification; /** * Panels transparents masquant l'IHM lors d'un traitement */ private FocusPanel waitPageCentre = new FocusPanel(); private FocusPanel waitPageHaut = new FocusPanel(); private FocusPanel waitPageBas = new FocusPanel(); private FocusPanel waitMenu = new FocusPanel(); private CheckSessionCallback checkSessionCallback = null; /** * Entier position */ private int position = 0; /** * Cette méthode est le constructeur du conteneur */ private Conteneur() { instance = this; Window.setTitle(getConstants().titreFenetre()); pageLogin = PageLogin.getInstance(); statusBar = new StatusBar(); hautDePage = new HautDePage(); basDePage = new BasDePage(); // Affectation des services RPC endpointAuthentification = (ServiceDefTarget) serviceAuthentification; moduleRelativeURLAuthentification = GWT.getModuleBaseURL() + "svcAuthentification"; endpointAuthentification.setServiceEntryPoint(moduleRelativeURLAuthentification); ServiceDefTarget endpointEtat = (ServiceDefTarget) svcEtat; endpointEtat.setServiceEntryPoint(GWT.getModuleBaseURL() + "svcEtatcompetence"); ServiceDefTarget endpointUtils = (ServiceDefTarget) svcUtils; endpointUtils.setServiceEntryPoint(GWT.getModuleBaseURL() + "svcUtils"); } /** * Cette methode est la methode appel�e lors de l'ouverture de l'application Elle permet de construire l'interface de l'application Les elements - haut de page - barre de titre - barre de statut - bas de page - menu (vertical) - page * de login sont des elements gérés chacun par une classe specifique * * @see com.google.gwt.core.client.EntryPoint#onModuleLoad() */ public void onModuleLoad() { // if (WindowUtils.getLocation().getParameter("division") != null && !WindowUtils.getLocation().getParameter("division").equals("")) { division = WindowUtils.getLocation().getParameter("division"); } if (WindowUtils.getLocation().getParameter("locale") != null && !WindowUtils.getLocation().getParameter("locale").equals("")) { locale = WindowUtils.getLocation().getParameter("locale"); } initSession(); } /** * Cette méthode contrôle l'existence de la session Si elle existe, on ne fait rien sinon on fait une redirection vers la page de login * * V 1.01 : Correctif ajoutant un callback à la méthode, ce qui permet de vérifier si la session est active avant d'appeler un service */ public void checkSession(final CheckSessionCallback checkSessionCallbacks) { this.checkSessionCallback = checkSessionCallbacks; svcUtils.isSessionOK(new AsyncCallback() { public void onFailure(Throwable arg0) { redirectOnLostSession(); } public void onSuccess(Object arg0) { boolean isSessionOK = ((Boolean) arg0).booleanValue(); if (isSessionOK) checkSessionCallback.execute(); else redirectOnLostSession(); } }); } // redirige le browser sur l'url donnée public void redirectOnLostSession() { MessageBox.alert(Conteneur.get().getConstants().erreurAuth(), Conteneur.get().getConstants().AUTH005(), new AlertCallback() { public void execute() { Trace("debug", "REDIRECT BY CAUSE THE SESSION ON LOST"); redirectOnPageLogin(); } }); } // redirige le browser sur l'url donnée public static native void redirect(String url)/*-{ $wnd.location = url; }-*/; /** * Redirige vers l'url de depart comprenant la division et la localite */ public void redirectOnPageLogin() { String redirection = ""; // On traite la division et la localite if (division != null) { redirection = "?division=" + division; } if (locale != null) { if (redirection.equals("") == true) { redirection = "?locale=" + locale; } else { redirection = redirection + "&locale=" + locale; } } // on redirige Conteneur.redirect("Conteneur.html" + redirection); } /** * Cette methode permet de changer de page dans l'application * * Au travers de cette methode, et a partir de n'importe quel endroit de l'application il est possible de modifier la page affichée dans l'application (depuis une page, le menu, le bandeau, ....) * * @param page * Widget - la nouvelle page */ public void setPage(String token, Composite page) { // if (pageCourante != null) { pageCourante.removeFromParent(); } pageCourante = page; setOrientation(orientation); monRootPanel.add(page, 0, 0); // Appelle la classe permettant la gestion de navigation du browser. BrowserHistory.getInstance().addBrowserHistory(token, position); // // On incrémente de 1 position++; } /** * Cette methode permet d'avoir accès a la barre de statut de l'application * * Au travers de cette methode, et a partir de n'importe quel endroit de l'application il est possible d'agir sur les methode de la barre de statut afin de pouvoir la modifier (depuis une page, le menu, le bandeau, ....) * * @return StatusBar - la barre de statut de l'application */ public StatusBar getStatusBar() { return statusBar; } /** * Cette methode permet de recuperer l'orientation de l'application * * @return String - l'orientation de l'application */ public String getOrientation() { return orientation; } /** * Cette methode permet de savoir si le menu est visible ou non * * @return boolean - la visibilite du menu */ public boolean getVisibiliteMenu() { return visibiliteMenu; } /** * Cette methode permet de modifier l'orientation de l'application * * Au travers de cette methode, et a partir de n'importe quel endroit de l'application il est possible de modifier l'orientation du menu et de la page de l'application (depuis une page, le menu, le bandeau, ....) * * @param newOrientation * String - l'orientation de l'application */ public void setOrientation(String newOrientation) { orientation = newOrientation; pageLogin.setOrientation(); } /** * Cette methode permet de cacher le menu * * @param visible * boolean : visibilité */ public void afficherMenu(boolean visible) { visibiliteMenu = visible; getMenu().setVisible(visible); } /** * Cette methode permet de cacher la barre de statut * * @param visible * boolean : visibilité */ public void afficherStatut(boolean visible) { getStatusBar().setVisible(visible); } /** * Cette methode permet de gérer la temporisation du grisage de l'IHM durant un traitement * */ private void temporisation() { if (cptTempo <= 0) { cptTempo = 0; waitPageHaut.setVisible(false); waitPageCentre.setVisible(false); waitPageBas.setVisible(false); waitMenu.setVisible(false); getStatusBar().setText(null); } else { getStatusBar().setText(Conteneur.get().getConstants().messageAttenteTraitement()); waitPageHaut.setVisible(true); waitPageCentre.setVisible(true); waitPageBas.setVisible(true); waitMenu.setVisible(true); } } /** * Cette methode permet de griser l'application (au début d'un traitement) * */ public void afficheTempo() { cptTempo++; temporisation(); } /** * Cette methode permet de dégriser l'application (à la fin d'un traiment) * */ public void masqueTempo() { cptTempo--; temporisation(); } public BasDePage getBasDePage() { return basDePage; } public HautDePage getHautDePage() { return hautDePage; } public MenuGauche getMenu() { return menu; } public DTOInfoUser getUser() { return user; } public void setUser(DTOInfoUser user) { Conteneur.user = user; } /** * Cette methode permet de creer le menu de l'application elle sera appelée après l'authentification pour que les droits de l'utilisateur lui soient appliqués */ public void CreateMenu() { menu = new MenuGauche(); menu.addItem(getConstants().menuDossierOperateurs()); menu.addSousItem(getConstants().sousMenuDossierOperateurs(), getConstants().sousMenuDossierOperateursToolTip(), user.isRead("PAGE_DOSSIER_OPE"), new ClickListener() { public void onClick(Widget arg0) { GestionDossierOperateur page = GestionDossierOperateur.getInstance(); setPage("DossierOperateurs", page); } }); menu.addItem(getConstants().menuRecherche()); menu.addSousItem(getConstants().sousMenuRechercheCompetence(), getConstants().sousMenuRechercheCompetenceToolTip(), user.isRead("PAGE_RECHERCHE_COMP"), new ClickListener() { public void onClick(Widget arg0) { RechercheCompetence page = RechercheCompetence.getInstance(); setPage("RechercheCompetences", page); } }); menu.addSousItem(getConstants().sousMenuRechercheOperateur(), getConstants().sousMenuRechercheOperateurToolTip(), user.isRead("PAGE_RECHERCHE_OPE"), new ClickListener() { public void onClick(Widget arg0) { RechercheOperateur page = RechercheOperateur.getInstance(); setPage("RechercheOperateur", page); } }); menu.addItem(getConstants().menuParametrage()); menu.addSousItem(getConstants().sousMenuGestionOperateurs(), getConstants().sousMenuGestionOperateursToolTip(), user.isRead("PAGE_PARAM_OPE"), new ClickListener() { public void onClick(Widget arg0) { GestionOperateur page = GestionOperateur.getInstance(); setPage("GestionOperateurs", page); } }); menu.addSousItem(getConstants().sousMenuGestionProfils(), getConstants().sousMenuGestionProfilsToolTip(), user.isRead("PAGE_PARAM_PROFILS"), new ClickListener() { public void onClick(Widget arg0) { GestionProfil page = GestionProfil.getInstance(); setPage("GestionProfils", page); } }); menu.addSousItem(getConstants().sousMenuGestionFamilleMetiers(), getConstants().sousMenuGestionFamilleMetiersToolTip(), user.isRead("PAGE_PARAM_FAMILLES"), new ClickListener() { public void onClick(Widget arg0) { GestionFamilleMetier page = GestionFamilleMetier.getInstance(); setPage("GestionFamilleMetier", page); } }); menu.addSousItem(getConstants().sousMenuGestionMetiers(), getConstants().sousMenuGestionMetiersToolTip(), user.isRead("PAGE_PARAM_METIERS"), new ClickListener() { public void onClick(Widget arg0) { GestionMetier page = GestionMetier.getInstance(); setPage("GestionMetiers", page); } }); menu.addSousItem(getConstants().sousMenuGestionOperations(), getConstants().sousMenuGestionOperationsToolTip(), user.isRead("PAGE_PARAM_OPERATION"), new ClickListener() { public void onClick(Widget arg0) { GestionOperation page = GestionOperation.getInstance(); setPage("GestionOperations", page); } }); // IAS : 30/09/2008 : Add a new item "Competences" menu.addSousItem(getConstants().sousMenuParametrageCompetence(), getConstants().sousMenuParametrageCompetenceToolTip(), user.isRead("PAGE_PARAM_COMP"), new ClickListener() { public void onClick(Widget arg0) { GestionCompetence page = GestionCompetence.getInstance(); setPage("GestionCompetence", page); } }); // End IAS // JBA : 30/03/2011 : v1.5.2 : add a new item "Trainings" menu.addSousItem(getConstants().sousMenuTrainingParameterSettings(), getConstants().sousMenuTrainingParameterSettingsToolTip(), user.isRead("PAGE_PARAM_TRAINING"), new ClickListener() { public void onClick(Widget arg0) { TrainingManagement page = TrainingManagement.getInstance(); setPage("GestionFormation", page); } }); // JBA : 16/05/2011 : v1.5.2.3 : add a new item "Services" menu.addSousItem(getConstants().sousMenuServiceParameterSettings(), getConstants().sousMenuServiceParameterSettingsToolTip(), user.isRead("PAGE_PARAM_SERVICE"), new ClickListener() { public void onClick(Widget arg0) { ServiceManagement page = ServiceManagement.getInstance(); setPage("GestionService", page); } }); menu.addItem(getConstants().menuEditionCompetences()); menu.addSousItem(getConstants().sousMenuEditionCompetence(), getConstants().sousMenuEditionCompetenceToolTip(), user.isRead("PAGE_EDITION_GRILLE"), new ClickListener() { public void onClick(Widget arg0) { checkSession(new CheckSessionCallback() { public void execute() { setPage("GrilleCompetences", EditionGrilleCompetences.getInstance()); } }); } }); menu.addItem(getConstants().menuSuiviActivite()); menu.addSousItem(getConstants().sousMenuActiviteCodeBarre(), getConstants().sousMenuActiviteCodeBarreToolTip(), user.isRead("PAGE_PARAM_SAISIE_CB"), new ClickListener() { public void onClick(Widget arg0) { setPage("SaisieFicheActivite", SaisieFicheActivite.getInstance()); } }); menu.addSousItem(getConstants().optionMenuOperatorMonthlySheet(), getConstants().optionMenuOperatorMonthlySheet(), user.isRead("PAGE_OPE_MONTH_SHEET"), new ClickListener() { public void onClick(Widget arg0) { OperatorMonthlySheetManagement page = OperatorMonthlySheetManagement.getInstance(); setPage("OperatorMonthlySheet", page); } }); menu.addItem(getConstants().menuFormation()); menu.addSousItem(getConstants().sousMenuSaisieFormation(), getConstants().sousMenuGestionFormationsToolTip(), user.isRead("PAGE_SAISIE_FORM"), new ClickListener() { public void onClick(Widget arg0) { // SaisieFormation page = SaisieFormation.getInstance(); setPage("SaisieFormation", SaisieFormation.getInstance()); // setPage("SaisieFormation", page); } }); menu.setVisible(visibiliteMenu); menu.setWidth("143px"); monRootPanel.add(menu); } public myConstants getConstants() { return constants; } public myMessages getMessages() { return messages; } public static Conteneur get() { if (instance == null) { new Conteneur(); } return instance; } public void initSession() { monRootPanel = RootPanel.get(); monRootPanel.add(waitPageHaut); monRootPanel.add(waitPageCentre); monRootPanel.add(waitPageBas); monRootPanel.add(waitMenu); monRootPanel.add(hautDePage); monRootPanel.add(basDePage); monRootPanel.add(statusBar); setPage("pageLogin", pageLogin); Conteneur.get().getHautDePage().setDeconnexionVisible(false); } public static void setTitle(String titre) { monRootPanel.setTitle(titre); } public SvcAuthentificationAsync getServiceAuthentification() { return serviceAuthentification; } public static void maskPage() { monRootPanel.addStyleName("cursorWait"); Util.maskExtElement(Ext.get(monRootPanel.getElement())); } public static void unMaskPage() { monRootPanel.removeStyleName("cursorWait"); Util.unMaskExtElement(Ext.get(monRootPanel.getElement())); } /** * Cette methode permet d'appeler le service de trace hebergé coté serveur * * @param mode * : le mode de trace DEBUG, INFO, WARN, ERROR et FATAL * @param message * : le message a passer en parametre */ public void Trace(String mode, String message) { // TRACES désactivées pour éviter de nombreux appels RPC. A n'utiliser que pour les tests en DEV. // IAS - 21 janv. 09 : Suite à un problème client Connection deconnection immédiat. J'ai activer la trace côté client. // Toutefois je n'ai laissé que les traces utiles, les autres traces ont été mis en commentaires. svcUtils.Trace(mode, message, new AsyncCallback() { public void onFailure(Throwable arg0) { } public void onSuccess(Object arg0) { } }); } public String getDivision() { return division; } public String getLocale() { return locale; } }