package com.hrms.dao.impl; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Repository; import com.hrms.dao.IModuleDao; import com.hrms.dao.IRoleDao; import com.hrms.dao.IRoleModuleDao; import com.hrms.model.Module; import com.hrms.model.Role; import com.hrms.model.RoleModule; @Repository("roleModuleDao") public class RoleModuleDaoImpl extends GenericDaoImpl<RoleModule, Integer> implements IRoleModuleDao { private IModuleDao moduleDao; private IRoleDao roleDao; public boolean addToRole(Integer roleId,String moduleIdSum) { if (roleId!=null && roleId>0 && moduleIdSum!=null && !moduleIdSum.equals("")) { RoleModule roleModule = getRoleModuleByRoleId(roleId); if (roleModule!=null) { String[] moduleIdSumArray = moduleIdSum.split(","); List<String> list = new LinkedList<String>(); String[] sIdSum = getRoleModuleId(roleId); if (sIdSum!=null&&sIdSum.length>0) { for (int i = 0; i < sIdSum.length; i++) { if(!list.contains(sIdSum[i])) { list.add(sIdSum[i]); } } } for (int j = 0; j < moduleIdSumArray.length; j++) { if(!list.contains(moduleIdSumArray[j])) { list.add(moduleIdSumArray[j]); } } if (list.size()>sIdSum.length) { String[] newrIdSumArray = (String[])list.toArray(new String[list.size()]); String newrIdSum="1"; for (int i = 0; i < newrIdSumArray.length; i++) { newrIdSum = newrIdSum + "," +newrIdSumArray[i]; } newrIdSum = newrIdSum.substring(2); roleModule.setModuleSum(newrIdSum); return this.update(roleModule); } }else { roleModule = new RoleModule(); Role role = roleDao.findById(roleId); roleModule.setRole(role); roleModule.setModuleSum(moduleIdSum); return this.save(roleModule); } } return false; } public boolean removeFromRole(Integer roleId, String moduleIdSum) { if (roleId!=null && roleId>0 && moduleIdSum!=null && !moduleIdSum.equals("")) { RoleModule roleModule = getRoleModuleByRoleId(roleId); if (roleModule!=null) { List<String> list = new LinkedList<String>(); String[] roleModuleIdSum = getRoleModuleId(roleId); String[] moduleIdSumArray = moduleIdSum.split(","); if (roleModuleIdSum!=null && roleModuleIdSum.length>0) { for (int i = 0; i < roleModuleIdSum.length; i++) { if(!list.contains(roleModuleIdSum[i])) { list.add(roleModuleIdSum[i]); } } } for (int j = 0; j < moduleIdSumArray.length; j++) { if (list.contains(moduleIdSumArray[j])) { list.remove(moduleIdSumArray[j]); } } if (list.size()<roleModuleIdSum.length) { String[] newrIdSumArray = (String[])list.toArray(new String[list.size()]); String newrIdSum="1"; for (int i = 0; i < newrIdSumArray.length; i++) { newrIdSum = newrIdSum + "," +newrIdSumArray[i]; } if (newrIdSum.length()>2) { newrIdSum = newrIdSum.substring(2); } roleModule.setModuleSum(newrIdSum); return this.update(roleModule); } } } return false; } @SuppressWarnings("unchecked") public RoleModule getRoleModuleByRoleId(Integer roleId) { List<RoleModule> list = getHibernateTemplate().find("from RoleModule where roleId=?",roleId); if (list!=null && list.size()>0) { return list.get(0); } return null; } public boolean roleModuleTreeInXml(String fileName,Integer roleId) { File file = new File(fileName); try { PrintWriter out = new PrintWriter(file,"UTF-8"); out.println("<?xml version='1.0' encoding='UTF-8'?>"); out.println("<tree id=\"0\">"); out.println("<item text=\""+moduleDao.getRootModule().getModuleName()+"\" id=\""+moduleDao.getRootModule().getModuleId()+"\" open=\"1\" im0=\"tombs.gif\" im1=\"tombs.gif\" im2=\"iconSafe.gif\" call=\"1\" select=\"1\">"); if (roleId!=null && roleId>=0) { List<Module> roleModuleList = getRoleModule(roleId); if (roleModuleList!=null && roleModuleList.size()>0) { for (int i = 0; i < roleModuleList.size(); i++) { moduleDao.moduleTreeInXml(roleModuleList.get(i).getModuleId(),roleModuleList, out); } } } out.println("</item>"); out.println("</tree>"); out.flush(); out.close(); if (file.exists()) { return true; }else { return false; } } catch (IOException e) { System.out.println("moduleTree to xml got a exception!"); e.printStackTrace(); return false; } } public List<Module> getRoleModule(Integer roleId) { String[] s = getRoleModuleId(roleId); if (s!=null && s.length>0) { return moduleDao.getModule(s); } return null; } public String getRoleModuleTree(Integer roleId) { String[] roleModuleIdSum = getRoleModuleId(roleId); if(roleModuleIdSum != null && roleModuleIdSum.length>0) { StringBuffer leftModuleTree = new StringBuffer(); leftModuleTree.append("<script type=text/javascript>") .append("var tree = null;") .append("var root = new TreeNode('" + moduleDao.getRootModule().getModuleName() + "');"); for(int i=0;i<roleModuleIdSum.length;i++){ leftModuleTree.append(moduleDao.getModules(Integer.valueOf(roleModuleIdSum[i]))); } leftModuleTree.append("tree = new Tree(root);") .append("tree.show('menuTree');") .append("</script>"); return leftModuleTree.toString(); } else { return "this role have no menu "; } } @SuppressWarnings("unchecked") public String[] getRoleModuleId(Integer roleId) { if (roleId!=null) { List<RoleModule> list = this.getHibernateTemplate().find("from " + this.getPersistentClass().getName() + " where roleId = ?",roleId); if(list != null && list.size() >= 1){ return list.get(0).getModuleSum().split(","); } } return null; } @SuppressWarnings("unchecked") public String getOneRoleModuleId(Integer roleId) { List<RoleModule> list = this.getHibernateTemplate().find("from " + this.getPersistentClass().getName() + " where roleId = ?",roleId); if(list != null && list.size() >= 1){ return list.get(0).getModuleSum(); }else { return null; } } public String[] getRoleModuleIdCount(List<Role> roles) { if(roles.size()>0) { int size = roles.size(); for(int i=0;i<roles.size();i++) { if(getOneRoleModuleId(roles.get(i).getRoleId()) == null ) { size--; } } if(size>0) { StringBuffer sb = new StringBuffer(); String[] roleModuleSum = new String[size]; for(int i=0;i<roleModuleSum.length;i++) { sb.append(getOneRoleModuleId(roles.get(i).getRoleId())+","); } String[] roleModule = sb.toString().split(","); if(roleModule != null && roleModule.length>0) { List<String> list = new LinkedList<String>(); for(int i = 0; i < roleModule.length; i++) { if(!list.contains(roleModule[i])) { list.add(roleModule[i]); } } return (String[])list.toArray(new String[list.size()]); } } } return null; } public IModuleDao getModuleDao() { return moduleDao; } @Resource public void setModuleDao(IModuleDao moduleDao) { this.moduleDao = moduleDao; } public IRoleDao getRoleDao() { return roleDao; } @Resource public void setRoleDao(IRoleDao roleDao) { this.roleDao = roleDao; } }