1 package com.panogenesis.service.impl;
2
3 import java.util.List;
4
5 import org.apache.commons.lang.StringUtils;
6 import com.panogenesis.dao.UserDAO;
7 import com.panogenesis.model.User;
8 import com.panogenesis.model.UserCookie;
9 import com.panogenesis.service.UserExistsException;
10 import com.panogenesis.service.UserManager;
11 import com.panogenesis.util.RandomGUID;
12 import com.panogenesis.util.StringUtil;
13 import org.springframework.dao.DataIntegrityViolationException;
14
15
16 /***
17 * Implementation of UserManager interface.</p>
18 *
19 * <p>
20 * <a href="UserManagerImpl.java.html"><i>View Source</i></a>
21 * </p>
22 *
23 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
24 */
25 public class UserManagerImpl extends BaseManager implements UserManager {
26 private UserDAO dao;
27
28 /***
29 * Set the DAO for communication with the data layer.
30 * @param dao
31 */
32 public void setUserDAO(UserDAO dao) {
33 this.dao = dao;
34 }
35
36 /***
37 * @see com.panogenesis.service.UserManager#getUser(java.lang.String)
38 */
39 public User getUser(String username) {
40 return dao.getUser(username);
41 }
42
43 /***
44 * @see com.panogenesis.service.UserManager#getUsers(com.panogenesis.model.User)
45 */
46 public List getUsers(User user) {
47 return dao.getUsers(user);
48 }
49
50 /***
51 * @see com.panogenesis.service.UserManager#saveUser(com.panogenesis.model.User)
52 */
53 public void saveUser(User user) throws UserExistsException {
54 try {
55 dao.saveUser(user);
56 } catch (DataIntegrityViolationException e) {
57 throw new UserExistsException("User '" + user.getUsername() +
58 "' already exists!");
59 }
60 }
61
62 /***
63 * @see com.panogenesis.service.UserManager#removeUser(java.lang.String)
64 */
65 public void removeUser(String username) {
66 if (log.isDebugEnabled()) {
67 log.debug("removing user: " + username);
68 }
69
70 dao.removeUser(username);
71 }
72
73 /***
74 * @see com.panogenesis.service.UserManager#checkLoginCookie(java.lang.String)
75 */
76 public String checkLoginCookie(String value) {
77 value = StringUtil.decodeString(value);
78
79 String[] values = StringUtils.split(value, "|");
80
81
82 if (values.length == 1) {
83 return null;
84 }
85
86 if (log.isDebugEnabled()) {
87 log.debug("looking up cookieId: " + values[1]);
88 }
89
90 UserCookie cookie = new UserCookie();
91 cookie.setUsername(values[0]);
92 cookie.setCookieId(values[1]);
93 cookie = dao.getUserCookie(cookie);
94
95 if (cookie != null) {
96 if (log.isDebugEnabled()) {
97 log.debug("cookieId lookup succeeded, generating new cookieId");
98 }
99
100 return saveLoginCookie(cookie);
101 } else {
102 if (log.isDebugEnabled()) {
103 log.debug("cookieId lookup failed, returning null");
104 }
105
106 return null;
107 }
108 }
109
110 /***
111 * @see com.panogenesis.service.UserManager#createLoginCookie(java.lang.String)
112 */
113 public String createLoginCookie(String username) {
114 UserCookie cookie = new UserCookie();
115 cookie.setUsername(username);
116
117 return saveLoginCookie(cookie);
118 }
119
120 /***
121 * Convenience method to set a unique cookie id and save to database
122 * @param cookie
123 * @return
124 */
125 private String saveLoginCookie(UserCookie cookie) {
126 cookie.setCookieId(new RandomGUID().toString());
127 dao.saveUserCookie(cookie);
128
129 return StringUtil.encodeString(cookie.getUsername() + "|" +
130 cookie.getCookieId());
131 }
132
133 /***
134 * @see com.panogenesis.service.UserManager#removeLoginCookies(java.lang.String)
135 */
136 public void removeLoginCookies(String username) {
137 dao.removeUserCookies(username);
138 }
139 }