AdminUserDAO.java

  1. /*
  2.  * Copyright (c) 2002-2022, City of Paris
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  *  1. Redistributions of source code must retain the above copyright notice
  10.  *     and the following disclaimer.
  11.  *
  12.  *  2. Redistributions in binary form must reproduce the above copyright notice
  13.  *     and the following disclaimer in the documentation and/or other materials
  14.  *     provided with the distribution.
  15.  *
  16.  *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
  17.  *     contributors may be used to endorse or promote products derived from
  18.  *     this software without specific prior written permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
  24.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30.  * POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * License 1.0
  33.  */
  34. package fr.paris.lutece.portal.business.user;

  35. import fr.paris.lutece.portal.business.rbac.RBACRole;
  36. import fr.paris.lutece.portal.business.right.Right;
  37. import fr.paris.lutece.portal.business.user.authentication.LuteceDefaultAdminUser;
  38. import fr.paris.lutece.util.password.IPassword;
  39. import fr.paris.lutece.util.password.IPasswordFactory;
  40. import fr.paris.lutece.util.sql.DAOUtil;

  41. import java.sql.Statement;
  42. import java.sql.Timestamp;
  43. import java.util.ArrayList;
  44. import java.util.Collection;
  45. import java.util.HashMap;
  46. import java.util.List;
  47. import java.util.Locale;
  48. import java.util.Map;

  49. import javax.inject.Inject;

  50. import org.apache.commons.collections.CollectionUtils;

  51. /**
  52.  * This class porvides Data Access methods for AdminUser objects
  53.  */
  54. public class AdminUserDAO implements IAdminUserDAO
  55. {
  56.     // Constants
  57.     private static final String CONSTANT_AND_STATUS = " AND status = ?";
  58.     private static final String CONSTANT_AND_USER_LEVEL = " AND level_user = ?";
  59.     private static final String CONSTANT_ORDER_BY_LAST_NAME = " ORDER BY last_name ";
  60.     private static final String CONSTANT_PERCENT = "%";
  61.     private static final String SQL_QUERY_INSERT = "INSERT INTO core_admin_user ( access_code, last_name , first_name, email, status, locale, level_user, accessibility_mode, password_max_valid_date, account_max_valid_date )  VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
  62.     private static final String SQL_QUERY_SELECTALL = "SELECT id_user , access_code, last_name , first_name, email, status, locale, level_user, accessibility_mode, reset_password, password_max_valid_date, account_max_valid_date, last_login, workgroup_key FROM core_admin_user ORDER BY last_name ";
  63.     private static final String SQL_QUERY_SELECT_USER_FROM_USER_ID = "SELECT id_user , access_code, last_name , first_name, email, status, password, locale, level_user, reset_password, accessibility_mode, password_max_valid_date, account_max_valid_date, workgroup_key FROM core_admin_user WHERE id_user = ? ";
  64.     private static final String SQL_QUERY_SELECT_USER_FROM_ACCESS_CODE = "SELECT id_user, access_code, last_name, first_name, email, status, locale, level_user, reset_password, accessibility_mode, password_max_valid_date, last_login FROM core_admin_user  WHERE access_code = ? ";
  65.     private static final String SQL_QUERY_SELECT_USER_FROM_EMAIL = "SELECT access_code FROM core_admin_user  WHERE email = ? ";
  66.     private static final String SQL_QUERY_SELECT_RIGHTS_FROM_USER_ID = " SELECT a.id_right , a.name, a.admin_url , a.description , a.plugin_name, a.id_feature_group, a.icon_url, a.level_right, a.documentation_url, a.id_order, a.is_external_feature "
  67.             + " FROM core_admin_right a , core_user_right b " + " WHERE a.id_right = b.id_right " + " AND b.id_user = ? "
  68.             + " ORDER BY a.id_order ASC, a.id_right ASC ";
  69.     private static final String SQL_QUERY_UPDATE = "UPDATE core_admin_user SET access_code = ? , last_name = ? , first_name = ?, email = ?, status = ?, locale = ?, reset_password = ?, accessibility_mode = ?, password_max_valid_date = ?, level_user = ? WHERE id_user = ?  ";
  70.     private static final String SQL_QUERY_DELETE = "DELETE FROM core_admin_user WHERE id_user = ? ";
  71.     private static final String SQL_QUERY_INSERT_USER_RIGHT = "INSERT INTO core_user_right ( id_right, id_user )  VALUES ( ? , ? ) ";
  72.     private static final String SQL_QUERY_DELETE_ALL_USER_RIGHTS = "DELETE FROM core_user_right WHERE id_user = ? ";
  73.     private static final String SQL_QUERY_SELECT_ROLES_FROM_USER_ID = " SELECT a.role_key , a.role_description "
  74.             + " FROM core_admin_role a , core_user_role b WHERE a.role_key = b.role_key " + " AND b.id_user = ?  ORDER BY a.role_key ";
  75.     private static final String SQL_QUERY_INSERT_USER_ROLE = " INSERT INTO core_user_role ( role_key, id_user )  VALUES ( ? , ? ) ";
  76.     private static final String SQL_QUERY_DELETE_ALL_USER_ROLES = " DELETE FROM core_user_role WHERE id_user = ? ";
  77.     private static final String SQL_CHECK_ROLE_ATTRIBUTED = " SELECT id_user FROM core_user_role WHERE role_key = ?";
  78.     private static final String SQL_CHECK_ACCESS_CODE_IN_USE = " SELECT id_user FROM core_admin_user WHERE access_code = ?";
  79.     private static final String SQL_CHECK_EMAIL_IN_USE = " SELECT id_user FROM core_admin_user WHERE email = ?";
  80.     private static final String SQL_QUERY_INSERT_DEFAULT_USER = " INSERT INTO core_admin_user ( access_code, last_name, first_name, email, status, password, locale, level_user, accessibility_mode, reset_password, password_max_valid_date, account_max_valid_date, last_login, workgroup_key )  VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
  81.     private static final String SQL_QUERY_UPDATE_DEFAULT_USER = " UPDATE core_admin_user SET access_code = ?, last_name = ?, first_name = ?, email = ?, status = ?, password = ?, locale = ?, reset_password = ?, accessibility_mode = ?, password_max_valid_date = ?, workgroup_key = ?, level_user = ? WHERE id_user = ?  ";
  82.     private static final String SQL_QUERY_UPDATE_DEFAULT_USER_IGNORE_PASSWORD = " UPDATE core_admin_user SET access_code = ?, last_name = ?, first_name = ?, email = ?, status = ?, locale = ?, reset_password = ?, accessibility_mode = ?, password_max_valid_date = ?, workgroup_key = ?, level_user = ?  WHERE id_user = ?  ";
  83.     private static final String SQL_QUERY_SELECT_USERS_ID_BY_ROLES = " SELECT a.id_user , a.access_code, a.last_name , a.first_name, a.email, a.status, a.locale, a.accessibility_mode, a.password_max_valid_date "
  84.             + " FROM core_admin_user a, core_user_role b WHERE a.id_user = b.id_user AND b.role_key = ? ";
  85.     private static final String SQL_QUERY_SELECT_USER_RIGHTS_OWN = " SELECT DISTINCT b.id_right FROM core_admin_right a , core_user_right b WHERE b.id_user = ? and a.id_right = b.id_right and a.level_right >= ?";
  86.     private static final String SQL_QUERY_SELECT_USER_RIGHTS_DELEGATED = " SELECT DISTINCT b.id_right FROM core_admin_right a , core_user_right b WHERE b.id_user = ? and a.id_right = b.id_right and a.level_right < ?";
  87.     private static final String SQL_QUERY_DELETE_USER_RIGHTS = " DELETE FROM core_user_right WHERE id_user = ? and id_right = ?";
  88.     private static final String SQL_QUERY_SELECT_USERS_BY_LEVEL = " SELECT a.id_user, a.access_code, a.last_name, a.first_name, a.email, a.status, a.locale, a.accessibility_mode "
  89.             + " FROM core_admin_user a WHERE a.level_user = ? ";
  90.     private static final String SQL_QUERY_UPDATE_USERS_ROLE = "UPDATE core_user_role SET role_key = ? WHERE role_key = ?";
  91.     private static final String SQL_QUERY_SELECT_USER_ROLE = " SELECT id_user FROM core_user_role WHERE id_user = ? AND role_key = ? ";
  92.     private static final String SQL_QUERY_DELETE_ROLE_FOR_USER = " DELETE FROM core_user_role WHERE id_user = ? AND role_key = ? ";
  93.     private static final String SQL_QUERY_SELECT_USER_FROM_SEARCH = " SELECT id_user, access_code, last_name, first_name, email, status, locale, level_user, accessibility_mode "
  94.             + " FROM core_admin_user WHERE access_code LIKE ? AND last_name LIKE ? AND email LIKE ? AND first_name LIKE ? ";
  95.     private static final String SQL_QUERY_SELECT_USERS_BY_RIGHT = " SELECT  u.id_user , u.access_code, u.last_name , u.first_name, u.email, u.status, u.locale, u.level_user, u.accessibility_mode "
  96.             + " FROM core_admin_user u INNER JOIN core_user_right r ON u.id_user = r.id_user WHERE r.id_right = ? ";
  97.     private static final String SQL_QUERY_SELECT_USER_RIGHT = " SELECT id_user FROM core_user_right WHERE id_user = ? AND id_right = ? ";
  98.     private static final String SQL_SELECT_USER_PASSWORD_HISTORY = "SELECT password FROM core_user_password_history WHERE id_user = ? ORDER BY date_password_change desc";
  99.     private static final String SQL_COUNT_USER_PASSWORD_HISTORY = "SELECT COUNT(*) FROM core_user_password_history WHERE id_user = ? AND date_password_change > ?";
  100.     private static final String SQL_INSERT_PASSWORD_HISTORY = "INSERT INTO core_user_password_history (id_user, password) VALUES ( ?, ? ) ";
  101.     private static final String SQL_DELETE_PASSWORD_HISTORY = "DELETE FROM core_user_password_history WHERE id_user = ?";
  102.     private static final String SQL_SELECT_ANONYMIZATION_STATUS_USER_FILED = "SELECT field_name, anonymize from core_admin_user_anonymize_field";
  103.     private static final String SQL_UPDATE_ANONYMIZATION_STATUS_USER_FILED = "UPDATE core_admin_user_anonymize_field  SET anonymize = ? WHERE field_name = ? ";
  104.     private static final String SQL_QUERY_SELECT_EXPIRED_USER_ID = "SELECT id_user FROM core_admin_user WHERE status = ?";
  105.     private static final String SQL_QUERY_SELECT_EXPIRED_LIFE_TIME_USER_ID = "SELECT id_user FROM core_admin_user WHERE account_max_valid_date < ? and status < ? ";
  106.     private static final String SQL_QUERY_SELECT_USER_ID_FIRST_ALERT = "SELECT id_user FROM core_admin_user WHERE nb_alerts_sent = 0 and status < ? and account_max_valid_date < ? ";
  107.     private static final String SQL_QUERY_SELECT_USER_ID_OTHER_ALERT = "SELECT id_user FROM core_admin_user "
  108.             + "WHERE nb_alerts_sent > 0 and nb_alerts_sent <= ? and status < ? and (account_max_valid_date + nb_alerts_sent * ?) < ? ";
  109.     private static final String SQL_QUERY_SELECT_USER_ID_PASSWORD_EXPIRED = " SELECT id_user FROM core_admin_user WHERE password_max_valid_date < ? AND reset_password = 0 ";
  110.     private static final String SQL_QUERY_UPDATE_STATUS = " UPDATE core_admin_user SET status = ? WHERE id_user IN ( ";
  111.     private static final String SQL_QUERY_UPDATE_NB_ALERT = " UPDATE core_admin_user SET nb_alerts_sent = nb_alerts_sent + 1 WHERE id_user IN ( ";
  112.     private static final String SQL_QUERY_UPDATE_RESET_PASSWORD_LIST_ID = " UPDATE core_admin_user SET reset_password = 1 WHERE id_user IN ( ";
  113.     private static final String SQL_QUERY_UPDATE_REACTIVATE_ACCOUNT = " UPDATE core_admin_user SET nb_alerts_sent = 0, account_max_valid_date = ? WHERE id_user = ? ";
  114.     private static final String SQL_QUERY_UPDATE_DATE_LAST_LOGIN = " UPDATE core_admin_user SET last_login = ? WHERE id_user = ? ";
  115.     private static final String CONSTANT_CLOSE_PARENTHESIS = " ) ";
  116.     private static final String CONSTANT_COMMA = ", ";

  117.     @Inject
  118.     private IPasswordFactory _passwordFactory;

  119.     /**
  120.      * {@inheritDoc}
  121.      */
  122.     @Override
  123.     public AdminUser load( int nUserId )
  124.     {
  125.         AdminUser user = null;
  126.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_USER_ID ) )
  127.         {
  128.             daoUtil.setInt( 1, nUserId );
  129.             daoUtil.executeQuery( );

  130.             if ( daoUtil.next( ) )
  131.             {
  132.                 user = new AdminUser( );
  133.                 user.setUserId( daoUtil.getInt( 1 ) );
  134.                 user.setAccessCode( daoUtil.getString( 2 ) );
  135.                 user.setLastName( daoUtil.getString( 3 ) );
  136.                 user.setFirstName( daoUtil.getString( 4 ) );
  137.                 user.setEmail( daoUtil.getString( 5 ) );
  138.                 user.setStatus( daoUtil.getInt( 6 ) );
  139.                 user.setLocale( new Locale( daoUtil.getString( 8 ) ) );
  140.                 user.setUserLevel( daoUtil.getInt( 9 ) );
  141.                 user.setPasswordReset( daoUtil.getBoolean( 10 ) );
  142.                 user.setAccessibilityMode( daoUtil.getBoolean( 11 ) );
  143.                 user.setPasswordMaxValidDate( daoUtil.getTimestamp( 12 ) );

  144.                 long accountTime = daoUtil.getLong( 13 );

  145.                 if ( accountTime > 0 )
  146.                 {
  147.                     user.setAccountMaxValidDate( new Timestamp( accountTime ) );
  148.                 }
  149.             }

  150.         }

  151.         return user;
  152.     }

  153.     /**
  154.      * {@inheritDoc}
  155.      */
  156.     @Override
  157.     public AdminUser selectUserByAccessCode( String strUserAccessCode )
  158.     {
  159.         AdminUser user = null;
  160.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_ACCESS_CODE ) )
  161.         {
  162.             daoUtil.setString( 1, strUserAccessCode );
  163.             daoUtil.executeQuery( );

  164.             if ( daoUtil.next( ) )
  165.             {
  166.                 user = new AdminUser( );
  167.                 user.setUserId( daoUtil.getInt( 1 ) );
  168.                 user.setAccessCode( daoUtil.getString( 2 ) );
  169.                 user.setLastName( daoUtil.getString( 3 ) );
  170.                 user.setFirstName( daoUtil.getString( 4 ) );
  171.                 user.setEmail( daoUtil.getString( 5 ) );
  172.                 user.setStatus( daoUtil.getInt( 6 ) );
  173.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  174.                 user.setUserLevel( daoUtil.getInt( 8 ) );
  175.                 user.setPasswordReset( daoUtil.getBoolean( 9 ) );
  176.                 user.setAccessibilityMode( daoUtil.getBoolean( 10 ) );
  177.                 user.setPasswordMaxValidDate( daoUtil.getTimestamp( 11 ) );

  178.                 Timestamp dateLastLogin = daoUtil.getTimestamp( 12 );

  179.                 if ( ( dateLastLogin != null ) && !dateLastLogin.equals( AdminUser.getDefaultDateLastLogin( ) ) )
  180.                 {
  181.                     user.setDateLastLogin( dateLastLogin );
  182.                 }
  183.             }

  184.         }

  185.         return user;
  186.     }
  187.    
  188.     /**
  189.      * {@inheritDoc}
  190.      */
  191.     @Override
  192.     public <T extends AdminUser> T selectUserByAccessCode(String strUserAccessCode, T user) {
  193.    
  194.         if(user != null)
  195.         {
  196.              try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_ACCESS_CODE ) )
  197.              {
  198.                  daoUtil.setString( 1, strUserAccessCode );
  199.                  daoUtil.executeQuery( );
  200.    
  201.                  if ( daoUtil.next( ) )
  202.                  {
  203.                      user.setUserId( daoUtil.getInt( 1 ) );
  204.                      user.setAccessCode( daoUtil.getString( 2 ) );
  205.                      user.setLastName( daoUtil.getString( 3 ) );
  206.                      user.setFirstName( daoUtil.getString( 4 ) );
  207.                      user.setEmail( daoUtil.getString( 5 ) );
  208.                      user.setStatus( daoUtil.getInt( 6 ) );
  209.                      user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  210.                      user.setUserLevel( daoUtil.getInt( 8 ) );
  211.                      user.setPasswordReset( daoUtil.getBoolean( 9 ) );
  212.                      user.setAccessibilityMode( daoUtil.getBoolean( 10 ) );
  213.                      user.setPasswordMaxValidDate( daoUtil.getTimestamp( 11 ) );
  214.    
  215.                      Timestamp dateLastLogin = daoUtil.getTimestamp( 12 );
  216.    
  217.                      if ( ( dateLastLogin != null ) && !dateLastLogin.equals( AdminUser.getDefaultDateLastLogin( ) ) )
  218.                      {
  219.                          user.setDateLastLogin( dateLastLogin );
  220.                      }
  221.                  }
  222.                  else
  223.                  {
  224.                      //there is no user in database with  strUserAccessCode the user return must be null
  225.                       user= null;    
  226.                  }
  227.                
  228.    
  229.              }
  230.         }

  231.          return user;
  232.     }

  233.     /**
  234.      * {@inheritDoc}
  235.      */
  236.     @Override
  237.     public String selectUserByEmail( String strEmail )
  238.     {
  239.         String strAccessCode = null;
  240.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_EMAIL ) )
  241.         {
  242.             daoUtil.setString( 1, strEmail );
  243.             daoUtil.executeQuery( );

  244.             if ( daoUtil.next( ) )
  245.             {
  246.                 strAccessCode = daoUtil.getString( 1 );
  247.             }

  248.         }

  249.         return strAccessCode;
  250.     }

  251.     /**
  252.      * {@inheritDoc}
  253.      */
  254.     @Override
  255.     public Collection<AdminUser> selectUserList( )
  256.     {
  257.         Collection<AdminUser> userList = new ArrayList<>( );
  258.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL ) )
  259.         {
  260.             daoUtil.executeQuery( );

  261.             while ( daoUtil.next( ) )
  262.             {
  263.                 AdminUser user = new AdminUser( );
  264.                 user.setUserId( daoUtil.getInt( 1 ) );
  265.                 user.setAccessCode( daoUtil.getString( 2 ) );
  266.                 user.setLastName( daoUtil.getString( 3 ) );
  267.                 user.setFirstName( daoUtil.getString( 4 ) );
  268.                 user.setEmail( daoUtil.getString( 5 ) );
  269.                 user.setStatus( daoUtil.getInt( 6 ) );
  270.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  271.                 user.setUserLevel( daoUtil.getInt( 8 ) );
  272.                 user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
  273.                 user.setPasswordReset( daoUtil.getBoolean( 10 ) );
  274.                 user.setPasswordMaxValidDate( daoUtil.getTimestamp( 11 ) );

  275.                 long accountTime = daoUtil.getLong( 12 );

  276.                 if ( accountTime > 0 )
  277.                 {
  278.                     user.setAccountMaxValidDate( new Timestamp( accountTime ) );
  279.                 }

  280.                 Timestamp dateLastLogin = daoUtil.getTimestamp( 13 );

  281.                 if ( ( dateLastLogin != null ) && !dateLastLogin.equals( AdminUser.getDefaultDateLastLogin( ) ) )
  282.                 {
  283.                     user.setDateLastLogin( dateLastLogin );
  284.                 }

  285.                 user.setWorkgroupKey( daoUtil.getString( 14 ) );
  286.                 userList.add( user );
  287.             }

  288.         }

  289.         return userList;
  290.     }

  291.     /**
  292.      * {@inheritDoc}
  293.      */
  294.     @Override
  295.     public void insert( AdminUser user )
  296.     {
  297.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, Statement.RETURN_GENERATED_KEYS ) )
  298.         {
  299.             int nIndex = 1;
  300.             daoUtil.setString( nIndex++, user.getAccessCode( ) );
  301.             daoUtil.setString( nIndex++, user.getLastName( ) );
  302.             daoUtil.setString( nIndex++, user.getFirstName( ) );
  303.             daoUtil.setString( nIndex++, user.getEmail( ) );
  304.             daoUtil.setInt( nIndex++, user.getStatus( ) );
  305.             daoUtil.setString( nIndex++, user.getLocale( ).toString( ) );
  306.             daoUtil.setInt( nIndex++, user.getUserLevel( ) );
  307.             daoUtil.setBoolean( nIndex++, user.getAccessibilityMode( ) );
  308.             daoUtil.setTimestamp( nIndex++, user.getPasswordMaxValidDate( ) );

  309.             if ( user.getAccountMaxValidDate( ) == null )
  310.             {
  311.                 daoUtil.setLongNull( nIndex );
  312.             }
  313.             else
  314.             {
  315.                 daoUtil.setLong( nIndex, user.getAccountMaxValidDate( ).getTime( ) );
  316.             }

  317.             daoUtil.executeUpdate( );

  318.             if ( daoUtil.nextGeneratedKey( ) )
  319.             {
  320.                 user.setUserId( daoUtil.getGeneratedKeyInt( 1 ) );
  321.             }
  322.         }
  323.     }

  324.     /**
  325.      * {@inheritDoc}
  326.      */
  327.     @Override
  328.     public void store( AdminUser user )
  329.     {
  330.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE ) )
  331.         {

  332.             daoUtil.setString( 1, user.getAccessCode( ) );
  333.             daoUtil.setString( 2, user.getLastName( ) );
  334.             daoUtil.setString( 3, user.getFirstName( ) );
  335.             daoUtil.setString( 4, user.getEmail( ) );
  336.             daoUtil.setInt( 5, user.getStatus( ) );
  337.             daoUtil.setString( 6, user.getLocale( ).toString( ) );
  338.             daoUtil.setBoolean( 7, user.isPasswordReset( ) );
  339.             daoUtil.setBoolean( 8, user.getAccessibilityMode( ) );
  340.             daoUtil.setTimestamp( 9, user.getPasswordMaxValidDate( ) );
  341.             daoUtil.setInt( 10, user.getUserLevel( ) );

  342.             daoUtil.setInt( 11, user.getUserId( ) );

  343.             daoUtil.executeUpdate( );
  344.         }
  345.     }

  346.     /**
  347.      * {@inheritDoc}
  348.      */
  349.     @Override
  350.     public void delete( int nUserId )
  351.     {
  352.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE ) )
  353.         {
  354.             daoUtil.setInt( 1, nUserId );
  355.             daoUtil.executeUpdate( );
  356.         }
  357.     }

  358.     /**
  359.      * {@inheritDoc}
  360.      */
  361.     @Override
  362.     public Map<String, Right> selectRightsListForUser( int nUserId )
  363.     {
  364.         Map<String, Right> rightsMap = new HashMap<>( );

  365.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_RIGHTS_FROM_USER_ID ) )
  366.         {
  367.             daoUtil.setInt( 1, nUserId );
  368.             daoUtil.executeQuery( );

  369.             while ( daoUtil.next( ) )
  370.             {
  371.                 Right right = new Right( );
  372.                 right.setId( daoUtil.getString( 1 ) );
  373.                 right.setNameKey( daoUtil.getString( 2 ) );
  374.                 right.setUrl( daoUtil.getString( 3 ) );
  375.                 right.setDescriptionKey( daoUtil.getString( 4 ) );
  376.                 right.setPluginName( daoUtil.getString( 5 ) );
  377.                 right.setFeatureGroup( daoUtil.getString( 6 ) );
  378.                 right.setIconUrl( daoUtil.getString( 7 ) );
  379.                 right.setLevel( daoUtil.getInt( 8 ) );
  380.                 right.setDocumentationUrl( daoUtil.getString( 9 ) );
  381.                 right.setOrder( daoUtil.getInt( 10 ) );
  382.                 right.setExternalFeature( daoUtil.getBoolean( 11 ) );
  383.                 rightsMap.put( right.getId( ), right );
  384.             }

  385.         }

  386.         return rightsMap;
  387.     }

  388.     /**
  389.      * {@inheritDoc}
  390.      */
  391.     @Override
  392.     public void insertRightsListForUser( int nUserId, String strRightId )
  393.     {
  394.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_USER_RIGHT ) )
  395.         {
  396.             daoUtil.setString( 1, strRightId );
  397.             daoUtil.setInt( 2, nUserId );
  398.             daoUtil.executeUpdate( );
  399.         }
  400.     }

  401.     /**
  402.      * {@inheritDoc}
  403.      */
  404.     @Override
  405.     public void deleteAllRightsForUser( int nUserId )
  406.     {
  407.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ALL_USER_RIGHTS ) )
  408.         {
  409.             daoUtil.setInt( 1, nUserId );
  410.             daoUtil.executeUpdate( );
  411.         }
  412.     }

  413.     /**
  414.      * {@inheritDoc}
  415.      */
  416.     @Override
  417.     public Map<String, RBACRole> selectRolesListForUser( int nUserId )
  418.     {
  419.         Map<String, RBACRole> rolesMap = new HashMap<>( );

  420.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ROLES_FROM_USER_ID ) )
  421.         {
  422.             daoUtil.setInt( 1, nUserId );
  423.             daoUtil.executeQuery( );

  424.             while ( daoUtil.next( ) )
  425.             {
  426.                 RBACRole role = new RBACRole( );
  427.                 role.setKey( daoUtil.getString( 1 ) );
  428.                 role.setDescription( daoUtil.getString( 2 ) );

  429.                 rolesMap.put( role.getKey( ), role );
  430.             }

  431.         }

  432.         return rolesMap;
  433.     }

  434.     /**
  435.      * {@inheritDoc}
  436.      */
  437.     @Override
  438.     public void insertRolesListForUser( int nUserId, String strRoleKey )
  439.     {
  440.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_USER_ROLE ) )
  441.         {
  442.             daoUtil.setString( 1, strRoleKey );
  443.             daoUtil.setInt( 2, nUserId );
  444.             daoUtil.executeUpdate( );
  445.         }
  446.     }

  447.     /**
  448.      * {@inheritDoc}
  449.      */
  450.     @Override
  451.     public void deleteAllRolesForUser( int nUserId )
  452.     {
  453.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ALL_USER_ROLES ) )
  454.         {
  455.             daoUtil.setInt( 1, nUserId );
  456.             daoUtil.executeUpdate( );
  457.         }
  458.     }

  459.     /**
  460.      * {@inheritDoc}
  461.      */
  462.     @Override
  463.     public boolean checkRoleAttributed( String strRoleKey )
  464.     {
  465.         boolean bInUse = false;

  466.         try ( DAOUtil daoUtil = new DAOUtil( SQL_CHECK_ROLE_ATTRIBUTED ) )
  467.         {
  468.             daoUtil.setString( 1, strRoleKey );
  469.             daoUtil.executeQuery( );

  470.             if ( daoUtil.next( ) )
  471.             {
  472.                 bInUse = true;
  473.             }

  474.         }

  475.         return bInUse;
  476.     }

  477.     /**
  478.      * {@inheritDoc}
  479.      */
  480.     @Override
  481.     public int checkAccessCodeAlreadyInUse( String strAccessCode )
  482.     {
  483.         int nIdUser = -1;
  484.         try ( DAOUtil daoUtil = new DAOUtil( SQL_CHECK_ACCESS_CODE_IN_USE ) )
  485.         {
  486.             daoUtil.setString( 1, strAccessCode );
  487.             daoUtil.executeQuery( );

  488.             if ( daoUtil.next( ) )
  489.             {
  490.                 nIdUser = daoUtil.getInt( 1 );
  491.             }

  492.         }

  493.         return nIdUser;
  494.     }

  495.     /**
  496.      * {@inheritDoc}
  497.      */
  498.     @Override
  499.     public int checkEmailAlreadyInUse( String strEmail )
  500.     {
  501.         int nIdUser = -1;
  502.         try ( DAOUtil daoUtil = new DAOUtil( SQL_CHECK_EMAIL_IN_USE ) )
  503.         {
  504.             daoUtil.setString( 1, strEmail );
  505.             daoUtil.executeQuery( );

  506.             if ( daoUtil.next( ) )
  507.             {
  508.                 nIdUser = daoUtil.getInt( 1 );
  509.             }

  510.         }

  511.         return nIdUser;
  512.     }

  513.     // ////////////////////////////////////////////////////////////////
  514.     // for no-module mode
  515.     /**
  516.      * {@inheritDoc}
  517.      */
  518.     @Override
  519.     public void insert( LuteceDefaultAdminUser user )
  520.     {
  521.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_DEFAULT_USER, Statement.RETURN_GENERATED_KEYS ) )
  522.         {
  523.             int nIndex = 1;
  524.             daoUtil.setString( nIndex++, user.getAccessCode( ) );
  525.             daoUtil.setString( nIndex++, user.getLastName( ) );
  526.             daoUtil.setString( nIndex++, user.getFirstName( ) );
  527.             daoUtil.setString( nIndex++, user.getEmail( ) );
  528.             daoUtil.setInt( nIndex++, user.getStatus( ) );
  529.             daoUtil.setString( nIndex++, user.getPassword( ).getStorableRepresentation( ) );
  530.             daoUtil.setString( nIndex++, user.getLocale( ).toString( ) );
  531.             daoUtil.setInt( nIndex++, user.getUserLevel( ) );
  532.             daoUtil.setBoolean( nIndex++, user.getAccessibilityMode( ) );
  533.             daoUtil.setBoolean( nIndex++, user.isPasswordReset( ) );
  534.             daoUtil.setTimestamp( nIndex++, user.getPasswordMaxValidDate( ) );

  535.             if ( user.getAccountMaxValidDate( ) == null )
  536.             {
  537.                 daoUtil.setLongNull( nIndex++ );
  538.             }
  539.             else
  540.             {
  541.                 daoUtil.setLong( nIndex++, user.getAccountMaxValidDate( ).getTime( ) );
  542.             }

  543.             daoUtil.setTimestamp( nIndex++, user.getDateLastLogin( ) );
  544.             daoUtil.setString( nIndex, user.getWorkgroupKey( ) );
  545.             daoUtil.executeUpdate( );

  546.             if ( daoUtil.nextGeneratedKey( ) )
  547.             {
  548.                 user.setUserId( daoUtil.getGeneratedKeyInt( 1 ) );
  549.             }
  550.         }
  551.     }

  552.     /**
  553.      * {@inheritDoc}
  554.      */
  555.     @Override
  556.     public void store( LuteceDefaultAdminUser user, PasswordUpdateMode passwordMode )
  557.     {
  558.         String query = SQL_QUERY_UPDATE_DEFAULT_USER_IGNORE_PASSWORD;
  559.         if ( PasswordUpdateMode.UPDATE.equals( passwordMode ) )
  560.         {
  561.             query = SQL_QUERY_UPDATE_DEFAULT_USER;
  562.         }
  563.         try ( DAOUtil daoUtil = new DAOUtil( query ) )
  564.         {

  565.             int nArgIndex = 1;
  566.             daoUtil.setString( nArgIndex++, user.getAccessCode( ) );
  567.             daoUtil.setString( nArgIndex++, user.getLastName( ) );
  568.             daoUtil.setString( nArgIndex++, user.getFirstName( ) );
  569.             daoUtil.setString( nArgIndex++, user.getEmail( ) );
  570.             daoUtil.setInt( nArgIndex++, user.getStatus( ) );
  571.             if ( PasswordUpdateMode.UPDATE.equals( passwordMode ) )
  572.             {
  573.                 daoUtil.setString( nArgIndex++, user.getPassword( ).getStorableRepresentation( ) );
  574.             }
  575.             daoUtil.setString( nArgIndex++, user.getLocale( ).toString( ) );
  576.             daoUtil.setBoolean( nArgIndex++, user.isPasswordReset( ) );
  577.             daoUtil.setBoolean( nArgIndex++, user.getAccessibilityMode( ) );
  578.             daoUtil.setTimestamp( nArgIndex++, user.getPasswordMaxValidDate( ) );
  579.             daoUtil.setString( nArgIndex++, user.getWorkgroupKey( ) );
  580.             daoUtil.setInt( nArgIndex++, user.getUserLevel( ) );

  581.             daoUtil.setInt( nArgIndex++, user.getUserId( ) );

  582.             daoUtil.executeUpdate( );
  583.         }
  584.     }

  585.     /**
  586.      * {@inheritDoc}
  587.      */
  588.     @Override
  589.     public LuteceDefaultAdminUser loadDefaultAdminUser( int nUserId )
  590.     {
  591.         LuteceDefaultAdminUser user = new LuteceDefaultAdminUser( );
  592.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_USER_ID ) )
  593.         {
  594.             daoUtil.setInt( 1, nUserId );
  595.             daoUtil.executeQuery( );

  596.             if ( daoUtil.next( ) )
  597.             {
  598.                 user.setUserId( daoUtil.getInt( 1 ) );
  599.                 user.setAccessCode( daoUtil.getString( 2 ) );
  600.                 user.setLastName( daoUtil.getString( 3 ) );
  601.                 user.setFirstName( daoUtil.getString( 4 ) );
  602.                 user.setEmail( daoUtil.getString( 5 ) );
  603.                 user.setStatus( daoUtil.getInt( 6 ) );
  604.                 user.setPassword( _passwordFactory.getPassword( daoUtil.getString( 7 ) ) );

  605.                 Locale locale = new Locale( daoUtil.getString( 8 ) );
  606.                 user.setLocale( locale );
  607.                 user.setUserLevel( daoUtil.getInt( 9 ) );
  608.                 user.setPasswordReset( daoUtil.getBoolean( 10 ) );
  609.                 user.setAccessibilityMode( daoUtil.getBoolean( 11 ) );
  610.                 user.setWorkgroupKey( daoUtil.getString( 14 ) );
  611.             }
  612.         }

  613.         return user;
  614.     }

  615.     /**
  616.      * {@inheritDoc}
  617.      */
  618.     @Override
  619.     public Collection<AdminUser> selectUsersByRole( String strRoleKey )
  620.     {
  621.         Collection<AdminUser> userList = new ArrayList<>( );
  622.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_ID_BY_ROLES ) )
  623.         {
  624.             daoUtil.setString( 1, strRoleKey );
  625.             daoUtil.executeQuery( );

  626.             while ( daoUtil.next( ) )
  627.             {
  628.                 AdminUser user = new AdminUser( );
  629.                 user.setUserId( daoUtil.getInt( 1 ) );
  630.                 user.setAccessCode( daoUtil.getString( 2 ) );
  631.                 user.setLastName( daoUtil.getString( 3 ) );
  632.                 user.setFirstName( daoUtil.getString( 4 ) );
  633.                 user.setEmail( daoUtil.getString( 5 ) );
  634.                 user.setStatus( daoUtil.getInt( 6 ) );
  635.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  636.                 user.setAccessibilityMode( daoUtil.getBoolean( 8 ) );
  637.                 user.setPasswordMaxValidDate( daoUtil.getTimestamp( 9 ) );
  638.                 userList.add( user );
  639.             }

  640.         }

  641.         return userList;
  642.     }

  643.     /**
  644.      * {@inheritDoc}
  645.      */
  646.     @Override
  647.     public Collection<AdminUser> selectUsersByLevel( int nIdLevel )
  648.     {
  649.         Collection<AdminUser> userList = new ArrayList<>( );
  650.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_BY_LEVEL ) )
  651.         {
  652.             daoUtil.setInt( 1, nIdLevel );
  653.             daoUtil.executeQuery( );

  654.             while ( daoUtil.next( ) )
  655.             {
  656.                 AdminUser user = new AdminUser( );
  657.                 user.setUserId( daoUtil.getInt( 1 ) );
  658.                 user.setAccessCode( daoUtil.getString( 2 ) );
  659.                 user.setLastName( daoUtil.getString( 3 ) );
  660.                 user.setFirstName( daoUtil.getString( 4 ) );
  661.                 user.setEmail( daoUtil.getString( 5 ) );
  662.                 user.setStatus( daoUtil.getInt( 6 ) );
  663.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  664.                 user.setAccessibilityMode( daoUtil.getBoolean( 8 ) );
  665.                 userList.add( user );
  666.             }

  667.         }

  668.         return userList;
  669.     }

  670.     /**
  671.      * Select rights by user, by user level and by type (Delegated or own)
  672.      *
  673.      * @param nUserId
  674.      *            the id of the user
  675.      * @param nUserLevel
  676.      *            the id of the user level
  677.      * @param bDelegated
  678.      *            true if select concern delegated rights
  679.      * @return collection of id rights
  680.      */
  681.     private Collection<String> selectIdRights( int nUserId, int nUserLevel, boolean bDelegated )
  682.     {
  683.         String strSqlQuery = bDelegated ? SQL_QUERY_SELECT_USER_RIGHTS_DELEGATED : SQL_QUERY_SELECT_USER_RIGHTS_OWN;
  684.         Collection<String> idRightList = new ArrayList<>( );
  685.         try ( DAOUtil daoUtil = new DAOUtil( strSqlQuery ) )
  686.         {
  687.             daoUtil.setInt( 1, nUserId );
  688.             daoUtil.setInt( 2, nUserLevel );
  689.             daoUtil.executeQuery( );

  690.             while ( daoUtil.next( ) )
  691.             {
  692.                 idRightList.add( daoUtil.getString( 1 ) );
  693.             }

  694.         }

  695.         return idRightList;
  696.     }

  697.     /**
  698.      * Deletes rights by user and by id right
  699.      *
  700.      * @param nUserId
  701.      *            the user id
  702.      * @param idRightList
  703.      *            the list of rights to delete
  704.      */
  705.     private void deleteRightsForUser( int nUserId, Collection<String> idRightList )
  706.     {
  707.         for ( String strIdRight : idRightList )
  708.         {
  709.             try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_USER_RIGHTS ) )
  710.             {
  711.                 daoUtil.setInt( 1, nUserId );
  712.                 daoUtil.setString( 2, strIdRight );
  713.                 daoUtil.executeUpdate( );
  714.             }
  715.         }
  716.     }

  717.     /**
  718.      * {@inheritDoc}
  719.      */
  720.     @Override
  721.     public void deleteAllOwnRightsForUser( int nUserId, int nUserLevel )
  722.     {
  723.         Collection<String> idRightList = selectIdRights( nUserId, nUserLevel, false );

  724.         deleteRightsForUser( nUserId, idRightList );
  725.     }

  726.     /**
  727.      * {@inheritDoc}
  728.      */
  729.     @Override
  730.     public void deleteAllDelegatedRightsForUser( int nUserId, int nUserLevel )
  731.     {
  732.         Collection<String> idRightList = selectIdRights( nUserId, nUserLevel, true );

  733.         deleteRightsForUser( nUserId, idRightList );
  734.     }

  735.     /**
  736.      * {@inheritDoc}
  737.      */
  738.     @Override
  739.     public void storeUsersRole( String strOldRoleKey, RBACRole role )
  740.     {
  741.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_USERS_ROLE ) )
  742.         {
  743.             daoUtil.setString( 1, role.getKey( ) );
  744.             daoUtil.setString( 2, strOldRoleKey );

  745.             daoUtil.executeUpdate( );
  746.         }
  747.     }

  748.     /**
  749.      * {@inheritDoc}
  750.      */
  751.     @Override
  752.     public boolean hasRole( int nUserId, String strRoleKey )
  753.     {
  754.         boolean bHasRole = false;
  755.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ROLE ) )
  756.         {
  757.             daoUtil.setInt( 1, nUserId );
  758.             daoUtil.setString( 2, strRoleKey );
  759.             daoUtil.executeQuery( );

  760.             if ( daoUtil.next( ) )
  761.             {
  762.                 bHasRole = true;
  763.             }

  764.         }

  765.         return bHasRole;
  766.     }

  767.     /**
  768.      * {@inheritDoc}
  769.      */
  770.     @Override
  771.     public void deleteRoleForUser( int nUserId, String strRoleKey )
  772.     {
  773.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ROLE_FOR_USER ) )
  774.         {
  775.             daoUtil.setInt( 1, nUserId );
  776.             daoUtil.setString( 2, strRoleKey );
  777.             daoUtil.executeUpdate( );
  778.         }
  779.     }

  780.     /**
  781.      * {@inheritDoc}
  782.      */
  783.     @Override
  784.     public Collection<AdminUser> selectUsersByFilter( AdminUserFilter auFilter )
  785.     {
  786.         Collection<AdminUser> userList = new ArrayList<>( );

  787.         String query = SQL_QUERY_SELECT_USER_FROM_SEARCH;

  788.         if ( auFilter.getStatus( ) != -1 )
  789.         {
  790.             query += CONSTANT_AND_STATUS;
  791.         }

  792.         if ( auFilter.getUserLevel( ) != -1 )
  793.         {
  794.             query += CONSTANT_AND_USER_LEVEL;
  795.         }

  796.         query += CONSTANT_ORDER_BY_LAST_NAME;

  797.         try ( DAOUtil daoUtil = new DAOUtil( query ) )
  798.         {
  799.             int nIndex = 0;
  800.             daoUtil.setString( ++nIndex, CONSTANT_PERCENT + auFilter.getAccessCode( ) + CONSTANT_PERCENT );
  801.             daoUtil.setString( ++nIndex, CONSTANT_PERCENT + auFilter.getLastName( ) + CONSTANT_PERCENT );
  802.             daoUtil.setString( ++nIndex, CONSTANT_PERCENT + auFilter.getEmail( ) + CONSTANT_PERCENT );
  803.             daoUtil.setString( ++nIndex, CONSTANT_PERCENT + auFilter.getFirstName( ) + CONSTANT_PERCENT );

  804.             if ( auFilter.getStatus( ) != -1 )
  805.             {
  806.                 daoUtil.setInt( ++nIndex, auFilter.getStatus( ) );
  807.             }

  808.             if ( auFilter.getUserLevel( ) != -1 )
  809.             {
  810.                 daoUtil.setInt( ++nIndex, auFilter.getUserLevel( ) );
  811.             }

  812.             daoUtil.executeQuery( );

  813.             while ( daoUtil.next( ) )
  814.             {
  815.                 AdminUser user = new AdminUser( );
  816.                 user.setUserId( daoUtil.getInt( 1 ) );
  817.                 user.setAccessCode( daoUtil.getString( 2 ) );
  818.                 user.setLastName( daoUtil.getString( 3 ) );
  819.                 user.setFirstName( daoUtil.getString( 4 ) );
  820.                 user.setEmail( daoUtil.getString( 5 ) );
  821.                 user.setStatus( daoUtil.getInt( 6 ) );
  822.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  823.                 user.setUserLevel( daoUtil.getInt( 8 ) );
  824.                 user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
  825.                 userList.add( user );
  826.             }

  827.         }

  828.         return userList;
  829.     }

  830.     /**
  831.      * {@inheritDoc}
  832.      */
  833.     @Override
  834.     public Collection<AdminUser> selectUsersByRight( String strIdRight )
  835.     {
  836.         Collection<AdminUser> userList = new ArrayList<>( );
  837.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_BY_RIGHT ) )
  838.         {
  839.             daoUtil.setString( 1, strIdRight );
  840.             daoUtil.executeQuery( );

  841.             while ( daoUtil.next( ) )
  842.             {
  843.                 AdminUser user = new AdminUser( );
  844.                 user.setUserId( daoUtil.getInt( 1 ) );
  845.                 user.setAccessCode( daoUtil.getString( 2 ) );
  846.                 user.setLastName( daoUtil.getString( 3 ) );
  847.                 user.setFirstName( daoUtil.getString( 4 ) );
  848.                 user.setEmail( daoUtil.getString( 5 ) );
  849.                 user.setStatus( daoUtil.getInt( 6 ) );
  850.                 user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
  851.                 user.setUserLevel( daoUtil.getInt( 8 ) );
  852.                 user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
  853.                 userList.add( user );
  854.             }

  855.         }

  856.         return userList;
  857.     }

  858.     /**
  859.      * {@inheritDoc}
  860.      */
  861.     @Override
  862.     public boolean hasRight( int nUserId, String strIdRight )
  863.     {
  864.         boolean bHasRight = false;
  865.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_RIGHT ) )
  866.         {
  867.             daoUtil.setInt( 1, nUserId );
  868.             daoUtil.setString( 2, strIdRight );
  869.             daoUtil.executeQuery( );

  870.             if ( daoUtil.next( ) )
  871.             {
  872.                 bHasRight = true;
  873.             }

  874.         }

  875.         return bHasRight;
  876.     }

  877.     /**
  878.      * {@inheritDoc}
  879.      */
  880.     @Override
  881.     public void deleteRightForUser( int nUserId, String strIdRight )
  882.     {
  883.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_USER_RIGHTS ) )
  884.         {
  885.             daoUtil.setInt( 1, nUserId );
  886.             daoUtil.setString( 2, strIdRight );
  887.             daoUtil.executeUpdate( );
  888.         }
  889.     }

  890.     /**
  891.      * {@inheritDoc}
  892.      */
  893.     @Override
  894.     public List<IPassword> selectUserPasswordHistory( int nUserID )
  895.     {
  896.         List<IPassword> listPasswordHistory = new ArrayList<>( );

  897.         try ( DAOUtil daoUtil = new DAOUtil( SQL_SELECT_USER_PASSWORD_HISTORY ) )
  898.         {
  899.             daoUtil.setInt( 1, nUserID );
  900.             daoUtil.executeQuery( );

  901.             while ( daoUtil.next( ) )
  902.             {
  903.                 listPasswordHistory.add( _passwordFactory.getPassword( daoUtil.getString( 1 ) ) );
  904.             }

  905.         }

  906.         return listPasswordHistory;
  907.     }

  908.     /**
  909.      * {@inheritDoc}
  910.      */
  911.     @Override
  912.     public int countUserPasswordHistoryFromDate( Timestamp minDate, int nUserId )
  913.     {
  914.         int nNbRes = 0;

  915.         try ( DAOUtil daoUtil = new DAOUtil( SQL_COUNT_USER_PASSWORD_HISTORY ) )
  916.         {
  917.             daoUtil.setInt( 1, nUserId );
  918.             daoUtil.setTimestamp( 2, minDate );
  919.             daoUtil.executeQuery( );

  920.             if ( daoUtil.next( ) )
  921.             {
  922.                 nNbRes = daoUtil.getInt( 1 );
  923.             }

  924.         }

  925.         return nNbRes;
  926.     }

  927.     /**
  928.      * {@inheritDoc}
  929.      */
  930.     @Override
  931.     public void insertNewPasswordInHistory( IPassword password, int nUserId )
  932.     {
  933.         try ( DAOUtil daoUtil = new DAOUtil( SQL_INSERT_PASSWORD_HISTORY ) )
  934.         {
  935.             daoUtil.setInt( 1, nUserId );
  936.             daoUtil.setString( 2, password.getStorableRepresentation( ) );

  937.             daoUtil.executeUpdate( );
  938.         }
  939.     }

  940.     /**
  941.      * {@inheritDoc}
  942.      */
  943.     @Override
  944.     public void removeAllPasswordHistoryForUser( int nUserId )
  945.     {
  946.         try ( DAOUtil daoUtil = new DAOUtil( SQL_DELETE_PASSWORD_HISTORY ) )
  947.         {
  948.             daoUtil.setInt( 1, nUserId );
  949.             daoUtil.executeUpdate( );
  950.         }
  951.     }

  952.     /**
  953.      * {@inheritDoc}
  954.      */
  955.     @Override
  956.     public Map<String, Boolean> selectAnonymizationStatusUserStaticField( )
  957.     {
  958.         Map<String, Boolean> resultMap = new HashMap<>( );
  959.         try ( DAOUtil daoUtil = new DAOUtil( SQL_SELECT_ANONYMIZATION_STATUS_USER_FILED ) )
  960.         {
  961.             daoUtil.executeQuery( );

  962.             while ( daoUtil.next( ) )
  963.             {
  964.                 resultMap.put( daoUtil.getString( 1 ), daoUtil.getBoolean( 2 ) );
  965.             }

  966.         }

  967.         return resultMap;
  968.     }

  969.     /**
  970.      * {@inheritDoc}
  971.      */
  972.     @Override
  973.     public void updateAnonymizationStatusUserStaticField( String strFieldName, boolean bAnonymizeFiled )
  974.     {
  975.         try ( DAOUtil daoUtil = new DAOUtil( SQL_UPDATE_ANONYMIZATION_STATUS_USER_FILED ) )
  976.         {
  977.             daoUtil.setBoolean( 1, bAnonymizeFiled );
  978.             daoUtil.setString( 2, strFieldName );
  979.             daoUtil.executeUpdate( );
  980.         }
  981.     }

  982.     /**
  983.      * {@inheritDoc}
  984.      */
  985.     @Override
  986.     public List<Integer> findAllExpiredUserId( )
  987.     {
  988.         List<Integer> listIdExpiredUser = new ArrayList<>( );
  989.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_EXPIRED_USER_ID ) )
  990.         {
  991.             daoUtil.setInt( 1, AdminUser.EXPIRED_CODE );

  992.             daoUtil.executeQuery( );

  993.             while ( daoUtil.next( ) )
  994.             {
  995.                 listIdExpiredUser.add( daoUtil.getInt( 1 ) );
  996.             }

  997.         }

  998.         return listIdExpiredUser;
  999.     }

  1000.     /**
  1001.      * {@inheritDoc}
  1002.      */
  1003.     @Override
  1004.     public List<Integer> getIdUsersWithExpiredLifeTimeList( Timestamp currentTimestamp )
  1005.     {
  1006.         List<Integer> listIdExpiredUser = new ArrayList<>( );
  1007.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_EXPIRED_LIFE_TIME_USER_ID ) )
  1008.         {
  1009.             daoUtil.setLong( 1, currentTimestamp.getTime( ) );
  1010.             daoUtil.setInt( 2, AdminUser.EXPIRED_CODE );

  1011.             daoUtil.executeQuery( );

  1012.             while ( daoUtil.next( ) )
  1013.             {
  1014.                 listIdExpiredUser.add( daoUtil.getInt( 1 ) );
  1015.             }

  1016.         }

  1017.         return listIdExpiredUser;
  1018.     }

  1019.     /**
  1020.      * {@inheritDoc}
  1021.      */
  1022.     @Override
  1023.     public List<Integer> getIdUsersToSendFirstAlert( Timestamp alertMaxDate )
  1024.     {
  1025.         List<Integer> listIdUserFirstAlert = new ArrayList<>( );
  1026.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_FIRST_ALERT ) )
  1027.         {
  1028.             daoUtil.setInt( 1, AdminUser.EXPIRED_CODE );
  1029.             daoUtil.setLong( 2, alertMaxDate.getTime( ) );

  1030.             daoUtil.executeQuery( );

  1031.             while ( daoUtil.next( ) )
  1032.             {
  1033.                 listIdUserFirstAlert.add( daoUtil.getInt( 1 ) );
  1034.             }

  1035.         }

  1036.         return listIdUserFirstAlert;
  1037.     }

  1038.     /**
  1039.      * {@inheritDoc}
  1040.      */
  1041.     @Override
  1042.     public List<Integer> getIdUsersToSendOtherAlert( Timestamp alertMaxDate, Timestamp timeBetweenAlerts, int maxNumberAlerts )
  1043.     {
  1044.         List<Integer> listIdUserFirstAlert = new ArrayList<>( );
  1045.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_OTHER_ALERT ) )
  1046.         {
  1047.             daoUtil.setInt( 1, maxNumberAlerts );
  1048.             daoUtil.setInt( 2, AdminUser.EXPIRED_CODE );
  1049.             daoUtil.setLong( 3, timeBetweenAlerts.getTime( ) );
  1050.             daoUtil.setLong( 4, alertMaxDate.getTime( ) );

  1051.             daoUtil.executeQuery( );

  1052.             while ( daoUtil.next( ) )
  1053.             {
  1054.                 listIdUserFirstAlert.add( daoUtil.getInt( 1 ) );
  1055.             }

  1056.         }

  1057.         return listIdUserFirstAlert;
  1058.     }

  1059.     /**
  1060.      * {@inheritDoc}
  1061.      */
  1062.     @Override
  1063.     public List<Integer> getIdUsersWithExpiredPasswordsList( Timestamp currentTimestamp )
  1064.     {
  1065.         List<Integer> idUserPasswordExpiredlist = new ArrayList<>( );
  1066.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_PASSWORD_EXPIRED ) )
  1067.         {
  1068.             daoUtil.setTimestamp( 1, currentTimestamp );

  1069.             daoUtil.executeQuery( );

  1070.             while ( daoUtil.next( ) )
  1071.             {
  1072.                 idUserPasswordExpiredlist.add( daoUtil.getInt( 1 ) );
  1073.             }

  1074.         }

  1075.         return idUserPasswordExpiredlist;
  1076.     }

  1077.     /**
  1078.      * {@inheritDoc}
  1079.      */
  1080.     @Override
  1081.     public void updateUserStatus( List<Integer> listIdUser, int nNewStatus )
  1082.     {
  1083.         if ( CollectionUtils.isNotEmpty( listIdUser ) )
  1084.         {
  1085.             StringBuilder sbSQL = new StringBuilder( );
  1086.             sbSQL.append( SQL_QUERY_UPDATE_STATUS );

  1087.             for ( int i = 0; i < listIdUser.size( ); i++ )
  1088.             {
  1089.                 if ( i > 0 )
  1090.                 {
  1091.                     sbSQL.append( CONSTANT_COMMA );
  1092.                 }

  1093.                 sbSQL.append( listIdUser.get( i ) );
  1094.             }

  1095.             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );

  1096.             try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ) ) )
  1097.             {
  1098.                 daoUtil.setInt( 1, nNewStatus );
  1099.                 daoUtil.executeUpdate( );
  1100.             }
  1101.         }
  1102.     }

  1103.     /**
  1104.      * {@inheritDoc}
  1105.      */
  1106.     @Override
  1107.     public void updateNbAlert( List<Integer> listIdUser )
  1108.     {
  1109.         if ( CollectionUtils.isNotEmpty( listIdUser ) )
  1110.         {
  1111.             StringBuilder sbSQL = new StringBuilder( );
  1112.             sbSQL.append( SQL_QUERY_UPDATE_NB_ALERT );

  1113.             for ( int i = 0; i < listIdUser.size( ); i++ )
  1114.             {
  1115.                 if ( i > 0 )
  1116.                 {
  1117.                     sbSQL.append( CONSTANT_COMMA );
  1118.                 }

  1119.                 sbSQL.append( listIdUser.get( i ) );
  1120.             }

  1121.             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );

  1122.             try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ) ) )
  1123.             {
  1124.                 daoUtil.executeUpdate( );
  1125.             }
  1126.         }
  1127.     }

  1128.     /**
  1129.      * {@inheritDoc}
  1130.      */
  1131.     @Override
  1132.     public void updateChangePassword( List<Integer> listIdUser )
  1133.     {
  1134.         if ( CollectionUtils.isNotEmpty( listIdUser ) )
  1135.         {
  1136.             StringBuilder sbSQL = new StringBuilder( );
  1137.             sbSQL.append( SQL_QUERY_UPDATE_RESET_PASSWORD_LIST_ID );

  1138.             for ( int i = 0; i < listIdUser.size( ); i++ )
  1139.             {
  1140.                 if ( i > 0 )
  1141.                 {
  1142.                     sbSQL.append( CONSTANT_COMMA );
  1143.                 }

  1144.                 sbSQL.append( listIdUser.get( i ) );
  1145.             }

  1146.             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );

  1147.             try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ) ) )
  1148.             {
  1149.                 daoUtil.executeUpdate( );
  1150.             }
  1151.         }
  1152.     }

  1153.     /**
  1154.      * {@inheritDoc}
  1155.      */
  1156.     @Override
  1157.     public void updateUserExpirationDate( int nIdUser, Timestamp newExpirationDate )
  1158.     {
  1159.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_REACTIVATE_ACCOUNT ) )
  1160.         {

  1161.             if ( newExpirationDate == null )
  1162.             {
  1163.                 daoUtil.setLongNull( 1 );
  1164.             }
  1165.             else
  1166.             {
  1167.                 daoUtil.setLong( 1, newExpirationDate.getTime( ) );
  1168.             }

  1169.             daoUtil.setInt( 2, nIdUser );

  1170.             daoUtil.executeUpdate( );
  1171.         }
  1172.     }

  1173.     /**
  1174.      * {@inheritDoc}
  1175.      */
  1176.     @Override
  1177.     public void updateDateLastLogin( int nIdUser, Timestamp dateLastLogin )
  1178.     {
  1179.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_DATE_LAST_LOGIN ) )
  1180.         {
  1181.             daoUtil.setTimestamp( 1, dateLastLogin );
  1182.             daoUtil.setInt( 2, nIdUser );
  1183.             daoUtil.executeUpdate( );
  1184.         }
  1185.     }

  1186.    
  1187. }