View Javadoc

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          // in case of empty username in cookie, return null
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 }