View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de 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  
36  import fr.paris.lutece.portal.business.rbac.AdminRole;
37  import fr.paris.lutece.portal.business.right.Right;
38  import fr.paris.lutece.portal.business.user.authentication.LuteceDefaultAdminUser;
39  import fr.paris.lutece.util.password.IPassword;
40  import fr.paris.lutece.util.password.IPasswordFactory;
41  import fr.paris.lutece.util.sql.DAOUtil;
42  
43  import java.sql.Timestamp;
44  import java.util.ArrayList;
45  import java.util.Collection;
46  import java.util.HashMap;
47  import java.util.List;
48  import java.util.Locale;
49  import java.util.Map;
50  
51  import javax.inject.Inject;
52  
53  
54  /**
55   * This class porvides Data Access methods for AdminUser objects
56   */
57  public class AdminUserDAO implements IAdminUserDAO
58  {
59      // Constants
60      private static final String CONSTANT_AND_STATUS = " AND status = ?";
61      private static final String CONSTANT_AND_USER_LEVEL = " AND level_user = ?";
62      private static final String CONSTANT_ORDER_BY_LAST_NAME = " ORDER BY last_name ";
63      private static final String CONSTANT_PERCENT = "%";
64      private static final String SQL_QUERY_NEWPK = "SELECT max( id_user ) FROM core_admin_user ";
65      private static final String SQL_QUERY_INSERT = "INSERT INTO core_admin_user ( id_user , access_code, last_name , first_name, email, status, locale, level_user, accessibility_mode, password_max_valid_date, account_max_valid_date )  VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
66      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 ";
67      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 = ? ";
68      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 = ? ";
69      private static final String SQL_QUERY_SELECT_USER_FROM_EMAIL = "SELECT access_code FROM core_admin_user  WHERE email = ? ";
70      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 " +
71          " FROM core_admin_right a , core_user_right b " + " WHERE a.id_right = b.id_right " + " AND b.id_user = ? " +
72          " ORDER BY a.id_order ASC, a.id_right ASC ";
73      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 = ? WHERE id_user = ?  ";
74      private static final String SQL_QUERY_DELETE = "DELETE FROM core_admin_user WHERE id_user = ? ";
75      private static final String SQL_QUERY_INSERT_USER_RIGHT = "INSERT INTO core_user_right ( id_right, id_user )  VALUES ( ? , ? ) ";
76      private static final String SQL_QUERY_DELETE_ALL_USER_RIGHTS = "DELETE FROM core_user_right WHERE id_user = ? ";
77      private static final String SQL_QUERY_SELECT_ROLES_FROM_USER_ID = " SELECT a.role_key , a.role_description " +
78          " FROM core_admin_role a , core_user_role b WHERE a.role_key = b.role_key " +
79          " AND b.id_user = ?  ORDER BY a.role_key ";
80      private static final String SQL_QUERY_INSERT_USER_ROLE = " INSERT INTO core_user_role ( role_key, id_user )  VALUES ( ? , ? ) ";
81      private static final String SQL_QUERY_DELETE_ALL_USER_ROLES = " DELETE FROM core_user_role WHERE id_user = ? ";
82      private static final String SQL_CHECK_ROLE_ATTRIBUTED = " SELECT id_user FROM core_user_role WHERE role_key = ?";
83      private static final String SQL_CHECK_ACCESS_CODE_IN_USE = " SELECT id_user FROM core_admin_user WHERE access_code = ?";
84      private static final String SQL_CHECK_EMAIL_IN_USE = " SELECT id_user FROM core_admin_user WHERE email = ?";
85      private static final String SQL_QUERY_INSERT_DEFAULT_USER = " INSERT INTO core_admin_user ( id_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 ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
86      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 = ? WHERE id_user = ?  ";
87      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 " +
88          " FROM core_admin_user a, core_user_role b WHERE a.id_user = b.id_user AND b.role_key = ? ";
89      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 >= ?";
90      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 < ?";
91      private static final String SQL_QUERY_DELETE_USER_RIGHTS = " DELETE FROM core_user_right WHERE id_user = ? and id_right = ?";
92      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 " +
93          " FROM core_admin_user a WHERE a.level_user = ? ";
94      private static final String SQL_QUERY_UPDATE_USERS_ROLE = "UPDATE core_user_role SET role_key = ? WHERE role_key = ?";
95      private static final String SQL_QUERY_SELECT_USER_ROLE = " SELECT id_user FROM core_user_role WHERE id_user = ? AND role_key = ? ";
96      private static final String SQL_QUERY_DELETE_ROLE_FOR_USER = " DELETE FROM core_user_role WHERE id_user = ? AND role_key = ? ";
97      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 " +
98          " FROM core_admin_user WHERE access_code LIKE ? AND last_name LIKE ? AND email LIKE ? ";
99      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 " +
100         " FROM core_admin_user u INNER JOIN core_user_right r ON u.id_user = r.id_user WHERE r.id_right = ? ";
101     private static final String SQL_QUERY_SELECT_USER_RIGHT = " SELECT id_user FROM core_user_right WHERE id_user = ? AND id_right = ? ";
102     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";
103     private static final String SQL_COUNT_USER_PASSWORD_HISTORY = "SELECT COUNT(*) FROM core_user_password_history WHERE id_user = ? AND date_password_change > ?";
104     private static final String SQL_INSERT_PASSWORD_HISTORY = "INSERT INTO core_user_password_history (id_user, password) VALUES ( ?, ? ) ";
105     private static final String SQL_DELETE_PASSWORD_HISTORY = "DELETE FROM core_user_password_history WHERE id_user = ?";
106     private static final String SQL_SELECT_ANONYMIZATION_STATUS_USER_FILED = "SELECT field_name, anonymize from core_admin_user_anonymize_field";
107     private static final String SQL_UPDATE_ANONYMIZATION_STATUS_USER_FILED = "UPDATE core_admin_user_anonymize_field  SET anonymize = ? WHERE field_name = ? ";
108     private static final String SQL_QUERY_SELECT_EXPIRED_USER_ID = "SELECT id_user FROM core_admin_user WHERE status = ?";
109     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 < ? ";
110     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 < ? ";
111     private static final String SQL_QUERY_SELECT_USER_ID_OTHER_ALERT = "SELECT id_user FROM core_admin_user " +
112         "WHERE nb_alerts_sent > 0 and nb_alerts_sent <= ? and status < ? and (account_max_valid_date + nb_alerts_sent * ?) < ? ";
113     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 ";
114     private static final String SQL_QUERY_UPDATE_STATUS = " UPDATE core_admin_user SET status = ? WHERE id_user IN ( ";
115     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 ( ";
116     private static final String SQL_QUERY_UPDATE_RESET_PASSWORD_LIST_ID = " UPDATE core_admin_user SET reset_password = 1 WHERE id_user IN ( ";
117     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 = ? ";
118     private static final String SQL_QUERY_UPDATE_DATE_LAST_LOGIN = " UPDATE core_admin_user SET last_login = ? WHERE id_user = ? ";
119     private static final String CONSTANT_CLOSE_PARENTHESIS = " ) ";
120     private static final String CONSTANT_COMMA = ", ";
121 
122     @Inject
123     private IPasswordFactory _passwordFactory;
124 
125     /**
126      * {@inheritDoc}
127      */
128     @Override
129     public AdminUser load( int nUserId )
130     {
131         AdminUser user = null;
132         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_USER_ID );
133         daoUtil.setInt( 1, nUserId );
134         daoUtil.executeQuery(  );
135 
136         if ( daoUtil.next(  ) )
137         {
138             user = new AdminUser(  );
139             user.setUserId( daoUtil.getInt( 1 ) );
140             user.setAccessCode( daoUtil.getString( 2 ) );
141             user.setLastName( daoUtil.getString( 3 ) );
142             user.setFirstName( daoUtil.getString( 4 ) );
143             user.setEmail( daoUtil.getString( 5 ) );
144             user.setStatus( daoUtil.getInt( 6 ) );
145             user.setLocale( new Locale( daoUtil.getString( 8 ) ) );
146             user.setUserLevel( daoUtil.getInt( 9 ) );
147             user.setPasswordReset( daoUtil.getBoolean( 10 ) );
148             user.setAccessibilityMode( daoUtil.getBoolean( 11 ) );
149             user.setPasswordMaxValidDate( daoUtil.getTimestamp( 12 ) );
150 
151             long accountTime = daoUtil.getLong( 13 );
152 
153             if ( accountTime > 0 )
154             {
155                 user.setAccountMaxValidDate( new Timestamp( accountTime ) );
156             }
157         }
158 
159         daoUtil.free(  );
160 
161         return user;
162     }
163 
164     /**
165      * {@inheritDoc}
166      */
167     @Override
168     public AdminUser selectUserByAccessCode( String strUserAccessCode )
169     {
170         AdminUser user = null;
171         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_ACCESS_CODE );
172         daoUtil.setString( 1, strUserAccessCode );
173         daoUtil.executeQuery(  );
174 
175         if ( daoUtil.next(  ) )
176         {
177             user = new AdminUser(  );
178             user.setUserId( daoUtil.getInt( 1 ) );
179             user.setAccessCode( daoUtil.getString( 2 ) );
180             user.setLastName( daoUtil.getString( 3 ) );
181             user.setFirstName( daoUtil.getString( 4 ) );
182             user.setEmail( daoUtil.getString( 5 ) );
183             user.setStatus( daoUtil.getInt( 6 ) );
184             user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
185             user.setUserLevel( daoUtil.getInt( 8 ) );
186             user.setPasswordReset( daoUtil.getBoolean( 9 ) );
187             user.setAccessibilityMode( daoUtil.getBoolean( 10 ) );
188             user.setPasswordMaxValidDate( daoUtil.getTimestamp( 11 ) );
189 
190             Timestamp dateLastLogin = daoUtil.getTimestamp( 12 );
191 
192             if ( ( dateLastLogin != null ) && !dateLastLogin.equals( AdminUser.DEFAULT_DATE_LAST_LOGIN ) )
193             {
194                 user.setDateLastLogin( dateLastLogin );
195             }
196         }
197 
198         daoUtil.free(  );
199 
200         return user;
201     }
202 
203     /**
204      * {@inheritDoc}
205      */
206     @Override
207     public String selectUserByEmail( String strEmail )
208     {
209         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_EMAIL );
210         daoUtil.setString( 1, strEmail );
211         daoUtil.executeQuery(  );
212 
213         String strAccessCode = null;
214 
215         if ( daoUtil.next(  ) )
216         {
217             strAccessCode = daoUtil.getString( 1 );
218         }
219 
220         daoUtil.free(  );
221 
222         return strAccessCode;
223     }
224 
225     /**
226      * {@inheritDoc}
227      */
228     @Override
229     public Collection<AdminUser> selectUserList(  )
230     {
231         Collection<AdminUser> userList = new ArrayList<AdminUser>(  );
232         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL );
233         daoUtil.executeQuery(  );
234 
235         while ( daoUtil.next(  ) )
236         {
237             AdminUser user = new AdminUser(  );
238             user.setUserId( daoUtil.getInt( 1 ) );
239             user.setAccessCode( daoUtil.getString( 2 ) );
240             user.setLastName( daoUtil.getString( 3 ) );
241             user.setFirstName( daoUtil.getString( 4 ) );
242             user.setEmail( daoUtil.getString( 5 ) );
243             user.setStatus( daoUtil.getInt( 6 ) );
244             user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
245             user.setUserLevel( daoUtil.getInt( 8 ) );
246             user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
247             user.setPasswordReset( daoUtil.getBoolean( 10 ) );
248             user.setPasswordMaxValidDate( daoUtil.getTimestamp( 11 ) );
249 
250             long accountTime = daoUtil.getLong( 12 );
251 
252             if ( accountTime > 0 )
253             {
254                 user.setAccountMaxValidDate( new Timestamp( accountTime ) );
255             }
256 
257             Timestamp dateLastLogin = daoUtil.getTimestamp( 13 );
258 
259             if ( ( dateLastLogin != null ) && !dateLastLogin.equals( AdminUser.DEFAULT_DATE_LAST_LOGIN ) )
260             {
261                 user.setDateLastLogin( dateLastLogin );
262             }
263 
264             user.setWorkgroupKey( daoUtil.getString( 14 ) );
265             userList.add( user );
266         }
267 
268         daoUtil.free(  );
269 
270         return userList;
271     }
272 
273     /**
274      * {@inheritDoc}
275      */
276     @Override
277     public int newPrimaryKey(  )
278     {
279         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEWPK );
280         daoUtil.executeQuery(  );
281 
282         int nKey;
283 
284         if ( !daoUtil.next(  ) )
285         {
286             // if the table is empty
287             nKey = 1;
288         }
289 
290         nKey = daoUtil.getInt( 1 ) + 1;
291 
292         daoUtil.free(  );
293 
294         return nKey;
295     }
296 
297     /**
298      * {@inheritDoc}
299      */
300     @Override
301     public synchronized void insert( AdminUser user )
302     {
303         user.setUserId( newPrimaryKey(  ) );
304 
305         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT );
306 
307         daoUtil.setInt( 1, user.getUserId(  ) );
308         daoUtil.setString( 2, user.getAccessCode(  ) );
309         daoUtil.setString( 3, user.getLastName(  ) );
310         daoUtil.setString( 4, user.getFirstName(  ) );
311         daoUtil.setString( 5, user.getEmail(  ) );
312         daoUtil.setInt( 6, user.getStatus(  ) );
313         daoUtil.setString( 7, user.getLocale(  ).toString(  ) );
314         daoUtil.setInt( 8, user.getUserLevel(  ) );
315         daoUtil.setBoolean( 9, user.getAccessibilityMode(  ) );
316         daoUtil.setTimestamp( 10, user.getPasswordMaxValidDate(  ) );
317 
318         if ( user.getAccountMaxValidDate(  ) == null )
319         {
320             daoUtil.setLongNull( 11 );
321         }
322         else
323         {
324             daoUtil.setLong( 11, user.getAccountMaxValidDate(  ).getTime(  ) );
325         }
326 
327         daoUtil.executeUpdate(  );
328         daoUtil.free(  );
329     }
330 
331     /**
332      * {@inheritDoc}
333      */
334     @Override
335     public void store( AdminUser user )
336     {
337         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE );
338 
339         daoUtil.setString( 1, user.getAccessCode(  ) );
340         daoUtil.setString( 2, user.getLastName(  ) );
341         daoUtil.setString( 3, user.getFirstName(  ) );
342         daoUtil.setString( 4, user.getEmail(  ) );
343         daoUtil.setInt( 5, user.getStatus(  ) );
344         daoUtil.setString( 6, user.getLocale(  ).toString(  ) );
345         daoUtil.setBoolean( 7, user.isPasswordReset(  ) );
346         daoUtil.setBoolean( 8, user.getAccessibilityMode(  ) );
347         daoUtil.setTimestamp( 9, user.getPasswordMaxValidDate(  ) );
348 
349         daoUtil.setInt( 10, user.getUserId(  ) );
350 
351         daoUtil.executeUpdate(  );
352         daoUtil.free(  );
353     }
354 
355     /**
356      * {@inheritDoc}
357      */
358     @Override
359     public void delete( int nUserId )
360     {
361         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE );
362         daoUtil.setInt( 1, nUserId );
363         daoUtil.executeUpdate(  );
364         daoUtil.free(  );
365     }
366 
367     /**
368      * {@inheritDoc}
369      */
370     @Override
371     public Map<String, Right> selectRightsListForUser( int nUserId )
372     {
373         Map<String, Right> rightsMap = new HashMap<String, Right>(  );
374 
375         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_RIGHTS_FROM_USER_ID );
376         daoUtil.setInt( 1, nUserId );
377         daoUtil.executeQuery(  );
378 
379         while ( daoUtil.next(  ) )
380         {
381             Right right = new Right(  );
382             right.setId( daoUtil.getString( 1 ) );
383             right.setNameKey( daoUtil.getString( 2 ) );
384             right.setUrl( daoUtil.getString( 3 ) );
385             right.setDescriptionKey( daoUtil.getString( 4 ) );
386             right.setPluginName( daoUtil.getString( 5 ) );
387             right.setFeatureGroup( daoUtil.getString( 6 ) );
388             right.setIconUrl( daoUtil.getString( 7 ) );
389             right.setLevel( daoUtil.getInt( 8 ) );
390             right.setDocumentationUrl( daoUtil.getString( 9 ) );
391             right.setOrder( daoUtil.getInt( 10 ) );
392             rightsMap.put( right.getId(  ), right );
393         }
394 
395         daoUtil.free(  );
396 
397         return rightsMap;
398     }
399 
400     /**
401      * {@inheritDoc}
402      */
403     @Override
404     public void insertRightsListForUser( int nUserId, String strRightId )
405     {
406         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_USER_RIGHT );
407         daoUtil.setString( 1, strRightId );
408         daoUtil.setInt( 2, nUserId );
409         daoUtil.executeUpdate(  );
410         daoUtil.free(  );
411     }
412 
413     /**
414      * {@inheritDoc}
415      */
416     @Override
417     public void deleteAllRightsForUser( int nUserId )
418     {
419         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ALL_USER_RIGHTS );
420         daoUtil.setInt( 1, nUserId );
421         daoUtil.executeUpdate(  );
422         daoUtil.free(  );
423     }
424 
425     /**
426      * {@inheritDoc}
427      */
428     @Override
429     public Map<String, AdminRole> selectRolesListForUser( int nUserId )
430     {
431         Map<String, AdminRole> rolesMap = new HashMap<String, AdminRole>(  );
432 
433         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ROLES_FROM_USER_ID );
434         daoUtil.setInt( 1, nUserId );
435         daoUtil.executeQuery(  );
436 
437         while ( daoUtil.next(  ) )
438         {
439             AdminRole role = new AdminRole(  );
440             role.setKey( daoUtil.getString( 1 ) );
441             role.setDescription( daoUtil.getString( 2 ) );
442 
443             rolesMap.put( role.getKey(  ), role );
444         }
445 
446         daoUtil.free(  );
447 
448         return rolesMap;
449     }
450 
451     /**
452      * {@inheritDoc}
453      */
454     @Override
455     public void insertRolesListForUser( int nUserId, String strRoleKey )
456     {
457         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_USER_ROLE );
458         daoUtil.setString( 1, strRoleKey );
459         daoUtil.setInt( 2, nUserId );
460         daoUtil.executeUpdate(  );
461         daoUtil.free(  );
462     }
463 
464     /**
465      * {@inheritDoc}
466      */
467     @Override
468     public void deleteAllRolesForUser( int nUserId )
469     {
470         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ALL_USER_ROLES );
471         daoUtil.setInt( 1, nUserId );
472         daoUtil.executeUpdate(  );
473         daoUtil.free(  );
474     }
475 
476     /**
477      * {@inheritDoc}
478      */
479     @Override
480     public boolean checkRoleAttributed( String strRoleKey )
481     {
482         boolean bInUse = false;
483 
484         DAOUtil daoUtil = new DAOUtil( SQL_CHECK_ROLE_ATTRIBUTED );
485         daoUtil.setString( 1, strRoleKey );
486         daoUtil.executeQuery(  );
487 
488         if ( daoUtil.next(  ) )
489         {
490             bInUse = true;
491         }
492 
493         daoUtil.free(  );
494 
495         return bInUse;
496     }
497 
498     /**
499      * {@inheritDoc}
500      */
501     @Override
502     public int checkAccessCodeAlreadyInUse( String strAccessCode )
503     {
504         int nIdUser = -1;
505         DAOUtil daoUtil = new DAOUtil( SQL_CHECK_ACCESS_CODE_IN_USE );
506         daoUtil.setString( 1, strAccessCode );
507         daoUtil.executeQuery(  );
508 
509         if ( daoUtil.next(  ) )
510         {
511             nIdUser = daoUtil.getInt( 1 );
512         }
513 
514         daoUtil.free(  );
515 
516         return nIdUser;
517     }
518 
519     /**
520      * {@inheritDoc}
521      */
522     @Override
523     public int checkEmailAlreadyInUse( String strEmail )
524     {
525         int nIdUser = -1;
526         DAOUtil daoUtil = new DAOUtil( SQL_CHECK_EMAIL_IN_USE );
527         daoUtil.setString( 1, strEmail );
528         daoUtil.executeQuery(  );
529 
530         if ( daoUtil.next(  ) )
531         {
532             nIdUser = daoUtil.getInt( 1 );
533         }
534 
535         daoUtil.free(  );
536 
537         return nIdUser;
538     }
539 
540     // ////////////////////////////////////////////////////////////////
541     // for no-module mode
542     /**
543      * {@inheritDoc}
544      */
545     @Override
546     public void insert( LuteceDefaultAdminUser user )
547     {
548         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_DEFAULT_USER );
549 
550         user.setUserId( newPrimaryKey(  ) );
551         daoUtil.setInt( 1, user.getUserId(  ) );
552         daoUtil.setString( 2, user.getAccessCode(  ) );
553         daoUtil.setString( 3, user.getLastName(  ) );
554         daoUtil.setString( 4, user.getFirstName(  ) );
555         daoUtil.setString( 5, user.getEmail(  ) );
556         daoUtil.setInt( 6, user.getStatus(  ) );
557         daoUtil.setString( 7, user.getPassword(  ).getStorableRepresentation(  ) );
558         daoUtil.setString( 8, user.getLocale(  ).toString(  ) );
559         daoUtil.setInt( 9, user.getUserLevel(  ) );
560         daoUtil.setBoolean( 10, user.getAccessibilityMode(  ) );
561         daoUtil.setBoolean( 11, user.isPasswordReset(  ) );
562         daoUtil.setTimestamp( 12, user.getPasswordMaxValidDate(  ) );
563 
564         if ( user.getAccountMaxValidDate(  ) == null )
565         {
566             daoUtil.setLongNull( 13 );
567         }
568         else
569         {
570             daoUtil.setLong( 13, user.getAccountMaxValidDate(  ).getTime(  ) );
571         }
572 
573         daoUtil.setTimestamp( 14, user.getDateLastLogin(  ) );
574         daoUtil.setString( 15, user.getWorkgroupKey(  ) );
575         daoUtil.executeUpdate(  );
576         daoUtil.free(  );
577     }
578 
579     /**
580      * {@inheritDoc}
581      */
582     @Override
583     public void store( LuteceDefaultAdminUser user )
584     {
585         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_DEFAULT_USER );
586 
587         daoUtil.setString( 1, user.getAccessCode(  ) );
588         daoUtil.setString( 2, user.getLastName(  ) );
589         daoUtil.setString( 3, user.getFirstName(  ) );
590         daoUtil.setString( 4, user.getEmail(  ) );
591         daoUtil.setInt( 5, user.getStatus(  ) );
592         daoUtil.setString( 6, user.getPassword(  ).getStorableRepresentation(  ) );
593         daoUtil.setString( 7, user.getLocale(  ).toString(  ) );
594         daoUtil.setBoolean( 8, user.isPasswordReset(  ) );
595         daoUtil.setBoolean( 9, user.getAccessibilityMode(  ) );
596         daoUtil.setTimestamp( 10, user.getPasswordMaxValidDate(  ) );
597         daoUtil.setString( 11, user.getWorkgroupKey(  ) );
598 
599         daoUtil.setInt( 12, user.getUserId(  ) );
600 
601         daoUtil.executeUpdate(  );
602         daoUtil.free(  );
603     }
604 
605     /**
606      * {@inheritDoc}
607      */
608     @Override
609     public LuteceDefaultAdminUser loadDefaultAdminUser( int nUserId )
610     {
611         LuteceDefaultAdminUser user = new LuteceDefaultAdminUser(  );
612         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_FROM_USER_ID );
613         daoUtil.setInt( 1, nUserId );
614         daoUtil.executeQuery(  );
615 
616         try
617         {
618             if ( daoUtil.next(  ) )
619             {
620                 user.setUserId( daoUtil.getInt( 1 ) );
621                 user.setAccessCode( daoUtil.getString( 2 ) );
622                 user.setLastName( daoUtil.getString( 3 ) );
623                 user.setFirstName( daoUtil.getString( 4 ) );
624                 user.setEmail( daoUtil.getString( 5 ) );
625                 user.setStatus( daoUtil.getInt( 6 ) );
626                 user.setPassword( _passwordFactory.getPassword( daoUtil.getString( 7 ) ) );
627 
628                 Locale locale = new Locale( daoUtil.getString( 8 ) );
629                 user.setLocale( locale );
630                 user.setUserLevel( daoUtil.getInt( 9 ) );
631                 user.setPasswordReset( daoUtil.getBoolean( 10 ) );
632                 user.setAccessibilityMode( daoUtil.getBoolean( 11 ) );
633                 user.setWorkgroupKey( daoUtil.getString( 14 ) );
634             }
635         } finally
636         {
637             daoUtil.free(  );
638         }
639 
640         return user;
641     }
642 
643     /**
644      * {@inheritDoc}
645      */
646     @Override
647     public Collection<AdminUser> selectUsersByRole( String strRoleKey )
648     {
649         Collection<AdminUser> userList = new ArrayList<AdminUser>(  );
650         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_ID_BY_ROLES );
651         daoUtil.setString( 1, strRoleKey );
652         daoUtil.executeQuery(  );
653 
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             user.setPasswordMaxValidDate( daoUtil.getTimestamp( 9 ) );
666             userList.add( user );
667         }
668 
669         daoUtil.free(  );
670 
671         return userList;
672     }
673 
674     /**
675      * {@inheritDoc}
676      */
677     @Override
678     public Collection<AdminUser> selectUsersByLevel( int nIdLevel )
679     {
680         Collection<AdminUser> userList = new ArrayList<AdminUser>(  );
681         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_BY_LEVEL );
682         daoUtil.setInt( 1, nIdLevel );
683         daoUtil.executeQuery(  );
684 
685         while ( daoUtil.next(  ) )
686         {
687             AdminUser user = new AdminUser(  );
688             user.setUserId( daoUtil.getInt( 1 ) );
689             user.setAccessCode( daoUtil.getString( 2 ) );
690             user.setLastName( daoUtil.getString( 3 ) );
691             user.setFirstName( daoUtil.getString( 4 ) );
692             user.setEmail( daoUtil.getString( 5 ) );
693             user.setStatus( daoUtil.getInt( 6 ) );
694             user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
695             user.setAccessibilityMode( daoUtil.getBoolean( 8 ) );
696             userList.add( user );
697         }
698 
699         daoUtil.free(  );
700 
701         return userList;
702     }
703 
704     /**
705      * Select rights by user, by user level and by type (Delegated or own)
706      *
707      * @param nUserId the id of the user
708      * @param nUserLevel the id of the user level
709      * @param bDelegated true if select concern delegated rights
710      * @return collection of id rights
711      */
712     private Collection<String> selectIdRights( int nUserId, int nUserLevel, boolean bDelegated )
713     {
714         String strSqlQuery = bDelegated ? SQL_QUERY_SELECT_USER_RIGHTS_DELEGATED : SQL_QUERY_SELECT_USER_RIGHTS_OWN;
715         Collection<String> idRightList = new ArrayList<String>(  );
716         DAOUtil daoUtil = new DAOUtil( strSqlQuery );
717         daoUtil.setInt( 1, nUserId );
718         daoUtil.setInt( 2, nUserLevel );
719         daoUtil.executeQuery(  );
720 
721         while ( daoUtil.next(  ) )
722         {
723             idRightList.add( daoUtil.getString( 1 ) );
724         }
725 
726         daoUtil.free(  );
727 
728         return idRightList;
729     }
730 
731     /**
732      * Deletes rights by user and by id right
733      *
734      * @param nUserId the user id
735      * @param idRightList the list of rights to delete
736      */
737     private void deleteRightsForUser( int nUserId, Collection<String> idRightList )
738     {
739         for ( String strIdRight : idRightList )
740         {
741             DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_USER_RIGHTS );
742             daoUtil.setInt( 1, nUserId );
743             daoUtil.setString( 2, strIdRight );
744             daoUtil.executeUpdate(  );
745             daoUtil.free(  );
746         }
747     }
748 
749     /**
750      * {@inheritDoc}
751      */
752     @Override
753     public void deleteAllOwnRightsForUser( int nUserId, int nUserLevel )
754     {
755         Collection<String> idRightList = selectIdRights( nUserId, nUserLevel, false );
756 
757         deleteRightsForUser( nUserId, idRightList );
758     }
759 
760     /**
761      * {@inheritDoc}
762      */
763     @Override
764     public void deleteAllDelegatedRightsForUser( int nUserId, int nUserLevel )
765     {
766         Collection<String> idRightList = selectIdRights( nUserId, nUserLevel, true );
767 
768         deleteRightsForUser( nUserId, idRightList );
769     }
770 
771     /**
772      * {@inheritDoc}
773      */
774     @Override
775     public void storeUsersRole( String strOldRoleKey, AdminRole role )
776     {
777         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_USERS_ROLE );
778         daoUtil.setString( 1, role.getKey(  ) );
779         daoUtil.setString( 2, strOldRoleKey );
780 
781         daoUtil.executeUpdate(  );
782         daoUtil.free(  );
783     }
784 
785     /**
786      * {@inheritDoc}
787      */
788     @Override
789     public boolean hasRole( int nUserId, String strRoleKey )
790     {
791         boolean bHasRole = false;
792         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ROLE );
793         daoUtil.setInt( 1, nUserId );
794         daoUtil.setString( 2, strRoleKey );
795         daoUtil.executeQuery(  );
796 
797         if ( daoUtil.next(  ) )
798         {
799             bHasRole = true;
800         }
801 
802         daoUtil.free(  );
803 
804         return bHasRole;
805     }
806 
807     /**
808      * {@inheritDoc}
809      */
810     @Override
811     public void deleteRoleForUser( int nUserId, String strRoleKey )
812     {
813         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ROLE_FOR_USER );
814         daoUtil.setInt( 1, nUserId );
815         daoUtil.setString( 2, strRoleKey );
816         daoUtil.executeUpdate(  );
817         daoUtil.free(  );
818     }
819 
820     /**
821      * {@inheritDoc}
822      */
823     @Override
824     public Collection<AdminUser> selectUsersByFilter( AdminUserFilter auFilter )
825     {
826         Collection<AdminUser> userList = new ArrayList<AdminUser>(  );
827         DAOUtil daoUtil;
828 
829         String query = SQL_QUERY_SELECT_USER_FROM_SEARCH;
830 
831         if ( auFilter.getStatus(  ) != -1 )
832         {
833             query += CONSTANT_AND_STATUS;
834         }
835 
836         if ( auFilter.getUserLevel(  ) != -1 )
837         {
838             query += CONSTANT_AND_USER_LEVEL;
839         }
840 
841         query += CONSTANT_ORDER_BY_LAST_NAME;
842 
843         daoUtil = new DAOUtil( query );
844         daoUtil.setString( 1, CONSTANT_PERCENT + auFilter.getAccessCode(  ) + CONSTANT_PERCENT );
845         daoUtil.setString( 2, CONSTANT_PERCENT + auFilter.getLastName(  ) + CONSTANT_PERCENT );
846         daoUtil.setString( 3, CONSTANT_PERCENT + auFilter.getEmail(  ) + CONSTANT_PERCENT );
847 
848         if ( auFilter.getStatus(  ) != -1 )
849         {
850             daoUtil.setInt( 4, auFilter.getStatus(  ) );
851 
852             if ( auFilter.getUserLevel(  ) != -1 )
853             {
854                 daoUtil.setInt( 5, auFilter.getUserLevel(  ) );
855             }
856         }
857         else
858         {
859             if ( auFilter.getUserLevel(  ) != -1 )
860             {
861                 daoUtil.setInt( 4, auFilter.getUserLevel(  ) );
862             }
863         }
864 
865         daoUtil.executeQuery(  );
866 
867         while ( daoUtil.next(  ) )
868         {
869             AdminUser user = new AdminUser(  );
870             user.setUserId( daoUtil.getInt( 1 ) );
871             user.setAccessCode( daoUtil.getString( 2 ) );
872             user.setLastName( daoUtil.getString( 3 ) );
873             user.setFirstName( daoUtil.getString( 4 ) );
874             user.setEmail( daoUtil.getString( 5 ) );
875             user.setStatus( daoUtil.getInt( 6 ) );
876             user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
877             user.setUserLevel( daoUtil.getInt( 8 ) );
878             user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
879             userList.add( user );
880         }
881 
882         daoUtil.free(  );
883 
884         return userList;
885     }
886 
887     /**
888      * {@inheritDoc}
889      */
890     @Override
891     public Collection<AdminUser> selectUsersByRight( String strIdRight )
892     {
893         Collection<AdminUser> userList = new ArrayList<AdminUser>(  );
894         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USERS_BY_RIGHT );
895         daoUtil.setString( 1, strIdRight );
896         daoUtil.executeQuery(  );
897 
898         while ( daoUtil.next(  ) )
899         {
900             AdminUser user = new AdminUser(  );
901             user.setUserId( daoUtil.getInt( 1 ) );
902             user.setAccessCode( daoUtil.getString( 2 ) );
903             user.setLastName( daoUtil.getString( 3 ) );
904             user.setFirstName( daoUtil.getString( 4 ) );
905             user.setEmail( daoUtil.getString( 5 ) );
906             user.setStatus( daoUtil.getInt( 6 ) );
907             user.setLocale( new Locale( daoUtil.getString( 7 ) ) );
908             user.setUserLevel( daoUtil.getInt( 8 ) );
909             user.setAccessibilityMode( daoUtil.getBoolean( 9 ) );
910             userList.add( user );
911         }
912 
913         daoUtil.free(  );
914 
915         return userList;
916     }
917 
918     /**
919      * {@inheritDoc}
920      */
921     @Override
922     public boolean hasRight( int nUserId, String strIdRight )
923     {
924         boolean bHasRight = false;
925         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_RIGHT );
926         daoUtil.setInt( 1, nUserId );
927         daoUtil.setString( 2, strIdRight );
928         daoUtil.executeQuery(  );
929 
930         if ( daoUtil.next(  ) )
931         {
932             bHasRight = true;
933         }
934 
935         daoUtil.free(  );
936 
937         return bHasRight;
938     }
939 
940     /**
941      * {@inheritDoc}
942      */
943     @Override
944     public void deleteRightForUser( int nUserId, String strIdRight )
945     {
946         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_USER_RIGHTS );
947         daoUtil.setInt( 1, nUserId );
948         daoUtil.setString( 2, strIdRight );
949         daoUtil.executeUpdate(  );
950         daoUtil.free(  );
951     }
952 
953     /**
954      * {@inheritDoc}
955      */
956     @Override
957     public List<IPassword> selectUserPasswordHistory( int nUserID )
958     {
959         List<IPassword> listPasswordHistory = new ArrayList<IPassword>(  );
960 
961         DAOUtil daoUtil = new DAOUtil( SQL_SELECT_USER_PASSWORD_HISTORY );
962         daoUtil.setInt( 1, nUserID );
963         daoUtil.executeQuery(  );
964 
965         while ( daoUtil.next(  ) )
966         {
967             listPasswordHistory.add( _passwordFactory.getPassword( daoUtil.getString( 1 ) ) );
968         }
969 
970         daoUtil.free(  );
971 
972         return listPasswordHistory;
973     }
974 
975     /**
976      * {@inheritDoc}
977      */
978     @Override
979     public int countUserPasswordHistoryFromDate( Timestamp minDate, int nUserId )
980     {
981         int nNbRes = 0;
982 
983         DAOUtil daoUtil = new DAOUtil( SQL_COUNT_USER_PASSWORD_HISTORY );
984         daoUtil.setInt( 1, nUserId );
985         daoUtil.setTimestamp( 2, minDate );
986         daoUtil.executeQuery(  );
987 
988         if ( daoUtil.next(  ) )
989         {
990             nNbRes = daoUtil.getInt( 1 );
991         }
992 
993         daoUtil.free(  );
994 
995         return nNbRes;
996     }
997 
998     /**
999      * {@inheritDoc}
1000      */
1001     @Override
1002     public void insertNewPasswordInHistory( IPassword password, int nUserId )
1003     {
1004         DAOUtil daoUtil = new DAOUtil( SQL_INSERT_PASSWORD_HISTORY );
1005         daoUtil.setInt( 1, nUserId );
1006         daoUtil.setString( 2, password.getStorableRepresentation(  ) );
1007 
1008         daoUtil.executeUpdate(  );
1009         daoUtil.free(  );
1010     }
1011 
1012     /**
1013      * {@inheritDoc}
1014      */
1015     @Override
1016     public void removeAllPasswordHistoryForUser( int nUserId )
1017     {
1018         DAOUtil daoUtil = new DAOUtil( SQL_DELETE_PASSWORD_HISTORY );
1019         daoUtil.setInt( 1, nUserId );
1020         daoUtil.executeUpdate(  );
1021         daoUtil.free(  );
1022     }
1023 
1024     /**
1025      * {@inheritDoc}
1026      */
1027     @Override
1028     public Map<String, Boolean> selectAnonymizationStatusUserStaticField(  )
1029     {
1030         DAOUtil daoUtil = new DAOUtil( SQL_SELECT_ANONYMIZATION_STATUS_USER_FILED );
1031         daoUtil.executeQuery(  );
1032 
1033         Map<String, Boolean> resultMap = new HashMap<String, Boolean>(  );
1034 
1035         while ( daoUtil.next(  ) )
1036         {
1037             resultMap.put( daoUtil.getString( 1 ), daoUtil.getBoolean( 2 ) );
1038         }
1039 
1040         daoUtil.free(  );
1041 
1042         return resultMap;
1043     }
1044 
1045     /**
1046      * {@inheritDoc}
1047      */
1048     @Override
1049     public void updateAnonymizationStatusUserStaticField( String strFieldName, boolean bAnonymizeFiled )
1050     {
1051         DAOUtil daoUtil = new DAOUtil( SQL_UPDATE_ANONYMIZATION_STATUS_USER_FILED );
1052         daoUtil.setBoolean( 1, bAnonymizeFiled );
1053         daoUtil.setString( 2, strFieldName );
1054         daoUtil.executeUpdate(  );
1055         daoUtil.free(  );
1056     }
1057 
1058     /**
1059      * {@inheritDoc}
1060      */
1061     @Override
1062     public List<Integer> findAllExpiredUserId(  )
1063     {
1064         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_EXPIRED_USER_ID );
1065         daoUtil.setInt( 1, AdminUser.EXPIRED_CODE );
1066 
1067         List<Integer> listIdExpiredUser = new ArrayList<Integer>(  );
1068         daoUtil.executeQuery(  );
1069 
1070         while ( daoUtil.next(  ) )
1071         {
1072             listIdExpiredUser.add( daoUtil.getInt( 1 ) );
1073         }
1074 
1075         daoUtil.free(  );
1076 
1077         return listIdExpiredUser;
1078     }
1079 
1080     /**
1081      * {@inheritDoc}
1082      */
1083     @Override
1084     public List<Integer> getIdUsersWithExpiredLifeTimeList( Timestamp currentTimestamp )
1085     {
1086         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_EXPIRED_LIFE_TIME_USER_ID );
1087         daoUtil.setLong( 1, currentTimestamp.getTime(  ) );
1088         daoUtil.setInt( 2, AdminUser.EXPIRED_CODE );
1089 
1090         List<Integer> listIdExpiredUser = new ArrayList<Integer>(  );
1091         daoUtil.executeQuery(  );
1092 
1093         while ( daoUtil.next(  ) )
1094         {
1095             listIdExpiredUser.add( daoUtil.getInt( 1 ) );
1096         }
1097 
1098         daoUtil.free(  );
1099 
1100         return listIdExpiredUser;
1101     }
1102 
1103     /**
1104      * {@inheritDoc}
1105      */
1106     @Override
1107     public List<Integer> getIdUsersToSendFirstAlert( Timestamp alertMaxDate )
1108     {
1109         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_FIRST_ALERT );
1110         daoUtil.setInt( 1, AdminUser.EXPIRED_CODE );
1111         daoUtil.setLong( 2, alertMaxDate.getTime(  ) );
1112 
1113         List<Integer> listIdUserFirstAlert = new ArrayList<Integer>(  );
1114         daoUtil.executeQuery(  );
1115 
1116         while ( daoUtil.next(  ) )
1117         {
1118             listIdUserFirstAlert.add( daoUtil.getInt( 1 ) );
1119         }
1120 
1121         daoUtil.free(  );
1122 
1123         return listIdUserFirstAlert;
1124     }
1125 
1126     /**
1127      * {@inheritDoc}
1128      */
1129     @Override
1130     public List<Integer> getIdUsersToSendOtherAlert( Timestamp alertMaxDate, Timestamp timeBetweenAlerts,
1131         int maxNumberAlerts )
1132     {
1133         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_OTHER_ALERT );
1134         daoUtil.setInt( 1, maxNumberAlerts );
1135         daoUtil.setInt( 2, AdminUser.EXPIRED_CODE );
1136         daoUtil.setLong( 3, timeBetweenAlerts.getTime(  ) );
1137         daoUtil.setLong( 4, alertMaxDate.getTime(  ) );
1138 
1139         List<Integer> listIdUserFirstAlert = new ArrayList<Integer>(  );
1140         daoUtil.executeQuery(  );
1141 
1142         while ( daoUtil.next(  ) )
1143         {
1144             listIdUserFirstAlert.add( daoUtil.getInt( 1 ) );
1145         }
1146 
1147         daoUtil.free(  );
1148 
1149         return listIdUserFirstAlert;
1150     }
1151 
1152     /**
1153      * {@inheritDoc}
1154      */
1155     @Override
1156     public List<Integer> getIdUsersWithExpiredPasswordsList( Timestamp currentTimestamp )
1157     {
1158         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_USER_ID_PASSWORD_EXPIRED );
1159         daoUtil.setTimestamp( 1, currentTimestamp );
1160 
1161         List<Integer> idUserPasswordExpiredlist = new ArrayList<Integer>(  );
1162         daoUtil.executeQuery(  );
1163 
1164         while ( daoUtil.next(  ) )
1165         {
1166             idUserPasswordExpiredlist.add( daoUtil.getInt( 1 ) );
1167         }
1168 
1169         daoUtil.free(  );
1170 
1171         return idUserPasswordExpiredlist;
1172     }
1173 
1174     /**
1175      * {@inheritDoc}
1176      */
1177     @Override
1178     public void updateUserStatus( List<Integer> listIdUser, int nNewStatus )
1179     {
1180         if ( ( listIdUser != null ) && ( listIdUser.size(  ) > 0 ) )
1181         {
1182             StringBuilder sbSQL = new StringBuilder(  );
1183             sbSQL.append( SQL_QUERY_UPDATE_STATUS );
1184 
1185             for ( int i = 0; i < listIdUser.size(  ); i++ )
1186             {
1187                 if ( i > 0 )
1188                 {
1189                     sbSQL.append( CONSTANT_COMMA );
1190                 }
1191 
1192                 sbSQL.append( listIdUser.get( i ) );
1193             }
1194 
1195             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );
1196 
1197             DAOUtil daoUtil = new DAOUtil( sbSQL.toString(  ) );
1198             daoUtil.setInt( 1, nNewStatus );
1199             daoUtil.executeUpdate(  );
1200             daoUtil.free(  );
1201         }
1202     }
1203 
1204     /**
1205      * {@inheritDoc}
1206      */
1207     @Override
1208     public void updateNbAlert( List<Integer> listIdUser )
1209     {
1210         if ( ( listIdUser != null ) && ( listIdUser.size(  ) > 0 ) )
1211         {
1212             StringBuilder sbSQL = new StringBuilder(  );
1213             sbSQL.append( SQL_QUERY_UPDATE_NB_ALERT );
1214 
1215             for ( int i = 0; i < listIdUser.size(  ); i++ )
1216             {
1217                 if ( i > 0 )
1218                 {
1219                     sbSQL.append( CONSTANT_COMMA );
1220                 }
1221 
1222                 sbSQL.append( listIdUser.get( i ) );
1223             }
1224 
1225             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );
1226 
1227             DAOUtil daoUtil = new DAOUtil( sbSQL.toString(  ) );
1228             daoUtil.executeUpdate(  );
1229             daoUtil.free(  );
1230         }
1231     }
1232 
1233     /**
1234      * {@inheritDoc}
1235      */
1236     @Override
1237     public void updateChangePassword( List<Integer> listIdUser )
1238     {
1239         if ( ( listIdUser != null ) && ( listIdUser.size(  ) > 0 ) )
1240         {
1241             StringBuilder sbSQL = new StringBuilder(  );
1242             sbSQL.append( SQL_QUERY_UPDATE_RESET_PASSWORD_LIST_ID );
1243 
1244             for ( int i = 0; i < listIdUser.size(  ); i++ )
1245             {
1246                 if ( i > 0 )
1247                 {
1248                     sbSQL.append( CONSTANT_COMMA );
1249                 }
1250 
1251                 sbSQL.append( listIdUser.get( i ) );
1252             }
1253 
1254             sbSQL.append( CONSTANT_CLOSE_PARENTHESIS );
1255 
1256             DAOUtil daoUtil = new DAOUtil( sbSQL.toString(  ) );
1257             daoUtil.executeUpdate(  );
1258             daoUtil.free(  );
1259         }
1260     }
1261 
1262     /**
1263      * {@inheritDoc}
1264      */
1265     @Override
1266     public void updateUserExpirationDate( int nIdUser, Timestamp newExpirationDate )
1267     {
1268         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_REACTIVATE_ACCOUNT );
1269 
1270         if ( newExpirationDate == null )
1271         {
1272             daoUtil.setLongNull( 1 );
1273         }
1274         else
1275         {
1276             daoUtil.setLong( 1, newExpirationDate.getTime(  ) );
1277         }
1278 
1279         daoUtil.setInt( 2, nIdUser );
1280 
1281         daoUtil.executeUpdate(  );
1282 
1283         daoUtil.free(  );
1284     }
1285 
1286     /**
1287      * {@inheritDoc}
1288      */
1289     @Override
1290     public void updateDateLastLogin( int nIdUser, Timestamp dateLastLogin )
1291     {
1292         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_DATE_LAST_LOGIN );
1293         daoUtil.setTimestamp( 1, dateLastLogin );
1294         daoUtil.setInt( 2, nIdUser );
1295         daoUtil.executeUpdate(  );
1296         daoUtil.free(  );
1297     }
1298 }