From 419c9dbfb52f6f14309b8b587c1a7243b06f3873 Mon Sep 17 00:00:00 2001 From: cdtank Date: Thu, 23 Dec 2010 16:51:03 +0000 Subject: [PATCH] 1. Modified dependency injection bean to use proper packages. 2. Started the bifurcation process of person level into coauthor person level & copi person level. 3. Fixed person pub count sparkline to use new data structures. 4. Modified co athor vis code genrator to save some more data for use by the templates. --- .../visualizations-beans-injection-fm.xml | 7 +- .../personlevel/person_level-fm.js | 475 ++++++++++++++++++ .../personlevel/coAuthorPersonLevel.ftl | 203 ++++++++ .../personlevel/coPIPersonLevel.ftl | 1 + .../personPublicationSparklineContent.ftl | 2 - .../CoAuthorshipVisCodeGenerator.java | 8 + .../PersonLevelRequestHandler.java | 3 - .../utilities/UtilitiesRequestHandler.java | 14 - 8 files changed, 690 insertions(+), 23 deletions(-) create mode 100644 productMods/js/visualization/personlevel/person_level-fm.js create mode 100644 productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl create mode 100644 productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl diff --git a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml index e7c6f492..f20d7076 100644 --- a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml +++ b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml @@ -23,15 +23,15 @@ class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.persongrantcount.PersonGrantCountRequestHandler" /> + class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.personlevel.PersonLevelRequestHandler" /> + class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coprincipalinvestigator.CoPIGrantCountRequestHandler" /> - diff --git a/productMods/js/visualization/personlevel/person_level-fm.js b/productMods/js/visualization/personlevel/person_level-fm.js new file mode 100644 index 00000000..dd20ca36 --- /dev/null +++ b/productMods/js/visualization/personlevel/person_level-fm.js @@ -0,0 +1,475 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +function getWellFormedURLs(given_uri, type) { + + if (!given_uri || given_uri == "") { + return; + } + + // general best practice is to put javascript code inside document.ready + // but in this case when i do that the function does not get called + // properly. + // so removing it for now. + + // $(document).ready(function() { + + var finalURL; + + if (type == "coauthorship") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PERSON_LEVEL_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + + } else if (type == "copi") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "COPI_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + + }else if (type == "profile") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PROFILE_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + } else if (type == "image") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "IMAGE_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + } else if (type == "profile_info") { + + var profileInfoJSON = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PROFILE_INFO", uri: given_uri}), + dataType: "json", + async: false, + success:function(data){ + } + }).responseText; + + return profileInfoJSON; + + } + + // }); +} + +$.fn.image = function(src, successFunc, failureFunc){ + return this.each(function(){ + var profileImage = new Image(); + profileImage.onerror = failureFunc; + profileImage.onload = successFunc; + profileImage.src = src; + + return profileImage; + }); +}; + +function setProfileImage(imageContainerID, mainImageURL) { + + if (imageContainerID == "") { + return; + } + + if (!mainImageURL || mainImageURL == "") { + $("#" + imageContainerID).empty(); + return; + } + + var rawPath = getWellFormedURLs(mainImageURL, "image"); + + var imageLink = contextPath + rawPath; + + var imageContainer = $("#" + imageContainerID); + imageContainer.image(imageLink, + function(){ + imageContainer.empty().append(this); + }, + function(){ + // For performing any action on failure to + // find the image. + imageContainer.empty(); + } + ); + +} + +function setProfileMoniker(monikerContainerID, moniker, doEllipsis) { + + if (monikerContainerID == "") { + return; + } + + if (!moniker) { + $("#" + monikerContainerID).empty(); + return; + } + + var finalDisplayMoniker; + + if (moniker.length > 30 && doEllipsis) { + + finalDisplayMoniker = moniker.substr(0,30) + "..."; + + } else { + + finalDisplayMoniker = moniker; + + } + + $("#" + monikerContainerID).empty().text(finalDisplayMoniker); + $("#" + monikerContainerID).attr('title', moniker); + +} + +function setProfileName(nameContainerID, name, doNameEllipsis) { + + if (nameContainerID == "") { + return; + } + + if (!name) { + $("#" + nameContainerID).empty(); + return; + } + + var finalDisplayName; + + if (name.length > 30 && doNameEllipsis) { + + finalDisplayName = name.substr(0,30) + "..."; + + } else { + + finalDisplayName = name; + + } + + $("#" + nameContainerID).empty().text(finalDisplayName); + $("#" + nameContainerID).attr('title', name); + +} + +function processProfileInformation(nameContainerID, + monikerContainerID, + imageContainerID, + profileInfoJSON, + doMonikerEllipsis, + doNameEllipsis) { + + var name, mainImageURL, moniker; + + if (jQuery.isEmptyObject(profileInfoJSON)) { + return; + } + + $.each(profileInfoJSON, function(key, set){ + + if (key.search(/mainImage/i) > -1) { + + mainImageURL = set[0]; + + } else if (key.search(/moniker/i) > -1) { + + moniker = set[0]; + + } else if (key.search(/label/i) > -1) { + + name = set[0]; + + } + + }); + + setProfileName(nameContainerID, name, doNameEllipsis); + setProfileMoniker(monikerContainerID, moniker, doMonikerEllipsis); + setProfileImage(imageContainerID, mainImageURL); + +} + +function visLoaded(nodes){ + + var jsonedNodes = jQuery.parseJSON(nodes); + var tableID = ""; + var tableContainer = ""; + + /*if (visMode == "coauthorship") {*/ + tableID = "coauthorships_table"; + tableContainer = "coauth_table_container"; + /*} else { + tableID = "copis_table"; + tableContainer = "copi_table_container"; + }*/ + + $(document).ready(function() { + createTable("coauthorships_table" , "coauth_table_container" , jsonedNodes.slice(1)); + }); + +} + +function createTable(tableID, tableContainer, tableData) { + + var number_of_works = ""; + var tableCaption = ""; + var tableColumnTitle1 = ""; + var tableColumnTitle2 = ""; + + /*if (visMode == "coauthorship") {*/ + tableCaption = "Co-authors "; + tableColumnTitle1 = "Author"; + tableColumnTitle2 = "Publications with
"; + /*} else { + tableCaption = "Co-pis "; + tableColumnTitle1 = "Principal Investigator"; + tableColumnTitle2 = "Grants with
"; + }*/ + + var table = $(''); + table.attr('id', tableID); + + table.append($(''); + + var row = $(''); + + var authorTH = $(''); + + row.append($('
').html(tableCaption + "(.CSV File)")); + + var header = $('
'); + authorTH.html(tableColumnTitle1); + row.append(authorTH); + + row.append($('').html(tableColumnTitle2 + "" + $('#ego_label').text())); + + header.append(row); + + table.append(header); + + $.each(tableData, function(i, item){ + + /*if (visMode == "coauthorship") {*/ + number_of_works = item.number_of_authored_works; + /*} else { + number_of_works = item.number_of_investigated_grants; + }*/ + var row = $('
').html(item.label)); + row.append($('').html(number_of_works)); + + table.append(row); + + }); + + table.prependTo('#' + tableContainer); + $('#' + tableContainer + " #loadingData").remove(); +} + +//renderStatsOnNodeClicked, CoRelations, noOfCoRelations +//function nodeClickedJS(json){ +function renderStatsOnNodeClicked(json){ + + //console.log(json); + var obj = jQuery.parseJSON(json); + + var works = ""; + var persons = ""; + var relation = ""; + var earliest_work = ""; + var latest_work = ""; + var number_of_works = ""; + + /*if (visMode == "coauthorship") {*/ + works = "Publication(s)"; + persons = "Co-author(s)"; + relation = "coauthorship" + earliest_work = obj.earliest_publication; + latest_work = obj.latest_publication; + number_of_works = obj.number_of_authored_works; + /*} else { + works = "Grant(s)"; + persons = "Co-PI(s)"; + relation = "copi"; + earliest_work = obj.earliest_grant; + latest_work = obj.latest_grant; + number_of_works = obj.number_of_investigated_grants; + }*/ + + + + + $("#dataPanel").attr("style","visibility:visible"); + $("#works").empty().append(number_of_works); + + /* + * Here obj.url points to the uri of that individual + */ + if(obj.url){ + + if (obj.url == egoURI) { + + $("#authorName").addClass('author_name').removeClass('neutral_author_name'); + $('#num_works > .author_stats_text').text(works); + $('#num_authors > .author_stats_text').text(persons); + + } else { + + $("#authorName").addClass('neutral_author_name').removeClass('author_name'); + $('#num_works > .author_stats_text').text('Joint ' + works); + $('#num_authors > .author_stats_text').text('Joint ' + persons); + + } + + $("#profileUrl").attr("href", getWellFormedURLs(obj.url, "profile")); + $("#coAuthorshipVisUrl").attr("href", getWellFormedURLs(obj.url, relation)); + processProfileInformation("authorName", + "profileMoniker", + "profileImage", + jQuery.parseJSON(getWellFormedURLs(obj.url, "profile_info")), + true, + true); + + + + } else{ + $("#profileUrl").attr("href","#"); + $("#coAuthorshipVisUrl").attr("href","#"); + } + + $("#coAuthors").empty().append(obj.noOfCorelations); + + $("#firstPublication").empty().append(earliest_work); + (earliest_work)?$("#fPub").attr("style","visibility:visible"):$("#fPub").attr("style","visibility:hidden"); + $("#lastPublication").empty().append(latest_work); + (latest_work)?$("#lPub").attr("style","visibility:visible"):$("#lPub").attr("style","visibility:hidden"); + + // obj.url:the url parameter for node + +} + +/* + * Inside both of these functions, '&' are replaced with '%26' because we are externally + * passing two parameters to the flash code using flashvars (see renderCoAuthorshipVisualization()) + * and they are delimited using '&' too. + */ + +function getEncodedCoAuthorURL(){ + + var queryString = "uri="+ egoURI + "&vis=coauthorship"; +// console.log('domainParam is '+ domainParam); +// console.log('CoAuthorURL is ' + domainParam + '?' + queryString.replace(/&/g, '%26')); + return domainParam + '?' + queryString.replace(/&/g, '%26'); +} + +function getEncodedCoPIURL(){ + + var queryString = "uri="+ egoURI+ "&vis=coprincipalinvestigator"; +// console.log('CoPIURL is ' + domainParam + '?' + queryString.replace(/&/g, '%26') ); + return domainParam + '?' + queryString.replace(/&/g, '%26'); +} + +function renderCoAuthorshipVisualization() { + + var visualization = ""; + var encodedURL = ""; + + /*if(visMode == "coauthorship"){*/ + visualization = "CoAuthor"; + encodedURL = getEncodedCoAuthorURL(); + /*} else { + visualization = "CoPI"; + encodedURL = getEncodedCoPIURL(); + }*/ + +// console.log('visualization is ' + visualization + ' and encodedURL is '+ encodedURL); + // Version check for the Flash Player that has the ability to start Player + // Product Install (6.0r65) + var hasProductInstall = DetectFlashVer(6, 0, 65); + + // Version check based upon the values defined in globals + var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); + + if ( hasProductInstall && !hasRequestedVersion ) { + // DO NOT MODIFY THE FOLLOWING FOUR LINES + // Location visited after installation is complete if installation is + // required + var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn"; + var MMredirectURL = window.location; + document.title = document.title.slice(0, 47) + " - Flash Player Installation"; + var MMdoctitle = document.title; + + AC_FL_RunContent( + "src", "playerProductInstall", + "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"", + "width", "800", + "height", "840", + "align", "middle", + "id", "EgoCentric", + "quality", "high", + "bgcolor", "#ffffff", + "name", "EgoCentric", + "allowScriptAccess","sameDomain", + "type", "application/x-shockwave-flash", + "pluginspage", "http://www.adobe.com/go/getflashplayer" + ); + } else if (hasRequestedVersion) { + // if we've detected an acceptable version + // embed the Flash Content SWF when all tests are passed + //coAuthorUrl=/vivo1/visualization?vis=coauthorship%26render_mode=data%26uri=http%3A%2F%2Fvivo.iu.edu%2Findividual%2FBrnerKaty&labelField=label&coPIUrl=/vivo1/visualization?vis=coprincipalinvestigator%26render_mode=data%26uri=http%3A%2F%2Fvivo.iu.edu%2Findividual%2FBrnerKaty&labelField=label + AC_FL_RunContent( + "src", swfLink, +// "flashVars", 'coAuthorUrl='+ encodeURL(egoCoAuthorshipDataFeederURL) + '&coPIUrl=' + encodeURL(egoCoPIDataFeederURL) , +// "flashVars", 'coAuthorUrl='+ getEncodedCoAuthorURL() + '&coPIUrl=' + getEncodedCoPIURL() , +// "flashVars", 'graphmlUrl=' + getEncodedCoAuthorURL() + '&labelField=label&visType=CoAuthor', + "flashVars", 'graphmlUrl=' + encodedURL + '&labelField=label&visType='+visualization, + "width", "600", + "height", "850", + "align", "top", + "id", "EgoCentric", + "quality", "high", + "bgcolor", "#ffffff", + "name", "EgoCentric", + "allowScriptAccess","sameDomain", + "type", "application/x-shockwave-flash", + "pluginspage", "http://www.adobe.com/go/getflashplayer" + ); + } else { // flash is too old or we can't detect the plugin + var alternateContent = '

' + + 'This content requires the Adobe Flash Player. ' + + 'Get Flash

'; + document.write(alternateContent); // insert non-flash content + + } + +} \ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl new file mode 100644 index 00000000..a1b2b227 --- /dev/null +++ b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl @@ -0,0 +1,203 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#assign standardVisualizationURLRoot ="/visualizationfm"> +<#assign ajaxVisualizationURLRoot ="/visualizationAjax"> +<#assign dataVisualizationURLRoot ="/visualizationData"> + +<#assign egoURI ="${egoURIParam?url}"> +<#assign egoCoAuthorshipDataFeederURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthor_network_stream&labelField=label'> + +<#assign coprincipalinvestigatorURL = '${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${egoURI}&visMode=copi'> + +<#assign egoCoAuthorsListDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthors'> +<#assign egoCoAuthorshipNetworkDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthor_network_download'> + +<#assign swfLink = '${urls.images}/visualization/coauthorship/EgoCentric.swf'> +<#assign adobeFlashDetector = '${urls.base}/js/visualization/coauthorship/AC_OETags.js'> +<#assign googleVisualizationAPI = 'http://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign coAuthorPersonLevelJavaScript = '${urls.base}/js/visualization/personlevel/person_level-fm.js'> + + + + + + + + + + +<#assign coAuthorStyle = "${urls.base}/css/visualization/personlevel/coauthor_style.css" /> +<#assign pageStyle = "${urls.base}/css/visualization/personlevel/page.css" /> +<#assign vizStyle = "${urls.base}/css/visualization/visualization.css" /> + + + + + +<#assign loadingImageLink = "${urls.images}/visualization/ajax-loader.gif"> + +<#assign egoVivoProfileURL = "/individual?uri=${egoURI}" /> + + + + + +
+
+ + <#-- Label --> +

