diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SolrJsonServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SolrJsonServlet.java index eb7f79cd3..1990aefaf 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SolrJsonServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SolrJsonServlet.java @@ -7,6 +7,7 @@ import java.io.PrintWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -34,6 +35,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.EditConfiguration; @@ -148,6 +150,7 @@ public class SolrJsonServlet extends VitroHttpServlet { log.debug("parameter vclassId URI parameter expected "); throw new Exception("parameter vclassId URI parameter expected "); } + vreq.setAttribute("displayType", vitroClassIdStr); rObj = getSolrIndividualsByVClass(vclass.getURI(),req, getServletContext()); }catch(Exception ex){ errorMessage = ex.toString(); @@ -267,7 +270,8 @@ public class SolrJsonServlet extends VitroHttpServlet { return map; } - + + //Factoring out to allow for results to be processed from query for both lucene and solr //Map given to process method includes the actual individuals returned from the search public static JSONObject processVClassResults(Map map, VitroRequest vreq, ServletContext context, boolean multipleVclasses) throws Exception{ @@ -275,7 +279,20 @@ public class SolrJsonServlet extends VitroHttpServlet { return rObj; } - static String getDataPropertyValue(Individual ind, DataProperty dp, WebappDaoFactory wdf){ + + public static String getMostSpecificTypeName(Individual individual, WebappDaoFactory wdf) { + ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao(); + Map types = opsDao.getMostSpecificTypesForIndividual(individual.getURI()); + Collection typeLabels = types.values(); + Iterator i = typeLabels.iterator(); + // Temporarily just returning one vaue since that's what the js expects. Fix later. + if (i.hasNext()) { + return i.next(); + } + return ""; + } + + public static String getDataPropertyValue(Individual ind, DataProperty dp, WebappDaoFactory wdf){ List values = wdf.getDataPropertyStatementDao() .getDataPropertyValuesForIndividualByProperty(ind, dp); if( values == null || values.isEmpty() ) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/DataGetterUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/DataGetterUtils.java index 56e0372f7..05461853f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/DataGetterUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/DataGetterUtils.java @@ -24,7 +24,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.controller.Controllers; -import edu.cornell.mannlib.vitro.webapp.controller.JSONServlet; +import edu.cornell.mannlib.vitro.webapp.controller.SolrJsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.PageController; @@ -170,8 +170,7 @@ public class DataGetterUtils { fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName"); DataProperty lNameDp = (new DataProperty()); lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName"); - DataProperty monikerDp = (new DataProperty()); - monikerDp.setURI( VitroVocabulary.MONIKER); + //this property is vivo specific DataProperty preferredTitleDp = (new DataProperty()); preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle"); @@ -241,13 +240,11 @@ public class DataGetterUtils { jo.put("imageUrl", ind.getImageUrl()); jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq)); - String moniker = JSONServlet.getDataPropertyValue(ind, monikerDp, fullWdf); - jo.put("moniker", moniker); - jo.put("vclassName", JSONServlet.getVClassName(ind,moniker,fullWdf)); + jo.put("vclassName", SolrJsonServlet.getMostSpecificTypeName(ind,fullWdf)); - jo.put("preferredTitle", JSONServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf)); - jo.put("firstName", JSONServlet.getDataPropertyValue(ind, fNameDp, fullWdf)); - jo.put("lastName", JSONServlet.getDataPropertyValue(ind, lNameDp, fullWdf)); + jo.put("preferredTitle", SolrJsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf)); + jo.put("firstName", SolrJsonServlet.getDataPropertyValue(ind, fNameDp, fullWdf)); + jo.put("lastName", SolrJsonServlet.getDataPropertyValue(ind, lNameDp, fullWdf)); jInds.put(jo); } diff --git a/webapp/web/js/menupage/browseByVClass.js b/webapp/web/js/menupage/browseByVClass.js index 260fa5649..040e174d0 100644 --- a/webapp/web/js/menupage/browseByVClass.js +++ b/webapp/web/js/menupage/browseByVClass.js @@ -95,7 +95,7 @@ var browseByVClass = { } $.getJSON(url, function(results) { - individualList = ""; + var individualList = ""; // Catch exceptions when empty individuals result set is returned // This is very likely to happen now since we don't have individual counts for each letter and always allow the result set to be filtered by any letter @@ -103,26 +103,30 @@ var browseByVClass = { browseByVClass.emptyResultSet(results.vclass, alpha) } else { $.each(results.individuals, function(i, item) { - label = results.individuals[i].label; - moniker = results.individuals[i].moniker; - vclassName = results.individuals[i].vclassName; - uri = results.individuals[i].URI; - profileUrl = results.individuals[i].profileUrl; - if ( results.individuals[i].thumbUrl ) { - image = browseByVClass.baseUrl + results.individuals[i].thumbUrl; + var individual, + label, + vclassName, + uri, + profileUrl, + image, + listItem; + + individual = results.individuals[i]; + label = individual.label; + vclassName = individual.vclassName; + uri = individual.URI; + profileUrl = individual.profileUrl; + if ( individual.thumbUrl ) { + image = browseByVClass.baseUrl + individual.thumbUrl; } // Build the content of each list item, piecing together each component listItem = '
  • '; - if ( typeof results.individuals[i].thumbUrl !== "undefined" ) { + if ( typeof individual.thumbUrl !== "undefined" ) { listItem += ''+ label +'

    '; } else { listItem += '

    '; } listItem += ''+ label +'

    '; - // Include the moniker only if it's not empty and not equal to the VClass name - if ( moniker != vclassName && moniker != "" ) { - listItem += ''+ moniker +''; - } listItem += '
  • '; // browseByVClass.individualsInVClass.append(listItem); individualList += listItem; diff --git a/webapp/web/js/menupage/browseByVClasses.js b/webapp/web/js/menupage/browseByVClasses.js index acd76c92b..b13d71828 100644 --- a/webapp/web/js/menupage/browseByVClasses.js +++ b/webapp/web/js/menupage/browseByVClasses.js @@ -45,7 +45,7 @@ browseByVClass.getIndividuals = function(vclassUri, alpha, page, scroll) { } $.getJSON(url, function(results) { - individualList = ""; + var individualList = ""; // Catch exceptions when empty individuals result set is returned // This is very likely to happen now since we don't have individual counts for each letter and always allow the result set to be filtered by any letter @@ -53,41 +53,46 @@ browseByVClass.getIndividuals = function(vclassUri, alpha, page, scroll) { browseByVClass.emptyResultSet(results.vclass, alpha) } else { $.each(results.individuals, function(i, item) { - label = results.individuals[i].label; - firstName = results.individuals[i].firstName; - lastName = results.individuals[i].lastName; + var individual, + label, + firstName, + lastName, + fullName, + vclassName, + preferredTitle, + uri, + profileUrl, + image, + listItem; + + individual = results.individuals[i]; + label = individual.label; + firstName = individual.firstName; + lastName = individual.lastName; if ( firstName && lastName ) { fullName = firstName + ' ' + lastName; } else { fullName = label; } - moniker = results.individuals[i].moniker; - vclassName = results.individuals[i].vclassName; - if ( results.individuals[i].preferredTitle == "") { - // Use the moniker only if it's not empty and not equal to the VClass name - if ( moniker != vclassName && moniker != "" ) { - preferredTitle = moniker; - } else { - preferredTitle = ""; - } - } else { - preferredTitle = results.individuals[i].preferredTitle; + var vclassName = individual.vclassName; + if ( individual.preferredTitle ) { + preferredTitle = individual.preferredTitle; } - uri = results.individuals[i].URI; - profileUrl = results.individuals[i].profileUrl; - if ( !results.individuals[i].thumbUrl ) { + uri = individual.URI; + profileUrl = individual.profileUrl; + if ( !individual.thumbUrl ) { image = browseByVClass.baseUrl + '/images/placeholders/person.thumbnail.jpg'; } else { - image = browseByVClass.baseUrl + results.individuals[i].thumbUrl; + image = browseByVClass.baseUrl + individual.thumbUrl; } // Build the content of each list item, piecing together each component listItem = '
  • '; listItem += ''+ fullName +''; listItem += '

    '+ fullName +'

    '; // Include the calculated preferred title (see above) only if it's not empty - if ( preferredTitle != "" ) { + if ( preferredTitle ) { listItem += ''+ preferredTitle +''; - } + } listItem += '
  • '; // browseByVClass.individualsInVClass.append(listItem); individualList += listItem;