package de.ppi.samples.fuwesta.service.impl; import java.util.List; import javax.annotation.Resource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import de.ppi.samples.fuwesta.dao.api.PostDao; import de.ppi.samples.fuwesta.dao.api.UserDao; import de.ppi.samples.fuwesta.model.Post; import de.ppi.samples.fuwesta.model.User; import de.ppi.samples.fuwesta.service.api.UserService; /** * Implementation of {@link UserService}. */ @Transactional(readOnly = true) @Service("userService") public class UserServiceImpl implements UserService { /** The user-Dao. */ @Resource private UserDao userDao; /** The post-Dao. */ @Resource private PostDao postDao; /** * {@inheritDoc} */ @Override public Page<User> getAllUser() { return userDao.findAll((PageRequest) null); } /** * {@inheritDoc} */ @Override public Page<User> getUser(int skip, int count, Order... order) { final Sort sort = order.length > 0 ? new Sort(order) : null; final PageRequest pr = new PageRequest(skip / count, count, sort); // return userDao.findAll(pr); return this.getUser(pr); } /** * {@inheritDoc} */ @Override public Page<User> getUser(Pageable page) { return userDao.findAll(page); } /** * {@inheritDoc} */ @Override @Transactional(readOnly = false) public User save(User user) { if (user.getId() != null) { final User oldUser = userDao.findOne(user.getId()); // This is need because post is the owning site. oldUser.setPostings(user.getPostings()); // At the safe both are merged. user.getPostings().clear(); } return userDao.save(user); } /** * {@inheritDoc} */ @Override public User read(Long userId) { final User user = userDao.findOne(userId); if (user != null && !CollectionUtils.isEmpty(user.getPostings())) { // Ensere all postings are laoded to enable a test, where no // no Session is open. user.getPostings().size(); } return user; } /** * {@inheritDoc} */ @Override @Transactional(readOnly = false) public void delete(Long userId) { final User oldUser = userDao.findOne(userId); // This is need because post is the owning site. oldUser.setPostings(null); userDao.delete(oldUser); } /** * {@inheritDoc} */ @Override public long getNrOfUsers() { return userDao.count(); } /** * {@inheritDoc} */ @Override public List<Post> getPostingSelectOptions() { return postDao.findAllOrderByTitle(); } /** * @return the userDao */ protected UserDao getUserDao() { return userDao; } }