package com.norteksoft.mms.authority.web;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
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 com.norteksoft.acs.entity.authorization.Role;
import com.norteksoft.acs.service.authorization.StandardRoleManager;
import com.norteksoft.mms.authority.entity.DataRule;
import com.norteksoft.mms.authority.entity.Permission;
import com.norteksoft.mms.authority.entity.PermissionItem;
import com.norteksoft.mms.authority.entity.RuleType;
import com.norteksoft.mms.authority.enumeration.PermissionAuthorize;
import com.norteksoft.mms.authority.service.DataRuleManager;
import com.norteksoft.mms.authority.service.PermissionItemManager;
import com.norteksoft.mms.authority.service.PermissionManager;
import com.norteksoft.mms.authority.service.RuleTypeManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.util.PageUtils;
import com.norteksoft.product.web.struts2.CrudActionSupport;
import com.norteksoft.product.web.struts2.Struts2Utils;
@Namespace("/authority")
@ParentPackage("default")
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "permission", type = "redirectAction") })
public class PermissionAction extends CrudActionSupport<Permission>{
private static final long serialVersionUID = 1L;
private Permission permission;
private Long permissionId;
private Long id;//主子表中用到
private String ids;
private Page<Permission> page=new Page<Permission>(0, true);
private Page<PermissionItem> itemPage=new Page<PermissionItem>(0, true);
private Long dataRuleId;
private DataRule permissionDataRule;
private List<PermissionAuthorize> docAuthes;
private String validateAuths;//验证数据授权用到了,以逗号隔开的数字,如:1,2,4
private Integer permissionPriority;//验证数据授权用到
@Autowired
private PermissionManager permissionManager;
@Autowired
private PermissionItemManager permissionItemManager;
@Autowired
private StandardRoleManager standardRoleManager;
@Autowired
private DataRuleManager dataRuleManager;
@Autowired
private RuleTypeManager ruleTypeManager;
private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>";
private static final String MESSAGE_RIGHT = "</nobr></font>";
private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>";
protected void addErrorMessage(String message){
this.addActionMessage(ERROR_MESSAGE_LEFT+message+MESSAGE_RIGHT);
}
protected void addSuccessMessage(String message){
this.addActionMessage(SUCCESS_MESSAGE_LEFT+message+MESSAGE_RIGHT);
}
/**
* 删除数据授权
*/
@Override
@Action("permission-delete")
public String delete() throws Exception {
permissionManager.deletePermissions(ids);
addSuccessMessage("删除成功");
ApiFactory.getBussinessLogService().log("数据授权", "删除数据授权",ContextUtils.getSystemId("mms"));
return "permission-data";
}
/**
* 数据授权表单页面
*/
@Override
@Action("permission-input")
public String input() throws Exception {
permissionDataRule=dataRuleManager.getDataRule(dataRuleId);
ApiFactory.getBussinessLogService().log("数据授权", "数据授权表单",ContextUtils.getSystemId("mms"));
return "permission-input";
}
@Override
public String list() throws Exception {
return SUCCESS;
}
/**
* 数据授权列表
* @return
* @throws Exception
*/
@Action("permission-data")
public String permissionList() throws Exception {
if(page.getPageSize()>1){
ApiFactory.getBussinessLogService().log("数据授权", "数据授权列表",ContextUtils.getSystemId("mms"));
permissionManager.getPermissions(page,dataRuleId);
this.renderText(PageUtils.pageToJson(page));
return null;
}
return SUCCESS;
}
/**
* 数据授权条件项列表
* @return
* @throws Exception
*/
@Action("permission-item-list")
public String permissionItemList() throws Exception {
if(itemPage.getPageSize()>1){
if(id!=null){
permissionItemManager.getPermissionItems(itemPage, id);
this.renderText(PageUtils.pageToJson(itemPage));
}
}
return null;
}
@Override
protected void prepareModel() throws Exception {
if(permissionId==null){
permission=new Permission();
}else{
permission=permissionManager.getPermissions(permissionId);
}
}
/**
* 保存数据授权
*/
@Override
@Action("permission-save")
public String save() throws Exception {
permissionDataRule=dataRuleManager.getDataRule(dataRuleId);
permission.setDataRule(permissionDataRule);
permissionManager.savePermission(permission,docAuthes);
permissionId=permission.getId();
addSuccessMessage("保存成功");
ApiFactory.getBussinessLogService().log("数据授权", "保存数据授权",ContextUtils.getSystemId("mms"));
return "permission-input";
}
/**
* 角色树
* @return
* @throws Exception
*/
@Action("role-tree")
public String roleTree() throws Exception{
permissionDataRule=dataRuleManager.getDataRule(dataRuleId);
StringBuilder tree=new StringBuilder();
List<Role> roles=standardRoleManager.getAllStandardRole(permissionDataRule.getSystemId());
if(roles.size()<=0){
tree.append(JsTreeUtils.generateJsTreeNodeNew("_role", "", "角色", ""));
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew("_role", "open", "角色",roles(roles) ,""));
}
this.renderText(tree.toString());
return null;
}
private String roles(List<Role> roles){
StringBuilder tree=new StringBuilder();
for(Role role:roles){
tree.append(JsTreeUtils.generateJsTreeNodeNew("role-"+role.getCode()+"-"+role.getName(), "", role.getName(),"")).append(",");
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
/**
* 删除条件项
* @return
* @throws Exception
*/
@Action("permission-item-delete")
public String permissionItemDelete() throws Exception {
permissionItemManager.deletePermissionItem(id);
String callback=Struts2Utils.getParameter("callback");
ApiFactory.getBussinessLogService().log("数据授权", "删除数据授权中的条件项",ContextUtils.getSystemId("mms"));
this.renderText(callback+"({msg:'删除成功'})");
return null;
}
/**
* 验证该授权的优先级及操作权限
* @return
* @throws Exception
*/
@Action("validate-permission")
public String validatePermission() throws Exception {
ApiFactory.getBussinessLogService().log("数据授权", "验证数据授权",ContextUtils.getSystemId("mms"));
this.renderText(permissionManager.validatePermission(validateAuths,dataRuleId,permissionId,permissionPriority));
return null;
}
/**
* 数据规则树
* @return
* @throws Exception
*/
@Action("rule-type-data-tree")
public String ruleTypeDataTree() throws Exception {
StringBuilder tree=new StringBuilder();
List<RuleType> ruleTypes=ruleTypeManager.getRootRuleTypeByCompany();
if(ruleTypes.size()<=0){
tree.append(JsTreeUtils.generateJsTreeNodeNew("root", "", "数据规则", "root"));
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew("root", "open", "数据规则",ruleTypeChildren(ruleTypes) ,"root"));
}
this.renderText(tree.toString());
return null;
}
private String ruleTypeChildren(List<RuleType> ruleTypes){
StringBuilder tree=new StringBuilder();
for(RuleType type :ruleTypes){
List<RuleType> children = ruleTypeManager.getTypsByParentId(type.getId());
String dataRuleTree=dataRuleTree(type.getId());
if(StringUtils.isNotEmpty(dataRuleTree)){
if(children==null||children.size()==0){
tree.append(JsTreeUtils.generateJsTreeNodeNew("ruleType_"+type.getId().toString(), "open", type.getName(),dataRuleTree, "ruleType")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew("ruleType_"+type.getId().toString(), "open", type.getName(),dataRuleTree+","+ ruleTypeChildren(children),"ruleType")).append(",");
}
}else{
if(children==null||children.size()==0){
tree.append(JsTreeUtils.generateJsTreeNodeNew("ruleType_"+type.getId().toString(), "close", type.getName(), "ruleType")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew("ruleType_"+type.getId().toString(), "open", type.getName(), ruleTypeChildren(children),"ruleType")).append(",");
}
}
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
private String dataRuleTree(Long ruleTypeId){
StringBuilder tree=new StringBuilder();
List<DataRule> dataRules=dataRuleManager.getDataRulesByRuleType(ruleTypeId);
for(DataRule dataRule :dataRules){
tree.append(JsTreeUtils.generateJsTreeNodeNew("dataRule_"+dataRule.getId().toString(), "close", dataRule.getName(), "dataRule")).append(",");
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
public Permission getModel() {
return permission;
}
public Permission getPermission() {
return permission;
}
public void setPermission(Permission permission) {
this.permission = permission;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Page<Permission> getPage() {
return page;
}
public void setIds(String ids) {
this.ids = ids;
}
public DataRule getPermissionDataRule() {
return permissionDataRule;
}
public Long getPermissionId() {
return permissionId;
}
public void setPermissionId(Long permissionId) {
this.permissionId = permissionId;
}
public Page<PermissionItem> getItemPage() {
return itemPage;
}
public void setPage(Page<Permission> page) {
this.page = page;
}
public void setItemPage(Page<PermissionItem> itemPage) {
this.itemPage = itemPage;
}
public List<PermissionAuthorize> getDocAuthes() {
return docAuthes;
}
public void setDocAuthes(List<PermissionAuthorize> docAuthes) {
this.docAuthes = docAuthes;
}
public Long getDataRuleId() {
return dataRuleId;
}
public void setDataRuleId(Long dataRuleId) {
this.dataRuleId = dataRuleId;
}
public void setValidateAuths(String validateAuths) {
this.validateAuths = validateAuths;
}
public void setPermissionPriority(Integer permissionPriority) {
this.permissionPriority = permissionPriority;
}
}