NIHVIVO-3298 Create a SparqlQueryUtils class so escapeForRegex() will be more widely available.
This commit is contained in:
parent
ec881de6a3
commit
402f06beb6
3 changed files with 20 additions and 14 deletions
|
@ -19,15 +19,15 @@ import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount;
|
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount.Status;
|
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount.Status;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.AbstractPagingSelector;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.accounts.UserAccountsOrdering.Field;
|
import edu.cornell.mannlib.vitro.webapp.controller.accounts.UserAccountsOrdering.Field;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner;
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner.QueryParser;
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner.QueryParser;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pull some UserAccounts from the model, based on a set of criteria.
|
* Pull some UserAccounts from the model, based on a set of criteria.
|
||||||
*/
|
*/
|
||||||
public class UserAccountsSelector extends AbstractPagingSelector {
|
public class UserAccountsSelector {
|
||||||
private static final Log log = LogFactory
|
private static final Log log = LogFactory
|
||||||
.getLog(UserAccountsSelector.class);
|
.getLog(UserAccountsSelector.class);
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ public class UserAccountsSelector extends AbstractPagingSelector {
|
||||||
String searchTerm = criteria.getSearchTerm();
|
String searchTerm = criteria.getSearchTerm();
|
||||||
|
|
||||||
if (!roleFilterUri.isEmpty()) {
|
if (!roleFilterUri.isEmpty()) {
|
||||||
String clean = escapeForRegex(roleFilterUri);
|
String clean = SparqlQueryUtils.escapeForRegex(roleFilterUri);
|
||||||
filters += "OPTIONAL { ?uri auth:hasPermissionSet ?role } \n"
|
filters += "OPTIONAL { ?uri auth:hasPermissionSet ?role } \n"
|
||||||
+ " FILTER (REGEX(str(?role), '^" + clean + "$'))";
|
+ " FILTER (REGEX(str(?role), '^" + clean + "$'))";
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ public class UserAccountsSelector extends AbstractPagingSelector {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!searchTerm.isEmpty()) {
|
if (!searchTerm.isEmpty()) {
|
||||||
String clean = escapeForRegex(searchTerm);
|
String clean = SparqlQueryUtils.escapeForRegex(searchTerm);
|
||||||
filters += "FILTER ("
|
filters += "FILTER ("
|
||||||
+ ("REGEX(?email, '" + clean + "', 'i')")
|
+ ("REGEX(?email, '" + clean + "', 'i')")
|
||||||
+ " || "
|
+ " || "
|
||||||
|
|
|
@ -13,18 +13,18 @@ import com.hp.hpl.jena.ontology.OntModel;
|
||||||
import com.hp.hpl.jena.query.QuerySolution;
|
import com.hp.hpl.jena.query.QuerySolution;
|
||||||
import com.hp.hpl.jena.query.ResultSet;
|
import com.hp.hpl.jena.query.ResultSet;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.AbstractPagingSelector;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionBuilder.ItemInfo;
|
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionBuilder.ItemInfo;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionBuilder.Relationship;
|
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionBuilder.Relationship;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionCriteria.ProxyRelationshipView;
|
import edu.cornell.mannlib.vitro.webapp.controller.accounts.manageproxies.ProxyRelationshipSelectionCriteria.ProxyRelationshipView;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner;
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner.QueryParser;
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryRunner.QueryParser;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class which will accept a ProxyRelationshipSelectionCriteria and produce a
|
* A class which will accept a ProxyRelationshipSelectionCriteria and produce a
|
||||||
* ProxyRelationshipSelection.
|
* ProxyRelationshipSelection.
|
||||||
*/
|
*/
|
||||||
public class ProxyRelationshipSelector extends AbstractPagingSelector {
|
public class ProxyRelationshipSelector {
|
||||||
private static final Log log = LogFactory
|
private static final Log log = LogFactory
|
||||||
.getLog(ProxyRelationshipSelector.class);
|
.getLog(ProxyRelationshipSelector.class);
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ public class ProxyRelationshipSelector extends AbstractPagingSelector {
|
||||||
if (searchTerm.isEmpty()) {
|
if (searchTerm.isEmpty()) {
|
||||||
return q.replace("%filterClause%", "");
|
return q.replace("%filterClause%", "");
|
||||||
} else {
|
} else {
|
||||||
String clean = escapeForRegex(searchTerm);
|
String clean = SparqlQueryUtils.escapeForRegex(searchTerm);
|
||||||
return q.replace("%filterClause%",
|
return q.replace("%filterClause%",
|
||||||
"FILTER (REGEX(str(?label), '^" + clean + "', 'i'))");
|
"FILTER (REGEX(str(?label), '^" + clean + "', 'i'))");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller;
|
package edu.cornell.mannlib.vitro.webapp.utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A base class with some methods for building a selector.
|
* Some utility methods that help when dealing with SPARQL queries.
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractPagingSelector {
|
public class SparqlQueryUtils {
|
||||||
/**
|
/**
|
||||||
* If the user enters any of these characters in a search term, escape it
|
* If the user enters any of these characters in a search term, escape it
|
||||||
* with a backslash.
|
* with a backslash.
|
||||||
|
@ -13,14 +13,17 @@ public abstract class AbstractPagingSelector {
|
||||||
private static final char[] REGEX_SPECIAL_CHARACTERS = "[\\^$.|?*+()]"
|
private static final char[] REGEX_SPECIAL_CHARACTERS = "[\\^$.|?*+()]"
|
||||||
.toCharArray();
|
.toCharArray();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Escape any regex special characters in the string.
|
* Escape any regex special characters in the string.
|
||||||
*
|
*
|
||||||
* Note that the SPARQL parser requires two backslashes, in order to pass a
|
* Note that the SPARQL parser requires two backslashes, in order to pass a
|
||||||
* single backslash to the REGEX function.
|
* single backslash to the REGEX function.
|
||||||
|
*
|
||||||
|
* Also escape a single quote ('), but only with a single backslash, since
|
||||||
|
* this one is for the SPARQL parser itself (single quote is not a special
|
||||||
|
* character to REGEX).
|
||||||
*/
|
*/
|
||||||
protected String escapeForRegex(String raw) {
|
public static String escapeForRegex(String raw) {
|
||||||
StringBuilder clean = new StringBuilder();
|
StringBuilder clean = new StringBuilder();
|
||||||
outer: for (char c : raw.toCharArray()) {
|
outer: for (char c : raw.toCharArray()) {
|
||||||
for (char special : REGEX_SPECIAL_CHARACTERS) {
|
for (char special : REGEX_SPECIAL_CHARACTERS) {
|
||||||
|
@ -29,10 +32,13 @@ public abstract class AbstractPagingSelector {
|
||||||
continue outer;
|
continue outer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (c == '\'') {
|
||||||
|
clean.append('\\').append(c);
|
||||||
|
continue outer;
|
||||||
|
}
|
||||||
clean.append(c);
|
clean.append(c);
|
||||||
}
|
}
|
||||||
return clean.toString();
|
return clean.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue