SimpleWhereBuilder.java

package com.github.mygreen.sqlmapper.core.where.simple;

import java.util.ArrayList;
import java.util.List;

import com.github.mygreen.sqlmapper.core.where.Where;
import com.github.mygreen.sqlmapper.core.where.WhereVisitor;

import lombok.AccessLevel;
import lombok.Getter;

/**
 * SQLのWhere句の条件をANDやORでつなげていく組み立てるためのクラスです。
 *
 * @author T.TSUCHIE
 *
 */
public class SimpleWhereBuilder extends AbstractWhere<SimpleWhereBuilder> implements Where {

    /**
     * ORで区切られた塊
     */
    @Getter(AccessLevel.PROTECTED)
    private List<Where> childrenWhere = new ArrayList<>();

    @Override
    public void accept(final WhereVisitor visitor) {
        visitor.visit(this);
    }

    /**
     * これまでに追加された条件とこれから追加される条件を {@literal OR} で結合します。
     * @return このインスタンス自身
     */
    public SimpleWhereBuilder or() {
        if(!terms.isEmpty()) {
            this.childrenWhere.add(putAsSimpleWhere());
        }
        return this;
    }

    /**
     * これまでに追加された条件と、引数で渡された条件全体を {@literal AND} で結合します。
     * @param where  {@literal AND}で結合される条件
     * @return このインスタンス自身
     */
    public SimpleWhereBuilder and(final AbstractWhere<?> where) {
        addTerm(new WhereTerm(where));
        return this;
    }
}