
edi.rule.work.interfaces.IJSRuleAssertModel Maven / Gradle / Ivy
package edi.rule.work.interfaces;
import edi.rule.core.JSRuleArgsVessel;
import edi.rule.extend.interfaces.IJSRuleAssert;
import edi.rule.extend.interfaces.IJSRuleModel;
import edi.rule.util.ZSObject;
import edi.rule.util.ZSRule;
import edi.rule.util.ZSString;
/**
* @author 摩拉克斯
* @date 2023年7月28日 下午3:11:58
* 断言器模型接口,用于框架内置断言器模型的统一处理接口
*
当子节点的name,path,value任何一个属性为空时,则默认从父节点那里继承对应的属性,依此往复
*/
public interface IJSRuleAssertModel extends IJSRuleAssert,IJSRuleModel{
/**
*
获取执行后的action结果的名字
* */
String getName();
/**
*
设置执行后的action结果的名字
* */
void setName(String name);
/**
*
表示action结果中取值的路径,因此仅当name属性不为空时才有效,其语法如/nodeA/0/nodeC,0表示数组第几个元素,nodeA,nodeC表示属性名称
*
path获取到的数据类型暂时仅支持String,int,double,boolean,当path从name对应的action结果中获取不到相应属性时则默认使用当前的value值
* */
String getPath();
/**
*
设置action结果中取值的路径
* */
void setPath(String path);
/**
*
value为实际的值,当name不为空时则直接取action的执行结果进行覆盖,如果path也不为空时,将会从action结果的path路径中取属性的值进行覆盖
*
注意:如果name,path,value均为空时,则value为空,将不参与范围比较器的判断,如gt,lt,ge,le
* */
Object getValue();
/**
*
设置实际值的默认值
* */
void setValue(Object value);
/**
*
如果name不为空,则初始化value的值,将action的结果直接赋值给value,如果path也不为空,那么将会从name对应的action结果中解析path得到的结果来初始化value
* @param fName 父节点的name属性,如果当前节点的name为空,则默认从父节点那里继承对应的属性,依此往复
* @param fPath 父节点的path属性,如果当前节点的path为空,则默认从父节点那里继承对应的属性,依此往复
* @param fValue 父节点的value属性,如果当前节点的value为空,则默认从父节点那里继承对应的属性,依此往复
* @param vessel 线程全局变量,spring bean的类中可通过@Autowired方式注入该参数用于获取json请求参数,model类可通过@JSRuleInject注解方式获取
* @see IJSRuleAssertModel#getPath()
* */
default void init(String fName, String fPath, Object fValue, JSRuleArgsVessel vessel) {
if (ZSString.isBlank(getName())) {
setName(fName);
}
if (ZSString.isBlank(getPath())) {
setPath(fPath);
}
if (ZSObject.isBlank(getValue())) {
setValue(fValue);
}
setValue(ZSRule.parseResult(getName(),getPath(),getValue(),vessel));
}
}