/*
 * 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 position.
 * 
 * @author Patrik Dufresne
 */
public class PositionManager extends AbstractManager<Position> {

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

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

	/**
	 * List positions for the given Section.
	 * 
	 * @param section
	 *            the section
	 * @return list of position
	 * @throws ManagerException
	 */
	public List<Position> listBySection(final Section section)
			throws ManagerException {
		return getManagers().query(new Query<List<Position>>() {
			@Override
			public List<Position> run() throws ManagerException {
				return ManagerContext.getDefaultSession()
						.createCriteria(objectClass())
						.add(Restrictions.eq(Position.SECTION, section)).list();
			}
		});
	}

	/**
	 * List classified positions only.
	 * 
	 * @return list of position
	 * @throws ManagerException
	 */
	public List<Position> listClassified() throws ManagerException {
		return getManagers().query(new Query<List<Position>>() {
			@Override
			public List<Position> run() throws ManagerException {
				return ManagerContext.getDefaultSession()
						.createCriteria(objectClass())
						.add(Restrictions.eq(Position.CLASSIFIED, true)).list();
			}
		});
	}

}
