ReservationObjectPriceDB.java

package sk.iway.iwcm.components.reservation;

import java.util.Date;
import java.util.List;

import javax.persistence.Query;

import org.eclipse.persistence.expressions.Expression;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.jpa.JpaEntityManager;
import org.eclipse.persistence.queries.ReadAllQuery;

import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.database.JpaDB;
import sk.iway.iwcm.system.jpa.JpaTools;

/**
 *  ReservationObjectPriceDB.java
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2015
 *@author       $Author: jeeff rzapach $
 *@version      $Revision: 1.3 $
 *@created      Date: 11.12.2015 15:03:17
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class ReservationObjectPriceDB extends JpaDB<ReservationObjectPriceBean>
{
	private static ReservationObjectPriceDB instance = new ReservationObjectPriceDB();

	public ReservationObjectPriceDB()
	{
		super(ReservationObjectPriceBean.class);
	}

	public static ReservationObjectPriceDB getInstance()
	{
		return instance;
	}

	public List<ReservationObjectPriceBean> getByReservationObjectId(int id)
	{
		return super.findBy(filterEquals("object_id", id),filterEquals("domain_id", CloudToolsForCore.getDomainId()));
	}

	public List<ReservationObjectPriceBean> getOverlapping(Date datumOd, Date datumDo, int objectId, int domain, int editPriceId)
	{
		JpaEntityManager em = JpaTools.getEclipseLinkEntityManager();
		try{
			ExpressionBuilder builder = new ExpressionBuilder();
			ReadAllQuery dbQuery = new ReadAllQuery(ReservationObjectPriceBean.class, builder);

			Expression expr = builder.get("domainId").equal(domain);
			expr = expr.and(builder.get("objectId").equal(objectId));

			if(editPriceId>-1)
				expr = expr.and(builder.get("objectPriceId").notEqual(editPriceId));

			// (StartA <= EndB) and (EndA >= StartB)
			expr = expr.and(builder.get("datumOd").lessThanEqual(datumDo));
			expr = expr.and(builder.get("datumDo").greaterThanEqual(datumOd));

			dbQuery.setSelectionCriteria(expr);
			dbQuery.addOrdering(builder.get("datumOd").ascending());

			Query query = em.createQuery(dbQuery);
			return JpaDB.getResultList(query);

		}catch (Exception e) {
			sk.iway.iwcm.Logger.error(e);
		}finally{
			em.close();
		}
		throw new IllegalStateException("Query did not complete regularly");
	}
}