package com.github.dandelion.datatables.web.ajax;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.dandelion.datatables.core.ajax.DataSet;
import com.github.dandelion.datatables.core.ajax.DatatablesCriterias;
import com.github.dandelion.datatables.core.ajax.DatatablesResponse;
import com.github.dandelion.datatables.extras.spring3.ajax.DatatablesParams;
import com.github.dandelion.datatables.model.Person;
import com.github.dandelion.datatables.service.PersonService;
/**
* <p>
* Spring MVC controller that exposes Web Services consumed by DataTables.
* <p>
* Given that Datatables only consumes JSON for now, it is crucial that Jackson
* is in the webapp classpath for the POJO convertion in JSON format.
*
* @author Thibault Duchateau
*/
@Controller
@RequestMapping(value="/ajax", method = RequestMethod.GET)
public class AjaxController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/persons-no-server-side")
public @ResponseBody
List<Person> findAll() {
return personService.findLimited(200);
}
@RequestMapping(value = "/persons-no-spring")
public @ResponseBody
DatatablesResponse<Person> findAllForDataTables(HttpServletRequest request) {
DatatablesCriterias criterias = DatatablesCriterias.getFromRequest(request);
DataSet<Person> persons = personService.findPersonsWithDatatablesCriterias(criterias);
return DatatablesResponse.build(persons, criterias);
}
@RequestMapping(value = "/persons")
public @ResponseBody
DatatablesResponse<Person> findAllForDataTablesFullSpring(@DatatablesParams DatatablesCriterias criterias) {
DataSet<Person> dataSet = personService.findPersonsWithDatatablesCriterias(criterias);
return DatatablesResponse.build(dataSet, criterias);
}
@RequestMapping(value = "/emptyList")
public @ResponseBody
List<Person> emptyList(HttpServletRequest request) {
return new ArrayList<Person>();
}
@RequestMapping(value = "/nullList")
public @ResponseBody
List<Person> nullList(HttpServletRequest request) {
return null;
}
}