/**
*
*/
package org.inbio.m3s.web.controller.ajax;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.inbio.m3s.dto.taxonomy.TaxonLiteDTO;
import org.inbio.m3s.dto.taxonomy.util.TaxonomicalRangeEntity;
import org.inbio.m3s.service.TaxonomyManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
/**
* @author jgutierrez
*
*/
public class TaxonomyAutoCompleteController extends MultiActionController{
private TaxonomyManager taxonomyManager;
/* For the yahoo auto complete javascript this value always is = "query"*/
private String queryParam = "query";
/**
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView taxonsByKingdom(HttpServletRequest request, HttpServletResponse response) throws Exception {
String param = request.getParameter(queryParam);
String errorMsj = "No se puede obtener los reinos para: " + param + ".";
List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>();
try {
tlDTOList = taxonomyManager.getTaxonsByPatialNameAndTaxonomicalRange(param,TaxonomicalRangeEntity.KINGDOM);
return writeReponse(request,response, tlDTOList);
} catch (IllegalArgumentException iae) {
throw new Exception(errorMsj + " "+ iae.getMessage());
}
}
/**
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView taxonsByFamily(HttpServletRequest request, HttpServletResponse response) throws Exception {
String param = request.getParameter(queryParam);
String errorMsj = "No se puede obtener las familias para: " + param + ".";
List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>();
try {
tlDTOList = taxonomyManager.getTaxonsByPatialNameAndTaxonomicalRange(param,TaxonomicalRangeEntity.FAMILY);
return writeReponse(request,response, tlDTOList);
} catch (IllegalArgumentException iae) {
throw new Exception(errorMsj + " "+ iae.getMessage());
}
}
/**
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView taxonsByGenus(HttpServletRequest request, HttpServletResponse response) throws Exception {
String param = request.getParameter(queryParam);
String errorMsj = "No se puede obtener los generos para: " + param + ".";
List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>();
try {
tlDTOList = taxonomyManager.getTaxonsByPatialNameAndTaxonomicalRange(param,TaxonomicalRangeEntity.GENUS);
return writeReponse(request,response, tlDTOList);
} catch (IllegalArgumentException iae) {
throw new Exception(errorMsj + " "+ iae.getMessage());
}
}
/**
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView taxonsBySpecies(HttpServletRequest request, HttpServletResponse response) throws Exception {
String param = request.getParameter(queryParam);
String errorMsj = "No se puede obtener las especies para: " + param + ".";
List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>();
try {
tlDTOList = taxonomyManager.getTaxonsByPatialNameAndTaxonomicalRange(param,TaxonomicalRangeEntity.SPECIES);
return writeReponse(request,response, tlDTOList);
} catch (IllegalArgumentException iae) {
throw new Exception(errorMsj + " "+ iae.getMessage());
}
}
/**
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView taxonsByOrder(HttpServletRequest request, HttpServletResponse response) throws Exception {
String param = request.getParameter(queryParam);
String errorMsj = "No se puede obtener los ordenes para: " + param + ".";
List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>();
try {
tlDTOList = taxonomyManager.getTaxonsByPatialNameAndTaxonomicalRange(param,TaxonomicalRangeEntity.ORDER);
return writeReponse(request,response, tlDTOList);
} catch (IllegalArgumentException iae) {
throw new Exception(errorMsj + " "+ iae.getMessage());
}
}
/**
* Writes the response in the output!.
*
* @param request
* @param response
* @param tlDTOList
* @return
* @throws Exception
* @deprecated
*/
private ModelAndView writeReponse(HttpServletRequest request,
HttpServletResponse response, List<TaxonLiteDTO> tlDTOList) throws Exception {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
ServletOutputStream out = response.getOutputStream(); // binary output
if(tlDTOList!=null){
for (TaxonLiteDTO tlDTO : tlDTOList)
out.println(tlDTO.getDefaultName()+"\t"+tlDTO.getTaxonKey());
}
out.flush();
out.close();
return null;
}
/**
* @return the taxonomyManager
*/
public TaxonomyManager getTaxonomyManager() {
return taxonomyManager;
}
/**
* @param taxonomyManager the taxonomyManager to set
*/
public void setTaxonomyManager(TaxonomyManager taxonomyManager) {
this.taxonomyManager = taxonomyManager;
}
}