+ + <#-- Moniker--> + + +
+

Co-Investigator Network

+ View + 4 +
+ +
+ + <#if (numOfAuthors > 0) > + +

Co-Author Network

+ + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips <= 0) || (numOfAuthors?? && numOfAuthors <= 0) > + (GraphML File) + <#else> + + <#if numOfAuthors?? && numOfAuthors <= 0 > + <#assign authorsText = "multi-author" /> + + + Currently there are no ${authorsText!} papers for + this author + in the VIVO database. + + + + <#else> + + Currently there are no papers for + this author in the + VIVO database. + + + + +
+ + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips <= 0) || (numOfAuthors?? && numOfAuthors <= 0) > + +
+
+ +
+
+

Profile

+
+ +
 
+ +
+ +
+
   + Publication(s)
+
+   Co-author(s)
+ + + +
Note: This information is based solely on publications which have been loaded into the VIVO system. + This may only be a small sample of the person's total work.
+
+
+ + + <#-- Sparkline --> +
+ <#assign sparklineVO = egoPubSparklineVO /> + <#include "personPublicationSparklineContent.ftl"> + + <#assign sparklineVO = uniqueCoauthorsSparklineVO /> + <#include "coAuthorshipSparklineContent.ftl"> +
+ + <#if (numOfAuthors > 0) > + +
+ +

Tables

+ +
+

+ TABLE +

+
+ + <#if (numOfCoAuthorShips > 0) > + +
+

+
+ + + +
+ +
+ + + +
diff --git a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl new file mode 100644 index 00000000..841b7965 --- /dev/null +++ b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl @@ -0,0 +1 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> \ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl b/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl index 46e8da66..eddb9995 100644 --- a/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl +++ b/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl @@ -41,8 +41,6 @@ column: 0, minValue: '${sparklineVO.earliestRenderedPublicationYear?c}', maxValue: '${sparklineVO.latestRenderedPublicationYear?c}' - /*minValue: '2001', - maxValue: '2011'*/ }])); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java index 4cc9fe77..d6f38b21 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java @@ -514,6 +514,14 @@ public class CoAuthorshipVisCodeGenerator { sparklineData.setTable(tableCode); + + Map yearToUniqueCoauthorsCount = new HashMap(); + for (Map.Entry> currentYear : yearToUniqueCoauthors.entrySet()) { + yearToUniqueCoauthorsCount.put(currentYear.getKey(), currentYear.getValue().size()); + } + + sparklineData.setYearToActivityCount(yearToUniqueCoauthorsCount); + return divContextCode.toString(); } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java index 5a610548..de99d6e9 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java @@ -78,9 +78,6 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler { String egoURI = vitroRequest.getParameter( VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY); - String renderMode = vitroRequest.getParameter( - VisualizationFrameworkConstants.RENDER_MODE_KEY); - String visMode = vitroRequest.getParameter( VisualizationFrameworkConstants.VIS_MODE_KEY); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java index d5a3467f..5f0843de 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java @@ -172,20 +172,6 @@ public class UtilitiesRequestHandler implements VisualizationRequestHandler { } return finalThumbNailLocation; } - /* - - private TemplateResponseValues prepareUtilitiesResponse(String preparedContent, VitroRequest vreq) { - -// response.setContentType("text/plain"); - - String utilitiesTemplate = "/visualization/utilities.ftl"; - - Map body = new HashMap(); - body.put("utilityResopnse", preparedContent); - - return new TemplateResponseValues(utilitiesTemplate, body); - - }*/ @Override public Map generateDataVisualization(