/*
 * Copyright (c) 2011, Patrik Dufresne. All rights reserved.
 * Patrik Dufresne PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.planimod.core;

import java.util.List;

import org.hibernate.criterion.Restrictions;

import com.patrikdufresne.managers.AbstractManager;
import com.patrikdufresne.managers.ManagerContext;
import com.patrikdufresne.managers.ManagerException;
import com.patrikdufresne.managers.Query;

/**
 * Object manager for product.
 * 
 * @author Patrik Dufresne
 */
public class ProductPositionManager extends AbstractManager<ProductPosition> {

	public ProductPositionManager(PlanimodManagers managers) {
		super(managers);
	}

	/**
	 * List product-position elements for the given product.
	 * 
	 * @param product
	 *            a product
	 * 
	 * @return list of product-position
	 * @throws ManagerException
	 */
	public List<ProductPosition> listByProduct(final Product product)
			throws ManagerException {
		return getManagers().query(new Query<List<ProductPosition>>() {
			@Override
			public List<ProductPosition> run() throws ManagerException {
				return ManagerContext.getDefaultSession()
						.createCriteria(objectClass())
						.add(Restrictions.eq(ProductPosition.PRODUCT, product))
						.list();
			}
		});
	}

	@Override
	public Class<ProductPosition> objectClass() {
		return ProductPosition.class;
	}

}
