package com.norteksoft.mms.authority.web;
import java.util.ArrayList;
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.mms.authority.entity.Condition;
import com.norteksoft.mms.authority.entity.DataRule;
import com.norteksoft.mms.authority.entity.RuleType;
import com.norteksoft.mms.authority.service.ConditionManager;
import com.norteksoft.mms.authority.service.DataRuleManager;
import com.norteksoft.mms.authority.service.RuleTypeManager;
import com.norteksoft.mms.form.entity.DataTable;
import com.norteksoft.mms.form.entity.TableColumn;
import com.norteksoft.mms.module.entity.Menu;
import com.norteksoft.mms.module.service.MenuManager;
import com.norteksoft.product.orm.Page;
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 = "data-rule", type = "redirectAction") })
public class DataRuleAction extends CrudActionSupport<DataRule>{
private static final long serialVersionUID = 1L;
private Long id;
private String ids;
private DataRule dataRule;
private Page<DataRule> page=new Page<DataRule>(0,true);
private Page<DataTable> dataRulePage=new Page<DataTable>(0,true);
private Page<TableColumn> tableColumnPage=new Page<TableColumn>(0,true);
private Page<Condition> conditionPage=new Page<Condition>(0,true);
private Long dataTableMenuId;
private Long tableId;
private String currentInputId;
private Long ruletypeId;
private Long dataRuleId;
private String dataValue;
private List<String[]> values = new ArrayList<String[]>();
@Autowired
private DataRuleManager dataRuleManager;
@Autowired
private MenuManager menuManager;
@Autowired
private ConditionManager conditionManager;
@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("data-rule-delete")
public String delete() throws Exception {
dataRuleManager.deleteDataRule(ids);
this.renderText("ok");
return null;
}
@Action("data-rule-validateDelete")
public String validateDelete() throws Exception {
String result=dataRuleManager.validateDelete(ids);
if(StringUtils.isNotEmpty(result)){
this.renderText(result);
}else{
this.renderText("ok");
}
return null;
}
@Override
@Action("data-rule-input")
public String input() throws Exception {
if(dataRuleId==null && ruletypeId != null){
RuleType ruleType=ruleTypeManager.getRuleType(ruletypeId);
dataRule.setRuleTypeId(ruletypeId);
dataRule.setRuleTypeName(ruleType.getName());
}
return "data-rule-input";
}
@Override
@Action("data-rule")
public String list() throws Exception {
if(page.getPageSize()>1){
dataRuleManager.getDataRulesByRuleType(page,ruletypeId);
this.renderText(PageUtils.pageToJson(page));
return null;
}
return "data-rule";
}
protected void prepareModel() throws Exception {
if(dataRuleId==null){
dataRule=new DataRule();
}else{
dataRule=dataRuleManager.getDataRule(dataRuleId);
}
}
@Override
@Action("data-rule-save")
public String save() throws Exception {
if(dataTableMenuId != null){
Menu menu=menuManager.getMenu(dataTableMenuId);
if(menu != null)
dataRule.setSystemId(menu.getSystemId());
}
dataRuleManager.saveDataRule(dataRule);
dataRuleId=dataRule.getId();
addSuccessMessage("保存成功");
return "data-rule-input";
}
public void prepareValidateOnlyCode() throws Exception {
prepareModel();
}
/**
* 验证数据规则的编码是否唯一
* @return
*/
@Action("validate-only-code")
public String validateOnlyCode() {
boolean sign=true;
DataRule original;
if(dataRuleId==null){
original=dataRuleManager.getDataRuleByCode(dataRule.getCode());
if(original!=null){
sign=false;
}
}else{
original=dataRuleManager.getDataRuleByCode(dataRule.getCode(),dataRuleId);
if(original!=null){
sign=false;
}
}
if(sign){
this.renderText("ok");
}else{
this.renderText("no");
}
return null;
}
/**
* 选择数据表
* @return
*/
@Action("data-rule-selectDataTable")
public String selectDataTable() {
if(dataRulePage.getPageSize()>1){
dataRuleManager.findAllEnabledDataTable(dataRulePage);
this.renderText(PageUtils.pageToJson(dataRulePage));
return null;
}
return "data-rule-selectDataTable";
}
/**
* 选择数据表字段
* @return
*/
@Action("data-rule-selectColumn")
public String selectColumn() {
if(tableColumnPage.getPageSize()>1){
dataRuleManager.getTableColumnByDataTableId(tableColumnPage,tableId);
this.renderText(PageUtils.pageToJson(tableColumnPage));
return null;
}
return "data-rule-selectColumn";
}
/**
* 设置布尔型数据的条件值
* @return
*/
@Action("data-rule-setValue")
public String setValue() {
String[] stringArray = dataValue.split(",");
for (String s : stringArray) {
String[] str = new String[2];
str[0] = s.split(":")[0];
str[1] = s.split(":")[1].replace("'", "");
values.add(str);
}
return "data-rule-setValue";
}
/**
* 删除数据表规则条件
* @return
*/
@Action("data-rule-deleteCondition")
public String deleteCondition() {
conditionManager.delete(id);
String callback=Struts2Utils.getParameter("callback");
this.renderText(callback+"({msg:'删除成功'})");
return null;
}
/**
* 根据规则id获得数据表规则条件
* @return
*/
@Action("data-rule-condition-list")
public String conditionList() {
if(conditionPage.getPageSize()>1){
if(id!=null){
conditionManager.getConditionPage(conditionPage, id);
this.renderText(PageUtils.pageToJson(conditionPage));
}
}
return null;
}
/**
* 规则类别树
* @return
* @throws Exception
*/
@Action("data-rule-type-tree")
public String dataRuleTypeTree() 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());
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();
}
public DataRule getModel() {
return dataRule;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public DataRule getDataRule() {
return dataRule;
}
public void setDataRule(DataRule dataRule) {
this.dataRule = dataRule;
}
public Page<DataRule> getPage() {
return page;
}
public void setPage(Page<DataRule> page) {
this.page = page;
}
public Page<DataTable> getDataRulePage() {
return dataRulePage;
}
public void setDataRulePage(Page<DataTable> dataRulePage) {
this.dataRulePage = dataRulePage;
}
public void setDataTableMenuId(Long dataTableMenuId) {
this.dataTableMenuId = dataTableMenuId;
}
public void setTableId(Long tableId) {
this.tableId = tableId;
}
public Long getTableId() {
return tableId;
}
public Page<TableColumn> getTableColumnPage() {
return tableColumnPage;
}
public void setTableColumnPage(Page<TableColumn> tableColumnPage) {
this.tableColumnPage = tableColumnPage;
}
public String getCurrentInputId() {
return currentInputId;
}
public void setCurrentInputId(String currentInputId) {
this.currentInputId = currentInputId;
}
public Page<Condition> getConditionPage() {
return conditionPage;
}
public void setConditionPage(Page<Condition> conditionPage) {
this.conditionPage = conditionPage;
}
public Long getRuletypeId() {
return ruletypeId;
}
public void setRuletypeId(Long ruletypeId) {
this.ruletypeId = ruletypeId;
}
public Long getDataRuleId() {
return dataRuleId;
}
public void setDataRuleId(Long dataRuleId) {
this.dataRuleId = dataRuleId;
}
public String getDataValue() {
return dataValue;
}
public void setDataValue(String dataValue) {
this.dataValue = dataValue;
}
public List<String[]> getValues() {
return values;
}
public void setValues(List<String[]> values) {
this.values = values;
}
}