package org.inbio.m3s.web.controller.ajax; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.inbio.m3s.dao.core.SiteDAO; import org.inbio.m3s.dto.taxonomy.SpecimenLiteDTO; import org.inbio.m3s.dto.taxonomy.TaxonLiteDTO; import org.inbio.m3s.service.TaxonomyManager; import org.inbio.m3s.web.controller.reusable.XMLWriterMultiActionController; import org.springframework.web.servlet.ModelAndView; /** * * @author jgutierrez * */ public class AssociatedToController extends XMLWriterMultiActionController { TaxonomyManager taxonomyManager; SiteDAO siteDAO; /* For the yahoo auto complete javascript this value always is = "query"*/ private String queryParam = "param"; //private String observationNumberQueryParam = "observationNumber"; //private String gatheringCodeQueryParam= "gatheringCode"; private String taxonNameParam = "name"; private String kingdomNameParam = "kingdom"; /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView taxonomyBySpecimenNumber(HttpServletRequest request, HttpServletResponse response) throws Exception { String specimenNumber = request.getParameter(queryParam); String errorMsj = "No se puede obtener la taxonomía asociada al especimen #" + specimenNumber + "."; TaxonLiteDTO tlDTO = null; List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>(); try { tlDTO = taxonomyManager.getTaxonLiteFromSpecimenId(specimenNumber); tlDTO = taxonomyManager.setKingdomName(tlDTO); //tlDTO = new TaxonLiteDTO("7", "por hacer", "123"); tlDTOList.add(tlDTO); //} return writeXMLOnResponse(request,response, createTaxonomyXML(tlDTOList)); } catch (IllegalArgumentException iae) { throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView siteBySpecimenNumber(HttpServletRequest request, HttpServletResponse response) throws Exception { String specimenNumber = request.getParameter(queryParam); String errorMsj = "No se puede obtener la descripcion del sitio para el especimen #"+ specimenNumber + "."; try { logger.debug("getSiteFromSpecimenNumber... done"); String site = siteDAO.getSiteDBIdFromSpecimenNumber(new Integer(specimenNumber)); return writeXMLOnResponse(request,response, createSiteXML(site)); } catch (IllegalArgumentException iae) { logger.error("getSiteFromSpecimenNumber... error"); logger.error(errorMsj); logger.error(iae.getMessage()); throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView taxonomyByObservationNumber(HttpServletRequest request, HttpServletResponse response) throws Exception { String observationNumber = request.getParameter(queryParam); String errorMsj = "No se puede obtener los taxonones asociados con la observacion #"+ observationNumber + "."; List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>(); try { tlDTOList = taxonomyManager.getTaxonLiteFromObservationId(observationNumber); tlDTOList = taxonomyManager.setKingdomName(tlDTOList); return writeXMLOnResponse(request,response, createTaxonomyXML(tlDTOList)); } catch (IllegalArgumentException iae) { throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView siteByObservationNumber(HttpServletRequest request, HttpServletResponse response) throws Exception { String observationNumber = request.getParameter(queryParam); logger.debug("getSiteFromObservationNumber... start"); String errorMsj = "No se puede obtener la descripcion del sitio para la observacion #" + observationNumber + "."; try { logger.debug("getSiteFromObservationNumber... done"); String site = siteDAO.getiteDBIdFromObservationNumber(new Integer(observationNumber)); return writeXMLOnResponse(request,response, createSiteXML(site)); } catch (IllegalArgumentException iae) { logger.debug("getSiteFromObservationNumber... error"); logger.debug(iae.getMessage()); throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView taxonomyByGatheringCode(HttpServletRequest request, HttpServletResponse response) throws Exception { String gatheringCode = request.getParameter(queryParam); String errorMsj = "No se puede obtener taxonomía asociada a la recolecta #" + gatheringCode + "."; List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>(); try { tlDTOList = taxonomyManager.getTaxonLiteFromGatheringCode(gatheringCode); tlDTOList = taxonomyManager.setKingdomName(tlDTOList); return writeXMLOnResponse(request,response, createTaxonomyXML(tlDTOList)); } catch (IllegalArgumentException iae) { throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * * @param request * @param response * @return * @throws Exception */ public ModelAndView siteByGatheringCode(HttpServletRequest request, HttpServletResponse response) throws Exception { String gatheringCode = request.getParameter(queryParam); String errorMsj = "No se puede obtener la descripcion del sitio para la recolecta #" + gatheringCode + "."; try { List<SpecimenLiteDTO> slDTOList = taxonomyManager.getSpecimenLiteForGatheringCode(gatheringCode); SpecimenLiteDTO slDTO = slDTOList.get(0); String site = siteDAO.getSiteDBIdFromSpecimenNumber(new Integer(slDTO.getSpecimenKey())); return writeXMLOnResponse(request,response, createSiteXML(site)); } catch (IllegalArgumentException iae) { logger.debug("getSiteFromGatheringCode... error"); logger.debug(iae.getMessage()); throw new Exception(errorMsj + " " + iae.getMessage()); } } /** * taxonomyByNameAndKingdom * @param request * @param response * @return * @throws Exception */ public ModelAndView taxonomyByNameAndKingdom(HttpServletRequest request, HttpServletResponse response) throws Exception { String name = request.getParameter(taxonNameParam); String kingdom = request.getParameter(kingdomNameParam); String errorMsj = "No se puede obtener la taxonomía asociada para: " + name + "."; TaxonLiteDTO tlDTO = null; List<TaxonLiteDTO> tlDTOList = new ArrayList<TaxonLiteDTO>(); try { tlDTO = taxonomyManager.getTaxonLite(name, kingdom); if(tlDTO!=null){ tlDTO = taxonomyManager.setKingdomName(tlDTO); tlDTOList.add(tlDTO); } return writeXMLOnResponse(request,response, createTaxonomyXML(tlDTOList)); } catch (IllegalArgumentException iae) { throw new Exception(errorMsj + " "+ iae.getMessage()); } } /** * This code was moved to the XMLWriterMultiActionController * * @param request * @param response * @param xml * @return * @throws Exception private ModelAndView writeXMLOnResponse(HttpServletRequest request, HttpServletResponse response, String xml) throws Exception { response.setCharacterEncoding("UTF-8"); response.setContentType("text/xml;charset=UTF-8"); ServletOutputStream out = response.getOutputStream(); // binary output out.println(xml); out.flush(); out.close(); return null; } */ private String createTaxonomyXML(List<TaxonLiteDTO> taxonLiteDTOList) throws Exception { String rootElement = "response"; String basicElement = "taxon"; String taxonIdElement = "id"; String taxonNameElement = "name"; String kingdomNameElement = "kingdom"; String output ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + "<"+rootElement+">"; for(TaxonLiteDTO tlDTO : taxonLiteDTOList){ output+= "<"+basicElement+">"; output+= "<"+taxonIdElement+">"+tlDTO.getTaxonKey()+"</"+taxonIdElement+">"; output+= "<"+taxonNameElement+">"+tlDTO.getDefaultName()+"</"+taxonNameElement+">"; output+= "<"+kingdomNameElement+">"+tlDTO.getKingdomName()+"</"+kingdomNameElement+">"; output+="</"+basicElement+">"; } output+= "</"+rootElement+">"; return output; } private String createSiteXML(String siteDescription) throws Exception { String rootElement = "response"; String basicElement = "site"; //String siteIdElement = "id"; String siteDescriptionElement = "description"; String output ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + "<"+rootElement+">"; //for(TaxonLiteDTO tlDTO : taxonLiteDTOList){ output+= "<"+basicElement+">"; //output+= "<"+siteIdElement+">"+siteLiteDTO.get .getTaxonKey()+"</"+siteIdElement+">"; output+= "<"+siteDescriptionElement+">"+siteDescription+"</"+siteDescriptionElement+">"; output+="</"+basicElement+">"; //} output+= "</"+rootElement+">"; return output; } /** * @return the taxonomyManager */ public TaxonomyManager getTaxonomyManager() { return taxonomyManager; } /** * @param taxonomyManager the taxonomyManager to set */ public void setTaxonomyManager(TaxonomyManager taxonomyManager) { this.taxonomyManager = taxonomyManager; } /** * @return the siteDAO */ public SiteDAO getSiteDAO() { return siteDAO; } /** * @param siteDAO the siteDAO to set */ public void setSiteDAO(SiteDAO siteDAO) { this.siteDAO = siteDAO; } }