package com.tap5.hotelbooking.pages;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.grid.GridDataSource;
import org.apache.tapestry5.hibernate.HibernateGridDataSource;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.tap5.hotelbooking.data.SearchCriteria;
import com.tap5.hotelbooking.entities.Hotel;
/**
* Lookup for Hotels.
*
* @author ccordenier
*/
public class Search
{
@Inject
private Session session;
@InjectComponent
private Zone result;
@SessionState
@Property
private SearchCriteria criteria;
@SuppressWarnings("unused")
@Property
private GridDataSource source = new HotelDataSource(session, Hotel.class);
@SuppressWarnings("unused")
@Property
private Hotel currentHotel;
/**
* This datasource is used by Tapestry 5 Grid to search and paginate
*
* @author ccordenier
*/
private final class HotelDataSource extends HibernateGridDataSource
{
private HotelDataSource(Session session, @SuppressWarnings("rawtypes") Class entityType)
{
super(session, entityType);
}
@Override
public int getAvailableRows()
{
return criteria.getSearchPattern() == null ? 0 : super.getAvailableRows();
}
@Override
protected void applyAdditionalConstraints(Criteria crit)
{
crit.add(Restrictions.ilike("name", criteria.getSearchPattern()));
}
}
/**
* Move this into a hotel query service
*/
@OnEvent(value = EventConstants.SUCCESS)
Object searchHotels()
{
return result.getBody();
}
Object onAction()
{
return result.getBody();
}
}