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 }