/**
 * Copyright (C) 2013
 * by 52 North Initiative for Geospatial Open Source Software GmbH
 *
 * Contact: Andreas Wytzisk
 * 52 North Initiative for Geospatial Open Source Software GmbH
 * Martin-Luther-King-Weg 24
 * 48155 Muenster, Germany
 * info@52north.org
 *
 * This program is free software; you can redistribute and/or modify it under
 * the terms of the GNU General Public License version 2 as published by the
 * Free Software Foundation.
 *
 * This program is distributed WITHOUT ANY WARRANTY; even without the implied
 * WARRANTY OF MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program (see gnu-gpl v2.txt). If not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or
 * visit the Free Software Foundation web page, http://www.fsf.org.
 */
package org.n52.sos.ds.hibernate.util;

import java.util.List;

/**
 * Utility class for Hibernate native SQL queries.
 * 
 */
public class HibernateSQLQueryUtilities {

    /**
     * Get distinct value for properties and table name
     * 
     * @param properties
     *            Properties
     * @param tableName
     *            table name
     * @return Distinct value
     */
    public static String getSelectDistinctFromQuery(List<String> properties, List<String> restrictions,
            String tableName) {
        StringBuilder query = new StringBuilder();
        query.append(DefaultHibernateConstants.SELECT);
        query.append(DefaultHibernateConstants.DISTINCT);
        for (String property : properties) {
            query.append(property);
            query.append(",");
        }
        query.delete(query.lastIndexOf(","), query.length());
        query.append(DefaultHibernateConstants.FROM);
        query.append(tableName);
        if (restrictions != null && !restrictions.isEmpty()) {
            query.append(DefaultHibernateConstants.WHERE);
            for (String restriction : restrictions) {
                query.append(restriction);
                query.append(DefaultHibernateConstants.AND);
            }
            query.delete(query.lastIndexOf(DefaultHibernateConstants.AND), query.length());
        }
        query.append(";");
        return query.toString();
    }

    private HibernateSQLQueryUtilities() {
    }
}
