package com.norteksoft.acs.web.authorization; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import com.norteksoft.acs.base.web.struts2.CRUDActionSupport; import com.norteksoft.acs.entity.authorization.BusinessSystem; import com.norteksoft.acs.entity.authorization.Function; import com.norteksoft.acs.entity.authorization.FunctionGroup; import com.norteksoft.acs.entity.authorization.Role; import com.norteksoft.acs.service.authorization.BusinessSystemManager; import com.norteksoft.acs.service.authorization.FunctionGroupManager; import com.norteksoft.acs.service.authorization.FunctionManager; import com.norteksoft.acs.service.authorization.RoleManager; import com.norteksoft.acs.web.eunms.AddOrRomoveState; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.JsTreeUtils; /** * author 李洪超 version * 创建时间:2009-3-11 上午09:51:10 * 部门管理Action */ @ParentPackage("default") @Results( { @Result(name = CRUDActionSupport.RELOAD, location = "function-group?systemId=${systemId}", type = "redirectAction") }) public class FunctionGroupAction extends CRUDActionSupport<FunctionGroup> { private static final long serialVersionUID = 4814560124772644966L; private FunctionGroupManager functionGroupManager; private BusinessSystemManager businessSystemManager; private FunctionManager functionManager; private RoleManager roleManager; private Page<FunctionGroup> page = new Page<FunctionGroup>(20, true); private Page<Function> pageFunction = new Page<Function>(20, true); private FunctionGroup functionGroup; private Long id; private List<FunctionGroup> allFunctionGroup; private String function_Name; private String function_Id; private Long paternId; private List<Long> functionIds; private Long systemId; private Integer isAddOrRomove; private String systemTree; private String nodeId; private Long roleId; public String loadFunctionTree() throws Exception{ StringBuilder tree = new StringBuilder("["); if("INIT".equals(nodeId)){ BusinessSystem system = roleManager.getRole(roleId).getBusinessSystem(); tree.append(JsTreeUtils.generateJsTreeNodeNew("SYSTEM_", "open", system.getName(), functionGroupNode(system.getId()), "")); }else if(nodeId.startsWith("GROUP_")){ tree.append(functionNode(Long.parseLong(nodeId.split("_")[1]))); } tree.append("]") ; this.renderText(tree.toString()); return null; } private String functionGroupNode(Long systemId){ StringBuilder node = new StringBuilder(); List<FunctionGroup> functionGroups = functionGroupManager.getFuncGroupsBySystem(systemId); for(FunctionGroup group : functionGroups){ node.append(JsTreeUtils.generateJsTreeNodeNew("GROUP_"+group.getId(), "closed", group.getName(), "folder")).append(","); } return deleteLastComma(node.toString()); } private String functionNode(Long groupId){ List<Function> functions = functionManager.getFunctionsByFunctionGroup(groupId); Role role = roleManager.getRole(roleId); List<Long> checkedIds = roleManager.getFunctionIds(roleId, role.getBusinessSystem().getId()); if(0==isAddOrRomove){ return unCheckedNodes(functions, checkedIds); }else if(1==isAddOrRomove){ return checkedNodes(functions, checkedIds); } return ""; } private String unCheckedNodes(List<Function> functions, List<Long> checkedIds){ StringBuilder nodes = new StringBuilder(); for(Function fun : functions){ if(!checkedIds.contains(fun.getId())){ nodes.append(JsTreeUtils.generateJsTreeNodeNew("FUN_"+fun.getId(), "", fun.getName(), "")).append(","); } } return deleteLastComma(nodes.toString()); } private String checkedNodes(List<Function> functions, List<Long> checkedIds){ StringBuilder nodes = new StringBuilder(); for(Function fun : functions){ if(checkedIds.contains(fun.getId())){ nodes.append(JsTreeUtils.generateJsTreeNodeNew("FUN_"+fun.getId(), "", fun.getName(), "")).append(","); } } return deleteLastComma(nodes.toString()); } private String deleteLastComma(String str){ if(StringUtils.endsWith(str, ","))str= str.substring(0,str.length() - 1); return str; } @Override public String delete() throws Exception { functionGroupManager.deleteFunGroup(id); addActionMessage(getText("common.deleted")); return RELOAD; } @Override public String list() throws Exception { //page = functionGroupManager.getSearchFunctionGroup(page, functionGroup, false); generateTree(); return SUCCESS; } /* * 生成系统JSON树 */ private void generateTree(){ StringBuilder tree = new StringBuilder("[ "); List<BusinessSystem> businessSystems = businessSystemManager.getAllBusiness(); for(BusinessSystem bs : businessSystems){ tree.append(JsTreeUtils.generateJsTreeNode("BUSINESSSYSTEM_"+bs.getId(), "", bs.getName())); tree.append(","); } if(tree.lastIndexOf(",") != -1 && tree.lastIndexOf(",") == tree.length()-1){ tree.replace(tree.length()-1, tree.length(), ""); } tree.append(" ]") ; if(businessSystems.size() > 0){ if(systemId == null){ systemId = businessSystems.get(0).getId(); } page = functionGroupManager.getFuncGroupsBySystem(page, systemId); } setSystemTree(tree.toString()); } @Override public String input() throws Exception { return INPUT; } @Override protected void prepareModel() throws Exception { if (id != null) { functionGroup = functionGroupManager.getFunctionGroup(id); } else { functionGroup = new FunctionGroup(); if(systemId != null){ BusinessSystem businessSystem = businessSystemManager.getBusiness(systemId); functionGroup.setBusinessSystem(businessSystem); } } } @Override public String save() throws Exception { functionGroupManager.saveFunGroup(functionGroup); addActionMessage(getText("common.saved")); systemId = functionGroup.getBusinessSystem().getId(); return RELOAD; } /** * 功能组添加功能跳转页面 * * @return * @throws Exception */ public String inputFunction() throws Exception { functionGroup = functionGroupManager.getFunctionGroup(paternId); pageFunction = functionGroupManager.getAllFunction(pageFunction,function_Id,function_Name,functionGroup.getBusinessSystem().getId()); systemId = functionGroup.getBusinessSystem().getId(); isAddOrRomove=AddOrRomoveState.ADD.code; generateTree(); return "function-list"; } /** * 功能组移除功能跳转页面 * * @return * @throws Exception */ public String romoveFunction() throws Exception { functionGroup = functionGroupManager.getFunctionGroup(paternId); pageFunction = functionGroupManager.getAllRomoveFunction(pageFunction,function_Id,function_Name,functionGroup.getBusinessSystem().getId(),paternId); systemId = functionGroup.getBusinessSystem().getId(); isAddOrRomove=AddOrRomoveState.ROMOVE.code; generateTree(); return "function-list"; } /** * 保存功能组和功能的关系 * @return * @throws Exception */ public String saveFunction() throws Exception { functionGroup = functionGroupManager.getFunctionGroup(paternId); systemId = functionGroup.getBusinessSystem().getId(); functionGroupManager.saveFunction(paternId, functionIds,isAddOrRomove); return RELOAD; } /** * 按条件查询 * * @return */ public void prepareSearch() throws Exception { prepareModel(); } public String search() throws Exception { page = functionGroupManager.getSearchFunctionGroup(page, functionGroup, false); return SUCCESS; } public FunctionGroup getModel() { return functionGroup; } public Page<FunctionGroup> getPage() { return page; } public void setPage(Page<FunctionGroup> page) { this.page = page; } @Required public void setFunctionGroupManager( FunctionGroupManager functionGroupManager) { this.functionGroupManager = functionGroupManager; } @Autowired public void setRoleManager(RoleManager roleManager) { this.roleManager = roleManager; } public List<FunctionGroup> getAllFunGroup() { return allFunctionGroup; } public void setId(Long id) { this.id = id; } public Page<Function> getPageFunction() { return pageFunction; } public void setPageFunction(Page<Function> pageFunction) { this.pageFunction = pageFunction; } public FunctionManager getFunctionManager() { return functionManager; } @Required public void setBusinessSystemManager(BusinessSystemManager businessSystemManager) { this.businessSystemManager = businessSystemManager; } @Required public void setFunctionManager(FunctionManager functionManager) { this.functionManager = functionManager; } public Long getPaternId() { return paternId; } public void setPaternId(Long paternId) { this.paternId = paternId; } public List<Long> getFunctionIds() { return functionIds; } public void setFunctionIds(List<Long> functionIds) { this.functionIds = functionIds; } public Long getSystemId() { return systemId; } public void setSystemId(Long systemId) { this.systemId = systemId; } public String getFuncGroupsBySystem(){ if(systemId != null){ page = functionGroupManager.getFuncGroupsBySystem(page, systemId); } return SUCCESS; } public Integer getIsAddOrRomove() { return isAddOrRomove; } public void setIsAddOrRomove(Integer isAddOrRomove) { this.isAddOrRomove = isAddOrRomove; } public String getFunction_Name() { return function_Name; } public void setFunction_Name(String function_Name) { this.function_Name = function_Name; } public String getFunction_Id() { return function_Id; } public void setFunction_Id(String function_Id) { this.function_Id = function_Id; } public void setFunctionGroup(FunctionGroup functionGroup) { this.functionGroup = functionGroup; } public FunctionGroup getFunctionGroup() { return functionGroup; } public String getSystemTree() { return systemTree; } public void setSystemTree(String systemTree) { this.systemTree = systemTree; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } }