VIVO-396 Obtain preferred title from VCard
This commit is contained in:
parent
13feddac3d
commit
7bff226f00
4 changed files with 178 additions and 17 deletions
|
@ -0,0 +1,87 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.query.QuerySolution;
|
||||||
|
import com.hp.hpl.jena.query.ResultSet;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap an Individual in a JSON object for display by the script.
|
||||||
|
*
|
||||||
|
* This overrides the Vitro version so we can have more info in the display.
|
||||||
|
*/
|
||||||
|
public class IndividualJsonWrapper {
|
||||||
|
private static final Log log = LogFactory
|
||||||
|
.getLog(IndividualJsonWrapper.class);
|
||||||
|
|
||||||
|
private static String VCARD_DATA_QUERY = ""
|
||||||
|
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
|
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
|
+ "SELECT DISTINCT ?title \n" + "WHERE { \n"
|
||||||
|
+ " ?subject obo:ARG_2000028 ?vIndividual . \n"
|
||||||
|
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
|
+ " ?vTitle vcard:title ?title . \n" + "} ";
|
||||||
|
|
||||||
|
static JSONObject packageIndividualAsJson(VitroRequest vreq, Individual ind)
|
||||||
|
throws JSONException {
|
||||||
|
// need an unfiltered dao to get firstnames and lastnames
|
||||||
|
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
||||||
|
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("URI", ind.getURI());
|
||||||
|
jo.put("label", ind.getRdfsLabel());
|
||||||
|
jo.put("name", ind.getName());
|
||||||
|
jo.put("thumbUrl", ind.getThumbUrl());
|
||||||
|
jo.put("imageUrl", ind.getImageUrl());
|
||||||
|
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
||||||
|
jo.put("mostSpecificTypes", getMostSpecificTypes(ind, fullWdf));
|
||||||
|
jo.put("preferredTitle", findPreferredTitle(vreq, ind));
|
||||||
|
return jo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String findPreferredTitle(VitroRequest vreq, Individual ind) {
|
||||||
|
String queryStr = QueryUtils.subUriForQueryVar(VCARD_DATA_QUERY,
|
||||||
|
"subject", ind.getURI());
|
||||||
|
log.debug("queryStr = " + queryStr);
|
||||||
|
String value = "";
|
||||||
|
try {
|
||||||
|
ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
|
||||||
|
while (results.hasNext()) {
|
||||||
|
QuerySolution soln = results.nextSolution();
|
||||||
|
String t = QueryUtils.nodeToString(soln.get("title"));
|
||||||
|
if (StringUtils.isNotBlank(t)) {
|
||||||
|
value = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<String> getMostSpecificTypes(
|
||||||
|
Individual individual, WebappDaoFactory wdf) {
|
||||||
|
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
|
||||||
|
Map<String, String> mostSpecificTypes = opsDao
|
||||||
|
.getMostSpecificTypesInClassgroupsForIndividual(individual
|
||||||
|
.getURI());
|
||||||
|
return mostSpecificTypes.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,28 +2,60 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist;
|
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.query.QuerySolution;
|
||||||
|
import com.hp.hpl.jena.query.ResultSet;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.BaseListedIndividual;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
|
||||||
|
|
||||||
public class ListedIndividual extends BaseListedIndividual {
|
public class ListedIndividual extends BaseListedIndividual {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(ListedIndividual.class);
|
private static final Log log = LogFactory.getLog(ListedIndividual.class);
|
||||||
|
|
||||||
private static final String CORE = "http://vivoweb.org/ontology/core#";
|
private static String VCARD_DATA_QUERY = ""
|
||||||
|
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
|
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
|
+ "SELECT DISTINCT ?title \n"
|
||||||
|
+ "WHERE { \n"
|
||||||
|
+ " ?subject obo:ARG_2000028 ?vIndividual . \n"
|
||||||
|
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
|
+ " ?vTitle vcard:title ?title . \n"
|
||||||
|
+ "} " ;
|
||||||
|
|
||||||
|
private final String title;
|
||||||
|
|
||||||
public ListedIndividual(Individual individual, VitroRequest vreq) {
|
public ListedIndividual(Individual individual, VitroRequest vreq) {
|
||||||
super(individual, vreq);
|
super(individual, vreq);
|
||||||
|
title = findPreferredTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String findPreferredTitle() {
|
||||||
|
String queryStr = QueryUtils.subUriForQueryVar(VCARD_DATA_QUERY, "subject", individual.getURI());
|
||||||
|
log.debug("queryStr = " + queryStr);
|
||||||
|
String value = "";
|
||||||
|
try {
|
||||||
|
ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
|
||||||
|
while (results.hasNext()) {
|
||||||
|
QuerySolution soln = results.nextSolution();
|
||||||
|
String t = QueryUtils.nodeToString( soln.get("title"));
|
||||||
|
if (StringUtils.isNotBlank(t)) {
|
||||||
|
value = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
/* Template properties */
|
/* Template properties */
|
||||||
|
|
||||||
public String getPreferredTitle() {
|
public String getPreferredTitle() {
|
||||||
return cleanTextForDisplay( individual.getDataValue(CORE + "preferredTitle") );
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,33 +2,73 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.searchresult;
|
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.searchresult;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.query.QuerySolution;
|
||||||
|
import com.hp.hpl.jena.query.ResultSet;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
||||||
|
|
||||||
public class IndividualSearchResult extends BaseIndividualSearchResult {
|
public class IndividualSearchResult extends BaseIndividualSearchResult {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(IndividualSearchResult.class);
|
private static final Log log = LogFactory.getLog(IndividualSearchResult.class);
|
||||||
|
|
||||||
private static final String CORE = "http://vivoweb.org/ontology/core#";
|
private static String VCARD_DATA_QUERY = ""
|
||||||
|
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
|
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
|
+ "SELECT DISTINCT ?email ?title \n"
|
||||||
|
+ "WHERE { \n"
|
||||||
|
+ " ?subject obo:ARG_2000028 ?vIndividual . \n"
|
||||||
|
+ " OPTIONAL { ?vIndividual vcard:hasEmail ?vEmail . \n"
|
||||||
|
+ " ?vEmail vcard:email ?email . \n"
|
||||||
|
+ " } \n"
|
||||||
|
+ " OPTIONAL { ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
|
+ " ?vTitle vcard:title ?title . \n"
|
||||||
|
+ " } \n"
|
||||||
|
+ "} " ;
|
||||||
|
|
||||||
|
private String email = "";
|
||||||
|
private String title = "";
|
||||||
|
|
||||||
public IndividualSearchResult(Individual individual, VitroRequest vreq) {
|
public IndividualSearchResult(Individual individual, VitroRequest vreq) {
|
||||||
super(individual, vreq);
|
super(individual, vreq);
|
||||||
log.debug("Called Individual Search Result");
|
log.debug("Called Individual Search Result");
|
||||||
|
findVcardInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void findVcardInfo() {
|
||||||
|
String queryStr = QueryUtils.subUriForQueryVar(VCARD_DATA_QUERY, "subject", individual.getURI());
|
||||||
|
log.debug("queryStr = " + queryStr);
|
||||||
|
try {
|
||||||
|
ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
|
||||||
|
while (results.hasNext()) {
|
||||||
|
QuerySolution soln = results.nextSolution();
|
||||||
|
String t = QueryUtils.nodeToString( soln.get("title"));
|
||||||
|
if (StringUtils.isNotBlank(t)) {
|
||||||
|
title = t;
|
||||||
|
}
|
||||||
|
String em = QueryUtils.nodeToString( soln.get("email"));
|
||||||
|
if (StringUtils.isNotBlank(em)) {
|
||||||
|
email = em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Access methods for templates */
|
/* Access methods for templates */
|
||||||
|
|
||||||
public String getPreferredTitle() {
|
public String getPreferredTitle() {
|
||||||
log.debug("Called get Title");
|
return title;
|
||||||
return individual.getDataValue(CORE + "preferredTitle");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEmail() {
|
public String getEmail() {
|
||||||
log.debug("Called get Email");
|
return email;
|
||||||
return individual.getDataValue(CORE + "email");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -67,12 +67,14 @@ mydomain:facultyPreferredTitleDG
|
||||||
a datagetters:SparqlQueryDataGetter ;
|
a datagetters:SparqlQueryDataGetter ;
|
||||||
display:saveToVar "extra" ;
|
display:saveToVar "extra" ;
|
||||||
display:query """
|
display:query """
|
||||||
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
PREFIX obo: <http://purl.obolibrary.org/obo/>
|
||||||
PREFIX vivo: <http://vivoweb.org/ontology/core#>
|
PREFIX vcard: <http://www.w3.org/2006/vcard/ns#>
|
||||||
SELECT ?pt
|
SELECT DISTINCT ?pt
|
||||||
WHERE {
|
WHERE {
|
||||||
?individualUri <http://vivoweb.org/ontology/core#preferredTitle> ?pt
|
?individualUri obo:ARG_2000028 ?vIndividual .
|
||||||
}
|
?vIndividual vcard:hasTitle ?vTitle .
|
||||||
|
?vTitle vcard:title ?pt .
|
||||||
|
}
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""" .
|
""" .
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue