package com.oa.service.impl;
import java.io.Serializable;
import com.oa.model.UsersRoles;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedHashMap;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Component;
import com.oa.dao.RoleDao;
import com.oa.dao.SuperDaoInte;
import com.oa.dao.impl.SuperDao;
import com.oa.model.Acl;
import com.oa.model.Module;
import com.oa.model.Role;
import com.oa.model.UserPrivilege;
import com.oa.model.Users;
import com.oa.service.RoleService;
@Component("roleService")
public class RoleServiceImpl implements RoleService{
private RoleDao roleDao;
private Users user;
private LinkedHashMap<Module, LinkedHashMap<Module, List>> mapModules = new LinkedHashMap<Module, LinkedHashMap<Module, List>>();
public RoleDao getRoleDao() {
return roleDao;
}
@Resource
public void setRoleDao(RoleDao roleDao) {
this.roleDao = roleDao;
}
public List<Role> find() {
String sql = "from Role";
return roleDao.find(sql);
}
public void deleteRole(Integer id) {
Role role = roleDao.getRoleById(id);
roleDao.deleteRole(role);
}
public void update(Role role) {
roleDao.update(role);
}
public void add(Role role) {
roleDao.add(role);
}
public List<Role> getAllRole(Class<Role> clazz, String hql) {
return roleDao.getAllRole(clazz, hql);
}
public Role getUpdateRole(Serializable id) {
return roleDao.getRoleById(id);
}
public Acl getsAcl(Role role) {
String sql = "from Acl a where a.principalId.id = ?";
return roleDao.getsAcl(sql, new Object[]{role.getId()});
}
public Module getsModule(Class<Module> clazz, Serializable id) {
return roleDao.getsModule(clazz, id);
}
public List<Module> getModules() {
String sql = "from Module m where pid is null";
return roleDao.getsModules(sql);
}
public List<Module> getChildModules(Integer id) {
String sql = "from Module m where m.pid.id = " + id;
return roleDao.getsModules(sql);
}
public LinkedHashMap<Module, LinkedHashMap<Module, List>> getLinkedHashMapModules() {
return mapModules;
}
public void setLinkedHashMapModules(LinkedHashMap<Module, LinkedHashMap<Module, List>> mapModules) {
this.mapModules = mapModules;
}
private List<Module> objectToList(List<Object> list) {
List<Module> modules = new ArrayList<Module>();
for (Object o : list) {
modules.add((Module) o);
}
return modules;
}
public List<Module> getAllModules(Class clazz, String hql) {
return objectToList(roleDao.getAllObjects(clazz, hql));
}
private List getAclState(int id) {
System.out.println("id is "+id);
List listInt = new ArrayList();
listInt.add(id&1);
listInt.add(id&2);
listInt.add(id&4);
listInt.add(id&8);
System.out.println(id+"&1 "+String.valueOf(id&1));
System.out.println(id+"&2 "+String.valueOf(id&2));
System.out.println(id+"&4 "+String.valueOf(id&4));
System.out.println(id+"&8 "+String.valueOf(id&8));
return listInt;
}
public LinkedHashMap<Module, LinkedHashMap<Module, List>> getCategories(Role role) {
if (mapModules.size()==0) {
System.err.println("mapModules is null");
List<Module> parentModule = getAllModules(Module.class,
" and s.pid is null");
Acl acl = null;
String sql2 = "from Acl a where a.principalId = ? and a.moduleId = ?";
for (int i = 0; i < parentModule.size(); i++) {
LinkedHashMap<Module, List> maps = new LinkedHashMap<Module, List>();
System.err.println("parent module "+parentModule.get(i).toString());
Set<Module> temp = parentModule.get(i).getModules();
if (temp.size() == 0) {
mapModules.put(parentModule.get(i), null);
} else {
for (Iterator iterator = temp.iterator(); iterator.hasNext();) {
List<Integer> listInt = null;
Module module = (Module) iterator.next();
System.out.println("children module " + module.toString());
acl = roleDao.getAclById(sql2, new Object[]{role, module});
if(acl != null) {
listInt = getAclState(acl.getAclState());
for(Object o : listInt) {
System.out.println("crud"+o);
}
maps.put(module, listInt);
} else {
listInt = new ArrayList<Integer>();
for(int j=0; j<4; j++) {
listInt.add(0);
}
for(Object o : listInt) {
System.out.println("crud"+o);
}
maps.put(module, listInt);
}
}
mapModules.put(parentModule.get(i), maps);
}
}
ServletActionContext.getRequest().getSession().setAttribute("aclId", -1);
} else {
Iterator iterator = mapModules.keySet().iterator();
while (iterator.hasNext()) {
Module key = (Module) iterator.next();
iterator.remove(); //添加该行代码
mapModules.remove(key);
}
System.out.println("mapppppp size is "+mapModules.size());
System.out.println("role issssssssssssssssssss "+role.getName());
getCategories(role);
}
return mapModules;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public void addAcl(Acl acl) {
roleDao.addAcl(acl);
}
public boolean ExistsAcl(Role role, Module module) {
String sql = "from Acl a where a.principalId = ? and a.moduleId = ?";
return roleDao.ExistsAcl(sql, new Object[]{role,module});
}
public Acl getOrgBoxValue(Role role, Module module) {
String sql = "from Acl a where a.principalId = ? and a.moduleId = ?";
return roleDao.getAcl(sql, new Object[]{role,module});
}
public void updateAcl(Acl acl) {
roleDao.updateAcl(acl);
}
public Users getsUsers(Class<Users> clazz,Serializable userId) {
return roleDao.getsUsers(clazz, userId);
}
public void addUserPrivilege(UserPrivilege up) {
roleDao.addUserPrivilege(up);
}
}