package com.norteksoft.mms.authority.web; import java.util.List; 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.mms.authority.entity.RuleType; import com.norteksoft.mms.authority.service.RuleTypeManager; import com.norteksoft.product.util.JsTreeUtils; import com.norteksoft.product.web.struts2.CrudActionSupport; @Namespace("/authority") @ParentPackage("default") @Results( { @Result(name = CrudActionSupport.RELOAD, location = "rule-type", type = "redirectAction") }) public class RuleTypeAction extends CrudActionSupport<RuleType> { private static final long serialVersionUID = 1L; private Long id; private RuleType ruleType; private Long parentRuleTypeId; private String code; @Autowired private RuleTypeManager ruleTypeManager; @Override protected void prepareModel() throws Exception { if(id==null){ ruleType=new RuleType(); if(parentRuleTypeId!=null){ ruleType.setParent(ruleTypeManager.getRuleType(parentRuleTypeId)); } }else { ruleType=ruleTypeManager.getRuleType(id); } } @Action("rule-type-input") @Override public String input() throws Exception { return "rule-type-input"; } @Action("rule-type-save") @Override public String save() throws Exception { ruleTypeManager.saveRuleType(ruleType); if(parentRuleTypeId!=null){ ruleType.setParent(ruleTypeManager.getRuleType(parentRuleTypeId)); } renderText(ruleType.getId().toString()+":"+ruleType.getName()); return null; } @Action("rule-type-validateCode") public String validateCode(){ String result = ruleTypeManager.validateCode(code,id); renderText(result); return null; } @Action("rule-type-delete") @Override public String delete() throws Exception { this.renderText(ruleTypeManager.deleteRuleType(id)); return null; } @Action("list") @Override public String list() throws Exception { return "rule-type"; } @Action("rule-type-tree") public String ruleTypeTree(){ List<RuleType> ruleTypes = ruleTypeManager.getRootRuleTypeByCompany(); StringBuilder tree = new StringBuilder(); if(ruleTypes.size()<=0){ tree.append(JsTreeUtils.generateJsTreeNodeNew("root", "", "规则类别", "root")); }else{ tree.append(JsTreeUtils.generateJsTreeNodeNew("root", "open", "规则类别",ruleTypeChildren(ruleTypes) ,"root")); } 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()); if(children==null){ tree.append(JsTreeUtils.generateJsTreeNodeNew(type.getId().toString(), "close", type.getName(), "")).append(","); }else{ tree.append(JsTreeUtils.generateJsTreeNodeNew(type.getId().toString(), "close", type.getName(), childRuleType(children),"")).append(","); } } JsTreeUtils.removeLastComma(tree); tree.append(" ]"); return tree.toString(); } /* * 递归规则类型父子关系,形成tree */ private String childRuleType(List<RuleType> ruleTypes){ //java.util.Collections.sort(ruleTypes); StringBuilder tree = new StringBuilder(); for(RuleType type :ruleTypes){ List<RuleType> children = ruleTypeManager.getTypsByParentId(type.getId()); if(children==null){ tree.append(JsTreeUtils.generateJsTreeNodeNew(type.getId().toString(), "close", type.getName(), "")).append(","); }else{ tree.append(JsTreeUtils.generateJsTreeNodeNew(type.getId().toString(), "close", type.getName(), childRuleType(children),"")).append(","); } } JsTreeUtils.removeLastComma(tree); return tree.toString(); } public void setId(Long id) { this.id = id; } public Long getId() { return id; } public RuleType getModel() { return ruleType; } public Long getParentRuleTypeId() { return parentRuleTypeId; } public void setParentRuleTypeId(Long parentRuleTypeId) { this.parentRuleTypeId = parentRuleTypeId; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }