/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.etk.component.database;
import org.etk.common.utils.PageList;
import org.hibernate.Query;
import org.hibernate.Session;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* @author Tuan Nguyen (tuan08@users.sourceforge.net)
* @since Oct 21, 2004
* @version $Id: DBObjectPageList.java 5332 2006-04-29 18:32:44Z geaz $
*/
public class DBObjectPageList extends PageList
{
private String findQuery_;
private String countQuery_;
private HibernateService service_;
private Map<String, Object> binding = new HashMap<String, Object>();
public DBObjectPageList(HibernateService service, Class objectType) throws Exception
{
super(20);
service_ = service;
findQuery_ = "from o in class " + objectType.getName();
countQuery_ = "select count(o) from " + objectType.getName() + " o";
Session session = service_.openSession();
List l = session.createQuery(countQuery_).list();
Number count = (Number)l.get(0);
setAvailablePage(count.intValue());
}
public DBObjectPageList(HibernateService service, ObjectQuery oq) throws Exception
{
super(20);
service_ = service;
findQuery_ = oq.getHibernateQueryWithBinding();
countQuery_ = oq.getHibernateCountQueryWithBinding();
binding = oq.getBindingFields();
Session session = service_.openSession();
Query countQuery = session.createQuery(countQuery_);
bindFields(countQuery);
List l = countQuery.list();
Number count = (Number)l.get(0);
setAvailablePage(count.intValue());
}
public DBObjectPageList(HibernateService service, int pageSize, String query, String countQuery) throws Exception
{
super(pageSize);
service_ = service;
findQuery_ = query;
countQuery_ = countQuery;
Session session = service_.openSession();
List l = session.createQuery(countQuery_).list();
Number count = (Number)l.get(0);
setAvailablePage(count.intValue());
}
@Override
@SuppressWarnings("unused")
protected void populateCurrentPage(int page) throws Exception
{
Session session = service_.openSession();
Query query = session.createQuery(findQuery_);
bindFields(query);
int from = getFrom();
query.setFirstResult(from);
query.setMaxResults(getTo() - from);
currentListPage_ = query.list();
}
@Override
public List getAll() throws Exception
{
Session session = service_.openSession();
Query query = session.createQuery(findQuery_);
bindFields(query);
return query.list();
}
/**
* Bind a value to a named query parameter.
*
* @param query
*/
private void bindFields(Query query)
{
for (Entry<String, Object> entry : binding.entrySet())
{
query.setParameter(entry.getKey(), entry.getValue());
}
}
}