/src/main/java/com/google/ie/business/service/impl/UserServiceImpl.java

http://thoughtsite.googlecode.com/ · Java · 207 lines · 130 code · 22 blank · 55 comment · 30 complexity · 02e594d8288154b895809f687b02b560 MD5 · raw file

  1. /* Copyright 2010 Google Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS.
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License
  14. */
  15. package com.google.ie.business.service.impl;
  16. import com.google.ie.business.dao.UserDao;
  17. import com.google.ie.business.dao.impl.DaoConstants;
  18. import com.google.ie.business.domain.User;
  19. import com.google.ie.business.service.ServiceConstants;
  20. import com.google.ie.business.service.UserService;
  21. import com.google.ie.common.util.SearchUtility;
  22. import com.google.ie.dto.RetrievalInfo;
  23. import org.apache.commons.lang.StringUtils;
  24. import org.apache.log4j.Logger;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import java.util.HashSet;
  27. import java.util.List;
  28. import java.util.Set;
  29. /**
  30. * A service implementation of the UserService
  31. *
  32. * @author Charanjeet singh
  33. */
  34. public class UserServiceImpl implements UserService {
  35. private static final Logger LOGGER = Logger.getLogger(UserServiceImpl.class);
  36. @Autowired
  37. private UserDao userDao;
  38. @Override
  39. public User saveUser(User user) {
  40. User savedUser = null;
  41. if (user == null) {
  42. return null;
  43. }
  44. savedUser = userDao.saveUser(user);
  45. return savedUser;
  46. }
  47. /**
  48. * Getter method for user dao.
  49. *
  50. * @return
  51. */
  52. public UserDao getUserDao() {
  53. return userDao;
  54. }
  55. /**
  56. * Setter method for user dao.
  57. *
  58. * @param userDao
  59. */
  60. public void setUserDao(UserDao userDao) {
  61. this.userDao = userDao;
  62. }
  63. @Override
  64. public User getUserById(String id) {
  65. if (id == null) {
  66. return null;
  67. }
  68. return userDao.getUserById(id);
  69. }
  70. @Override
  71. public User addOrUpdateUser(User user) {
  72. /* Get the user from datastore */
  73. User userFromDatastore = getUserById(user.getId());
  74. if (userFromDatastore != null) {
  75. LOGGER.info("User found. Updating it with user info from GFC");
  76. /* In case the user is banned,return null */
  77. if (userFromDatastore.getStatus() != null
  78. && userFromDatastore.getStatus().equalsIgnoreCase(User.STATUS_BANNED)) {
  79. return null;
  80. }
  81. userFromDatastore.setDisplayName(user.getDisplayName());
  82. userFromDatastore.setThumbnailUrl(user.getThumbnailUrl());
  83. if (!StringUtils.isBlank(user.getEmailId())) {
  84. userFromDatastore.setEmailId(user.getEmailId());
  85. }
  86. /* Set of permitted status for the user entity */
  87. Set<String> setOfUserStatus = new HashSet<String>();
  88. setOfUserStatus.add(User.STATUS_ACTIVE);
  89. setOfUserStatus.add(User.STATUS_BANNED);
  90. /* Check if the status is the one permissible */
  91. if (!StringUtils.isBlank(user.getStatus())
  92. && setOfUserStatus.contains(user.getStatus())) {
  93. userFromDatastore.setStatus(user.getStatus());
  94. } else {
  95. userFromDatastore.setStatus(User.STATUS_ACTIVE);
  96. }
  97. userFromDatastore = userDao.saveUser(userFromDatastore);
  98. /* Make user object searchable by adding index */
  99. SearchUtility.indexEntity(userFromDatastore);
  100. } else {
  101. /*
  102. * Since the user does not exist in data store ,save the details
  103. * of the new user.
  104. */
  105. if (StringUtils.isBlank(user.getRoleName())) {
  106. user.setRoleName(User.ROLE_USER);
  107. }
  108. user.setStatus(User.STATUS_ACTIVE);
  109. LOGGER.info("Saving new user");
  110. userFromDatastore = userDao.saveUser(user);
  111. }
  112. return userFromDatastore;
  113. }
  114. @Override
  115. public User getUserByPrimaryKey(String key) {
  116. return userDao.findEntityByPrimaryKey(User.class, key);
  117. }
  118. @Override
  119. public User banUser(User user) {
  120. User savedUser = null;
  121. if (user != null) {
  122. /* Get the user from datastore */
  123. User userFromDatastore = userDao.findEntityByPrimaryKey(User.class, user.getUserKey());
  124. userFromDatastore.setStatus(User.STATUS_BANNED);
  125. savedUser = userDao.saveUser(userFromDatastore);
  126. /* Delete index of user object */
  127. SearchUtility.deleteEntityIndex(userFromDatastore);
  128. }
  129. return savedUser;
  130. }
  131. @Override
  132. public User activate(User user) {
  133. User savedUser = null;
  134. if (user != null) {
  135. /* Get the user from datastore */
  136. User userFromDatastore = userDao.findEntityByPrimaryKey(User.class, user.getUserKey());
  137. userFromDatastore.setStatus(User.STATUS_ACTIVE);
  138. savedUser = userDao.saveUser(userFromDatastore);
  139. /* Make user object searchable by adding index */
  140. SearchUtility.indexEntity(userFromDatastore);
  141. }
  142. return savedUser;
  143. }
  144. @Override
  145. public List<User> getUsers(RetrievalInfo retrievalInfo, String role) {
  146. retrievalInfo = prepareRetrievalInfoForQuery(retrievalInfo);
  147. return userDao.getUsers(retrievalInfo, role, null);
  148. }
  149. /**
  150. * Prepares the {@link RetrievalInfo} object with values to be used as query
  151. * parameters.
  152. * Checks the received RetrievalInfo object attributes for valid
  153. * data.Updates the attributes if they contain garbage values.If the
  154. * received {@link RetrievalInfo} object is null,sets it to a new instance
  155. * with its attributes set to default values.
  156. *
  157. * @param retrievalInfo the {@link RetrievalInfo} object containing the
  158. * values to be used as query parameters
  159. * @return the {@link RetrievalInfo} object containing the query parameters
  160. */
  161. private RetrievalInfo prepareRetrievalInfoForQuery(RetrievalInfo retrievalInfo) {
  162. if (retrievalInfo == null) {
  163. retrievalInfo = new RetrievalInfo();
  164. retrievalInfo.setStartIndex(ServiceConstants.ZERO);
  165. retrievalInfo.setNoOfRecords(ServiceConstants.USERS_LIST_DEFAULT_SIZE);
  166. retrievalInfo.setOrderType(ServiceConstants.DEFAULT_USER_ORDERING_TYPE);
  167. retrievalInfo.setOrderBy(ServiceConstants.USER_ORDERING_FIELD);
  168. } else {
  169. // Handle garbage values if any.
  170. String orderBY = retrievalInfo.getOrderBy();
  171. String orderType = retrievalInfo.getOrderType();
  172. if (retrievalInfo.getStartIndex() < ServiceConstants.ZERO)
  173. retrievalInfo.setStartIndex(ServiceConstants.ZERO);
  174. if (retrievalInfo.getNoOfRecords() <= ServiceConstants.ZERO)
  175. retrievalInfo.setNoOfRecords(ServiceConstants.USERS_LIST_DEFAULT_SIZE);
  176. if (orderType == null || !((orderType.equals(DaoConstants.ORDERING_ASCENDING)
  177. || orderType.equals(DaoConstants.ORDERING_DESCENDING))))
  178. retrievalInfo.setOrderType(ServiceConstants.DEFAULT_USER_ORDERING_TYPE);
  179. if (orderBY == null) {
  180. retrievalInfo.setOrderBy(ServiceConstants.USER_ORDERING_FIELD);
  181. }
  182. }
  183. return retrievalInfo;
  184. }
  185. }