All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.alittlehuang.data.query.support.AbstractCriteriaBuilder Maven / Gradle / Ivy

package com.github.alittlehuang.data.query.support;

import com.github.alittlehuang.data.query.specification.*;
import com.github.alittlehuang.data.query.support.model.*;

import javax.persistence.LockModeType;
import javax.persistence.criteria.JoinType;

/**
 * @author ALittleHuang
 */
public abstract class AbstractCriteriaBuilder>
        extends AbstractWhereClauseBuilder
        implements CriteriaBuilder {

    private final CriteriaModel criteria;

    protected AbstractCriteriaBuilder(Class type) {
        super(type);
        this.criteria = new CriteriaModel<>(getWhereClause(), type);
    }

    public AbstractCriteriaBuilder(Expression path, WhereClause root, Criteria criteria) {
        super(path, root, criteria.getJavaType());
        this.criteria = CriteriaModel.convert(criteria);
    }

    @Override
    public THIS addSelect(String... paths) {
        for (String path : paths) {
            String[] names = path.split("\\.");
            SelectionModel selectionModel = new SelectionModel<>();
            selectionModel.setNames(names);
            criteria.getSelections().add(selectionModel);
        }
        return self();
    }

    @Override
    public THIS addSelect(Expressions expression) {
        criteria.getSelections().add(new SelectionModel<>(expression, getJavaType()));
        return self();
    }

    @Override
    public THIS addSelect(Expressions expression, AggregateFunctions aggregate) {

        SelectionModel model = new SelectionModel<>(expression, getJavaType());
        model.setAggregateFunctions(aggregate);

        criteria.getSelections().add(model);
        return self();
    }

    @Override
    public THIS addGroupings(String... paths) {
        for (String path : paths) {
            ExpressionModel model = new ExpressionModel<>();
            model.setNames(path.split("\\."));
            criteria.getGroupings().add(model);
        }
        return self();
    }

    @Override
    public THIS addGroupings(Expressions expression) {
        criteria.getGroupings().add(ExpressionModel.convertExpression(expression, getJavaType()));
        return self();
    }

    @Override
    public THIS addOrdersAsc(String... paths) {
        for (String path : paths) {
            OrdersModel order = new OrdersModel<>();
            order.setNames(path.split("\\."));
            criteria.getOrders().add(order);
        }
        return self();
    }

    @Override
    public THIS addOrdersAsc(Expressions expression) {
        criteria.getOrders().add(new OrdersModel<>(expression, getJavaType()));
        return self();
    }

    @Override
    public THIS addOrdersDesc(String... paths) {
        for (String path : paths) {
            OrdersModel order = new OrdersModel<>();
            order.setNames(path.split("\\."));
            order.setDirection(Direction.DESC);
            criteria.getOrders().add(order);
        }
        return self();
    }

    @Override
    public THIS addOrdersDesc(Expressions expression) {
        OrdersModel order = new OrdersModel<>(expression, getJavaType());
        order.setDirection(Direction.DESC);
        criteria.getOrders().add(order);
        return self();
    }

    @Override
    public THIS fetch(String... paths) {
        for (String path : paths) {
            fetch(path, JoinType.LEFT);
        }
        return self();
    }

    @Override
    public THIS fetch(String paths, JoinType joinType) {
        FetchAttributeModel fetchAttribute = new FetchAttributeModel<>();
        fetchAttribute.setJoinType(joinType);
        fetchAttribute.setNames(paths.split("\\."));
        criteria.getFetchAttributes().add(fetchAttribute);
        return self();
    }

    @Override
    public THIS fetch(Expressions expression, JoinType joinType) {
        FetchAttributeModel attributeModel = new FetchAttributeModel<>(expression, getJavaType());
        attributeModel.setJoinType(joinType);
        criteria.getFetchAttributes().add(attributeModel);
        return self();
    }

    @Override
    public THIS fetch(Expressions expression) {
        return fetch(expression, JoinType.LEFT);
    }

    @Override
    public THIS setLockModeType(LockModeType lockModeType) {
        criteria.setLockModeType(lockModeType);
        return self();
    }

    @Override
    public CriteriaModel getCriteria() {
        return criteria;
    }

    @Override
    public THIS setOffset(long offset) {
        criteria.setOffset(offset);
        return self();
    }

    @Override
    public THIS setMaxResult(long maxResult) {
        criteria.setMaxResults(maxResult);
        return self();
    }

    @Override
    public THIS setPageable(long page, long size) {
        criteria.setMaxResults(size);
        criteria.setOffset(page * size);
        return self();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy