NIHVIVO-1510 Also check collated object property query to make sure it sorts first on subclass

This commit is contained in:
rjy7 2011-01-06 20:30:25 +00:00
parent f38677d914
commit f49d5c9ef0

View file

@ -27,7 +27,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
private static final Log log = LogFactory.getLog(CollatedObjectPropertyTemplateModel.class); private static final Log log = LogFactory.getLog(CollatedObjectPropertyTemplateModel.class);
private static final String DEFAULT_CONFIG_FILE = "listViewConfig-default-collated.xml"; private static final String DEFAULT_CONFIG_FILE = "listViewConfig-default-collated.xml";
private static final Pattern QUERY_PATTERN = Pattern.compile("SELECT[^{]*\\?subclass\\b"); private static final Pattern SELECT_QUERY_PATTERN = Pattern.compile("SELECT[^{]*\\?subclass\\b", Pattern.CASE_INSENSITIVE);
private static final Pattern ORDER_BY_QUERY_PATTERN = Pattern.compile("ORDER\\s+BY\\s+(DESC\\s*\\(\\s*)?\\?subclass", Pattern.CASE_INSENSITIVE);
private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses; private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses;
@ -36,9 +37,10 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
super(op, subject, vreq); super(op, subject, vreq);
if ( ! validConfigurationForCollatedProperty() ) { String invalidConfigMessage = checkConfiguration();
throw new InvalidConfigurationException("Invalid configuration for property " + op.getURI() + if ( ! invalidConfigMessage.isEmpty() ) {
": Query does not select a subclass variable."); throw new InvalidConfigurationException("Invalid configuration for property " +
op.getURI() + ":" + invalidConfigMessage);
} }
/* Get the data */ /* Get the data */
@ -66,17 +68,22 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
subclasses.putAll(unsortedSubclasses); subclasses.putAll(unsortedSubclasses);
} }
private boolean validConfigurationForCollatedProperty() { private String checkConfiguration() {
boolean validConfig = true;
// Make sure the query selects a ?subclass variable.
String queryString = getQueryString(); String queryString = getQueryString();
Matcher m = QUERY_PATTERN.matcher(queryString); Matcher m;
if ( ! m.find() ) {
validConfig = false;
}
return validConfig; m = SELECT_QUERY_PATTERN.matcher(queryString);
if ( ! m.find() ) {
return("Query does not select a subclass variable.");
}
m = ORDER_BY_QUERY_PATTERN.matcher(queryString);
if ( ! m.find() ) {
return("Query does not sort first by subclass variable.");
}
return "";
} }
private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri, private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri,