List of usage examples for org.apache.solr.client.solrj.util ClientUtils escapeQueryChars
public static String escapeQueryChars(String s)
From source file:org.sakaiproject.nakamura.message.search.MessageIndexingHandler.java
License:Apache License
/** * {@inheritDoc}// w w w .j av a2 s .c o m * * @see org.sakaiproject.nakamura.api.solr.IndexingHandler#getDeleteQueries(org.sakaiproject.nakamura.api.solr.RepositorySession, * org.osgi.service.event.Event) */ public Collection<String> getDeleteQueries(RepositorySession repositorySession, Event event) { List<String> retval = Collections.emptyList(); logger.debug("GetDelete for {} ", event); String path = (String) event.getProperty(IndexingHandler.FIELD_PATH); String resourceType = (String) event.getProperty("resourceType"); if (CONTENT_TYPES.contains(resourceType)) { retval = ImmutableList.of("id:(" + ClientUtils.escapeQueryChars(path) + " OR " + ClientUtils.escapeQueryChars(path + AUTH_SUFFIX) + ")"); } return retval; }
From source file:org.sakaiproject.nakamura.message.search.MessageSearchPropertyProvider.java
License:Apache License
/** * {@inheritDoc}/*from w w w .j a v a 2 s.c om*/ * * @see org.sakaiproject.nakamura.api.search.SearchPropertyProvider#loadUserProperties(org.apache.sling.api.SlingHttpServletRequest, * java.util.Map) */ public void loadUserProperties(SlingHttpServletRequest request, Map<String, String> propertiesMap) { String user = request.getRemoteUser(); Session session = StorageClientUtils .adaptToSession(request.getResourceResolver().adaptTo(javax.jcr.Session.class)); propertiesMap.put(MessageConstants.SEARCH_PROP_MESSAGESTORE, ClientUtils.escapeQueryChars(messagingService.getFullPathToStore(user, session)) + "*"); RequestParameter address = request.getRequestParameter("address"); if (address != null && !address.getString().equals("")) { // resolve the address by finding the authorizables. String addressString = address.getString(); String storePath = messagingService.getFullPathToStore(addressString, session); propertiesMap.put(MessageConstants.SEARCH_PROP_MESSAGESTORE, ClientUtils.escapeQueryChars(storePath) + "*"); } RequestParameter usersParam = request.getRequestParameter("_from"); if (usersParam != null && !usersParam.getString().equals("")) { String[] users = StringUtils.split(usersParam.getString(), ','); StringBuilder solrQuery = new StringBuilder(); //build solr query solrQuery.append("from:("); for (int i = 0; i < users.length; i++) { solrQuery.append('"').append(ClientUtils.escapeQueryChars(users[i])).append('"'); if (i < users.length - 1) { solrQuery.append(" OR "); } } solrQuery.append(")"); propertiesMap.put("_from", solrQuery.toString()); } }
From source file:org.sakaiproject.nakamura.message.search.MessageSearchPropertyProviderTest.java
License:Apache License
@Test public void testProperties() throws Exception { SlingHttpServletRequest request = mock(SlingHttpServletRequest.class); ResourceResolver resolver = mock(ResourceResolver.class); JackrabbitSession jackrabbitSession = mock(JackrabbitSession.class); when(resolver.adaptTo(javax.jcr.Session.class)).thenReturn(jackrabbitSession); when(request.getResourceResolver()).thenReturn(resolver); when(request.getRemoteUser()).thenReturn("admin"); Authorizable au = createAuthorizable("admin", false, true); UserManager um = createUserManager(null, true, au); when(jackrabbitSession.getUserManager()).thenReturn(um); // Special requests RequestParameter fromParam = mock(RequestParameter.class); when(fromParam.getString()).thenReturn("usera,userb"); when(request.getRequestParameter("_from")).thenReturn(fromParam); Map<String, String> pMap = new HashMap<String, String>(); MessageSearchPropertyProvider provider = new MessageSearchPropertyProvider(); LiteMessagingService messagingService = new LiteMessagingServiceImpl(); provider.messagingService = messagingService; provider.loadUserProperties(request, pMap); provider.messagingService = null;/* w w w. j av a2 s . c o m*/ assertEquals(ClientUtils.escapeQueryChars(LitePersonalUtils.PATH_AUTHORIZABLE + "admin/message/") + "*", pMap.get(MessageConstants.SEARCH_PROP_MESSAGESTORE)); assertEquals("from:(\"usera\" OR \"userb\")", pMap.get("_from")); }
From source file:org.sakaiproject.nakamura.message.search.MessageSearchResponseDecorator.java
License:Apache License
public void decorateSearchResponse(SlingHttpServletRequest request, JSONWriter writer) throws JSONException { writer.key("unread"); long count = 0; // We don't do queries for anonymous users. (Possible ddos hole). String userID = request.getRemoteUser(); if (UserConstants.ANON_USERID.equals(userID)) { writer.value(count);//from w w w.j ava 2 s . c o m return; } try { final Session session = StorageClientUtils .adaptToSession(request.getResourceResolver().adaptTo(javax.jcr.Session.class)); String store = messagingService.getFullPathToStore(userID, session); store = ISO9075.encodePath(store); store = store.substring(0, store.length() - 1); String queryString = "path:" + ClientUtils.escapeQueryChars(store) + " AND resourceType:sakai/message AND type:internal AND messagebox:inbox AND read:false"; Query query = new Query(queryString); SolrSearchResultSet resultSet = searchServiceFactory.getSearchResultSet(request, query, false); count = resultSet.getSize(); } catch (SolrSearchException e) { LOGGER.error(e.getMessage()); } finally { writer.value(count); } }
From source file:org.sakaiproject.nakamura.message.search.MessageSparseSearchPropertyProvider.java
License:Apache License
/** * {@inheritDoc}//from ww w .jav a2 s . c o m * * @see org.sakaiproject.nakamura.api.search.SearchPropertyProvider#loadUserProperties(org.apache.sling.api.SlingHttpServletRequest, * java.util.Map) */ public void loadUserProperties(SlingHttpServletRequest request, Map<String, String> propertiesMap) { String user = request.getRemoteUser(); Session session = StorageClientUtils .adaptToSession(request.getResourceResolver().adaptTo(javax.jcr.Session.class)); final String resourceType = request.getResource().getResourceType(); final boolean solrSearchType = "sakai/solr-search".equals(resourceType); String fullPathToStore = ClientUtils.escapeQueryChars(messagingService.getFullPathToStore(user, session)); propertiesMap.put(MessageConstants.SEARCH_PROP_MESSAGESTORE, fullPathToStore); RequestParameter address = request.getRequestParameter("address"); if (address != null && !address.getString().equals("")) { // resolve the address by finding the authorizables. String addressString = address.getString(); String storePath = messagingService.getFullPathToStore(addressString, session); propertiesMap.put(MessageConstants.SEARCH_PROP_MESSAGESTORE, ClientUtils.escapeQueryChars(storePath) + "*"); } String[] categoryStrings = request.getParameterValues("category"); if (categoryStrings != null && !categoryStrings[0].equals("") && !categoryStrings[0].equals("*")) { final StringBuilder categoryClauseBuffer = new StringBuilder(); if (solrSearchType) { categoryClauseBuffer.append(" AND category:("); } else { categoryClauseBuffer.append(" AND sakai\\:category:("); } String[] commaSeparatedTerms = categoryStrings[0].split(","); categoryClauseBuffer.append(commaSeparatedTerms[0]); for (int h = 0; h < categoryStrings.length; h++) { commaSeparatedTerms = categoryStrings[h].split(","); int starter = 0; if (h == 0) { starter++; } for (int i = starter; i < commaSeparatedTerms.length; i++) { categoryClauseBuffer.append(" OR ").append(commaSeparatedTerms[i]); } } categoryClauseBuffer.append(")"); propertiesMap.put("_categoryClause", categoryClauseBuffer.toString()); } else { propertiesMap.put("_categoryClause", ""); } RequestParameter usersParam = request.getRequestParameter("_from"); if (usersParam != null && !usersParam.getString().equals("")) { String[] users = StringUtils.split(usersParam.getString(), ','); StringBuilder solrQuery = new StringBuilder(); //build solr query solrQuery.append("from:("); for (int i = 0; i < users.length; i++) { solrQuery.append('"').append(ClientUtils.escapeQueryChars(users[i])).append('"'); if (i < users.length - 1) { solrQuery.append(" OR "); } } solrQuery.append(")"); propertiesMap.put("_from", solrQuery.toString()); } }
From source file:org.sakaiproject.nakamura.message.search.MessageSparseSearchPropertyProviderTest.java
License:Apache License
@Test public void testProperties() throws Exception { SlingHttpServletRequest request = mock(SlingHttpServletRequest.class); ResourceResolver resolver = mock(ResourceResolver.class); javax.jcr.Session jcrSession = mock(javax.jcr.Session.class, withSettings().extraInterfaces(SessionAdaptable.class)); Session session = mock(Session.class); when(request.getResourceResolver()).thenReturn(resolver); when(resolver.adaptTo(javax.jcr.Session.class)).thenReturn(jcrSession); when(((SessionAdaptable) jcrSession).getSession()).thenReturn(session); when(request.getRemoteUser()).thenReturn("admin"); AuthorizableManager am = mock(AuthorizableManager.class); Authorizable au = mock(Authorizable.class); when(am.findAuthorizable("admin")).thenReturn(au); when(session.getAuthorizableManager()).thenReturn(am); // Special requests RequestParameter fromParam = mock(RequestParameter.class); when(fromParam.getString()).thenReturn("usera,userb"); when(request.getRequestParameter("_from")).thenReturn(fromParam); Resource mockResource = mock(Resource.class); when(mockResource.getResourceType()).thenReturn("sakai/solr-search"); when(request.getResource()).thenReturn(mockResource); Map<String, String> pMap = new HashMap<String, String>(); MessageSparseSearchPropertyProvider provider = new MessageSparseSearchPropertyProvider(); LiteMessagingService messagingService = new LiteMessagingServiceImpl(); provider.messagingService = messagingService; provider.loadUserProperties(request, pMap); provider.messagingService = null;//from www .ja v a2 s .c om assertEquals(ClientUtils.escapeQueryChars(LitePersonalUtils.PATH_AUTHORIZABLE + "admin/message/"), pMap.get(MessageConstants.SEARCH_PROP_MESSAGESTORE)); assertEquals("from:(\"usera\" OR \"userb\")", pMap.get("_from")); }
From source file:org.sakaiproject.nakamura.pages.search.PageContentIndexingHandler.java
License:Apache License
/** * {@inheritDoc}/*from w w w . j a v a 2 s .c om*/ * * @see org.sakaiproject.nakamura.api.solr.IndexingHandler#getDeleteQueries(org.sakaiproject.nakamura.api.solr.RepositorySession, * org.osgi.service.event.Event) */ public Collection<String> getDeleteQueries(RepositorySession respositorySession, Event event) { LOGGER.debug("GetDelete for {} ", event); String path = (String) event.getProperty(FIELD_PATH); return ImmutableList.of("id:" + ClientUtils.escapeQueryChars(path)); }
From source file:org.sakaiproject.nakamura.pages.search.PageSearchPropertyProvider.java
License:Apache License
public void loadUserProperties(SlingHttpServletRequest request, Map<String, String> propertiesMap) { LOG.info("loading properties."); RequestParameter pathParam = request.getRequestParameter("path"); RequestParameter[] properties = request.getRequestParameters("properties"); RequestParameter[] values = request.getRequestParameters("values"); RequestParameter[] operators = request.getRequestParameters("operators"); String path = request.getResource().getPath(); String filter = ""; if (properties != null && values != null && operators != null && properties.length == values.length && values.length == operators.length) { for (int i = 0; i < properties.length; i++) { String op = operators[i].getString(); if (op.equals(">") || op.equals("=") || op.equals("<")) { filter += " AND " + properties[i].getString() + operators[i].getString() + '"' + values[i].getString() + '"'; }/* ww w . ja va 2s . c o m*/ } } if (pathParam != null) { path = pathParam.getString(); } if (path.endsWith("/")) { path = path.substring(0, path.length() - 1); } propertiesMap.put("_filter", ClientUtils.escapeQueryChars(filter)); propertiesMap.put("_path", ClientUtils.escapeQueryChars(path)); }
From source file:org.sakaiproject.nakamura.search.processors.GroupMembersSearchPropertyProvider.java
License:Apache License
/** * {@inheritDoc}/*w w w. ja v a 2 s.c o m*/ * * @see org.sakaiproject.nakamura.api.search.SearchPropertyProvider#loadUserProperties(org.apache.sling.api.SlingHttpServletRequest, * java.util.Map) */ public void loadUserProperties(SlingHttpServletRequest request, Map<String, String> propertiesMap) { try { Session session = StorageClientUtils .adaptToSession(request.getResourceResolver().adaptTo(javax.jcr.Session.class)); AuthorizableManager am = session.getAuthorizableManager(); if (request.getParameter("q") == null) { throw new IllegalArgumentException("Must provide 'q' parameter to use for search."); } // get the request group name String groupName = request.getParameter("group"); if (groupName == null) { throw new IllegalArgumentException("Must provide group to search within."); } // get the authorizable associated to the requested group name Group group = (Group) am.findAuthorizable(groupName); if (group == null) { throw new IllegalArgumentException("Unable to find group [" + groupName + "]"); } LinkedHashSet<String> memberIds = new LinkedHashSet<String>(); // collect the declared members of the requested group addDeclaredMembers(memberIds, group); boolean includeSelf = Boolean.parseBoolean(request.getParameter("includeSelf")); String currentUser = request.getRemoteUser(); if (!includeSelf) { memberIds.remove(currentUser); } // 900 is the number raydavis said we should split on. This can be tuned as needed. if (memberIds.size() > 900) { // more than the threshold; pass along for post processing request.setAttribute("memberIds", memberIds); } else { // update the query to filter before writing nodes // start building solr query StringBuilder solrQuery = new StringBuilder("name:("); // add member id's Iterator<String> members = memberIds.iterator(); while (members.hasNext()) { String memberId = members.next(); solrQuery.append("'"); solrQuery.append(ClientUtils.escapeQueryChars(memberId)); solrQuery.append("'"); if (members.hasNext()) { solrQuery.append(" OR "); } } // finish building solr query solrQuery.append(")"); propertiesMap.put("_groupQuery", solrQuery.toString()); } } catch (StorageClientException e) { logger.error(e.getMessage(), e); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); } }
From source file:org.sakaiproject.nakamura.search.processors.TagMatchSearchPropertyProvider.java
License:Apache License
/** * {@inheritDoc}/*from w w w .ja v a 2 s .c om*/ * * @see org.sakaiproject.nakamura.api.search.SearchPropertyProvider#loadUserProperties(org.apache.sling.api.SlingHttpServletRequest, * java.util.Map) */ public void loadUserProperties(SlingHttpServletRequest request, Map<String, String> propertiesMap) { javax.jcr.Session session = null; try { // javax.jcr.Session session = request.getResourceResolver().adaptTo(javax.jcr.Session.class); session = repository.loginAdministrative(null); StringBuilder tagClause = new StringBuilder(); String q = request.getParameter("q"); if (!StringUtils.isBlank(q)) { if (q.endsWith("*")) { q = q.substring(0, q.length() - 1); } String statement = "//element(*)MetaData[@sling:resourceType='sakai/tag'"; // KERN-1917, KERN-1918 if (!StringUtils.isBlank(q)) { tagClause.append(" OR tag:(").append(SearchUtil.escapeString(q, SOLR)).append(")"); statement += " and jcr:like(@sakai:tag-name,'%" + ISO9075.encode(q) + "%')"; } statement += "]"; QueryResult result = JcrResourceUtil.query(session, statement, "xpath"); RowIterator rows = result.getRows(); if (rows.hasNext()) { tagClause.append(" OR taguuid:("); String sep = ""; while (rows.hasNext()) { tagClause.append(sep); Row row = rows.nextRow(); String uuid = row.getNode().getIdentifier(); tagClause.append(ClientUtils.escapeQueryChars(uuid)); sep = " OR "; } tagClause.append(")"); } } propertiesMap.put("_taguuids", tagClause.toString()); } catch (RepositoryException e) { logger.error("failed to add search properties for tags", e); } finally { if (session != null) { session.logout(); } } }