From d08cdd3498f8c1f0d89e541c30bf57a9300f0258 Mon Sep 17 00:00:00 2001 From: cdtank Date: Wed, 22 Dec 2010 21:14:07 +0000 Subject: [PATCH] 1. Modified dependency injection bean to include the new freemarkerized vis. 2. Modified freemarker branch to use newly added visFramework constants. 3. Completed freemarkerization of co-pi vis code generator. 4. Modified co-autho req handler to handle all data responses (2 sparkline, 2 network) instaed of person level. 5. Adde dperson level request handler to freemarker branch. --- .../visualizations-beans-injection-fm.xml | 18 +- .../AjaxVisualizationController.java | 3 - .../DataVisualizationController.java | 1 - .../StandardVisualizationController.java | 1 - .../VisualizationFrameworkConstants.java | 106 +++++++ .../VisualizationsDependencyInjector.java | 1 - .../CoAuthorshipGraphMLWriter.java | 2 +- .../CoAuthorshipRequestHandler.java | 127 +++++++- .../CoAuthorshipVisCodeGenerator.java | 8 +- .../CoPIGrantCountRequestHandler.java | 2 +- .../CoPIGraphMLWriter.java | 2 +- .../CoPIVisCodeGenerator.java | 152 ++++------ .../PersonGrantCountQueryRunner.java | 2 +- .../PersonGrantCountRequestHandler.java | 4 +- .../PersonGrantCountVisCodeGenerator.java | 2 +- .../PersonLevelRequestHandler.java | 286 ++++++++++++++++++ .../PersonPublicationCountQueryRunner.java | 2 +- .../PersonPublicationCountRequestHandler.java | 4 +- ...ersonPublicationCountVisCodeGenerator.java | 2 +- .../utilities/UtilitiesRequestHandler.java | 2 +- .../freemarker/visutils/UtilityFunctions.java | 2 +- .../PersonLevelRequestHandler.java | 6 +- 22 files changed, 606 insertions(+), 129 deletions(-) create mode 100644 src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java create mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java diff --git a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml index d64c994f..e7c6f492 100644 --- a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml +++ b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml @@ -22,16 +22,17 @@ - @@ -53,18 +54,21 @@ - - --> + diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/AjaxVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/AjaxVisualizationController.java index 07f748d5..90b0c57b 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/AjaxVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/AjaxVisualizationController.java @@ -3,7 +3,6 @@ package edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker; import java.io.IOException; -import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -20,9 +19,7 @@ import com.hp.hpl.jena.rdf.model.ModelMaker; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; -import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; 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.freemarker.visutils.UtilityFunctions; diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/DataVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/DataVisualizationController.java index a02bb4b2..82ea47a2 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/DataVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/DataVisualizationController.java @@ -20,7 +20,6 @@ import com.hp.hpl.jena.rdf.model.ModelMaker; import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; 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.freemarker.visutils.UtilityFunctions; diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/StandardVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/StandardVisualizationController.java index efdbaf3a..59e18ab1 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/StandardVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/StandardVisualizationController.java @@ -14,7 +14,6 @@ import com.hp.hpl.jena.rdf.model.ModelMaker; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; 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.freemarker.visutils.UtilityFunctions; diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java new file mode 100644 index 00000000..26fce924 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java @@ -0,0 +1,106 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker; + +public class VisualizationFrameworkConstants { + + /* + * Contains the location of bean containing info on all the visualizations + * available in that instance. Currently it is stored under + * "productMods/WEB-INF..." + */ + public static final String RELATIVE_LOCATION_OF_VISUALIZATIONS_BEAN = + "/WEB-INF/visualization/visualizations-beans-injection.xml"; + + /* + * Freemarker Version + * */ + public static final String RELATIVE_LOCATION_OF_FM_VISUALIZATIONS_BEAN = + "/WEB-INF/visualization/visualizations-beans-injection-fm.xml"; + + public static final String ERROR_TEMPLATE = "/visualization/visualizationError.ftl"; + + /* + * Vis URL prefix that is seen by all the users + */ + public static final String VISUALIZATION_URL_PREFIX = "/visualization"; + public static final String FREEMARKERIZED_VISUALIZATION_URL_PREFIX = "/visualizationfm"; + public static final String AJAX_VISUALIZATION_SERVICE_URL_PREFIX = "/visualizationAjax"; + public static final String DATA_VISUALIZATION_SERVICE_URL_PREFIX = "/visualizationData"; + + public static final String INDIVIDUAL_URL_PREFIX = "/individual"; + + /* + * These represent possible query keys in a URI for visualization purposes. + * Examples, + * 1. http://vivo.indiana.edu/visualization?uri=http://vivoweb.org/ontology/core/Person10979&vis=person_level&render_mode=standalone + * 2. http://vivo.indiana.edu/visualization?uri=http://vivoweb.org/ontology/core/Person72&vis=person_pub_count&render_mode=dynamic&container=vis_container + * */ + public static final String VIS_TYPE_KEY = "vis"; + public static final String VIS_CONTAINER_KEY = "container"; + public static final String INDIVIDUAL_URI_KEY = "uri"; + public static final String VIS_MODE_KEY = "vis_mode"; + public static final String RENDER_MODE_KEY = "render_mode"; + + /* + * These values represent possible render modes. + * */ + public static final String STANDALONE_RENDER_MODE = "standalone"; + public static final String DYNAMIC_RENDER_MODE = "dynamic"; + public static final String DATA_RENDER_MODE = "data"; + public static final String PDF_RENDER_MODE = "pdf"; + + /* + * These values represent possible sub-vis modes. + * */ + public static final String IMAGE_VIS_MODE = "image"; + public static final String SHORT_SPARKLINE_VIS_MODE = "short"; + public static final String FULL_SPARKLINE_VIS_MODE = "full"; + public static final String COPI_VIS_MODE = "copi"; + public static final String COAUTHOR_VIS_MODE = "coauthor"; + + /* + * Vis modes for CoauthorshipRequest Handler + * */ + public static final String COAUTHORS_COUNT_PER_YEAR_VIS_MODE = "coauthors_count_per_year"; + public static final String COAUTHORS_LIST_VIS_MODE = "coauthors"; + public static final String COAUTHOR_NETWORK_STREAM_VIS_MODE = "coauthor_network_stream"; + public static final String COAUTHOR_NETWORK_DOWNLOAD_VIS_MODE = "coauthor_network_download"; + + /* + * Vis modes for CoPIRequest Handler + * */ + public static final String COPIS_COUNT_PER_YEAR_VIS_MODE = "copis_count_per_year"; + public static final String COPIS_LIST_VIS_MODE = "copis"; + public static final String COPI_NETWORK_STREAM_VIS_MODE = "copi_network_stream"; + public static final String COPI_NETWORK_DOWNLOAD_VIS_MODE = "copi_network_download"; + + /* + * These values represent possible utilities vis modes. + * */ + public static final String PROFILE_INFO_UTILS_VIS_MODE = "PROFILE_INFO"; + public static final String PROFILE_UTILS_VIS_MODE = "PROFILE_URL"; + public static final String COAUTHOR_UTILS_VIS_MODE = "COAUTHORSHIP_URL"; + public static final String PERSON_LEVEL_UTILS_VIS_MODE = "PERSON_LEVEL_URL"; + public static final String COPI_UTILS_VIS_MODE = "COPI_URL"; + public static final String IMAGE_UTILS_VIS_MODE = "IMAGE_URL"; + public static final String UNIVERSITY_COMPARISON_VIS_MODE = "UNIVERSITY"; + public static final String SCHOOL_COMPARISON_VIS_MODE = "SCHOOL"; + public static final String DEPARTMENT_COMPARISON_VIS_MODE = "DEPARTMENT"; + + + /* + * These values represent possible visualizations provided as values to the "vis" url key. + * */ + public static final String PERSON_PUBLICATION_COUNT_VIS = "person_pub_count"; + public static final String PERSON_GRANT_COUNT_VIS = "person_grant_count"; + public static final String PDF_REPORT_VIS = "pdf_report"; + public static final String COLLEGE_PUBLICATION_COUNT_VIS = "college_pub_count"; + public static final String COAUTHORSHIP_VIS = "coauthorship"; + public static final String PERSON_LEVEL_VIS = "person_level"; + public static final String UTILITIES_VIS = "utilities"; + public static final String ENTITY_COMPARISON_VIS = "entity_comparison"; + public static final String CO_PI_VIS = "coprincipalinvestigator"; + + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationsDependencyInjector.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationsDependencyInjector.java index 03ab3b50..e06afff0 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationsDependencyInjector.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationsDependencyInjector.java @@ -9,7 +9,6 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler; public class VisualizationsDependencyInjector { diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipGraphMLWriter.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipGraphMLWriter.java index a7f7b5d7..87ca94f2 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipGraphMLWriter.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipGraphMLWriter.java @@ -10,7 +10,7 @@ import java.util.Set; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoAuthorshipData; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Edge; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Node; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java index 30eb7b10..95f7f6de 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java @@ -4,9 +4,9 @@ package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coauthorship; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import java.util.Map.Entry; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; @@ -18,7 +18,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoAuthorshipData; @@ -69,19 +69,36 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { * flash vis. We will use "VIS_MODE_KEY" as a modifier to differentiate * between these two. The default will be to render the coauthorship network vis. * */ - if (VisualizationFrameworkConstants.SPARKLINE_VIS_MODE + if (VisualizationFrameworkConstants.COAUTHORS_COUNT_PER_YEAR_VIS_MODE .equalsIgnoreCase(visMode)) { /* * When the csv file is required - based on which sparkline visualization will * be rendered. * */ - return prepareSparklineDataResponse(authorNodesAndEdges); + return prepareCoauthorsCountPerYearDataResponse(authorNodesAndEdges); + + } else if (VisualizationFrameworkConstants.COAUTHORS_LIST_VIS_MODE + .equalsIgnoreCase(visMode)) { + /* + * When the csv file is required - based on which sparkline visualization will + * be rendered. + * */ + return prepareCoauthorsListDataResponse(authorNodesAndEdges); + + } else if (VisualizationFrameworkConstants.COAUTHOR_NETWORK_DOWNLOAD_VIS_MODE + .equalsIgnoreCase(visMode)) { + /* + * When the csv file is required - based on which sparkline visualization will + * be rendered. + * */ + return prepareNetworkDownloadDataResponse(authorNodesAndEdges); + } else { /* * When the graphML file is required - based on which coauthorship network * visualization will be rendered. * */ - return prepareNetworkDataResponse(authorNodesAndEdges); + return prepareNetworkStreamDataResponse(authorNodesAndEdges); } } @@ -116,6 +133,23 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { + private String getCoauthorsListCSVContent(Map coAuthorsToCount) { + + StringBuilder csvFileContent = new StringBuilder(); + + csvFileContent.append("Year, Count\n"); + + for (Entry currentEntry : coAuthorsToCount.entrySet()) { + csvFileContent.append(StringEscapeUtils.escapeCsv(currentEntry.getKey())); + csvFileContent.append(","); + csvFileContent.append(currentEntry.getValue()); + csvFileContent.append("\n"); + } + + return csvFileContent.toString(); + + } + private String getCoauthorsPerYearCSVContent(Map> yearToCoauthors) { StringBuilder csvFileContent = new StringBuilder(); @@ -153,7 +187,7 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { * @param authorNodesAndEdges * @param response */ - private Map prepareSparklineDataResponse(CoAuthorshipData authorNodesAndEdges) { + private Map prepareCoauthorsCountPerYearDataResponse(CoAuthorshipData authorNodesAndEdges) { String outputFileName; Map> yearToCoauthors = new TreeMap>(); @@ -182,13 +216,64 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { return fileData; } + /** + * Provides response when a csv file containing number & names of unique co-authors per + * year is requested. + * @param authorNodesAndEdges + * @param response + */ + private Map prepareCoauthorsListDataResponse(CoAuthorshipData coAuthorshipData) { + + String outputFileName = ""; + Map coAuthorsToCount = new TreeMap(); + + if (coAuthorshipData.getNodes() != null && coAuthorshipData.getNodes().size() > 0) { + + outputFileName = UtilityFunctions.slugify(coAuthorshipData.getEgoNode().getNodeName()) + + "_coauthors" + ".csv"; + + coAuthorsToCount = getCoAuthorsList(coAuthorshipData); + + } else { + outputFileName = "no_coauthors" + ".csv"; + } + + Map fileData = new HashMap(); + fileData.put(DataVisualizationController.FILE_NAME_KEY, + outputFileName); + fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY, + "application/octet-stream"); + fileData.put(DataVisualizationController.FILE_CONTENT_KEY, + getCoauthorsListCSVContent(coAuthorsToCount)); + + return fileData; + } + + private Map getCoAuthorsList(CoAuthorshipData coAuthorsipVO) { + + Map coAuthorsToCount = new TreeMap(); + + for (Node currNode : coAuthorsipVO.getNodes()) { + + /* + * We have already printed the Ego Node info. + * */ + if (currNode != coAuthorsipVO.getEgoNode()) { + + coAuthorsToCount.put(currNode.getNodeName(), currNode.getNumOfAuthoredWorks()); + + } + } + return coAuthorsToCount; + } + /** * Provides a response when graphml formatted co-authorship network is requested, typically by * the flash vis. * @param authorNodesAndEdges * @param response */ - private Map prepareNetworkDataResponse(CoAuthorshipData authorNodesAndEdges) { + private Map prepareNetworkStreamDataResponse(CoAuthorshipData authorNodesAndEdges) { CoAuthorshipGraphMLWriter coAuthorshipGraphMLWriter = new CoAuthorshipGraphMLWriter(authorNodesAndEdges); @@ -203,6 +288,34 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { } + private Map prepareNetworkDownloadDataResponse(CoAuthorshipData authorNodesAndEdges) { + + String outputFileName = ""; + + if (authorNodesAndEdges.getNodes() != null && authorNodesAndEdges.getNodes().size() > 0) { + + outputFileName = UtilityFunctions.slugify(authorNodesAndEdges.getEgoNode().getNodeName()) + + "_coauthor-network.graphml" + ".xml"; + + } else { + outputFileName = "no_coauthor-network.graphml" + ".xml"; + } + + CoAuthorshipGraphMLWriter coAuthorshipGraphMLWriter = + new CoAuthorshipGraphMLWriter(authorNodesAndEdges); + + Map fileData = new HashMap(); + fileData.put(DataVisualizationController.FILE_NAME_KEY, + outputFileName); + fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY, + "text/xml"); + fileData.put(DataVisualizationController.FILE_CONTENT_KEY, + coAuthorshipGraphMLWriter.getCoAuthorshipGraphMLContent().toString()); + + return fileData; + + } + /** * When the page for person level visualization is requested. * @param egoURI 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 6a112d56..4cc9fe77 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 @@ -17,7 +17,7 @@ import org.apache.commons.logging.Log; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Node; @@ -526,7 +526,7 @@ public class CoAuthorshipVisCodeGenerator { VisualizationFrameworkConstants.VIS_TYPE_KEY, VisualizationFrameworkConstants.COAUTHORSHIP_VIS, VisualizationFrameworkConstants.VIS_MODE_KEY, - VisualizationFrameworkConstants.SPARKLINE_VIS_MODE); + VisualizationFrameworkConstants.COAUTHORS_COUNT_PER_YEAR_VIS_MODE); return UrlBuilder.getUrl(VisualizationFrameworkConstants.DATA_VISUALIZATION_SERVICE_URL_PREFIX, CSVDownloadURLParams); @@ -548,8 +548,8 @@ public class CoAuthorshipVisCodeGenerator { individualURI, VisualizationFrameworkConstants.VIS_TYPE_KEY, VisualizationFrameworkConstants.PERSON_LEVEL_VIS, - VisualizationFrameworkConstants.VIS_CONTAINER_KEY, - "ego_sparkline"); + VisualizationFrameworkConstants.VIS_MODE_KEY, + VisualizationFrameworkConstants.COAUTHOR_VIS_MODE); String fullTimelineNetworkURL = UrlBuilder.getUrl( VisualizationFrameworkConstants.FREEMARKERIZED_VISUALIZATION_URL_PREFIX, diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java index 976c2330..f24953aa 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java @@ -16,7 +16,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPIData; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGraphMLWriter.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGraphMLWriter.java index 31d6dd56..9c0ee7fe 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGraphMLWriter.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGraphMLWriter.java @@ -10,7 +10,7 @@ import java.util.Set; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPIData; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPIEdge; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPINode; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIVisCodeGenerator.java index c6c77fa8..4b51b59e 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIVisCodeGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIVisCodeGenerator.java @@ -2,25 +2,27 @@ package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coprincipalinvestigator; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.NoSuchElementException; import java.util.Set; -import java.util.Map.Entry; import org.apache.commons.logging.Log; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationController; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.CoPINode; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineData; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPINode; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SparklineData; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.YearToEntityCountDataElement; /** * This class contains code for rendering sparklines and displaying tables for @@ -57,18 +59,14 @@ public class CoPIVisCodeGenerator { private SparklineData sparklineData; - private String contextPath; - private String individualURI; - public CoPIVisCodeGenerator(String contextPath, - String individualURI, + public CoPIVisCodeGenerator(String individualURI, String visMode, String visContainer, Map> yearToUniqueCoPIs, Log log){ - this.contextPath = contextPath; this.individualURI = individualURI; this.yearToUniqueCoPIs = yearToUniqueCoPIs; @@ -181,6 +179,7 @@ public class CoPIVisCodeGenerator { int uniqueCoPICounter = 0; int renderedFullSparks = 0; Set allCoPIsWithKnownGrantShipYears = new HashSet(); + List yearToUniqueInvestigatorsCountDataTable = new ArrayList(); for (int grantYear = minGrantYearConsidered; grantYear <= currentYear; grantYear++) { @@ -202,6 +201,10 @@ public class CoPIVisCodeGenerator { visualizationCode.append("data.setValue(" + uniqueCoPICounter + ", 1, " + currentUniqueCoPIs + ");\n"); + + yearToUniqueInvestigatorsCountDataTable.add(new YearToEntityCountDataElement(uniqueCoPICounter, + grantYearAsString, + currentUniqueCoPIs)); uniqueCoPICounter++; } @@ -212,6 +215,10 @@ public class CoPIVisCodeGenerator { * associated with it. Hence. */ renderedFullSparks = allCoPIsWithKnownGrantShipYears.size(); + + sparklineData.setRenderedSparks(renderedFullSparks); + + sparklineData.setYearToEntityCountDataTable(yearToUniqueInvestigatorsCountDataTable); /* * Total grants will also consider publications that have no year @@ -222,6 +229,8 @@ public class CoPIVisCodeGenerator { unknownYearCoPIs = yearToUniqueCoPIs.get( VOConstants.DEFAULT_GRANT_YEAR).size(); } + + sparklineData.setUnknownYearPublications(unknownYearCoPIs); String sparklineDisplayOptions = "{width: 65, height: 30, showAxisLines: false, " + "showValueLabels: false, labelPosition: 'none'}"; @@ -232,11 +241,14 @@ public class CoPIVisCodeGenerator { visContainerID = DEFAULT_VISCONTAINER_DIV_ID; } + sparklineData.setVisContainerDivID(visContainerID); + /* * By default these represents the range of the rendered sparks. Only in * case of "short" sparkline mode we will set the Earliest * RenderedGrant year to "currentYear - 10". */ + sparklineData.setEarliestYearConsidered(minGrantYearConsidered); sparklineData.setEarliestRenderedGrantYear(minGrantYear); sparklineData.setLatestRenderedGrantYear(currentYear); @@ -257,10 +269,15 @@ public class CoPIVisCodeGenerator { sparklineData.setEarliestRenderedGrantYear(shortSparkMinYear); + sparklineData.setShortVisMode(true); + generateShortSparklineVisualizationContent(currentYear, shortSparkMinYear, visContainerID, visualizationCode, unknownYearCoPIs, sparklineDisplayOptions); } else { + + sparklineData.setShortVisMode(false); + generateFullSparklineVisualizationContent(currentYear, minGrantYearConsidered, visContainerID, visualizationCode, unknownYearCoPIs, renderedFullSparks, @@ -361,17 +378,12 @@ public class CoPIVisCodeGenerator { String csvDownloadURLHref = ""; - try { - if (getCSVDownloadURL() != null) { - - csvDownloadURLHref = "(.CSV File)"; - - } else { - csvDownloadURLHref = ""; - } - - } catch (UnsupportedEncodingException e) { + if (getCSVDownloadURL() != null) { + + csvDownloadURLHref = "(.CSV File)"; + + } else { csvDownloadURLHref = ""; } @@ -479,18 +491,13 @@ public class CoPIVisCodeGenerator { if (yearToUniqueCoPIs.size() > 0) { - try { - if (getCSVDownloadURL() != null) { - - csvDownloadURLHref = "Download data as .csv file.
"; - sparklineData.setDownloadDataLink(getCSVDownloadURL()); - - } else { - csvDownloadURLHref = ""; - } - - } catch (UnsupportedEncodingException e) { + if (getCSVDownloadURL() != null) { + + csvDownloadURLHref = "Download data as .csv file.
"; + sparklineData.setDownloadDataLink(getCSVDownloadURL()); + + } else { csvDownloadURLHref = ""; } @@ -507,33 +514,20 @@ public class CoPIVisCodeGenerator { return divContextCode.toString(); } - private String getCSVDownloadURL() throws UnsupportedEncodingException { + private String getCSVDownloadURL() { if (yearToUniqueCoPIs.size() > 0) { - String secondaryContextPath = ""; - if (!contextPath.contains(VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX)) { - secondaryContextPath = VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX; - } + ParamMap CSVDownloadURLParams = new ParamMap(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, + individualURI, + VisualizationFrameworkConstants.VIS_TYPE_KEY, + VisualizationFrameworkConstants.CO_PI_VIS, + VisualizationFrameworkConstants.VIS_MODE_KEY, + VisualizationFrameworkConstants.COPIS_COUNT_PER_YEAR_VIS_MODE); + + return UrlBuilder.getUrl(VisualizationFrameworkConstants.DATA_VISUALIZATION_SERVICE_URL_PREFIX, + CSVDownloadURLParams); - - String downloadURL = contextPath - + secondaryContextPath - + "?" + VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY - + "=" + URLEncoder.encode(individualURI, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" + VisualizationFrameworkConstants.VIS_TYPE_KEY - + "=" + URLEncoder.encode(VisualizationFrameworkConstants - .CO_PI_VIS, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" + VisualizationFrameworkConstants.VIS_MODE_KEY - + "=" + URLEncoder.encode("sparkline", - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" + VisualizationFrameworkConstants.RENDER_MODE_KEY - + "=" + URLEncoder.encode(VisualizationFrameworkConstants.DATA_RENDER_MODE, - VisualizationController.URL_ENCODING_SCHEME).toString(); - - return downloadURL; } else { return null; } @@ -542,36 +536,20 @@ public class CoPIVisCodeGenerator { StringBuilder divContextCode = new StringBuilder(); - try { - String fullTimelineLink; if (yearToUniqueCoPIs.size() > 0) { - String secondaryContextPath = ""; - if (!contextPath.contains(VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX)) { - secondaryContextPath = VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX; - } - - String fullTimelineNetworkURL = contextPath - + secondaryContextPath - + "?" - + VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY - + "=" + URLEncoder.encode(individualURI, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.VIS_TYPE_KEY - + "=" + URLEncoder.encode("person_level", - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.VIS_CONTAINER_KEY - + "=" + URLEncoder.encode("ego_sparkline", - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.RENDER_MODE_KEY - + "=" + URLEncoder.encode( - VisualizationFrameworkConstants - .STANDALONE_RENDER_MODE, - VisualizationController.URL_ENCODING_SCHEME).toString(); + ParamMap fullTimelineNetworkURLParams = new ParamMap( + VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, + individualURI, + VisualizationFrameworkConstants.VIS_TYPE_KEY, + VisualizationFrameworkConstants.PERSON_LEVEL_VIS, + VisualizationFrameworkConstants.VIS_MODE_KEY, + VisualizationFrameworkConstants.COPI_VIS_MODE); + + String fullTimelineNetworkURL = UrlBuilder.getUrl( + VisualizationFrameworkConstants.FREEMARKERIZED_VISUALIZATION_URL_PREFIX, + fullTimelineNetworkURLParams); fullTimelineLink = "View full timeline and co-pi network."; @@ -584,10 +562,6 @@ public class CoPIVisCodeGenerator { divContextCode.append("

" + fullTimelineLink + "

"); - } catch (UnsupportedEncodingException e) { - log.error(e); - } - return divContextCode.toString(); } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountQueryRunner.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountQueryRunner.java index 1516bc1a..31e7f382 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountQueryRunner.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountQueryRunner.java @@ -26,7 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryFieldLabels import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Grant; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Individual; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.QueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; /** diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java index f2f9687e..21d06df4 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java @@ -17,7 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Grant; @@ -25,7 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.In import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SparklineData; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.QueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; /** diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountVisCodeGenerator.java index dc51b79b..d5bf2c46 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountVisCodeGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountVisCodeGenerator.java @@ -17,7 +17,7 @@ import org.apache.commons.logging.Log; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Grant; 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 new file mode 100644 index 00000000..fb3cadd1 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java @@ -0,0 +1,286 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.personlevel; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +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.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coauthorship.CoAuthorshipQueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coauthorship.CoAuthorshipVisCodeGenerator; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coprincipalinvestigator.CoPIGrantCountQueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coprincipalinvestigator.CoPIVisCodeGenerator; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.persongrantcount.PersonGrantCountQueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.persongrantcount.PersonGrantCountVisCodeGenerator; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.personpubcount.PersonPublicationCountQueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.personpubcount.PersonPublicationCountVisCodeGenerator; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoAuthorshipData; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoPIData; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Grant; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SparklineData; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler; + +/** + * This request handler is used to serve content rendered on the person level vis page + * like, + * 1. Front end of the vis including the co-author & publication sparkline. + * 2. Downloadable file having the co-author network in graphml format. + * 3. Downloadable file having the list of co-authors that the individual has + * worked with & count of such co-authorships. + * + * @author cdtank + */ +public class PersonLevelRequestHandler implements VisualizationRequestHandler { + + private static final String EGO_PUB_SPARKLINE_VIS_CONTAINER_ID = "ego_pub_sparkline"; + private static final String UNIQUE_COAUTHORS_SPARKLINE_VIS_CONTAINER_ID = + "unique_coauthors_sparkline"; + private static final String EGO_GRANT_SPARKLINE_VIS_CONTAINER_ID = "ego_grant_sparkline"; + private static final String UNIQUE_COPIS_SPARKLINE_VIS_CONTAINER_ID = + "unique_copis_sparkline"; + + @Override + public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log, + DataSource dataSource) throws MalformedQueryParametersException { + throw new UnsupportedOperationException("Person Level does not provide Ajax Response."); + } + + @Override + public Map generateDataVisualization( + VitroRequest vitroRequest, Log log, DataSource dataSource) + throws MalformedQueryParametersException { + throw new UnsupportedOperationException("Person Level does not provide Data Response."); + } + + + @Override + public ResponseValues generateStandardVisualization( + VitroRequest vitroRequest, Log log, DataSource dataSource) + throws MalformedQueryParametersException { + + String egoURI = vitroRequest.getParameter( + VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY); + + String renderMode = vitroRequest.getParameter( + VisualizationFrameworkConstants.RENDER_MODE_KEY); + + String visMode = vitroRequest.getParameter( + VisualizationFrameworkConstants.VIS_MODE_KEY); + + + if (VisualizationFrameworkConstants.CO_PI_VIS.equalsIgnoreCase(visMode)) { + + QueryRunner coPIQueryManager = new CoPIGrantCountQueryRunner(egoURI, dataSource, log); + + QueryRunner> grantQueryManager = new PersonGrantCountQueryRunner(egoURI, dataSource, log); + + CoPIData coPIData = coPIQueryManager.getQueryResult(); + + /* + * grants over time sparkline + */ + + Set piGrants = grantQueryManager.getQueryResult(); + + /* + * Create a map from the year to number of grants. Use the Grant's + * parsedGrantYear to populate the data. + * */ + Map yearToGrantCount = + UtilityFunctions.getYearToGrantCount(piGrants); + + PersonGrantCountVisCodeGenerator personGrantCountVisCodeGenerator = + new PersonGrantCountVisCodeGenerator( + egoURI, + VisualizationFrameworkConstants.FULL_SPARKLINE_VIS_MODE, + EGO_GRANT_SPARKLINE_VIS_CONTAINER_ID, + piGrants, + yearToGrantCount, + log); + + SparklineData grantSparklineVO = personGrantCountVisCodeGenerator + .getValueObjectContainer(); + + + /* + * Co-PI's over time sparkline + */ + CoPIVisCodeGenerator uniqueCopisVisCodeGenerator = + new CoPIVisCodeGenerator( + egoURI, + VisualizationFrameworkConstants.FULL_SPARKLINE_VIS_MODE, + UNIQUE_COPIS_SPARKLINE_VIS_CONTAINER_ID, + UtilityFunctions.getGrantYearToCoPI(coPIData), + log); + + SparklineData uniqueCopisSparklineVO = uniqueCopisVisCodeGenerator + .getValueObjectContainer(); + + + return prepareCoPIStandaloneResponse( + egoURI, + grantSparklineVO, + uniqueCopisSparklineVO, + coPIData, + vitroRequest); + + + } else { + + QueryRunner coAuthorshipQueryManager = new CoAuthorshipQueryRunner(egoURI, dataSource, log); + + QueryRunner> publicationQueryManager = new PersonPublicationCountQueryRunner(egoURI, dataSource, log); + + CoAuthorshipData coAuthorshipData = coAuthorshipQueryManager.getQueryResult(); + + /* + * When the front-end for the person level vis has to be displayed we render couple of + * sparklines. This will prepare all the data for the sparklines & other requested + * files. + * */ + Set authorDocuments = publicationQueryManager.getQueryResult(); + + /* + * Create a map from the year to number of publications. Use the BiboDocument's + * parsedPublicationYear to populate the data. + * */ + Map yearToPublicationCount = + UtilityFunctions.getYearToPublicationCount(authorDocuments); + + /* + * Computations required to generate HTML for the sparklines & related context. + * */ + PersonPublicationCountVisCodeGenerator personPubCountVisCodeGenerator = + new PersonPublicationCountVisCodeGenerator( + egoURI, + VisualizationFrameworkConstants.FULL_SPARKLINE_VIS_MODE, + EGO_PUB_SPARKLINE_VIS_CONTAINER_ID, + authorDocuments, + yearToPublicationCount, + log); + + SparklineData publicationSparklineVO = personPubCountVisCodeGenerator + .getValueObjectContainer(); + + CoAuthorshipVisCodeGenerator uniqueCoauthorsVisCodeGenerator = + new CoAuthorshipVisCodeGenerator( + egoURI, + VisualizationFrameworkConstants.FULL_SPARKLINE_VIS_MODE, + UNIQUE_COAUTHORS_SPARKLINE_VIS_CONTAINER_ID, + UtilityFunctions.getPublicationYearToCoAuthors(coAuthorshipData), + log); + + SparklineData uniqueCoauthorsSparklineVO = uniqueCoauthorsVisCodeGenerator + .getValueObjectContainer(); + + return prepareCoAuthorStandaloneResponse( + egoURI, + publicationSparklineVO, + uniqueCoauthorsSparklineVO, + coAuthorshipData, + vitroRequest); + + } + + } + + private TemplateResponseValues prepareCoAuthorStandaloneResponse ( + String egoURI, + SparklineData egoPubSparklineVO, + SparklineData uniqueCoauthorsSparklineVO, + CoAuthorshipData coAuthorshipVO, + VitroRequest vitroRequest) { + + Map body = new HashMap(); + + Portal portal = vitroRequest.getPortal(); + + body.put("egoURIParam", egoURI); + + String title = ""; + + if (coAuthorshipVO.getNodes() != null && coAuthorshipVO.getNodes().size() > 0) { + body.put("numOfAuthors", coAuthorshipVO.getNodes().size()); + title = coAuthorshipVO.getEgoNode().getNodeName() + " - "; + } + + if (coAuthorshipVO.getEdges() != null && coAuthorshipVO.getEdges().size() > 0) { + body.put("numOfCoAuthorShips", coAuthorshipVO.getEdges().size()); + } + + String standaloneTemplate = "coAuthorPersonLevel.ftl"; + + + body.put("portalBean", portal); + body.put("title", title + "Person Level Visualization"); + + return new TemplateResponseValues(standaloneTemplate, body); + + } + + private TemplateResponseValues prepareCoPIStandaloneResponse ( + String egoURI, + SparklineData egoGrantSparklineVO, + SparklineData uniqueCopisSparklineVO, + CoPIData coPIVO, + VitroRequest vitroRequest) { + + Map body = new HashMap(); + + Portal portal = vitroRequest.getPortal(); + + body.put("egoURIParam", egoURI); + + String title = ""; + + if (coPIVO.getNodes() != null && coPIVO.getNodes().size() > 0) { + body.put("numOfInvestigators", coPIVO.getNodes().size()); + title = coPIVO.getEgoNode().getNodeName() + " - "; + } + + if (coPIVO.getEdges() != null && coPIVO.getEdges().size() > 0) { + body.put("numOfCoPIs", coPIVO.getEdges().size()); + } + + String standaloneTemplate = "coPIPersonLevel.ftl"; + + + body.put("portalBean", portal); + body.put("title", title + "Person Level Visualization"); + + return new TemplateResponseValues(standaloneTemplate, body); + + } + + private String getCompleteURL(HttpServletRequest request) throws MalformedURLException { + + String file = request.getRequestURI(); +// System.out.println("\ngetRequestURI() --> "+ file + "\ngetQueryString() --> "+request.getQueryString()+ "\ngetScheme() --> "+ request.getScheme()); +// System.out.println("\ngetServerName() --> "+ request.getServerName() + "\ngetServerPort() --> "+request.getServerPort()); + + URL reconstructedURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), file); + +// System.out.println("\nReconstructed URL is --> " + reconstructedURL); + + return reconstructedURL.toString(); + } + + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountQueryRunner.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountQueryRunner.java index ca25837f..f370a811 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountQueryRunner.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountQueryRunner.java @@ -26,7 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryFieldLabels import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Individual; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.QueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java index 7eda263f..f89f5e71 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java @@ -25,7 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; @@ -34,7 +34,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Sp import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler; import edu.cornell.mannlib.vitro.webapp.visualization.visutils.PDFDocument; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.QueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; /** * diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountVisCodeGenerator.java index 62c43d4b..86699cd0 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountVisCodeGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountVisCodeGenerator.java @@ -17,7 +17,7 @@ import org.apache.commons.logging.Log; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; 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 1e106b7b..d5a3467f 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 @@ -17,7 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.filestorage.FileServingHelper; import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryFieldLabels; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java index d5639967..55851059 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java @@ -22,7 +22,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.Controllers; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; -import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoAuthorshipData; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java index 49f9c7d2..59eca552 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java @@ -7,9 +7,9 @@ import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import java.util.Map.Entry; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -27,11 +27,11 @@ import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFr import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.CoAuthorshipGraphMLWriter; import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.CoAuthorshipQueryRunner; import edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.CoAuthorshipVisCodeGenerator; +import edu.cornell.mannlib.vitro.webapp.visualization.coprincipalinvestigator.CoPIGrantCountQueryRunner; +import edu.cornell.mannlib.vitro.webapp.visualization.coprincipalinvestigator.CoPIVisCodeGenerator; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; import edu.cornell.mannlib.vitro.webapp.visualization.persongrantcount.PersonGrantCountQueryRunner; import edu.cornell.mannlib.vitro.webapp.visualization.persongrantcount.PersonGrantCountVisCodeGenerator; -import edu.cornell.mannlib.vitro.webapp.visualization.coprincipalinvestigator.CoPIGrantCountQueryRunner; -import edu.cornell.mannlib.vitro.webapp.visualization.coprincipalinvestigator.CoPIVisCodeGenerator; import edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.PersonPublicationCountQueryRunner; import edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.PersonPublicationCountVisCodeGenerator; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument;