com.qcadoo.model.api.search.SearchProjections.java Source code

Java tutorial

Introduction

Here is the source code for com.qcadoo.model.api.search.SearchProjections.java

Source

/**
 * ***************************************************************************
 * Copyright (c) 2010 Qcadoo Limited
 * Project: Qcadoo Framework
 * Version: 1.4
 *
 * This file is part of Qcadoo.
 *
 * Qcadoo is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation; either version 3 of the License,
 * or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * ***************************************************************************
 */
package com.qcadoo.model.api.search;

import org.hibernate.criterion.Projections;

import com.qcadoo.model.internal.search.SearchProjectionImpl;
import com.qcadoo.model.internal.search.SearchProjectonListImpl;

/**
 * Utility with factory methods for {@link SearchProjection}.
 * 
 * @since 0.4.1
 */
public final class SearchProjections {

    private SearchProjections() {
    }

    /**
     * Creates projection's list.
     * 
     * @return projection's list
     */
    public static SearchProjectionList list() {
        return new SearchProjectonListImpl();
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection groupField(final String field) {
        return new SearchProjectionImpl(Projections.groupProperty(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "sum" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection sum(final String field) {
        return new SearchProjectionImpl(Projections.sum(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "max" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection max(final String field) {
        return new SearchProjectionImpl(Projections.max(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "min" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection min(final String field) {
        return new SearchProjectionImpl(Projections.min(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "avg" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection avg(final String field) {
        return new SearchProjectionImpl(Projections.avg(field));
    }

    /**
     * Creates projection which add "id" field to the "SELECT" clause.
     * 
     * @return projection
     */
    public static SearchProjection id() {
        return new SearchProjectionImpl(Projections.id());
    }

    /**
     * Creates projection which add given field to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection field(final String field) {
        return new SearchProjectionImpl(Projections.property(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "count" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection count(final String field) {
        return new SearchProjectionImpl(Projections.count(field));
    }

    /**
     * Creates projection which add given field to the "GROUP BY" clause and its "count with distinct" to the "SELECT" clause.
     * 
     * @param field
     *            field
     * @return projection
     */
    public static SearchProjection countDistinct(final String field) {
        return new SearchProjectionImpl(Projections.countDistinct(field));
    }

    /**
     * Wraps projection with distinct projection.
     * 
     * @param projection
     *            projection
     * @return distincted projection
     */
    public static SearchProjection distinct(final SearchProjection projection) {
        return new SearchProjectionImpl(Projections.distinct(projection.getHibernateProjection()));
    }

    /**
     * Creates projection which add "count(*)" to the "SELECT" clause.
     * 
     * Value returned by this projection will be a Long number.
     * 
     * @return projection
     */
    public static SearchProjection rowCount() {
        return new SearchProjectionImpl(Projections.rowCount());
    }

    /**
     * Wraps projection with aliased projection.
     * 
     * @param projection
     *            projection
     * @param alias
     *            alias
     * @return aliased projection
     */
    public static SearchProjection alias(final SearchProjection projection, final String alias) {
        return new SearchProjectionImpl(Projections.alias(projection.getHibernateProjection(), alias));
    }

}