View Javadoc

1   package org.gnomekr.potron.service;
2   
3   import static org.gnomekr.potron.util.PotronConstants.ROLE_ADMIN;
4   import static org.gnomekr.potron.util.PotronConstants.ROLE_USER;
5   
6   import java.util.Date;
7   import java.util.List;
8   
9   import net.sf.acegisecurity.GrantedAuthority;
10  import net.sf.acegisecurity.UserDetails;
11  import net.sf.acegisecurity.providers.dao.UsernameNotFoundException;
12  
13  import org.apache.commons.lang.NullArgumentException;
14  import org.apache.commons.logging.Log;
15  import org.apache.commons.logging.LogFactory;
16  import org.gnomekr.potron.data.User;
17  import org.hibernate.Session;
18  import org.springframework.dao.DataAccessException;
19  import org.springframework.orm.hibernate3.SessionFactoryUtils;
20  import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
21  
22  /***
23   * UserManager.java
24   * @author Xavier Cho
25   * @version $Revision 1.1 $ $Date: 2005/07/07 15:22:17 $
26   */
27  public class UserManager extends HibernateDaoSupport implements IUserManager {
28  
29      private static Log log = LogFactory.getLog(UserManager.class);
30  
31      /***
32       * @see org.gnomekr.potron.service.IUserManager#createUser(org.gnomekr.potron.data.User)
33       */
34      public void createUser(User user) throws UserExistsException {
35          if (user == null) {
36              throw new NullArgumentException("user");
37          }
38  
39          String userName = user.getUserName();
40  
41          if (log.isDebugEnabled()) {
42              log.debug("Creating new user account : " + userName);
43          }
44  
45          Session session = SessionFactoryUtils.getSession(
46                  getSessionFactory(),
47                  false);
48  
49          if (session.get(User.class, userName) != null) {
50              String msg = "The specified user name already exists : " + userName;
51              throw new UserExistsException(msg);
52          }
53  
54          user.setRegisteredDate(new Date(System.currentTimeMillis()));
55  
56          session.save(user);
57  
58          if (log.isInfoEnabled()) {
59              log.info("User account has been created successfully : ");
60              log.debug(user);
61          }
62      }
63  
64      /***
65       * @see org.gnomekr.potron.service.IUserManager#getUser(java.lang.String)
66       */
67      public User getUser(String userName) {
68          if (userName == null) {
69              throw new NullArgumentException("userName");
70          }
71  
72          if (log.isDebugEnabled()) {
73              log.debug("Loading user information : " + userName);
74          }
75  
76          Session session = SessionFactoryUtils.getSession(
77                  getSessionFactory(),
78                  false);
79  
80          User user = (User) session.get(User.class, userName);
81  
82          if (log.isTraceEnabled()) {
83              log.trace("Retreived user information : ");
84              log.trace(user);
85          }
86  
87          return user;
88      }
89  
90      /***
91       * @see org.gnomekr.potron.service.IUserManager#getUsers()
92       */
93      @SuppressWarnings("unchecked")
94      public List<User> getUsers() {
95          if (log.isDebugEnabled()) {
96              log.debug("Retrieving all users.");
97          }
98  
99          Session session = SessionFactoryUtils.getSession(
100                 getSessionFactory(),
101                 false);
102 
103         return session.createCriteria(User.class).setCacheable(true).list();
104     }
105 
106     /***
107      * @see org.gnomekr.potron.service.IUserManager#updateUser(org.gnomekr.potron.data.User)
108      */
109     public void updateUser(User user) {
110         if (user == null) {
111             throw new NullArgumentException("user");
112         }
113 
114         String userName = user.getUserName();
115 
116         if (log.isDebugEnabled()) {
117             log.debug("Updating user account : " + userName);
118         }
119 
120         Session session = SessionFactoryUtils.getSession(
121                 getSessionFactory(),
122                 false);
123 
124         session.merge(user);
125 
126         if (log.isInfoEnabled()) {
127             log.info("User account has been updated successfully : ");
128             log.debug(user);
129         }
130     }
131 
132     /***
133      * @see org.gnomekr.potron.service.IUserManager#deleteUser(java.lang.String)
134      */
135     public void deleteUser(String userName) {
136         if (userName == null) {
137             throw new NullArgumentException("userName");
138         }
139 
140         if (log.isDebugEnabled()) {
141             log.debug("Deleting user account : " + userName);
142         }
143 
144         User user = getUser(userName);
145 
146         if (user == null) {
147             if (log.isInfoEnabled()) {
148                 log.info("The specified user does not exist : " + userName);
149             }
150         } else {
151             Session session = SessionFactoryUtils.getSession(
152                     getSessionFactory(),
153                     false);
154 
155             session.delete(user);
156 
157             if (log.isInfoEnabled()) {
158                 log.info("User account has been deleted successfully : ");
159                 log.debug(user);
160             }
161         }
162     }
163 
164     /***
165      * @see net.sf.acegisecurity.providers.dao.AuthenticationDao#loadUserByUsername(java.lang.String)
166      */
167     public UserDetails loadUserByUsername(String userName)
168             throws UsernameNotFoundException, DataAccessException {
169         User user = getUser(userName);
170 
171         if (user == null) {
172             String msg = "The specified user does not exist : " + userName;
173             throw new UsernameNotFoundException(msg);
174         }
175 
176         GrantedAuthority[] authorities = null;
177 
178         if (user.isAdmin()) {
179             authorities = new GrantedAuthority[] {
180                     ROLE_USER, ROLE_ADMIN
181             };
182         } else {
183             authorities = new GrantedAuthority[] {
184                 ROLE_USER
185             };
186         }
187 
188         UserDetails principal = new net.sf.acegisecurity.providers.dao.User(
189                 user.getUserName(), user.getPassword(), user.isActive(), true,
190                 true, true, authorities);
191 
192         return principal;
193     }
194 }