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 }