/** @return the current user's locale. */
 @Override
 public Locale getCurrentUserLocale() {
   if (logger.isDebugEnabled()) {
     logger.debug(this.getClass().getName() + ".getCurrentUserLocale()");
   }
   User currentUser = null;
   try {
     currentUser = getCurrentUser();
   } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
   if (currentUser == null) {
     if (logger.isDebugEnabled()) {
       logger.debug("no current user, return null");
     }
     return null;
   }
   String lang = currentUser.getLanguage();
   if (lang == null) {
     if (logger.isDebugEnabled()) {
       logger.debug("language not set for user '" + currentUser.getLogin() + "', return null");
     }
     return null;
   }
   Locale locale = new Locale(lang);
   if (logger.isDebugEnabled()) {
     logger.debug("language for user '" + currentUser.getLogin() + "' is '" + locale + "'");
   }
   return locale;
 }
 @Override
 public String restart() {
   Map<String, Resettable> resettables = BeanUtils.getBeansOfClass(Resettable.class);
   for (String name : resettables.keySet()) {
     if (logger.isDebugEnabled()) {
       logger.debug("trying to reset bean [" + name + "]...");
     }
     Resettable bean = resettables.get(name);
     if (bean == null) {
       throw new ConfigException(
           "bean [" + name + "] is null, " + "application can not be restarted.");
     }
     bean.reset();
     if (logger.isDebugEnabled()) {
       logger.debug("bean [" + name + "] was reset.");
     }
   }
   if (!isPortletMode()) {
     // it is always this case !
     ExceptionUtils.unmarkExceptionCaught();
     ((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false))
         .invalidate();
   }
   return "applicationRestarted";
 }
 /** @return true if portlet mode. */
 private boolean isPortletMode() {
   if (logger.isDebugEnabled()) {
     logger.debug("Mode detected in Application");
   }
   FacesContext fc = FacesContext.getCurrentInstance();
   portletMode = ExternalContextUtils.isPortlet(fc.getExternalContext());
   if (logger.isDebugEnabled()) {
     if (portletMode) {
       logger.debug("Portlet mode detected");
     } else {
       logger.debug("Servlet mode detected");
     }
   }
   return portletMode;
 }
 /**
  * Store the authentication information to the session.
  *
  * @param authInfo
  * @param user
  */
 protected void storeToSession(final AuthInfo authInfo, final User user) {
   if (logger.isDebugEnabled()) {
     logger.debug("storing to session: " + authInfo);
   }
   ContextUtils.setSessionAttribute(AUTH_INFO_ATTRIBUTE, authInfo);
   ContextUtils.setSessionAttribute(USER_ATTRIBUTE, user);
 }
 /**
  * @see org.esupportail.commons.web.component.UIAbstractPaginatorStyle#makeDivPages(
  *     javax.faces.application.Application)
  */
 @SuppressWarnings("unchecked")
 @Override
 protected Div makeDivPages(final Application a) {
   if (logger.isDebugEnabled()) {
     logger.debug("entering makeDivPagination(" + a + ")");
   }
   Div divPages = (Div) a.createComponent(Div.COMPONENT_TYPE);
   divPages.setParent(this);
   divPages.setStyleClass(NAVIGATION_BLOCK);
   // if there are more than one page on display pagination
   if (getPaginator().getFirstPageNumber() != getPaginator().getLastPageNumber()) {
     HtmlTag ul1 = (HtmlTag) a.createComponent(HtmlTag.COMPONENT_TYPE);
     ul1.setValue(HTML.UL_ELEM);
     ul1.setParent(divPages);
     // PREVIOUS BUTTON
     if (getPaginator().getCurrentPage() != getPaginator().getFirstPageNumber()) {
       ul1.getChildren()
           .add(
               makeLiGroup(
                   a,
                   getStringsVar() + "['" + PREVIOUS_BUTTON_I18N_KEY + "']",
                   null,
                   true,
                   PaginatorUtils.GOTO_PREVIOUS,
                   null,
                   null));
     }
     // BODY of Paginator
     divPages = makePages(divPages, getPaginator(), ul1, a);
   }
   return divPages;
 }
 /**
  * @param targetService
  * @return a proxy ticket.
  * @throws CasException
  */
 private String retrieveProxyTicket(final String targetService) throws CasException {
   if (logger.isDebugEnabled()) {
     logger.debug("retrieving a proxy ticket for service [" + targetService + "]...");
     logger.debug("pgtIou=[" + validator.getPgtIou() + "]");
   }
   int tryNumber = 0;
   Exception exception = null;
   while (tryNumber < (1 + retries)) {
     tryNumber++;
     if (logger.isDebugEnabled()) {
       logger.debug("try #" + tryNumber);
     }
     try {
       String url = URLEncoder.encode(targetService, "UTF-8");
       return ProxyTicketReceptor.getProxyTicket(validator.getPgtIou(), url);
     } catch (IOException e) {
       if (logger.isDebugEnabled()) {
         logger.debug(
             "could not retrieve a proxy ticket for service ["
                 + targetService
                 + "] (try #"
                 + tryNumber
                 + ")",
             e);
       }
       if (tryNumber == retries) {
         try {
           Thread.sleep(sleep * THOUSAND);
         } catch (InterruptedException ie) {
           exception = ie;
         }
       } else {
         exception = e;
       }
     }
   }
   CasException ce =
       new CasException(
           "could not get a proxy ticket for service [" + targetService + "]", exception);
   if (logger.isDebugEnabled()) {
     logger.debug(ce);
   }
   throw ce;
 }
 /** @see org.esupportail.pstage.services.authentication.Authenticator#getUser() */
 public User getUser() {
   AuthInfo authInfo = (AuthInfo) ContextUtils.getSessionAttribute(AUTH_INFO_ATTRIBUTE);
   if (authInfo != null) {
     User user = (User) ContextUtils.getSessionAttribute(USER_ATTRIBUTE);
     if (logger.isDebugEnabled()) {
       logger.debug("found auth info in session: " + user);
     }
     return user;
   }
   if (logger.isDebugEnabled()) {
     logger.debug("no auth info found in session");
   }
   authInfo = authenticationService.getAuthInfo();
   if (authInfo == null) {
     return null;
   }
   if (AuthUtils.CAS.equals(authInfo.getType())) {
     User user = getDomainService().getUser(authInfo.getId());
     storeToSession(authInfo, user);
     return user;
   }
   return null;
 }
 /** @see org.esupportail.commons.services.cas.CasService#validate() */
 public void validate() throws CasException {
   String serviceTicket = getServiceTicket();
   validator = new ProxyTicketValidator();
   validator.setCasValidateUrl(casValidateUrl);
   validator.setService(service);
   validator.setServiceTicket(serviceTicket);
   validator.setProxyCallbackUrl(proxyCallbackUrl);
   if (logger.isDebugEnabled()) {
     logger.debug("validating ticket [" + serviceTicket + "]...");
     logger.debug("casValidateUrl=[" + validator.getCasValidateUrl() + "]");
     logger.debug("service=[" + service + "]");
     logger.debug("proxyCallbackUrl=[" + validator.getProxyCallbackUrl() + "]");
   }
   int tryNumber = 0;
   Exception validateException = null;
   while (tryNumber < (1 + retries)) {
     tryNumber++;
     if (logger.isDebugEnabled()) {
       logger.debug("try #" + tryNumber);
     }
     try {
       validator.validate();
       if (logger.isDebugEnabled()) {
         logger.debug("response = [" + validator.getResponse() + "]");
         logger.debug("errorCode = [" + validator.getErrorCode() + "]");
         logger.debug("errorMessage = [" + validator.getErrorMessage() + "]");
       }
       if (validator.isAuthenticationSuccesful()) {
         return;
       }
       // no error, but authentication failed
       throw new CasException(
           "authentication failed for ticket ["
               + serviceTicket
               + "] ("
               + validator.getErrorCode()
               + ": "
               + validator.getErrorMessage()
               + ")");
     } catch (IOException e) {
       if (logger.isDebugEnabled()) {
         logger.debug(
             "could not validate ticket [" + serviceTicket + "] (try #" + tryNumber + ")", e);
       }
       if (tryNumber == retries) {
         try {
           Thread.sleep(sleep * THOUSAND);
         } catch (InterruptedException ie) {
           validateException = ie;
         }
       } else {
         validateException = e;
       }
     } catch (SAXException e) {
       validateException = e;
     } catch (ParserConfigurationException e) {
       validateException = e;
     }
   }
   CasException ce =
       new CasException("could not validate ticket [" + serviceTicket + "]", validateException);
   if (logger.isDebugEnabled()) {
     logger.debug(ce);
   }
   throw ce;
 }