
edi.rule.model.JSRuleShunt Maven / Gradle / Ivy
package edi.rule.model;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnore;
import edi.rule.annotation.JSRuleCheck;
import edi.rule.annotation.JSRuleInject;
import edi.rule.core.JSRuleArgsVessel;
import edi.rule.extend.interfaces.IJSRuleActionModel;
import lombok.Data;
/**
* @author 摩拉克斯
* @date 2023年7月22日 上午10:48:53
* 分流器,根据断言器{@link JSRuleAssert}的结果来对actions进行分流处理,如果为true则使用then属性下的actions,反之则使用otherwise属性
*/
@Data
public final class JSRuleShunt> implements IJSRuleActionModel{
/**
* 代表与或逻辑(and or),默认为and
* */
public Boolean ifAnd;
/**
*
断言器,别名为if,该属性不能为空,正如其别名的含义,是一个判断真假的断言动作
* */
@JSRuleCheck(required=true)
@JsonAlias({"if"})
public JSRuleAssert assertion;
/**
*
当assertion断言结果为true时执行该属性下的actions
* */
public List then;
/**
* 别名else,当assertion断言结果为false时执行该属性下的actions
* */
@JsonAlias({"else"})
public List otherwise;
@JSRuleInject
@JsonIgnore
private JSRuleArgsVessel vessel;
public JSRuleShunt() {
ifAnd = true;
}
@Override
public Object start(A action) {
if (assertion.ifTrue(null,null,null, ifAnd, vessel)) {
return startActions(then, vessel).getResult();
}else {
return startActions(otherwise, vessel).getResult();
}
}
@Override
public boolean isOwner(Map params,Set roles){
return true;
}
}