//$Id: UserServiceImpl.java,v 1.2 2006/10/19 09:21:32 chaostone Exp $
/*
*
* Copyright c 2005-2009
* Licensed under the Apache License, Version 2.0 (the "License")
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
/********************************************************************************
* @author chaostone
*
* MODIFICATION DESCRIPTION
*
* Name Date Description
* ============ ============ ============
* dell Created
* chaostone 2005-9-26 rename some method's signature
*
********************************************************************************/
package org.beanfuse.security.service;
import java.sql.Date;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.beanfuse.model.EntityExistException;
import org.beanfuse.persist.impl.BaseServiceImpl;
import org.beanfuse.query.Condition;
import org.beanfuse.query.EntityQuery;
import org.beanfuse.security.Group;
import org.beanfuse.security.User;
import org.beanfuse.security.dao.UserDao;
import org.springframework.dao.DataIntegrityViolationException;
/**
* 用户信息服务的实现类
*
* @author dell,chaostone 2005-9-26
*/
public class UserServiceImpl extends BaseServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User get(String name, String password) {
return userDao.get(name, password);
}
public User get(Long id) {
return userDao.get(id);
}
public User get(String loginName) {
if (StringUtils.isEmpty(loginName))
return null;
EntityQuery entityQuery = new EntityQuery(User.class, "user");
entityQuery.add(new Condition("user.name=:name", loginName));
Collection users = entityService.search(entityQuery);
if (users.isEmpty())
return null;
else
return (User) users.iterator().next();
}
public List getUsers(Long[] userIds) {
return userDao.get(userIds);
}
public void updateState(Long[] ids, int state) {
if (null == ids || ids.length < 1)
return;
List users = userDao.get(ids);
for (int i = 0; i < users.size(); i++) {
User cur = (User) users.get(i);
cur.setStatus(state);
}
entityService.saveOrUpdate(users);
}
public void saveOrUpdate(User user) throws EntityExistException {
try {
user.setUpdatedAt(new Date(System.currentTimeMillis()));
if (user.isVO()) {
user.setCreatedAt(new Date(System.currentTimeMillis()));
}
entityService.saveOrUpdate(user);
} catch (DataIntegrityViolationException e) {
throw new EntityExistException("User already exits:" + user);
} catch (Exception e) {
throw new EntityExistException("User already exits:" + user);
}
}
public Set getGroups(User user) {
return user.getGroups();
}
public void createUser(User creator, User newUser) {
newUser.setCreator(creator);
newUser.setUpdatedAt(new Date(System.currentTimeMillis()));
newUser.setCreatedAt(new Date(System.currentTimeMillis()));
entityDao.saveOrUpdate(newUser);
}
public void removeUser(User manager, User user) {
if (isManagedBy(manager, user)) {
entityService.remove(user);
}
}
public boolean isManagedBy(User manager, User user) {
if (manager.isAdmin() || manager.equals(user.getCreator())) {
return true;
} else {
for (Iterator iter = manager.getMngGroups().iterator(); iter.hasNext();) {
Group group = (Group) iter.next();
if (group.getUsers().contains(user)) {
return true;
}
}
return false;
}
}
public void createGroup(User creator, Group group) {
group.setUpdatedAt(new Date(System.currentTimeMillis()));
group.setCreatedAt(new Date(System.currentTimeMillis()));
group.setCreator(creator);
// 纳入创建者的管理范围
creator.getMngGroups().add(group);
entityDao.saveOrUpdate(group);
entityDao.saveOrUpdate(creator);
}
/**
* 超级管理员不能删除
*/
public void removeGroup(User manager, List groups) {
for (Iterator iterator = groups.iterator(); iterator.hasNext();) {
Group group = (Group) iterator.next();
if (manager.getMngGroups().contains(group))
manager.getMngGroups().remove(group);
if (group.getCreator().equals(manager) || manager.isAdmin())
entityService.remove(group);
}
entityService.saveOrUpdate(manager);
}
}