diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java index 3b74a2208b..ecff94b2ce 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import javax.servlet.annotation.WebServlet; @@ -28,6 +29,8 @@ import edu.cornell.mannlib.vitro.webapp.i18n.I18n; import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngineException; import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchQuery; +import edu.cornell.mannlib.vitro.webapp.search.controller.SearchFilter; +import edu.cornell.mannlib.vitro.webapp.search.controller.SearchFiltering; import edu.cornell.mannlib.vitro.webapp.utils.searchengine.SearchQueryUtils; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividualBuilder; @@ -188,7 +191,7 @@ private static IndividualListResults buildAndExecuteVClassQuery(List cla boolean languageFilter = Boolean.valueOf(props.getProperty(LANGUAGE_FILTER_PROPERTY, "false")); IndividualListQueryResults results = buildAndExecuteVClassQuery(classUris, alpha, ((languageFilter) ? vreq.getLocale() : null), page, pageSize, - vreq.getWebappDaoFactory().getIndividualDao()); + vreq); IndividualListResults indListResults = getResultsForVClassQuery(results, page, pageSize, alpha, vreq); return indListResults; } @@ -196,7 +199,7 @@ private static IndividualListResults buildAndExecuteVClassQuery(List cla public static IndividualListResults getRandomResultsForVClass(String vclassURI, int page, int pageSize, VitroRequest vreq) { try{ List classUris = Collections.singletonList(vclassURI); - IndividualListQueryResults results = buildAndExecuteRandomVClassQuery(classUris, page, pageSize, vreq.getWebappDaoFactory().getIndividualDao()); + IndividualListQueryResults results = buildAndExecuteRandomVClassQuery(classUris, page, pageSize, vreq); return getResultsForVClassQuery(results, page, pageSize, "", vreq); } catch(Throwable th) { log.error("An error occurred retrieving random results for vclass query", th); @@ -216,9 +219,12 @@ private static IndividualListResults getResultsForVClassQuery(IndividualListQuer private static IndividualListQueryResults buildAndExecuteVClassQuery( List vclassURIs, String alpha, Locale locale, int page, - int pageSize, IndividualDao indDao) + int pageSize, VitroRequest vreq) throws SearchEngineException { + IndividualDao indDao = vreq.getWebappDaoFactory().getIndividualDao(); SearchQuery query = SearchQueryUtils.getQuery(vclassURIs, alpha, locale, page, pageSize); + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); + SearchFiltering.addDefaultFilters(query, currentRoles); IndividualListQueryResults results = IndividualListQueryResults.runQuery(query, indDao); log.debug("Executed search query for " + vclassURIs); if (results.getIndividuals().isEmpty()) { @@ -228,9 +234,12 @@ private static IndividualListQueryResults buildAndExecuteVClassQuery( } private static IndividualListQueryResults buildAndExecuteRandomVClassQuery( - List vclassURIs, int page, int pageSize, IndividualDao indDao) + List vclassURIs, int page, int pageSize, VitroRequest vreq) throws SearchEngineException { + IndividualDao indDao = vreq.getWebappDaoFactory().getIndividualDao(); SearchQuery query = SearchQueryUtils.getRandomQuery(vclassURIs, page, pageSize); + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); + SearchFiltering.addDefaultFilters(query, currentRoles); IndividualListQueryResults results = IndividualListQueryResults.runQuery(query, indDao); log.debug("Executed search query for " + vclassURIs); if (results.getIndividuals().isEmpty()) { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java index adb7e8bb88..5b084dc249 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java @@ -2,8 +2,6 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; -import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LANGUAGE_NEUTRAL; -import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.POLICY_NEUTRAL; import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames.DISPLAY; import java.util.ArrayList; @@ -11,6 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpSession; @@ -45,6 +44,7 @@ import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResponse; import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResultDocumentList; import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; +import edu.cornell.mannlib.vitro.webapp.search.controller.SearchFiltering; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; @@ -187,7 +187,7 @@ private boolean tooManyRangeOptions(VitroRequest vreq, HttpSession session ) thr if(types.size() == 0 ){ types.add(VitroVocabulary.OWL_THING); } - + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); long count = 0; for( String type:types){ //search query for type count. @@ -198,6 +198,7 @@ private boolean tooManyRangeOptions(VitroRequest vreq, HttpSession session ) thr query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type); } query.setRows(0); + SearchFiltering.addDefaultFilters(query, currentRoles); SearchResponse rsp = searchEngine.query(query); SearchResultDocumentList docs = rsp.getResults(); long found = docs.getNumFound(); @@ -549,9 +550,9 @@ public void addFormSpecificDataForAC(EditConfigurationVTwo editConfiguration, Vi String objectLabel = EditConfigurationUtils.getObjectIndividual(vreq).getName(); formSpecificData.put("objectLabel", objectLabel); } - + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); //TODO: find out if there are any individuals in the classes of objectTypes - formSpecificData.put("rangeIndividualsExist", rangeIndividualsExist(types) ); + formSpecificData.put("rangeIndividualsExist", rangeIndividualsExist(types, currentRoles) ); formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq)); if(customErrorMessages != null && !customErrorMessages.isEmpty()) { @@ -561,7 +562,7 @@ public void addFormSpecificDataForAC(EditConfigurationVTwo editConfiguration, Vi editConfiguration.setFormSpecificData(formSpecificData); } - private Object rangeIndividualsExist(List types) throws SearchEngineException { + private Object rangeIndividualsExist(List types, Set currentRoles) throws SearchEngineException { SearchEngine searchEngine = ApplicationUtils.instance().getSearchEngine(); boolean rangeIndividualsFound = false; @@ -570,6 +571,7 @@ private Object rangeIndividualsExist(List types) throws SearchEngineExce SearchQuery query = searchEngine.createQuery(); query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type.getURI()); query.setRows(0); + SearchFiltering.addDefaultFilters(query, currentRoles); SearchResponse rsp = searchEngine.query(query); SearchResultDocumentList docs = rsp.getResults(); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java index db79eb5f09..96c50c4657 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java @@ -8,6 +8,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Set; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -99,6 +101,8 @@ else if ( parts.length == 1 ) { return; } log.debug("query for '" + qtxt +"' is " + query.toString()); + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); + SearchFiltering.addDefaultFilters( query, currentRoles); SearchEngine search = ApplicationUtils.instance().getSearchEngine(); SearchResponse queryResponse = search.query(query); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java index 8f53b11582..5331fc072b 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java @@ -16,22 +16,29 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - +import org.apache.jena.ontology.OntModel; import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; +import org.apache.jena.query.ParameterizedSparqlString; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QuerySolution; import org.apache.jena.query.ResultSet; import org.apache.jena.rdf.model.Literal; -import org.apache.jena.rdf.model.Model; - +import org.apache.jena.rdf.model.RDFNode; +import edu.cornell.mannlib.vitro.webapp.auth.attributes.AccessOperation; +import edu.cornell.mannlib.vitro.webapp.auth.objects.AccessObject; +import edu.cornell.mannlib.vitro.webapp.auth.objects.DataPropertyStatementAccessObject; +import edu.cornell.mannlib.vitro.webapp.auth.objects.IndividualAccessObject; import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission; +import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.AuthorizationRequest; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.SimpleAuthorizationRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.ajax.SparqlUtils; import edu.cornell.mannlib.vitro.webapp.controller.ajax.SparqlUtils.AjaxControllerException; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.controller.ajax.VitroAjaxController; /** @@ -49,17 +56,25 @@ public class DataAutocompleteController extends VitroAjaxController { private static final String PARAM_QUERY = "term"; //To get the data property private static final String PARAM_PROPERTY = "property"; + + private static final int DEFAULT_MAX_HIT_COUNT = 1000; + private static final String QUERY_TEXT = "" + + "SELECT DISTINCT ?subject ?prop ?object ?dataLiteral \n" + + "WHERE {\n" + + " ?subject ?prop ?object .\n" + + " VALUES ?prop { ?property }\n" + + " BIND(STR(?object) as ?dataLiteral )\n" + + " FILTER(REGEX(?dataLiteral, ?term, \"i\"))\n" + + "}\n" + + "ORDER BY ?dataLiteral\n " + + "LIMIT " + DEFAULT_MAX_HIT_COUNT; String NORESULT_MSG = ""; - private static final int DEFAULT_MAX_HIT_COUNT = 1000; - - public static final int MAX_QUERY_LENGTH = 500; @Override protected AuthorizationRequest requiredActions(VitroRequest vreq) { - //used to be basic vitro ajax permission but need to query full model - return SimplePermission.QUERY_FULL_MODEL.ACTION; + return SimplePermission.USE_BASIC_AJAX_CONTROLLERS.ACTION; } @Override @@ -72,17 +87,10 @@ protected void doRequest(VitroRequest vreq, HttpServletResponse response) String property = vreq.getParameter(PARAM_PROPERTY); //Get sparql query for this property String sparqlQuery = getSparqlQuery(qtxt, property); - //Forward this to SparqlQueryAjaxController as that already - //handles execution of query and will return json results - // String encodedQuery = URLEncoder.encode(sparqlQuery, "UTF-8"); - // response.sendRedirect(vreq.getContextPath() + "/ajax/sparqlQuery?query=" + encodedQuery); - //RequestDispatcher dispatcher = vreq.getRequestDispatcher("/ajax/sparqlQuery?query=" + encodedQuery ); - //dispatcher.forward(vreq, response); - //Get Model and execute query - Model model = getModel(vreq); + OntModel model = getModel(vreq); Query query = SparqlUtils.createQuery(sparqlQuery); - outputResults(response, query, model); + outputResults(response, query, model, vreq); } catch(AjaxControllerException ex) { log.error(ex, ex); response.sendError(ex.getStatusCode()); @@ -94,7 +102,7 @@ protected void doRequest(VitroRequest vreq, HttpServletResponse response) } private void outputResults(HttpServletResponse response, Query query, - Model model) throws IOException{ + OntModel model, VitroRequest vreq) throws IOException{ Dataset dataset = DatasetFactory.create(model); //Iterate through results and print out array of strings List outputResults = new ArrayList(); @@ -103,6 +111,24 @@ private void outputResults(HttpServletResponse response, Query query, ResultSet results = qe.execSelect(); while(results.hasNext()) { QuerySolution qs = results.nextSolution(); + RDFNode subject = qs.get("subject"); + if (!subject.isResource() || subject.isAnon()) { + continue; + } + RDFNode property = qs.get("prop"); + if (!property.isResource() || property.isAnon()) { + continue; + } + RDFNode object = qs.get("object"); + if (!object.isLiteral()) { + continue; + } + String subjectUri = subject.asResource().getURI(); + String propertyUri = property.asResource().getURI(); + String objectValue = object.asLiteral().getLexicalForm(); + if (!isAuthorized(vreq, qs, model, subjectUri, propertyUri, objectValue)) { + continue; + } Literal dataLiteral = qs.getLiteral("dataLiteral"); String dataValue = dataLiteral.getString(); outputResults.add(dataValue); @@ -120,12 +146,23 @@ private void outputResults(HttpServletResponse response, Query query, } finally { qe.close(); } + } - + private boolean isAuthorized(VitroRequest vreq, QuerySolution qs, OntModel model, String subjectUri, String propertyUri, String objectValue) { + AccessObject dataPropertyStatementAccessObject = new DataPropertyStatementAccessObject(model, subjectUri, propertyUri, objectValue); + AuthorizationRequest dataPropertyRequest = new SimpleAuthorizationRequest(dataPropertyStatementAccessObject, AccessOperation.DISPLAY); + if (VitroVocabulary.LABEL.equals(propertyUri)) { + AccessObject individualAccessObject = new IndividualAccessObject(subjectUri); + individualAccessObject.setModel(model); + AuthorizationRequest individualRequest = new SimpleAuthorizationRequest(individualAccessObject, AccessOperation.DISPLAY); + AuthorizationRequest requests = dataPropertyRequest.and(individualRequest); + return PolicyHelper.isAuthorizedForActions(vreq, requests); + } + return PolicyHelper.isAuthorizedForActions(vreq, dataPropertyRequest); } - private Model getModel(VitroRequest vreq) throws AjaxControllerException{ - Model model = vreq.getJenaOntModel(); + private OntModel getModel(VitroRequest vreq) throws AjaxControllerException{ + OntModel model = vreq.getJenaOntModel(); if (model == null) { throw new AjaxControllerException(SC_INTERNAL_SERVER_ERROR, @@ -135,12 +172,11 @@ private Model getModel(VitroRequest vreq) throws AjaxControllerException{ } private String getSparqlQuery(String qtxt, String property) { - //"i" denotes case insensitive //Searches for data literals whose string version begins with the text denoted - String query = "SELECT DISTINCT ?dataLiteral where {" + - "?s <" + property + "> ?dataLiteral . " + - "FILTER(regex(str(?dataLiteral), \"^" + qtxt + "\", \"i\")) } ORDER BY ?dataLiteral"; - return query; + ParameterizedSparqlString pss = new ParameterizedSparqlString(QUERY_TEXT); + pss.setIri(PARAM_PROPERTY, property); + pss.setLiteral(PARAM_QUERY, "^" + qtxt); + return pss.toString(); } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java index fb60822009..9c03c96c82 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java @@ -170,10 +170,23 @@ protected ResponseValues processRequest(VitroRequest vreq) { if (log.isDebugEnabled()) { log.debug(getSpentTime(startTime) + "ms spent before read filter configurations."); } - Map filterConfigurationsByField = SearchFiltering.readFilterConfigurations(vreq); + Set currentRoles = SearchFiltering.getCurrentUserRoles(vreq); + Map filterConfigurationsByField = SearchFiltering.readFilterConfigurations(currentRoles, vreq); if (log.isDebugEnabled()) { log.debug(getSpentTime(startTime) + "ms spent before get sort configurations."); } + for (SearchFilter filter: filterConfigurationsByField.values()) { + filter.setInputText(SearchFiltering.getFilterInputText(vreq, filter.getId())); + filter.setRangeValues(SearchFiltering.getFilterRangeText(vreq, filter.getId())); + } + Map> requestFilters = SearchFiltering.getRequestFilters(vreq); + if (log.isDebugEnabled()) { + log.debug(getSpentTime(startTime) + "ms spent after getRequestFilters."); + } + SearchFiltering.setSelectedFilters(filterConfigurationsByField, requestFilters); + if (log.isDebugEnabled()) { + log.debug(getSpentTime(startTime) + "ms spent after setSelectedFilters."); + } Map sortConfigurations = SearchFiltering.getSortConfigurations(vreq); if (log.isDebugEnabled()) { log.debug(getSpentTime(startTime) + "ms spent before get query configurations."); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/SearchFiltering.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/SearchFiltering.java index f3894c9203..e47d6b8f67 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/SearchFiltering.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/SearchFiltering.java @@ -3,6 +3,7 @@ import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.ROLE_PUBLIC_URI; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Enumeration; @@ -151,7 +152,8 @@ public class SearchFiltering { + " BIND(COALESCE(?bind_multilingual, false) as ?multilingual)\n" + "} ORDER BY ?sort_order ?label "; - public static void addFiltersToQuery(VitroRequest vreq, SearchQuery query, Map filterById) { + protected static void addFiltersToQuery(VitroRequest vreq, SearchQuery query, + Map filterById) { Enumeration paramNames = vreq.getParameterNames(); while (paramNames.hasMoreElements()) { String paramFilterName = paramNames.nextElement(); @@ -174,8 +176,11 @@ public static void addFiltersToQuery(VitroRequest vreq, SearchQuery query, Map collection) { + for (SearchFilter searchFilter : collection) { if (searchFilter.isInput()) { SearchFiltering.addInputFilter(query, searchFilter); } else if (searchFilter.isRange()) { @@ -217,11 +222,19 @@ public static Map> getRequestFilters(VitroRequest vreq) { return requestFilters; } - public static Map readFilterConfigurations(VitroRequest vreq) { + public static Map readFilterConfigurations(Set currentRoles, VitroRequest vreq) { long startTime = System.nanoTime(); Map filtersByField = new LinkedHashMap<>(); - Model model = ModelAccess.on(vreq).getOntModelSelector().getDisplayModel(); + Model model; + if (vreq != null) { + model = ModelAccess.on(vreq).getOntModelSelector().getDisplayModel(); + } else { + model = ModelAccess.getInstance().getOntModelSelector().getDisplayModel(); + } + if (model == null) { + return filtersByField; + } model.enterCriticalSection(Lock.READ); try { Query facetQuery = QueryFactory.create(FILTER_QUERY); @@ -240,7 +253,7 @@ public static Map readFilterConfigurations(VitroRequest vr if (filtersByField.containsKey(resultFieldName)) { filter = filtersByField.get(resultFieldName); } else { - filter = createSearchFilter(vreq, filtersByField, solution, resultFilterId, resultFieldName); + filter = createSearchFilter(filtersByField, solution, resultFilterId, resultFieldName); } if (solution.get("value_id") == null) { continue; @@ -258,7 +271,6 @@ public static Map readFilterConfigurations(VitroRequest vr RDFNode role = solution.get("role"); if (role != null && role.isResource()) { String roleUri = role.asResource().getURI(); - Set currentRoles = getCurrentUserRoles(vreq); if (currentRoles.contains(roleUri)) { value.setDefault(true); } @@ -270,17 +282,14 @@ public static Map readFilterConfigurations(VitroRequest vr if (log.isDebugEnabled()) { log.debug(getSpentTime(startTime) + "ms spent after FILTER QUERY request."); } - Map> requestFilters = getRequestFilters(vreq); - if (log.isDebugEnabled()) { - log.debug(getSpentTime(startTime) + "ms spent after getRequestFilters."); - } - setSelectedFilters(filtersByField, requestFilters); - if (log.isDebugEnabled()) { - log.debug(getSpentTime(startTime) + "ms spent after setSelectedFilters."); - } return sortFilters(filtersByField); } + public static void addDefaultFilters(SearchQuery query, Set currentRoles) { + Map filtersByField = SearchFiltering.readFilterConfigurations(currentRoles, null); + SearchFiltering.addPreconfiguredFiltersToQuery( query, filtersByField.values()); + } + public static Map sortFilters(Map filters) { List> list = new LinkedList<>(filters.entrySet()); list.sort(new FilterComparator()); @@ -389,7 +398,7 @@ public static Map getSortConfigurations(VitroRequest return sortConfigurations; } - private static SearchFilter createSearchFilter(VitroRequest vreq, Map filtersByField, + private static SearchFilter createSearchFilter(Map filtersByField, QuerySolution solution, String resultFilterId, String resultFieldName) { SearchFilter filter; filter = new SearchFilter(resultFilterId); @@ -436,10 +445,6 @@ private static SearchFilter createSearchFilter(VitroRequest vreq, Map 0) { return values[0]; @@ -484,7 +489,7 @@ private static String getFilterRangeText(VitroRequest vreq, String name) { return ""; } - private static void setSelectedFilters(Map filtersByField, + public static void setSelectedFilters(Map filtersByField, Map> requestFilters) { for (SearchFilter filter : filtersByField.values()) { if (requestFilters.containsKey(filter.getId())) { @@ -502,7 +507,7 @@ private static void setSelectedFilters(Map filtersByField, } } - private static Set getCurrentUserRoles(VitroRequest vreq) { + public static Set getCurrentUserRoles(VitroRequest vreq) { UserAccount user = LoginStatusBean.getCurrentUser(vreq); if (user == null) { return Collections.singleton(ROLE_PUBLIC_URI); @@ -557,7 +562,7 @@ static void addFacetFieldsToQuery(Map filters, SearchQuery } } - static Map getFiltersById(Map filtersByField) { + public static Map getFiltersById(Map filtersByField) { Map filtersById = filtersByField.values().stream().collect(Collectors.toMap(SearchFilter::getId, Function.identity())); return filtersById; diff --git a/api/src/test/java/stubs/edu/cornell/mannlib/vitro/webapp/modelaccess/RequestModelAccessStub.java b/api/src/test/java/stubs/edu/cornell/mannlib/vitro/webapp/modelaccess/RequestModelAccessStub.java index 8a97b4d8e1..fa4272f910 100644 --- a/api/src/test/java/stubs/edu/cornell/mannlib/vitro/webapp/modelaccess/RequestModelAccessStub.java +++ b/api/src/test/java/stubs/edu/cornell/mannlib/vitro/webapp/modelaccess/RequestModelAccessStub.java @@ -10,6 +10,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; +import edu.cornell.mannlib.vitro.webapp.dao.jena.SimpleOntModelSelector; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.DatasetOption; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LanguageOption; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.OntModelSelectorOption; @@ -91,8 +92,7 @@ public Dataset getDataset(DatasetOption... options) { @Override public OntModelSelector getOntModelSelector( OntModelSelectorOption... options) { - throw new RuntimeException( - "RequestModelAccessStub.getOntModelSelector() not implemented."); + return new SimpleOntModelSelector(); } @Override