1. Refactored code to use a utility method instead of having the same method being defined in each of the vis request handlers.
2. Adding a "person level" vis package to handle combination of sparkline & co-authorship vis page. 3. Testing out the concept of accessing fields of a class form jsp page.
This commit is contained in:
parent
d87ffcc3be
commit
0e8e1dc9e2
16 changed files with 848 additions and 152 deletions
|
@ -113,6 +113,9 @@ public class VisualizationController extends BaseEditController {
|
|||
public static final String COAUTHORSHIP_VIS_URL_VALUE
|
||||
= "coauthorship";
|
||||
|
||||
public static final String PERSON_LEVEL_VIS_URL_VALUE
|
||||
= "person_level";
|
||||
|
||||
public static final String UTILITIES_URL_VALUE
|
||||
= "utilities";
|
||||
|
||||
|
@ -204,7 +207,32 @@ public class VisualizationController extends BaseEditController {
|
|||
* This is side-effecting because the visualization content is added
|
||||
* to the request object.
|
||||
* */
|
||||
visRequestHandler.generateVisualization(this, dataSource);
|
||||
visRequestHandler.generateVisualization(dataSource);
|
||||
|
||||
} else {
|
||||
log.error("ERROR! data model empoty");
|
||||
}
|
||||
|
||||
} else if (PERSON_LEVEL_VIS_URL_VALUE
|
||||
.equalsIgnoreCase(vreq.getParameter(VIS_TYPE_URL_HANDLE))) {
|
||||
|
||||
edu.cornell.mannlib.vitro.webapp.visualization.personlevel.VisualizationRequestHandler visRequestHandler =
|
||||
new edu.cornell.mannlib.vitro.webapp.visualization.personlevel.VisualizationRequestHandler(vreq, request, response, log);
|
||||
|
||||
String rdfResultFormatParam = "RDF/XML-ABBREV";
|
||||
|
||||
DataSource dataSource = setupJENADataSource(request,
|
||||
response,
|
||||
vreq,
|
||||
rdfResultFormatParam);
|
||||
|
||||
if (dataSource != null) {
|
||||
|
||||
/*
|
||||
* This is side-effecting because the visualization content is added
|
||||
* to the request object.
|
||||
* */
|
||||
visRequestHandler.generateVisualization(dataSource);
|
||||
|
||||
} else {
|
||||
log.error("ERROR! data model empoty");
|
||||
|
|
|
@ -15,7 +15,6 @@ import com.hp.hpl.jena.query.DataSource;
|
|||
import edu.cornell.mannlib.vitro.webapp.beans.Portal;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
|
||||
|
@ -36,7 +35,7 @@ public class VisualizationRequestHandler {
|
|||
|
||||
}
|
||||
|
||||
public void generateVisualization(VisualizationController visualizationController, DataSource dataSource) {
|
||||
public void generateVisualization(DataSource dataSource) {
|
||||
|
||||
String resultFormatParam = "RS_TEXT";
|
||||
String rdfResultFormatParam = "RDF/XML-ABBREV";
|
||||
|
|
|
@ -40,6 +40,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Individual;
|
|||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.VivoCollegeOrSchool;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.VivoDepartmentOrDivision;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.VivoEmployee;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions;
|
||||
|
||||
public class VisualizationRequestHandler {
|
||||
|
||||
|
@ -275,7 +276,7 @@ public class VisualizationRequestHandler {
|
|||
authorName = "";
|
||||
}
|
||||
|
||||
String outputFileName = slugify(authorName + "-report")
|
||||
String outputFileName = UtilityFunctions.slugify(authorName + "-report")
|
||||
+ ".pdf";
|
||||
|
||||
response.setContentType("application/pdf");
|
||||
|
@ -335,7 +336,7 @@ public class VisualizationRequestHandler {
|
|||
collegeName = "";
|
||||
}
|
||||
|
||||
String outputFileName = slugify(collegeName) + "depts-pub-count" + ".csv";
|
||||
String outputFileName = UtilityFunctions.slugify(collegeName) + "depts-pub-count" + ".csv";
|
||||
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition","attachment;filename=" + outputFileName);
|
||||
|
@ -359,17 +360,6 @@ public class VisualizationRequestHandler {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently the approach for slugifying filenames is naive. In future if there is need,
|
||||
* we can write more sophisticated method.
|
||||
* @param textToBeSlugified
|
||||
* @return
|
||||
*/
|
||||
private String slugify(String textToBeSlugified) {
|
||||
return textToBeSlugified.toLowerCase().replaceAll("[^a-zA-Z0-9-]", "-")
|
||||
.substring(0, VisConstants.MAX_NAME_TEXT_LENGTH);
|
||||
}
|
||||
|
||||
private void generateCsvFileBuffer(
|
||||
Map<VivoDepartmentOrDivision, Map<String, Integer>> departmentToPublicationsOverTime,
|
||||
Map<String, VivoCollegeOrSchool> collegeURLToVO, PrintWriter printWriter) {
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.visualization.personlevel;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import com.hp.hpl.jena.query.DataSource;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Portal;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.CoAuthorshipGraphMLWriter;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.QueryHandler;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisVOContainer;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions;
|
||||
|
||||
public class VisualizationRequestHandler {
|
||||
|
||||
private VitroRequest vitroRequest;
|
||||
private HttpServletRequest request;
|
||||
private HttpServletResponse response;
|
||||
private Log log;
|
||||
|
||||
public VisualizationRequestHandler(VitroRequest vitroRequest,
|
||||
HttpServletRequest request, HttpServletResponse response, Log log) {
|
||||
|
||||
this.vitroRequest = vitroRequest;
|
||||
this.request = request;
|
||||
this.response = response;
|
||||
this.log = log;
|
||||
|
||||
}
|
||||
|
||||
public void generateVisualization(DataSource dataSource) {
|
||||
|
||||
String resultFormatParam = "RS_TEXT";
|
||||
String rdfResultFormatParam = "RDF/XML-ABBREV";
|
||||
|
||||
String egoURIParam = vitroRequest.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_URL_HANDLE);
|
||||
|
||||
String renderMode = vitroRequest.getParameter(VisualizationFrameworkConstants.RENDER_MODE_URL_HANDLE);
|
||||
|
||||
String visMode = vitroRequest.getParameter(VisualizationFrameworkConstants.VIS_MODE_URL_HANDLE);
|
||||
|
||||
String visContainer = vitroRequest.getParameter(VisualizationFrameworkConstants.VIS_CONTAINER_URL_HANDLE);
|
||||
|
||||
QueryHandler queryManager =
|
||||
new QueryHandler(egoURIParam,
|
||||
resultFormatParam,
|
||||
rdfResultFormatParam,
|
||||
dataSource,
|
||||
|
||||
log);
|
||||
|
||||
try {
|
||||
|
||||
VisVOContainer authorNodesAndEdges = queryManager.getVisualizationJavaValueObjects();
|
||||
|
||||
/*
|
||||
* In order to avoid unneeded computations we have pushed this "if" condition up.
|
||||
* This case arises when the render mode is data. In that case we dont want to generate
|
||||
* HTML code to render sparkline, tables etc. Ideally I would want to avoid this flow.
|
||||
* It is ugly!
|
||||
* */
|
||||
if (VisualizationFrameworkConstants.DATA_RENDER_MODE_URL_VALUE.equalsIgnoreCase(renderMode)) {
|
||||
|
||||
/*
|
||||
* When just the graphML file is required - based on which actual visualization will
|
||||
* be rendered.
|
||||
* */
|
||||
prepareVisualizationQueryDataResponse(authorNodesAndEdges);
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Computations required to generate HTML for the sparklines & related context.
|
||||
* */
|
||||
|
||||
/*
|
||||
* This is required because when deciding the range of years over which the vis
|
||||
* was rendered we dont want to be influenced by the "DEFAULT_PUBLICATION_YEAR".
|
||||
* */
|
||||
// publishedYearsForCollege.remove(VOConstants.DEFAULT_PUBLICATION_YEAR);
|
||||
|
||||
/*
|
||||
VisualizationCodeGenerator visualizationCodeGenerator =
|
||||
new VisualizationCodeGenerator(yearToPublicationCount, log);
|
||||
|
||||
String visContentCode = visualizationCodeGenerator
|
||||
.getMainVisualizationCode(authorDocuments,
|
||||
publishedYears,
|
||||
visMode,
|
||||
visContainer);
|
||||
|
||||
String visContextCode = visualizationCodeGenerator
|
||||
.getVisualizationContextCode(vitroRequest.getRequestURI(),
|
||||
collegeURIParam,
|
||||
visMode);
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is side-effecting because the response of this method is just to redirect to
|
||||
* a page with visualization on it.
|
||||
* */
|
||||
|
||||
RequestDispatcher requestDispatcher = null;
|
||||
|
||||
prepareVisualizationQueryStandaloneResponse(egoURIParam, request, response, vitroRequest);
|
||||
|
||||
// requestDispatcher = request.getRequestDispatcher(Controllers.BASIC_JSP);
|
||||
requestDispatcher = request.getRequestDispatcher("/templates/page/blankPage.jsp");
|
||||
|
||||
try {
|
||||
requestDispatcher.forward(request, response);
|
||||
} catch (Exception e) {
|
||||
log.error("EntityEditController could not forward to view.");
|
||||
log.error(e.getMessage());
|
||||
log.error(e.getStackTrace());
|
||||
}
|
||||
|
||||
} catch (MalformedQueryParametersException e) {
|
||||
try {
|
||||
handleMalformedParameters(e.getMessage());
|
||||
} catch (ServletException e1) {
|
||||
log.error(e1.getStackTrace());
|
||||
} catch (IOException e1) {
|
||||
log.error(e1.getStackTrace());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void prepareVisualizationQueryDataResponse(VisVOContainer coAuthorsipVO) {
|
||||
|
||||
String outputFileName = UtilityFunctions.slugify(coAuthorsipVO.getEgoNode().getNodeName())
|
||||
+ "-coauthor-net" + ".graphml";
|
||||
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName);
|
||||
|
||||
try {
|
||||
|
||||
PrintWriter responseWriter = response.getWriter();
|
||||
|
||||
/*
|
||||
* We are side-effecting responseWriter since we are directly manipulating the response
|
||||
* object of the servlet.
|
||||
* */
|
||||
|
||||
CoAuthorshipGraphMLWriter coAuthorShipGraphMLWriter = new CoAuthorshipGraphMLWriter(coAuthorsipVO);
|
||||
|
||||
responseWriter.append(coAuthorShipGraphMLWriter.getCoAuthorshipGraphMLContent());
|
||||
|
||||
responseWriter.close();
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void prepareVisualizationQueryStandaloneResponse(String egoURIParam,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
VitroRequest vreq) {
|
||||
|
||||
Portal portal = vreq.getPortal();
|
||||
|
||||
// request.setAttribute("visContentCode", visContentCode);
|
||||
// request.setAttribute("visContextCode", visContextCode);
|
||||
|
||||
request.setAttribute("egoURIParam", egoURIParam);
|
||||
|
||||
request.setAttribute("bodyJsp", "/templates/visualization/person_level.jsp");
|
||||
request.setAttribute("portalBean", portal);
|
||||
// request.setAttribute("title", "Individual Publication Count Visualization");
|
||||
// request.setAttribute("scripts", "/templates/visualization/visualization_scripts.jsp");
|
||||
|
||||
}
|
||||
|
||||
private void handleMalformedParameters(String errorMessage)
|
||||
throws ServletException, IOException {
|
||||
|
||||
Portal portal = vitroRequest.getPortal();
|
||||
|
||||
request.setAttribute("error", errorMessage);
|
||||
|
||||
RequestDispatcher requestDispatcher = request.getRequestDispatcher(Controllers.BASIC_JSP);
|
||||
request.setAttribute("bodyJsp", "/templates/visualization/visualization_error.jsp");
|
||||
request.setAttribute("portalBean", portal);
|
||||
request.setAttribute("title", "Visualization Query Error - Individual Publication Count");
|
||||
|
||||
try {
|
||||
requestDispatcher.forward(request, response);
|
||||
} catch (Exception e) {
|
||||
log.error("EntityEditController could not forward to view.");
|
||||
log.error(e.getMessage());
|
||||
log.error(e.getStackTrace());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -164,7 +164,9 @@ public class VisualizationCodeGenerator {
|
|||
"position:absolute;" +
|
||||
"}" +
|
||||
".sparkline_range {" +
|
||||
"color:#7BS69E;" +
|
||||
"color:#7BA69E;" +
|
||||
"font-size:0.9em;" +
|
||||
"font-style:italic;" +
|
||||
"}" +
|
||||
"</style>\n");
|
||||
|
||||
|
@ -360,7 +362,7 @@ public class VisualizationCodeGenerator {
|
|||
"+ " + renderedFullSparks + "" +
|
||||
"+ ' papers with year from '" +
|
||||
"+ ' " + totalPublications + " '" +
|
||||
"+ ' total'" +
|
||||
"+ ' total " +
|
||||
"<span class=\"sparkline_range\">" +
|
||||
"(" + minPubYearConsidered + " - " + currentYear + ")" +
|
||||
"</span>'" +
|
||||
|
|
|
@ -34,6 +34,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants;
|
|||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions;
|
||||
|
||||
public class VisualizationRequestHandler {
|
||||
|
||||
|
@ -147,7 +148,7 @@ public class VisualizationRequestHandler {
|
|||
|
||||
} else {
|
||||
prepareVisualizationQueryStandaloneResponse(request, response, vitroRequest,
|
||||
visContentCode, visContextCode);
|
||||
visContentCode, visContextCode, valueObjectContainer);
|
||||
|
||||
requestDispatcher = request.getRequestDispatcher(Controllers.BASIC_JSP);
|
||||
}
|
||||
|
@ -193,7 +194,7 @@ public class VisualizationRequestHandler {
|
|||
authorName = "";
|
||||
}
|
||||
|
||||
String outputFileName = slugify(authorName) + "report" + ".pdf";
|
||||
String outputFileName = UtilityFunctions.slugify(authorName) + "report" + ".pdf";
|
||||
|
||||
response.setContentType("application/pdf");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName);
|
||||
|
@ -249,7 +250,7 @@ public class VisualizationRequestHandler {
|
|||
authorName = "";
|
||||
}
|
||||
|
||||
String outputFileName = slugify(authorName) + "pub-count-sparkline" + ".csv";
|
||||
String outputFileName = UtilityFunctions.slugify(authorName) + "pub-count-sparkline" + ".csv";
|
||||
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition","attachment;filename=" + outputFileName);
|
||||
|
@ -272,17 +273,6 @@ public class VisualizationRequestHandler {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently the approach for slugifying filenames is naive. In future if there is need,
|
||||
* we can write more sophisticated method.
|
||||
* @param textToBeSlugified
|
||||
* @return
|
||||
*/
|
||||
private String slugify(String textToBeSlugified) {
|
||||
return textToBeSlugified.toLowerCase().replaceAll("[^a-zA-Z0-9-]", "-")
|
||||
.substring(0, VisConstants.MAX_NAME_TEXT_LENGTH);
|
||||
}
|
||||
|
||||
private void generateCsvFileBuffer(Map<String, Integer> yearToPublicationCount,
|
||||
PrintWriter responseWriter) {
|
||||
|
||||
|
@ -304,12 +294,13 @@ public class VisualizationRequestHandler {
|
|||
|
||||
private void prepareVisualizationQueryStandaloneResponse(HttpServletRequest request,
|
||||
HttpServletResponse response, VitroRequest vreq,
|
||||
String visContentCode, String visContextCode) {
|
||||
String visContentCode, String visContextCode, VisVOContainer valueObjectContainer) {
|
||||
|
||||
Portal portal = vreq.getPortal();
|
||||
|
||||
request.setAttribute("visContentCode", visContentCode);
|
||||
request.setAttribute("visContextCode", visContextCode);
|
||||
request.setAttribute("sparklineVO", valueObjectContainer);
|
||||
|
||||
request.setAttribute("bodyJsp", "/templates/visualization/publication_count.jsp");
|
||||
request.setAttribute("portalBean", portal);
|
||||
|
|
|
@ -8,7 +8,7 @@ import java.util.Set;
|
|||
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UniqueIDGenerator;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.VOUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -64,7 +64,7 @@ public class Edge {
|
|||
@SuppressWarnings("serial")
|
||||
public Map<String, Integer> getEarliestCollaborationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(collaboratorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(collaboratorDocuments);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -96,7 +96,7 @@ public class Edge {
|
|||
@SuppressWarnings("serial")
|
||||
public Map<String, Integer> getLatestCollaborationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(collaboratorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(collaboratorDocuments);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -128,7 +128,7 @@ public class Edge {
|
|||
@SuppressWarnings("serial")
|
||||
public Integer getUnknownCollaborationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(collaboratorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(collaboratorDocuments);
|
||||
}
|
||||
|
||||
Integer unknownYearPubCount = yearToPublicationCount.get(VOConstants.DEFAULT_PUBLICATION_YEAR);
|
||||
|
|
|
@ -8,7 +8,7 @@ import java.util.Set;
|
|||
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UniqueIDGenerator;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.VOUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -65,7 +65,7 @@ public class Node extends Individual {
|
|||
@SuppressWarnings("serial")
|
||||
public Map<String, Integer> getEarliestPublicationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(authorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(authorDocuments);
|
||||
System.out.println("early - " + yearToPublicationCount);
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ public class Node extends Individual {
|
|||
@SuppressWarnings("serial")
|
||||
public Map<String, Integer> getLatestPublicationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(authorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(authorDocuments);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -130,7 +130,7 @@ public class Node extends Individual {
|
|||
|
||||
public Integer getUnknownPublicationYearCount() {
|
||||
if (yearToPublicationCount == null) {
|
||||
yearToPublicationCount = VOUtils.getYearToPublicationCount(authorDocuments);
|
||||
yearToPublicationCount = UtilityFunctions.getYearToPublicationCount(authorDocuments);
|
||||
}
|
||||
|
||||
Integer unknownYearPubCount = yearToPublicationCount.get(VOConstants.DEFAULT_PUBLICATION_YEAR);
|
||||
|
|
|
@ -4,9 +4,10 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument;
|
||||
|
||||
public class VOUtils {
|
||||
public class UtilityFunctions {
|
||||
|
||||
public static Map<String, Integer> getYearToPublicationCount(
|
||||
Set<BiboDocument> authorDocuments) {
|
||||
|
@ -52,4 +53,15 @@ public class VOUtils {
|
|||
return yearToPublicationCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently the approach for slugifying filenames is naive. In future if there is need,
|
||||
* we can write more sophisticated method.
|
||||
* @param textToBeSlugified
|
||||
* @return
|
||||
*/
|
||||
public static String slugify(String textToBeSlugified) {
|
||||
return textToBeSlugified.toLowerCase().replaceAll("[^a-zA-Z0-9-]", "-")
|
||||
.substring(0, VisConstants.MAX_NAME_TEXT_LENGTH);
|
||||
}
|
||||
|
||||
}
|
|
@ -161,35 +161,37 @@ function processProfileInformation(nameContainerID,
|
|||
|
||||
|
||||
|
||||
function nodeClickedJS(obj){
|
||||
function nodeClickedJS(json){
|
||||
|
||||
var obj = jQuery.parseJSON(json);
|
||||
|
||||
$("#newsLetter").attr("style","visibility:visible");
|
||||
$("#authorName").empty().append(obj[0]);
|
||||
$("#works").empty().append(obj[1]);
|
||||
$("#authorName").empty().append(obj.name);
|
||||
$("#works").empty().append(obj.number_of_authored_works);
|
||||
|
||||
/*
|
||||
* Here obj[7] points to the uri of that individual
|
||||
* Here obj.url points to the uri of that individual
|
||||
*/
|
||||
if(obj[7]){
|
||||
$("#profileUrl").attr("href", getWellFormedURLs(obj[7], "profile"));
|
||||
$("#coAuthorshipVisUrl").attr("href", getWellFormedURLs(obj[7], "coauthorship"));
|
||||
if(obj.url){
|
||||
$("#profileUrl").attr("href", getWellFormedURLs(obj.url, "profile"));
|
||||
$("#coAuthorshipVisUrl").attr("href", getWellFormedURLs(obj.url, "coauthorship"));
|
||||
processProfileInformation("",
|
||||
"profileMoniker",
|
||||
"profileImage",
|
||||
jQuery.parseJSON(getWellFormedURLs(obj[7], "profile_info")));
|
||||
jQuery.parseJSON(getWellFormedURLs(obj.url, "profile_info")));
|
||||
|
||||
} else{
|
||||
$("#profileUrl").attr("href","#");
|
||||
$("#coAuthorshipVisUrl").attr("href","#");
|
||||
}
|
||||
|
||||
$("#coAuthorName").empty().append(obj[0]);
|
||||
$("#coAuthorName").empty().append(obj.name);
|
||||
|
||||
$("#coAuthors").empty().append(obj[5]);
|
||||
$("#firstPublication").empty().append((obj[3])?obj[3]+" First Publication":"");
|
||||
$("#lastPublication").empty().append((obj[4])?obj[4]+" Last Publication":"");
|
||||
$("#coAuthors").empty().append(obj.num_coauthors);
|
||||
$("#firstPublication").empty().append((obj.earliest_publication)?obj.earliest_publication+" First Publication":"");
|
||||
$("#lastPublication").empty().append((obj.latest_publication)?obj.latest_publication+" Last Publication":"");
|
||||
|
||||
// obj[7]:the url parameter for node
|
||||
// obj.url:the url parameter for node
|
||||
|
||||
}
|
||||
|
||||
|
|
274
webapp/web/js/visualization/coauthorship/person_level.js
Normal file
274
webapp/web/js/visualization/coauthorship/person_level.js
Normal file
|
@ -0,0 +1,274 @@
|
|||
function getWellFormedURLs(given_uri, type) {
|
||||
|
||||
// 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() {
|
||||
|
||||
if (type == "coauthorship") {
|
||||
|
||||
var finalURL = $.ajax({
|
||||
url: contextPath + "/admin/visQuery",
|
||||
data: ({vis: "utilities", vis_mode: "COAUTHORSHIP_URL", uri: given_uri}),
|
||||
dataType: "text",
|
||||
async: false,
|
||||
success:function(data){
|
||||
// console.log("COA - " + data);
|
||||
}
|
||||
}).responseText;
|
||||
|
||||
return finalURL;
|
||||
|
||||
|
||||
} else if (type == "profile") {
|
||||
|
||||
var finalURL = $.ajax({
|
||||
url: contextPath + "/admin/visQuery",
|
||||
data: ({vis: "utilities", vis_mode: "PROFILE_URL", uri: given_uri}),
|
||||
dataType: "text",
|
||||
async: false,
|
||||
success:function(data){
|
||||
}
|
||||
}).responseText;
|
||||
|
||||
return finalURL;
|
||||
|
||||
} else if (type == "image") {
|
||||
|
||||
var finalURL = $.ajax({
|
||||
url: contextPath + "/admin/visQuery",
|
||||
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 + "/admin/visQuery",
|
||||
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.src = src;
|
||||
profileImage.width = 150;
|
||||
profileImage.onerror = failureFunc;
|
||||
profileImage.onload = successFunc;
|
||||
|
||||
|
||||
return profileImage;
|
||||
});
|
||||
}
|
||||
|
||||
function setProfileImage(imageContainerID, rawPath, contextPath) {
|
||||
|
||||
if (imageContainerID == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
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) {
|
||||
|
||||
if (monikerContainerID == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
$("#" + monikerContainerID).empty().text(moniker);
|
||||
|
||||
}
|
||||
|
||||
function setProfileName(nameContainerID, name) {
|
||||
|
||||
if (nameContainerID == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
$("#" + nameContainerID).empty().text(name);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function processProfileInformation(nameContainerID,
|
||||
monikerContainerID,
|
||||
imageContainerID,
|
||||
profileInfoJSON) {
|
||||
|
||||
|
||||
var name, imageRawPath, imageContextPath, moniker;
|
||||
|
||||
$.each(profileInfoJSON, function(key, set){
|
||||
|
||||
if (key.search(/imageThumb/i) > -1) {
|
||||
|
||||
imageRawPath = set[0];
|
||||
|
||||
} else if (key.search(/imageContextPath/i) > -1) {
|
||||
|
||||
imageContextPath = 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);
|
||||
setProfileMoniker(monikerContainerID, moniker);
|
||||
setProfileImage(imageContainerID, imageRawPath, imageContextPath);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function nodeClickedJS(json){
|
||||
|
||||
var obj = jQuery.parseJSON(json);
|
||||
|
||||
$("#newsLetter").attr("style","visibility:visible");
|
||||
$("#authorName").empty().append(obj.name);
|
||||
$("#works").empty().append(obj.number_of_authored_works);
|
||||
|
||||
/*
|
||||
* Here obj.url points to the uri of that individual
|
||||
*/
|
||||
if(obj.url){
|
||||
$("#profileUrl").attr("href", getWellFormedURLs(obj.url, "profile"));
|
||||
$("#coAuthorshipVisUrl").attr("href", getWellFormedURLs(obj.url, "coauthorship"));
|
||||
processProfileInformation("",
|
||||
"profileMoniker",
|
||||
"profileImage",
|
||||
jQuery.parseJSON(getWellFormedURLs(obj.url, "profile_info")));
|
||||
|
||||
} else{
|
||||
$("#profileUrl").attr("href","#");
|
||||
$("#coAuthorshipVisUrl").attr("href","#");
|
||||
}
|
||||
|
||||
$("#coAuthorName").empty().append(obj.name);
|
||||
|
||||
$("#coAuthors").empty().append(obj.num_coauthors);
|
||||
$("#firstPublication").empty().append((obj.earliest_publication)?obj.earliest_publication+" First Publication":"");
|
||||
$("#lastPublication").empty().append((obj.latest_publication)?obj.latest_publication+" Last Publication":"");
|
||||
|
||||
// obj.url:the url parameter for node
|
||||
|
||||
}
|
||||
|
||||
function renderSparklineVisualization(visualizationURL) {
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
//$("#ego_sparkline").empty().html('<img src="${loadingImageLink}" />');
|
||||
|
||||
$.ajax({
|
||||
url: visualizationURL,
|
||||
dataType: "html",
|
||||
success:function(data){
|
||||
$("#ego_sparkline").html(data);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function renderCoAuthorshipVisualization() {
|
||||
|
||||
//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", "600",
|
||||
"height", "800",
|
||||
"align", "middle",
|
||||
"id", "CoAuthor",
|
||||
"quality", "high",
|
||||
"bgcolor", "#ffffff",
|
||||
"name", "CoAuthor",
|
||||
"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
|
||||
AC_FL_RunContent(
|
||||
"src", swfLink,
|
||||
"flashVars", "graphmlUrl=" + egoCoAuthorshipDataURL,
|
||||
"width", "600",
|
||||
"height", "800",
|
||||
"align", "middle",
|
||||
"id", "CoAuthor",
|
||||
"quality", "high",
|
||||
"bgcolor", "#ffffff",
|
||||
"name", "CoAuthor",
|
||||
"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 = 'Alternate HTML content should be placed here. '
|
||||
+ 'This content requires the Adobe Flash Player. '
|
||||
+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
|
||||
document.write(alternateContent); // insert non-flash content
|
||||
}
|
||||
|
||||
}
|
|
@ -81,7 +81,7 @@
|
|||
margin-left:24%;
|
||||
margin-top:-2%;
|
||||
position:absolute;
|
||||
width:275px;
|
||||
width:380px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
|
@ -1,97 +1,3 @@
|
|||
<%--
|
||||
|
||||
<p>
|
||||
Number of Publications with NO parseable "Publication Year" => 6
|
||||
<br />
|
||||
{2004=2, 2005=2, 2006=8, DNA=6}
|
||||
</p>
|
||||
|
||||
<style type="text/css">
|
||||
.sparkline_style table{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
vertical-align: inherit;
|
||||
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
function drawVisualization() {
|
||||
var data = new google.visualization.DataTable();
|
||||
data.addColumn('string', 'Year');
|
||||
data.addColumn('number', 'Publications');
|
||||
data.addRows(7);
|
||||
data.setValue(0, 0, '2004');
|
||||
data.setValue(0, 1, 2);
|
||||
data.setValue(1, 0, '2005');
|
||||
data.setValue(1, 1, 2);
|
||||
data.setValue(2, 0, '2006');
|
||||
data.setValue(2, 1, 8);
|
||||
data.setValue(3, 0, '2007');
|
||||
data.setValue(3, 1, 0);
|
||||
data.setValue(4, 0, '2008');
|
||||
data.setValue(4, 1, 0);
|
||||
data.setValue(5, 0, '2009');
|
||||
data.setValue(5, 1, 0);
|
||||
data.setValue(6, 0, '2010');
|
||||
data.setValue(6, 1, 0);
|
||||
var fullSparklineView = new google.visualization.DataView(data);
|
||||
var shortSparklineView = new google.visualization.DataView(data);
|
||||
shortSparklineView.setColumns([1]);
|
||||
fullSparklineView.setColumns([1]);
|
||||
shortSparklineView.setRows(data.getFilteredRows([{
|
||||
column: 0,
|
||||
minValue: '2001',
|
||||
maxValue: '2010'}]));
|
||||
var full_spark = new google.visualization.ImageSparkLine(document.getElementById('pub_count_full_sparkline_viz'));
|
||||
full_spark.draw(fullSparklineView, {
|
||||
width: 63,
|
||||
height: 21,
|
||||
showAxisLines: false,
|
||||
showValueLabels: false,
|
||||
labelPosition: 'none'
|
||||
});
|
||||
var short_spark = new google.visualization.ImageSparkLine(document.getElementById('pub_count_short_sparkline_viz'));
|
||||
short_spark.draw(shortSparklineView, {
|
||||
width: 63,
|
||||
height: 21,
|
||||
showAxisLines: false,
|
||||
showValueLabels: false,
|
||||
labelPosition: 'none'
|
||||
});
|
||||
var shortSparkRows = shortSparklineView.getViewRows();
|
||||
var renderedShortSparks = 0;
|
||||
$.each(shortSparkRows, function(index, value) {
|
||||
renderedShortSparks += data.getValue(value, 1);
|
||||
});
|
||||
var shortSparksText = '<p>' + renderedShortSparks + ' Papers with year from ' + ' 18 ' + ' total' + '</p>';
|
||||
$(shortSparksText).prependTo('#pub_count_short_sparkline_viz');
|
||||
var allSparksText = '<p><b>Full Timeline</b> ' + 12 + ' Papers with year from ' + ' 18 ' + ' total' + '</p>';
|
||||
$(allSparksText).prependTo('#pub_count_full_sparkline_viz');
|
||||
}
|
||||
$(document).ready(function() {
|
||||
if ($('#pub_count_short_sparkline_viz').length == 0) {
|
||||
$('<div/>', {
|
||||
'id': 'pub_count_short_sparkline_viz',
|
||||
'class': 'sparkline_style'
|
||||
|
||||
}).appendTo('#ajax_recipient');
|
||||
}
|
||||
if ($('#pub_count_full_sparkline_viz').length == 0) {
|
||||
$('<div/>', {
|
||||
'id': 'pub_count_full_sparkline_viz',
|
||||
'class': 'sparkline_style'
|
||||
}).appendTo('#ajax_recipient');
|
||||
}
|
||||
drawVisualization();
|
||||
});
|
||||
</script>
|
||||
|
||||
--%>
|
||||
|
||||
${requestScope.visContentCode}
|
||||
|
||||
${requestScope.visContextCode}
|
||||
|
|
|
@ -79,9 +79,9 @@ var contextPath = "${contextPath}";
|
|||
cursor:pointer;
|
||||
height:36px;
|
||||
margin-left:24%;
|
||||
margin-top:-18%;
|
||||
/*margin-top:-18%;*/
|
||||
position:absolute;
|
||||
width:380px;
|
||||
width:471px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
277
webapp/web/templates/visualization/person_level.jsp
Normal file
277
webapp/web/templates/visualization/person_level.jsp
Normal file
|
@ -0,0 +1,277 @@
|
|||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||
|
||||
<c:set var="portalBean" value="${requestScope.portalBean}" />
|
||||
<c:set var="portalBean" value="${requestScope.portalBean}" />
|
||||
<c:set var="themeDir">
|
||||
<c:out value="${portalBean.themeDir}" />
|
||||
</c:set>
|
||||
<c:set var="contextPath">
|
||||
<c:out value="${pageContext.request.contextPath}" />
|
||||
</c:set>
|
||||
|
||||
<c:url var="egoCoAuthorshipDataURL" value="/admin/visQuery">
|
||||
<c:param name="vis" value="coauthorship" />
|
||||
<c:param name="render_mode" value="data" />
|
||||
<c:param name="uri" value="${requestScope.egoURIParam}" />
|
||||
<c:param name="labelField" value="name" />
|
||||
</c:url>
|
||||
|
||||
|
||||
<c:url var="egoSparklineVisURL" value="/admin/visQuery">
|
||||
<c:param name="render_mode" value="dynamic"/>
|
||||
<c:param name="container" value="ego_sparkline"/>
|
||||
<c:param name="vis" value="person_pub_count"/>
|
||||
<c:param name="vis_mode" value="full"/>
|
||||
<c:param name="uri" value="${requestScope.egoURIParam}"/>
|
||||
</c:url>
|
||||
|
||||
<c:url var="jquery" value="/js/jquery.js" />
|
||||
<c:url var="adobeFlashDetector" value="/js/visualization/coauthorship/AC_OETags.js" />
|
||||
<c:url var="coAuthorShipJavaScript" value="/js/visualization/coauthorship/co_authorship.js" />
|
||||
<c:url var="googleVisualizationAPI" value="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"/>
|
||||
<c:url var="style" value="/${themeDir}css/visualization/coauthorship/style.css" />
|
||||
<c:url var="noImage" value="/${themeDir}site_icons/visualization/coauthorship/no_image.png" />
|
||||
<c:url var="swfLink" value="/${themeDir}site_icons/visualization/coauthorship/CoAuthor.swf" />
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
|
||||
|
||||
<title>Co-Authorship Visualization</title>
|
||||
|
||||
<script type="text/javascript" src="${adobeFlashDetector}"></script>
|
||||
|
||||
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
<!--
|
||||
// -----------------------------------------------------------------------------
|
||||
// Globals
|
||||
// Major version of Flash required
|
||||
var requiredMajorVersion = 10;
|
||||
// Minor version of Flash required
|
||||
var requiredMinorVersion = 0;
|
||||
// Minor version of Flash required
|
||||
var requiredRevision = 0;
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
var swfLink = "${swfLink}";
|
||||
var egoCoAuthorshipDataURL = "${egoCoAuthorshipDataURL}";
|
||||
var contextPath = "${contextPath}";
|
||||
|
||||
|
||||
// -->
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="${jquery}"></script>
|
||||
<script type="text/javascript" src="${googleVisualizationAPI}"></script>
|
||||
<link href="${style}" rel="stylesheet" type="text/css" />
|
||||
|
||||
<script type="text/javascript" src="${coAuthorShipJavaScript}"></script>
|
||||
|
||||
<style type="text/css">
|
||||
#ego_sparkline {
|
||||
cursor:pointer;
|
||||
height:36px;
|
||||
margin-left:24%;
|
||||
/*margin-top:-18%;*/
|
||||
position:absolute;
|
||||
width:471px;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div id="body">
|
||||
|
||||
|
||||
<%-- Label --%>
|
||||
<div class="datatypePropertyValue">
|
||||
<div class="statementWrap">
|
||||
<span id="ego_label"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%-- Moniker--%>
|
||||
<div class="datatypeProperties">
|
||||
<div class="datatypePropertyValue">
|
||||
<div class="statementWrap">
|
||||
<span id="ego_moniker" class="moniker"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%-- Image --%>
|
||||
<div class="datatypeProperties">
|
||||
<div class="datatypePropertyValue">
|
||||
<div id="ego_profile-image" class="statementWrap thumbnail">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%-- Sparkline --%>
|
||||
<div class="datatypeProperties">
|
||||
<div class="datatypePropertyValue">
|
||||
<div id="ego_sparkline">
|
||||
|
||||
${requestScope.egoURIParam}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="topShadow"></div>
|
||||
<div id="bodyPannel" style="height: 900px;"><br class="spacer" />
|
||||
<div id="visPanel" style="float: left; width: 610px;">
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
<!--
|
||||
|
||||
renderCoAuthorshipVisualization();
|
||||
|
||||
//-->
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="dataPanel" style="float: left; width: 150px;"><br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div id="newsLetter" style="visibility: hidden">
|
||||
<span class="nltop"></span>
|
||||
<div class="middle" id="nodeData">
|
||||
<div id="profileImage"></div>
|
||||
<div class="bold"><strong><span id="authorName"> </span></strong></div>
|
||||
<div class="italicize"><span id="profileMoniker"></span></div>
|
||||
<div class="works"><span class="numbers" style="width: 40px;"
|
||||
id="works">6</span> <span class="title">Works</span></div>
|
||||
<div class="works"><span class="numbers" style="width: 40px;"
|
||||
id="coAuthors">78</span> <span>Co-author(s)</span></div>
|
||||
<br />
|
||||
<div id="firstPublication"><span></span> <span>First
|
||||
Publication</span></div>
|
||||
<div id="lastPublication"><span></span> Last Publication</div>
|
||||
<br />
|
||||
<div><a href="#" id="profileUrl">VIVO profile</a></div>
|
||||
<br />
|
||||
<div><a href="#" id="coAuthorshipVisUrl">Co-author network of <span id="coAuthorName"></span></a></div>
|
||||
</div>
|
||||
<br class="spacer"> <span class="nlbottom"></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
Download co-authorship newtwork as <a href="/vivo1/admin/visQuery?uri=http%3A%2F%2Fvivo.library.cornell.edu%2Fns%2F0.1%23individual5748&vis=person_pub_count&render_mode=data">.graphml</a> file.
|
||||
|
||||
<div id="bottomShadow"></div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<br class="spacer" />
|
||||
|
||||
<table id="publications_data_table">
|
||||
<caption>Publications per year</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Year</th>
|
||||
<th>Publications</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>2004</td>
|
||||
<td>4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2005</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>11</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unknown</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Download data as <a href="/vivo1/admin/visQuery?uri=http%3A%2F%2Fvivo.library.cornell.edu%2Fns%2F0.1%23individual5748&vis=person_pub_count&render_mode=data">.csv</a> file.
|
||||
|
||||
<table id="coauthorships_data_table">
|
||||
<caption>Co - Authorhips</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Publications</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>2004</td>
|
||||
<td>4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2005</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>11</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unknown</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
processProfileInformation("ego_label",
|
||||
"ego_moniker",
|
||||
"ego_profile-image",
|
||||
jQuery.parseJSON(getWellFormedURLs("${requestScope.egoURIParam}", "profile_info")));
|
||||
|
||||
renderSparklineVisualization("${egoSparklineVisURL}");
|
||||
|
||||
|
||||
var obj = jQuery.parseJSON('{"name":"John"}');
|
||||
//console.log(obj)
|
||||
|
||||
var obj = jQuery.parseJSON('{"imageOffset2":["sup"],"A":["2001","2002","2003","2090","Unknown"],"B":["2001","2002","2003","2090","Unknown"],"C":["2001","2002","2003","2090","Unknown"],"imageOffset":["2090","2002","2003","2001"]}');
|
||||
//console.log(obj)
|
||||
|
||||
$.each(obj, function(i, item){
|
||||
//console.log("i - " + i + " item - " + item);
|
||||
$.each(item, function(index, vals) {
|
||||
//console.log(index + " - val - " + vals);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +1,5 @@
|
|||
<%@ page import="edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer" %>
|
||||
|
||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue