package edu.harvard.iq.dataverse.search; import edu.harvard.iq.dataverse.DatasetVersion; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.authorization.users.User; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.faces.context.FacesContext; import javax.inject.Named; import javax.servlet.http.HttpServletRequest; @Named @Stateless public class SearchFilesServiceBean { private static final Logger logger = Logger.getLogger(SearchFilesServiceBean.class.getCanonicalName()); @EJB SearchServiceBean searchService; public FileView getFileView(DatasetVersion datasetVersion, User user, String userSuppliedQuery) { Dataverse dataverse = null; List<String> filterQueries = new ArrayList<>(); filterQueries.add(SearchFields.TYPE + ":" + SearchConstants.FILES); filterQueries.add(SearchFields.PARENT_ID + ":" + datasetVersion.getDataset().getId()); /** * @todo In order to support searching for files based on dataset * version for https://github.com/IQSS/dataverse/issues/2455 we're going * to need to make the dataset version id searchable, perhaps as part of * https://github.com/IQSS/dataverse/issues/2038 */ // filterQueries.add(SearchFields.DATASET_VERSION_ID + ":" + datasetVersion.getId()); String finalQuery = SearchUtil.determineFinalQuery(userSuppliedQuery); SortBy sortBy = getSortBy(finalQuery); String sortField = sortBy.getField(); String sortOrder = sortBy.getOrder(); int paginationStart = 0; boolean onlyDataRelatedToMe = false; int numResultsPerPage = 25; SolrQueryResponse solrQueryResponse = null; try { HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); solrQueryResponse = searchService.search(new DataverseRequest(user, httpServletRequest), dataverse, finalQuery, filterQueries, sortField, sortOrder, paginationStart, onlyDataRelatedToMe, numResultsPerPage); } catch (SearchException ex) { logger.info(SearchException.class + " searching for files: " + ex); return null; } catch (Exception ex) { logger.info(Exception.class + " searching for files: " + ex); return null; } return new FileView( solrQueryResponse.getSolrSearchResults(), solrQueryResponse.getFacetCategoryList(), solrQueryResponse.getFilterQueriesActual(), solrQueryResponse.getSolrQuery().getQuery() ); } public static SortBy getSortBy(String query) { try { if (query != null) { return SearchUtil.getSortBy("name", SortBy.ASCENDING); } else { return SearchUtil.getSortBy(null, null); } } catch (Exception ex) { return null; } } }