package com.liangjian.dataplatform.member.entity.vo.tagrules;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModel;

import java.util.List;

/**
 * @Author: 黄子奇
 * @Date: 2019/9/7 15:09
 *
 * 判断逻辑节点，带有逻辑关系(and, or, not) 和操作节点
 */
@JsonDeserialize(using = LogicNodeDeserializer.class)
@ApiModel(value = "逻辑树节点",description = "单层And、Or， 多层级And、Or")
public interface LogicNode extends ToSqlable {

    /**
     * 获取逻辑类型
     * @return
     */
    LogicType getLogicType();

    /**
     * 获取二元操作
     * @return
     */
    BinOperation getBinOperation();

    /**
     * 是否有追加节点，逻辑类型是and、or、not时没有，
     * 当是andNew、orNew这种树级的时候会有
     * @return
     */
    boolean hasExtNodes();

    /**
     * 获取追加节点
     * @return
     */
    List<LogicNode> getExtNodes();
}
