KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > appfuse > dao > ibatis > UserDaoiBatis


1 package org.appfuse.dao.ibatis;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.HashSet JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.List JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import org.acegisecurity.userdetails.UserDetails;
10 import org.acegisecurity.userdetails.UserDetailsService;
11 import org.acegisecurity.userdetails.UsernameNotFoundException;
12 import org.appfuse.dao.UserDao;
13 import org.appfuse.model.Role;
14 import org.appfuse.model.User;
15 import org.springframework.orm.ObjectRetrievalFailureException;
16
17 /**
18  * This class interacts with iBatis's SQL Maps to save and retrieve User
19  * related objects.
20  *
21  * <p><a HREF="UserDaoiBatis.java.htm"><i>View Source</i></a></p>
22  *
23  * @author <a HREF="mailto:matt@raibledesigns.com">Matt Raible</a>
24  */

25 public class UserDaoiBatis extends BaseDaoiBATIS implements UserDao, UserDetailsService {
26     /**
27      * Get user by id.
28      *
29      * @param userId the user's id
30      * @return a populated user object
31      */

32     public User getUser(Long JavaDoc userId) {
33         User user = (User) getSqlMapClientTemplate().queryForObject("getUser", userId);
34
35         if (user == null) {
36             logger.warn("uh oh, user not found...");
37             throw new ObjectRetrievalFailureException(User.class, userId);
38         } else {
39             List JavaDoc roles = getSqlMapClientTemplate().queryForList("getUserRoles", user);
40             user.setRoles(new HashSet JavaDoc(roles));
41         }
42
43         return user;
44     }
45
46     /**
47      * @see org.appfuse.dao.UserDao#getUsers(org.appfuse.model.User)
48      */

49     public List JavaDoc getUsers(User user) {
50         List JavaDoc users = getSqlMapClientTemplate().queryForList("getUsers", null);
51
52         // get the roles for each user
53
for (int i = 0; i < users.size(); i++) {
54             user = (User) users.get(i);
55
56             List JavaDoc roles = getSqlMapClientTemplate().queryForList("getUserRoles", user);
57             user.setRoles(new HashSet JavaDoc(roles));
58             users.set(i, user);
59         }
60
61         return users;
62     }
63
64     /**
65      * Convenience method to delete roles
66      * @param user
67      */

68     private void deleteUserRoles(final Long JavaDoc userId) {
69         getSqlMapClientTemplate().update("deleteUserRoles", userId);
70     }
71
72     private void addUserRoles(final User user) {
73         if (user.getRoles() != null) {
74             for (Iterator JavaDoc it = user.getRoles().iterator(); it.hasNext();) {
75                 Role role = (Role) it.next();
76                 Map JavaDoc newRole = new HashMap JavaDoc();
77                 newRole.put("userId", user.getId());
78                 newRole.put("roleId", role.getId());
79
80                 List JavaDoc userRoles = getSqlMapClientTemplate().queryForList("getUserRoles", user);
81
82                 if (userRoles.isEmpty()) {
83                     getSqlMapClientTemplate().update("addUserRole", newRole);
84                 }
85             }
86         }
87     }
88
89     /**
90      * @see org.appfuse.dao.UserDao#saveUser(org.appfuse.model.User)
91      */

92     public void saveUser(final User user) {
93         prepareObjectForSaveOrUpdate(user);
94         
95         if (user.getId() == null) {
96             Long JavaDoc id = (Long JavaDoc) getSqlMapClientTemplate().insert("addUser", user);
97             user.setId(id);
98             addUserRoles(user);
99         } else {
100             getSqlMapClientTemplate().update("updateUser", user);
101             deleteUserRoles(user.getId());
102             addUserRoles(user);
103         }
104     }
105
106     /**
107      * @see org.appfuse.dao.UserDao#removeUser(java.lang.Long)
108      */

109     public void removeUser(Long JavaDoc userId) {
110         deleteUserRoles(userId);
111         getSqlMapClientTemplate().update("deleteUser", userId);
112     }
113     
114     /**
115      * @see org.acegisecurity.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
116      */

117      public UserDetails loadUserByUsername(String JavaDoc username) throws UsernameNotFoundException {
118          User user = (User) getSqlMapClientTemplate().queryForObject("getUserByUsername", username);
119
120          if (user == null) {
121              logger.warn("uh oh, user not found...");
122              throw new UsernameNotFoundException("user '" + username + "' not found...");
123          } else {
124              List JavaDoc roles = getSqlMapClientTemplate().queryForList("getUserRoles", user);
125              user.setRoles(new HashSet JavaDoc(roles));
126          }
127
128          return user;
129      }
130 }
131
Popular Tags