NIHVIVO-2744 Display of mostSpecificType(s) on individual profile (in place of former moniker).
This commit is contained in:
parent
d74f5f3072
commit
5998f8b095
14 changed files with 95 additions and 34 deletions
|
@ -34,4 +34,6 @@ public interface ObjectPropertyStatementDao {
|
|||
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String objectKey, String query);
|
||||
|
||||
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String objectKey, String query, Set<String> constructQueries);
|
||||
|
||||
public List<String> getMostSpecificTypesForIndividual(String subjectUri);
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public class VitroVocabulary {
|
|||
public static final String DISPLAY = DisplayVocabulary.DISPLAY_NS;
|
||||
|
||||
// properties found on the beans
|
||||
|
||||
|
||||
public static final String DESCRIPTION = vitroURI+"description";
|
||||
public static final String DESCRIPTION_ANNOT = vitroURI + "descriptionAnnot";
|
||||
public static final String PUBLIC_DESCRIPTION_ANNOT = vitroURI + "publicDescriptionAnnot";
|
||||
|
@ -56,6 +56,8 @@ public class VitroVocabulary {
|
|||
//public static final String PROHIBITED_FROM_CREATE_BELOW_ROLE_LEVEL_ANNOT = vitroURI+"prohibitedFromCreateBelowRoleLevelAnnot";
|
||||
public static final String PROHIBITED_FROM_UPDATE_BELOW_ROLE_LEVEL_ANNOT = vitroURI+"prohibitedFromUpdateBelowRoleLevelAnnot";
|
||||
//public static final String PROHIBITED_FROM_DELETE_BELOW_ROLE_LEVEL_ANNOT = vitroURI+"prohibitedFromDeleteBelowRoleLevelAnnot";
|
||||
|
||||
public static final String MOST_SPECIFIC_TYPE = vitroURI + "mostSpecificType";
|
||||
|
||||
// roles
|
||||
public static final String PUBLIC = "http://vitro.mannlib.cornell.edu/ns/vitro/role#public";
|
||||
|
|
|
@ -82,28 +82,22 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec
|
|||
return innerObjectPropertyStatementDao.insertNewObjectPropertyStatement(objPropertyStmt);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
// RY What about filtering?
|
||||
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
|
||||
String subjectUri, String propertyUri, String objectKey, String query) {
|
||||
return innerObjectPropertyStatementDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query);
|
||||
}
|
||||
|
||||
@Override
|
||||
// RY What about filtering?
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// @Override
|
||||
// // RY What about filtering?
|
||||
// public Map<String, List<Map<String, Object>>> getCollatedObjectPropertyStatementsForIndividual(
|
||||
// String subjectUri, String propertyUri, String query) {
|
||||
// return innerObjectPropertyStatementDao.getCollatedObjectPropertyStatementsForIndividual(subjectUri, propertyUri, query);
|
||||
// }
|
||||
@Override
|
||||
public List<String> getMostSpecificTypesForIndividual(String subjectUri) {
|
||||
return innerObjectPropertyStatementDao.getMostSpecificTypesForIndividual(subjectUri);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -778,7 +778,7 @@ public class DataPropertyDaoJena extends PropertyDaoJena implements
|
|||
}
|
||||
log.debug("Data property query string:\n" + query);
|
||||
|
||||
Iterator<QuerySolution> results = getPropertyQueryResults(subjectUri, query);
|
||||
Iterator<QuerySolution> results = getPropertyQueryResults(query);
|
||||
List<DataProperty> properties = new ArrayList<DataProperty>();
|
||||
while (results.hasNext()) {
|
||||
QuerySolution sol = results.next();
|
||||
|
|
|
@ -871,7 +871,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
|
|||
}
|
||||
log.debug("Object property query:\n" + query);
|
||||
|
||||
Iterator<QuerySolution> results = getPropertyQueryResults(subjectUri, query);
|
||||
Iterator<QuerySolution> results = getPropertyQueryResults(query);
|
||||
List<ObjectProperty> properties = new ArrayList<ObjectProperty>();
|
||||
while (results.hasNext()) {
|
||||
QuerySolution soln = results.next();
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
|
@ -38,6 +39,7 @@ 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.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.IndividualUpdateEvent;
|
||||
|
||||
public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements ObjectPropertyStatementDao {
|
||||
|
@ -359,7 +361,6 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
|||
initialBindings.add(
|
||||
"property", ResourceFactory.createResource(propertyUri));
|
||||
|
||||
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
|
||||
DatasetWrapper w = dwf.getDatasetWrapper();
|
||||
Dataset dataset = w.getDataset();
|
||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
||||
|
@ -383,4 +384,58 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
|||
|
||||
}
|
||||
|
||||
protected static final String MOST_SPECIFIC_TYPE_QUERY =
|
||||
"PREFIX rdfs: <" + VitroVocabulary.RDFS + "> \n" +
|
||||
"PREFIX vitro: <" + VitroVocabulary.vitroURI + "> \n" +
|
||||
"SELECT ?label WHERE { \n" +
|
||||
" ?subject vitro:mostSpecificType ?type . \n" +
|
||||
" ?type rdfs:label ?label \n" +
|
||||
"} ORDER BY ?label ";
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Finds all mostSpecificTypes of an individual.
|
||||
* Returns a list of type labels.
|
||||
* **/
|
||||
public List<String> getMostSpecificTypesForIndividual(String subjectUri) {
|
||||
|
||||
String queryString = subUriForQueryVar(MOST_SPECIFIC_TYPE_QUERY, "subject", subjectUri);
|
||||
|
||||
log.debug("Query string for vitro:mostSpecificType : " + queryString);
|
||||
|
||||
Query query = null;
|
||||
try {
|
||||
query = QueryFactory.create(queryString, Syntax.syntaxARQ);
|
||||
} catch(Throwable th){
|
||||
log.error("Could not create SPARQL query for query string. " + th.getMessage());
|
||||
log.error(queryString);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<String> types = new ArrayList<String>();
|
||||
DatasetWrapper w = dwf.getDatasetWrapper();
|
||||
Dataset dataset = w.getDataset();
|
||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
||||
try {
|
||||
|
||||
QueryExecution qexec = QueryExecutionFactory.create(query, dataset);
|
||||
ResultSet results = qexec.execSelect();
|
||||
while (results.hasNext()) {
|
||||
QuerySolution soln = results.nextSolution();
|
||||
RDFNode node = soln.get("label");
|
||||
if (node.isLiteral()) {
|
||||
String label = node.asLiteral().getLexicalForm();
|
||||
if (! StringUtils.isBlank(label)) {
|
||||
types.add(label);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} finally {
|
||||
dataset.getLock().leaveCriticalSection();
|
||||
w.close();
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -404,7 +404,7 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao {
|
|||
return classSet;
|
||||
}
|
||||
|
||||
protected Iterator<QuerySolution> getPropertyQueryResults(String subjectUri, Query query) {
|
||||
protected Iterator<QuerySolution> getPropertyQueryResults(Query query) {
|
||||
log.debug("SPARQL query:\n" + query.toString());
|
||||
|
||||
// RY Removing prebinding due to Jena bug: when isLiteral(?object) or
|
||||
|
|
|
@ -116,9 +116,6 @@ public class SolrAutocompleteController extends VitroAjaxController {
|
|||
|
||||
Collections.sort(results);
|
||||
|
||||
// map.put("results", results);
|
||||
// writeTemplate(TEMPLATE_DEFAULT, map, config, vreq, response);
|
||||
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (SearchResult result : results) {
|
||||
jsonArray.put(result.toMap());
|
||||
|
@ -157,7 +154,7 @@ public class SolrAutocompleteController extends VitroAjaxController {
|
|||
|
||||
query.setFields(VitroLuceneTermNames.NAME_RAW, VitroLuceneTermNames.URI); // fields to retrieve
|
||||
|
||||
// Can't sort on multivalued field, so sort results in Java when we get them
|
||||
// Can't sort on multivalued field, so we sort the results in Java when we get them.
|
||||
// query.setSortField(VitroLuceneTermNames.NAME_LOWERCASE, SolrQuery.ORDER.asc);
|
||||
|
||||
return query;
|
||||
|
|
|
@ -168,7 +168,7 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet {
|
|||
if( startIndex >= DEFAULT_MAX_HIT_COUNT - hitsPerPage )
|
||||
maxHitCount = startIndex + DEFAULT_MAX_HIT_COUNT ;
|
||||
|
||||
log.debug("maxHitSize is " + maxHitCount);
|
||||
log.debug("maxHitCount is " + maxHitCount);
|
||||
|
||||
String qtxt = vreq.getParameter(VitroQuery.QUERY_PARAMETER_NAME);
|
||||
|
||||
|
@ -363,7 +363,7 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet {
|
|||
}
|
||||
} catch(Exception e) {
|
||||
log.error("problem getting VClassGroups from search hits "
|
||||
+ e.getMessage());
|
||||
+ e.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
@ -20,8 +23,8 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
|||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
|
||||
|
||||
|
@ -146,10 +149,12 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel {
|
|||
return individual.getName();
|
||||
}
|
||||
|
||||
public String getMoniker() {
|
||||
return individual.getMoniker();
|
||||
public List<String> getMostSpecificTypes() {
|
||||
ObjectPropertyStatementDao opsDao = vreq.getWebappDaoFactory().getObjectPropertyStatementDao();
|
||||
return opsDao.getMostSpecificTypesForIndividual(getUri());
|
||||
}
|
||||
|
||||
|
||||
public String getUri() {
|
||||
return individual.getURI();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue