VIVO-485 convert datagetter to ajax call

This commit is contained in:
tworrall 2013-11-04 14:45:43 -05:00
parent 50d788adb4
commit 6fd299301c
6 changed files with 152 additions and 83 deletions

View file

@ -6,11 +6,12 @@ $(document).ready(function(){
var countryMapBuilt = false; var countryMapBuilt = false;
var localMapBuilt = false; var localMapBuilt = false;
var researchAreas = { "type": "FeatureCollection", "features": []}; var researchAreas = { "type": "FeatureCollection", "features": []};
var geoResearcherCount = "0";
$.extend(this, urlsBase); $.extend(this, urlsBase);
$.extend(this, i18nStrings); $.extend(this, i18nStrings);
$.extend(this, geoResearcherCount);
getGeoFocusResearcherCount();
getGeoJsonForMaps(); getGeoJsonForMaps();
$('a#globalLink').click(function() { $('a#globalLink').click(function() {
@ -367,9 +368,26 @@ $(document).ready(function(){
}); });
} }
function getGeoFocusResearcherCount() {
$.ajax({
url: urlsBase + "/homePageAjax",
dataType: "json",
data: {
action: "getGeoFocusResearcherCount",
},
complete: function(xhr, status) {
var results = $.parseJSON(xhr.responseText);
// there will only ever be one key/value pair
if ( results != null ) {
geoResearcherCount = results.count;
}
}
});
}
function getResearcherCount(area) { function getResearcherCount(area) {
var researcherCount = this.geoResearcherCount;
var areaCount = 0; var areaCount = 0;
var text = ""; var text = "";
if ( area == "global" ) { if ( area == "global" ) {
@ -391,7 +409,7 @@ $(document).ready(function(){
if ( areaCount == 1 && text == " states.") { if ( areaCount == 1 && text == " states.") {
text = " " + i18nStrings.stateString; text = " " + i18nStrings.stateString;
} }
if ( researcherCount == 1 ) { if ( geoResearcherCount == 1 ) {
researcherText = " " + i18nStrings.researcherString + " " + i18nStrings.inString; researcherText = " " + i18nStrings.researcherString + " " + i18nStrings.inString;
} }
else { else {
@ -399,7 +417,7 @@ $(document).ready(function(){
} }
$('div#researcherTotal').html("<font style='font-size:1.05em;color:#167093'>" $('div#researcherTotal').html("<font style='font-size:1.05em;color:#167093'>"
+ researcherCount + geoResearcherCount
+ "</font> " + researcherText + " <font style='font-size:1.05em;color:#167093'>" + "</font> " + researcherText + " <font style='font-size:1.05em;color:#167093'>"
+ areaCount + "</font>" + text); + areaCount + "</font>" + text);
} }

View file

@ -204,17 +204,3 @@ var urlsBase = "${urls.base}";
--> -->
</section> </section>
</#macro> </#macro>
<#-- retrieves a count, the number of researchers with a geographic focus, -->
<#-- and saves it as a js variable to be used by the homePageMaps.js file -->
<#macro getGeoResearcherCount>
<script>
<#if researcherCountDG?has_content>
<#assign theCount = researcherCountDG[0].count />
<#else>
<#assign theCount = 0 />
</#if>
var geoResearcherCount = ${theCount};
</script>
</#macro>

View file

@ -17,35 +17,14 @@ display:academicDeptsDataGetter
display:saveToVar "academicDeptDG" ; display:saveToVar "academicDeptDG" ;
display:query """ display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX vivo: <http://vivoweb.org/ontology/core#> PREFIX vivo: <http://vivoweb.org/ontology/core#>
SELECT DISTINCT ?theURI (str(?label) as ?name) SELECT DISTINCT ?theURI (str(?label) as ?name)
WHERE WHERE
{ {
?theURI rdf:type vivo:AcademicDepartment . ?theURI a vivo:AcademicDepartment .
?theURI rdfs:label ?label ?theURI rdfs:label ?label
} }
""" . """ .
<freemarker:lib-home-page.ftl> display:hasDataGetter display:researcherCountDataGetter .
display:researcherCountDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
display:saveToVar "researcherCountDG" ;
display:query """
PREFIX geo: <http://aims.fao.org/aos/geopolitical.owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX core: <http://vivoweb.org/ontology/core#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vivoc: <http://vivo.library.cornell.edu/ns/0.1#>
SELECT DISTINCT (COUNT(DISTINCT ?person) AS ?count)
WHERE {
?person rdf:type foaf:Person .
?person core:geographicFocus ?focus
}
""" .

View file

@ -0,0 +1,83 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.controller.ajax;
import java.io.IOException;
import java.lang.Integer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONException;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.RDFNode;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.ajax.VitroAjaxController;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
public class GeoFocusResearcherCount extends AbstractAjaxResponder {
private static final Log log = LogFactory.getLog(GeoFocusResearcherCount.class.getName());
private List<Map<String,String>> geoFocusCount;
private static String GEO_FOCUS_COUNT_QUERY = ""
+ "PREFIX core: <http://vivoweb.org/ontology/core#> \n"
+ "PREFIX foaf: <http://xmlns.com/foaf/0.1/> \n"
+ "SELECT DISTINCT (COUNT(DISTINCT ?person) AS ?count) \n"
+ "WHERE { \n"
+ " ?person a foaf:Person . \n"
+ " ?person core:geographicFocus ?focus \n"
+ "}" ;
public GeoFocusResearcherCount(HttpServlet parent, VitroRequest vreq,
HttpServletResponse resp) {
super(parent, vreq, resp);
}
@Override
public String prepareResponse() throws IOException, JSONException {
try {
geoFocusCount = getGeoFocusCount(vreq);
String response = "{ ";
for (Map<String, String> map: geoFocusCount) {
String theCount = map.get("count");
response += "\"count\": \"" + theCount + "\"";
}
response += " }";
log.debug(response);
return response;
} catch (Exception e) {
log.error("Failed geographic focus count", e);
return EMPTY_RESPONSE;
}
}
private List<Map<String,String>> getGeoFocusCount(VitroRequest vreq) {
String queryStr = GEO_FOCUS_COUNT_QUERY;
log.debug("queryStr = " + queryStr);
List<Map<String,String>> count = new ArrayList<Map<String,String>>();
try {
ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
count.add(QueryUtils.querySolutionToStringValueMap(soln));
}
} catch (Exception e) {
log.error(e, e);
}
return count;
}
}

View file

@ -30,7 +30,11 @@ public class HomePageAjaxController extends VitroAjaxController {
String function = vreq.getParameter(PARAMETER_ACTION); String function = vreq.getParameter(PARAMETER_ACTION);
if ("getGeoFocusLocations".equals(function)) { if ("getGeoFocusLocations".equals(function)) {
new GeoFocusMapLocations(this, vreq, resp).processRequest(); new GeoFocusMapLocations(this, vreq, resp).processRequest();
} else { }
else if ("getGeoFocusResearcherCount".equals(function)) {
new GeoFocusResearcherCount(this, vreq, resp).processRequest();
}
else {
resp.getWriter().write("[]"); resp.getWriter().write("[]");
} }
} catch (Exception e) { } catch (Exception e) {

View file

@ -110,6 +110,5 @@
$('input.search-homepage').attr("value","${i18n().limit_search} \u2192"); $('input.search-homepage').attr("value","${i18n().limit_search} \u2192");
} }
</script> </script>
<@lh.getGeoResearcherCount/>
</body> </body>
</html> </html>