/*
* $Id$
* $URL$
*/
package org.subethamail.web.action;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.subethamail.core.lists.i.ListDataPlus;
import org.subethamail.web.Backend;
import org.subethamail.web.action.auth.AuthRequired;
import org.subethamail.web.model.PaginateModel;
/**
* Searches all lists for a query term (if provided), or
* just gets basic list if no term provided. Results
* are paginated.
*
* @author Jon Stevens
* @author Jeff Schnitzer
*/
public class GetLists extends AuthRequired
{
public static class Model extends PaginateModel
{
/** */
@Getter @Setter String query = "";
@Getter @Setter List<ListDataPlus> lists;
}
public void initialize()
{
this.getCtx().setModel(new Model());
}
/** */
public void authExecute() throws Exception
{
Model model = (Model)this.getCtx().getModel();
if (model.query.trim().length() == 0)
{
model.lists = Backend.instance().getAdmin().getListsPlus(model.getSkip(), model.getCount());
model.setTotalCount(Backend.instance().getAdmin().countLists());
}
else
{
model.lists = Backend.instance().getAdmin().searchListsPlus(model.query, model.getSkip(), model.getCount());
model.setTotalCount(Backend.instance().getAdmin().countListsQuery(model.query));
// If we are doing a query, then we need to find out how many results would
// have been returned for our query (before the limit was applied) in
// order to do the pagination right.
//
// this is highly inefficient as we are doing a full table scan again.
// Since we know and love MySQL, it would be better to do something like this:
// http://www.mysqlfreaks.com/statements/101.php
// SELECT SQL_CALC_FOUND_ROWS *
// FROM tbl_name
// WHERE id > 100 LIMIT 10;
//
// SELECT FOUND_ROWS();
//
}
}
}