NIHVIVO-2476 Filtering on object and data property statement data returned from sparql queries. Filters not working yet on properties with display or update level self-authenticated, but results are no worse than previously.
This commit is contained in:
parent
4c55db1ac6
commit
65453eaed8
2 changed files with 83 additions and 7 deletions
|
@ -2,14 +2,20 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.dao.filtering;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.hp.hpl.jena.rdf.model.Literal;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatementImpl;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyStatementDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters;
|
||||
|
||||
|
@ -94,15 +100,47 @@ class DataPropertyStatementDaoFiltering extends BaseFiltering implements DataPro
|
|||
}
|
||||
|
||||
@Override
|
||||
// RY What about filtering?
|
||||
public List<Literal> getDataPropertyValuesForIndividualByProperty(Individual subject, DataProperty property) {
|
||||
return innerDataPropertyStatementDao.getDataPropertyValuesForIndividualByProperty(subject, property);
|
||||
return getDataPropertyValuesForIndividualByProperty(subject.getURI(), property.getURI());
|
||||
}
|
||||
|
||||
@Override
|
||||
// RY What about filtering?
|
||||
public List<Literal> getDataPropertyValuesForIndividualByProperty(String subjectUri, String propertyUri) {
|
||||
return innerDataPropertyStatementDao.getDataPropertyValuesForIndividualByProperty(subjectUri, propertyUri);
|
||||
List<Literal> literals = innerDataPropertyStatementDao.getDataPropertyValuesForIndividualByProperty(subjectUri, propertyUri);
|
||||
/* Filter the data
|
||||
*
|
||||
* Filtering is applied to a list of DataPropertyStatement. Create these statements, mapped
|
||||
* to the literal that they are built from, apply filtering to the statements, then get
|
||||
* the associated literals out of the original list.
|
||||
*/
|
||||
Map<DataPropertyStatement, Literal> stmtsToLiterals =
|
||||
new HashMap<DataPropertyStatement, Literal>(literals.size());
|
||||
|
||||
for (Literal literal : literals) {
|
||||
String value = literal.getLexicalForm();
|
||||
DataPropertyStatement statement = new DataPropertyStatementImpl(subjectUri, propertyUri, value);
|
||||
statement.setDatatypeURI(literal.getDatatypeURI());
|
||||
statement.setLanguage(literal.getLanguage());
|
||||
stmtsToLiterals.put(statement, literal);
|
||||
}
|
||||
|
||||
List<DataPropertyStatement> stmtList = new ArrayList<DataPropertyStatement>(stmtsToLiterals.keySet());
|
||||
|
||||
// Apply the filters to the list of statements
|
||||
List<DataPropertyStatement> filteredStatements = filter(stmtList, filters.getDataPropertyStatementFilter());
|
||||
|
||||
// Get the literals associated with the filtered statements out of the original list
|
||||
List<Literal> filteredLiterals = new ArrayList<Literal>(filteredStatements.size());
|
||||
for (DataPropertyStatement dps : filteredStatements) {
|
||||
if (dps instanceof DataPropertyStatementFiltering) {
|
||||
dps = ((DataPropertyStatementFiltering)dps).innerStmt;
|
||||
}
|
||||
filteredLiterals.add(stmtsToLiterals.get(dps));
|
||||
}
|
||||
|
||||
// Return the filtered list of literals
|
||||
return filteredLiterals;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -3,6 +3,8 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.dao.filtering;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -11,6 +13,7 @@ import net.sf.jga.algorithms.Filter;
|
|||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatementImpl;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters;
|
||||
|
||||
|
@ -85,13 +88,48 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec
|
|||
@Override
|
||||
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
|
||||
String subjectUri, String propertyUri, String objectKey, String query) {
|
||||
return innerObjectPropertyStatementDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query);
|
||||
return getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
|
||||
String subjectUri, String propertyUri, String objectKey, String query, Set<String> queryStrings) {
|
||||
return innerObjectPropertyStatementDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query, queryStrings);
|
||||
|
||||
List<Map<String, String>> data = innerObjectPropertyStatementDao.
|
||||
getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query, queryStrings);
|
||||
|
||||
/* Filter the data
|
||||
*
|
||||
* Filtering is applied to a list of ObjectPropertyStatements. Create these statements, mapped
|
||||
* to the item in data that they are built from, apply filtering to the statements, then get
|
||||
* the associated data out of the original list.
|
||||
*/
|
||||
Map<ObjectPropertyStatement, Map<String, String>> stmtsToData =
|
||||
new HashMap<ObjectPropertyStatement, Map<String, String>>(data.size());
|
||||
|
||||
for (Map<String, String> map : data) {
|
||||
String objectUri = map.get(objectKey);
|
||||
ObjectPropertyStatement statement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri);
|
||||
stmtsToData.put(statement, map);
|
||||
}
|
||||
|
||||
List<ObjectPropertyStatement> stmtList = new ArrayList<ObjectPropertyStatement>(stmtsToData.keySet());
|
||||
|
||||
// Apply the filters to the list of statements
|
||||
List<ObjectPropertyStatement> filteredStatements = filterAndWrapList(stmtList, filters);
|
||||
|
||||
// Get the data associated with the filtered statements out of the map
|
||||
List<Map<String, String>> filteredData = new ArrayList<Map<String, String>>(filteredStatements.size());
|
||||
for (ObjectPropertyStatement ops : filteredStatements) {
|
||||
if (ops instanceof ObjectPropertyStatementFiltering) {
|
||||
ops = ((ObjectPropertyStatementFiltering)ops).innerStmt;
|
||||
}
|
||||
filteredData.add(stmtsToData.get(ops));
|
||||
}
|
||||
|
||||
// Return the filtered list of data
|
||||
return filteredData;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue