/** * */ package org.inbio.m3s.web.controller; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.inbio.m3s.dto.media.BriefMediaOutputDTO; import org.inbio.m3s.dto.search.SearchCriteriaTripletDTO; import org.inbio.m3s.service.AgentManager; import org.inbio.m3s.service.MetadataManager; import org.inbio.m3s.service.SearchManager; import org.inbio.m3s.web.controller.reusable.SimpleController; import org.inbio.m3s.web.exception.ValidationException; import org.inbio.m3s.web.filter.FilterMapWrapper; import org.springframework.web.servlet.ModelAndView; /** * @author jgutierrez * */ public class SearchController extends SimpleController { private String metadataMediaList; //managers private SearchManager searchManager; private AgentManager agentManager; private MetadataManager metadataManager; private String metadataFilters; private FilterMapWrapper filtersMap; private String metadataFilter ="filter"; private String metadataCriteria = "criteria"; @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = super.handleRequestInternal(request, response); logger.debug("El Model al inicio es: "); for(Object o : mav.getModel().keySet()){ logger.debug("\t"+o+" = "+mav.getModel().get(o)); } //filtros de búsqueda mav.addObject(metadataFilters, filtersMap.getFilters()); String filter = request.getParameter(metadataFilter); String criteria = request.getParameter("criteria"); String value = request.getParameter("value"); //validacion de filtros más tuanis es urgente acá! try { //parametros obligatorios de una búsqueda: if(value!=null) value = URLDecoder.decode(value, "UTF-8"); int first; int last; logger.debug("filter: "+filter); logger.debug("criteria: "+criteria); logger.debug("value: "+value); if(filter!=null&criteria!=null&value!=null){ logger.debug("filter!=null&criteria!=null&value!=null"); first = Integer.valueOf(request.getParameter("first")).intValue(); if(first < 1) first = 1; last = Integer.valueOf(request.getParameter("last")).intValue(); Integer searchFilterId = Integer.valueOf(filter); Integer searchCriteriaId = Integer.valueOf(criteria); //comienza la busqueda SearchCriteriaTripletDTO scTriplet = new SearchCriteriaTripletDTO(searchFilterId,searchCriteriaId,value); List<SearchCriteriaTripletDTO> sctList = new ArrayList<SearchCriteriaTripletDTO>(); sctList.add(scTriplet); int totalResults = searchManager.getTotalResults(sctList); List<Integer> mediaIdsList = searchManager.getResults(sctList, first, last); List<BriefMediaOutputDTO> bmoDTOList = new ArrayList<BriefMediaOutputDTO>(); for(Integer mediaId : mediaIdsList){ bmoDTOList.add(metadataManager.getMetadataBriefByMedia(String.valueOf(mediaId))); } //pone la lista con resultados en el model mav.addObject(metadataMediaList, bmoDTOList); //interface elements mav.addAllObjects(setInterfaceElements(first,last,totalResults)); //filter + value mav.addObject(metadataFilter, filter); mav.addObject("value", value); } else { logger.debug("en el else de> filter!=null&criteria!=null&value!=null"); criteria ="0"; first =0; last = 10; } mav.addObject("criteria", criteria); mav.addObject("first", first); mav.addObject("last", last); mav.addObject("error", null); } catch (Exception e){ logger.debug("Exception: "+e.getMessage()); ValidationException ve; Map<String, Object> modelElements = getModelElements(); if(e instanceof IllegalArgumentException){ ve = new ValidationException(e.getMessage(), e.getCause()); modelElements.put("error", "ERROR: "+e.getMessage()); } else { ve = new ValidationException(); } ve.setViewName(getViewName()); ve.setErrorMessageKey("error.metadata.01"); /* el form action está incluido en los model elements heredados */ modelElements.put(metadataFilters, filtersMap.getFilters()); modelElements.put(metadataFilter, filter); modelElements.put("criteria", criteria); modelElements.put("value", value); modelElements.put("first", 0); modelElements.put("last", 10); ve.setModelElements(modelElements); logger.debug("throw ValidationException"); throw ve; } logger.debug("El Model es: "); for(Object o : mav.getModel().keySet()){ logger.debug("\t"+o+" = "+mav.getModel().get(o)); } return mav; } /** * * @param first * @param last * @param totalResults * @return */ public Map<String, Object> setInterfaceElements(int first, int last, int totalResults){ Map<String, Object> interfaceElements = new HashMap<String, Object>(); //carnita //butons :s int showing = (last - first)+1; if(totalResults < showing) showing = totalResults; int min; int max; //previous min and max max = first -1; min = first-showing; if(first > 2){ interfaceElements.put("previousParams", "&first="+min+"&last="+max); } else{ interfaceElements.put("previousParams", null); } //next min and max min = last+1; max = last+showing; if((totalResults - last) > 0){ interfaceElements.put("nextParams", "&first="+min+"&last="+max); } else{ interfaceElements.put("nextParams", null); } //fin de buton interfaceElements.put("totalResults", totalResults); interfaceElements.put("showing", showing); return interfaceElements; } /* (non-Javadoc) * @see java.lang.Object#finalize() */ @Override protected void finalize() throws Throwable { logger.debug("Terminando clase searchController"); super.finalize(); } /** * @return the metadataMediaList */ public String getMetadataMediaList() { return metadataMediaList; } /** * @param metadataMediaList the metadataMediaList to set */ public void setMetadataMediaList(String metadataMediaList) { this.metadataMediaList = metadataMediaList; } /** * @return the searchManager */ public SearchManager getSearchManager() { return searchManager; } /** * @param searchManager the searchManager to set */ public void setSearchManager(SearchManager searchManager) { this.searchManager = searchManager; } /** * @return the agentManager */ public AgentManager getAgentManager() { return agentManager; } /** * @param agentManager the agentManager to set */ public void setAgentManager(AgentManager agentManager) { this.agentManager = agentManager; } /** * @return the metadataFilters */ public String getMetadataFilters() { return metadataFilters; } /** * @param metadataFilters the metadataFilters to set */ public void setMetadataFilters(String metadataFilters) { this.metadataFilters = metadataFilters; } /** * @return the filtersMap */ public FilterMapWrapper getFiltersMap() { return filtersMap; } /** * @param filtersMap the filtersMap to set */ public void setFiltersMap(FilterMapWrapper filtersMap) { this.filtersMap = filtersMap; } /** * @return the metadataManager */ public MetadataManager getMetadataManager() { return metadataManager; } /** * @param metadataManager the metadataManager to set */ public void setMetadataManager(MetadataManager metadataManager) { this.metadataManager = metadataManager; } }