/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.util.Functions$BinaryThrows
 *  jakarta.persistence.criteria.CriteriaBuilder
 *  jakarta.persistence.criteria.CriteriaQuery
 *  jakarta.persistence.criteria.Expression
 *  jakarta.persistence.criteria.Predicate
 *  jakarta.persistence.criteria.Root
 *  jakarta.persistence.criteria.Selection
 *  org.hibernate.HibernateException
 *  org.hibernate.Session
 *  org.hibernate.query.Query
 */
package com.l7tech.server;

import com.l7tech.objectmodel.FindException;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.util.ReadOnlyHibernateCallback;
import com.l7tech.util.Functions;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import jakarta.persistence.criteria.Selection;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;

class bv
extends ReadOnlyHibernateCallback<Integer> {
    final Functions.BinaryThrows val$predicateCustomizer;
    final HibernateEntityManager this$0;

    bv(HibernateEntityManager hibernateEntityManager, Functions.BinaryThrows binaryThrows) {
        this.this$0 = hibernateEntityManager;
        this.val$predicateCustomizer = binaryThrows;
    }

    @Override
    protected Integer doInHibernateReadOnly(Session session) throws HibernateException, SQLException {
        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
        CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Long.class);
        Root root = criteriaQuery.from(this.this$0.getImpClass());
        criteriaQuery.select((Selection)criteriaBuilder.count((Expression)root));
        Predicate predicate = this.this$0.addFindAllPredicate(criteriaBuilder.conjunction(), criteriaBuilder, root);
        try {
            Predicate predicate2;
            CriteriaQuery criteriaQuery2;
            try {
                criteriaQuery2 = criteriaQuery;
                predicate2 = this.val$predicateCustomizer == null ? predicate : criteriaBuilder.and((Expression)predicate, (Expression)this.val$predicateCustomizer.call((Object)criteriaBuilder, (Object)root));
            }
            catch (FindException findException) {
                throw bv.a(findException);
            }
            criteriaQuery2.where((Expression)predicate2);
        }
        catch (FindException findException) {
            throw new HibernateException((Throwable)findException);
        }
        Query query = session.createQuery(criteriaQuery);
        return ((Number)query.getSingleResult()).intValue();
    }

    private static FindException a(FindException findException) {
        return findException;
    }
}

