package io.delphiplatform.api.v3.rdb.service.specification;

import java.util.Collections;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;

public class BooleanValuePropertySpecification<T> extends OperationOnPropertySpecification<T> {

    private final String propertyName;
    private final Boolean searchValue;

    public BooleanValuePropertySpecification(String propertyName, Boolean searchValue) {
        super(Collections.emptyList());
        this.propertyName = propertyName;
        this.searchValue = searchValue;
    }

    @Override
    protected boolean canProducePredicate() {
        return searchValue != null;
    }

    @Override
    protected Predicate doOperation(CriteriaBuilder cb, Path<T> path) {
        if (searchValue != null) {
            return cb.equal(path.get(propertyName), searchValue);
        }
        return null;
    }
}
