From 9e4836bd79f567d5a7ebf8c9fc585992d40b8a23 Mon Sep 17 00:00:00 2001 From: cdtank Date: Thu, 8 Jul 2010 21:28:05 +0000 Subject: [PATCH] 1. Refactoered code. 2. Handled the case when a person does not have any publications by generating dummy graphml file. 3. Added handlers for multiple sparklines on same page. 4. Added sparkline code generator for unique co-authors over time. --- .../CoAuthorshipGraphMLWriter.java | 8 +- .../VisualizationCodeGenerator.java | 633 ++++++++++++++++++ .../VisualizationRequestHandler.java | 20 +- .../VisualizationRequestHandler.java | 132 +++- .../VisualizationCodeGenerator.java | 13 +- .../VisualizationRequestHandler.java | 7 +- .../SparklineVOContainer.java} | 4 +- .../visualization/ajax_vis_content.jsp | 2 +- .../templates/visualization/person_level.jsp | 26 +- .../visualization/publication_count.jsp | 2 +- 10 files changed, 801 insertions(+), 46 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationCodeGenerator.java rename webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/{personpubcount/VisVOContainer.java => valueobjects/SparklineVOContainer.java} (92%) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipGraphMLWriter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipGraphMLWriter.java index 78f36d9b5..bb1ff8b44 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipGraphMLWriter.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipGraphMLWriter.java @@ -62,9 +62,13 @@ public class CoAuthorshipGraphMLWriter { graphMLContent.append("\n\n"); - generateNodeSectionContent(visVOContainer, graphMLContent); + if (visVOContainer.getNodes() != null & visVOContainer.getNodes().size() > 0) { + generateNodeSectionContent(visVOContainer, graphMLContent); + } - generateEdgeSectionContent(visVOContainer, graphMLContent); + if (visVOContainer.getEdges() != null & visVOContainer.getEdges().size() > 0) { + generateEdgeSectionContent(visVOContainer, graphMLContent); + } graphMLContent.append("\n"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationCodeGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationCodeGenerator.java new file mode 100644 index 000000000..b5cbd21ae --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationCodeGenerator.java @@ -0,0 +1,633 @@ +package edu.cornell.mannlib.vitro.webapp.visualization.coauthorship; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Calendar; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +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.visualization.constants.VOConstants; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineVOContainer; + + +public class VisualizationCodeGenerator { + + private final static Map visDivNames = new HashMap() {{ + + put("SHORT_SPARK", "unique_coauthors_short_sparkline_vis"); + put("FULL_SPARK", "unique_coauthors_full_sparkline_vis"); + + }}; + + private static final String visualizationStyleClass = "sparkline_style"; + + private static final String defaultVisContainerDivID = "unique_coauthors_vis_container"; + + public static final String SHORT_SPARKLINE_MODE_URL_HANDLE = "short"; + + public static final String FULL_SPARKLINE_MODE_URL_HANDLE = "full"; + + private Map yearToUniqueCoauthorsCount; + + private Log log; + + private SparklineVOContainer valueObjectContainer; + + private String contextPath; + + private String individualURIParam; + + public VisualizationCodeGenerator(String contextPath, + String individualURIParam, + String visMode, + String visContainer, + Map yearToUniqueCoauthorsCount, + SparklineVOContainer valueObjectContainer, + Log log) { + + this.contextPath = contextPath; + this.individualURIParam = individualURIParam; + + this.yearToUniqueCoauthorsCount = yearToUniqueCoauthorsCount; + this.valueObjectContainer = valueObjectContainer; + + this.log = log; + + + generateVisualizationCode(visMode, + visContainer); + + + } + + private void generateVisualizationCode(String visMode, + String visContainer) { + + valueObjectContainer.setSparklineContent(getMainVisualizationCode(visMode, + visContainer)); + + + valueObjectContainer.setSparklineContext(getVisualizationContextCode(visMode)); + + } + + private String getMainVisualizationCode(String visMode, + String providedVisContainerID) { + + int numOfYearsToBeRendered = 0; + int currentYear = Calendar.getInstance().get(Calendar.YEAR); + int shortSparkMinYear = currentYear - 10 + 1; + + /* + * 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". + * */ + Set publishedYears = new HashSet(yearToUniqueCoauthorsCount.keySet()); + publishedYears.remove(VOConstants.DEFAULT_PUBLICATION_YEAR); + + /* + * We are setting the default value of minPublishedYear to be 10 years before + * the current year (which is suitably represented by the shortSparkMinYear), + * this in case we run into invalid set of published years. + * */ + int minPublishedYear = shortSparkMinYear; + + String visContainerID = null; + + StringBuilder visualizationCode = new StringBuilder(); + +// System.out.println(yearToPublicationCount); + if (yearToUniqueCoauthorsCount.size() > 0) { + try { + minPublishedYear = Integer.parseInt(Collections.min(publishedYears)); + System.out.println("min pub year - " + minPublishedYear); + } catch (NoSuchElementException e1) { + log.debug("vis: " + e1.getMessage() + " error occurred for " + yearToUniqueCoauthorsCount.toString()); + } catch (NumberFormatException e2) { + log.debug("vis: " + e2.getMessage() + " error occurred for " + yearToUniqueCoauthorsCount.toString()); + } + } + + int minPubYearConsidered = 0; + + /* + * There might be a case that the author has made his first publication within the + * last 10 years but we want to make sure that the sparkline is representative of + * at least the last 10 years, so we will set the minPubYearConsidered to + * "currentYear - 10" which is also given by "shortSparkMinYear". + * */ + if (minPublishedYear > shortSparkMinYear) { + minPubYearConsidered = shortSparkMinYear; + } else { + minPubYearConsidered = minPublishedYear; + } + + numOfYearsToBeRendered = currentYear - minPubYearConsidered + 1; + + visualizationCode.append("\n"); + +// .sparkline {display:inline; margin:0; padding:0; width:600px } + + + +// td.sparkline-img {margin:0; padding:0; } + + + visualizationCode.append("\n"; + } + + private String getVisualizationContextCode(String visMode) { + + String visualizationContextCode = ""; + if (SHORT_SPARKLINE_MODE_URL_HANDLE.equalsIgnoreCase(visMode)) { + visualizationContextCode = generateShortVisContext(); + } else { + visualizationContextCode = generateFullVisContext(); + } + + + + + + +// System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + log.debug(visualizationContextCode); +// System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + + return visualizationContextCode; + } + + private String generateFullVisContext() { + + StringBuilder divContextCode = new StringBuilder(); + + try { + + String downloadFileCode; + if (yearToUniqueCoauthorsCount.size() > 0) { + + + String downloadURL = getCSVDownloadURL(); + + downloadFileCode = "Download data as .csv file.
"; + + valueObjectContainer.setDownloadDataLink(downloadURL); + } else { + downloadFileCode = "No data available to export.
"; + } + + String tableCode = generateDataTable(); + + divContextCode.append("

" + tableCode + + downloadFileCode + "

"); + + valueObjectContainer.setTable(tableCode); + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return divContextCode.toString(); + + } + + private String getCSVDownloadURL() + throws UnsupportedEncodingException { + + if (yearToUniqueCoauthorsCount.size() > 0) { + + + String downloadURL = contextPath +// + "/admin/visQuery" + + "?" + VisualizationFrameworkConstants.INDIVIDUAL_URI_URL_HANDLE + + "=" + URLEncoder.encode(individualURIParam, + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + VisualizationFrameworkConstants.VIS_TYPE_URL_HANDLE + + "=" + URLEncoder.encode(VisualizationController + .COAUTHORSHIP_VIS_URL_VALUE, + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + VisualizationFrameworkConstants.VIS_MODE_URL_HANDLE + + "=" + URLEncoder.encode("sparkline", + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + VisualizationFrameworkConstants.RENDER_MODE_URL_HANDLE + + "=" + URLEncoder.encode(VisualizationFrameworkConstants.DATA_RENDER_MODE_URL_VALUE, + VisualizationController.URL_ENCODING_SCHEME).toString(); + + System.out.println(" ----- >>>> " + contextPath + " XX " + individualURIParam + " XX " + downloadURL); + + return downloadURL; + } else { + return "#"; + } + + } + + + private String generateShortVisContext() { + + StringBuilder divContextCode = new StringBuilder(); + + try { + + String fullTimelineLink; + if (yearToUniqueCoauthorsCount.size() > 0) { +// String fullTimelineNetworkURL = uri.toString() + "?" + +// VisualizationFrameworkConstants.INDIVIDUAL_URI_URL_HANDLE + +// "=" + URLEncoder.encode(individualURI, +// VisualizationController.URL_ENCODING_SCHEME).toString() + +// "&" + +// "vis" + +// "=" + URLEncoder.encode(VisualizationController +// .PERSON_PUBLICATION_COUNT_VIS_URL_VALUE, +// VisualizationController.URL_ENCODING_SCHEME).toString() + +// "&" + +// VisualizationFrameworkConstants.RENDER_MODE_URL_HANDLE + +// "=" + URLEncoder.encode(VisualizationFrameworkConstants.STANDALONE_RENDER_MODE_URL_VALUE, +// VisualizationController.URL_ENCODING_SCHEME).toString(); + + + String fullTimelineNetworkURL = contextPath + + "/admin/visQuery" + + "?" + + VisualizationFrameworkConstants.INDIVIDUAL_URI_URL_HANDLE + + "=" + URLEncoder.encode(individualURIParam, + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + + VisualizationFrameworkConstants.VIS_TYPE_URL_HANDLE + + "=" + URLEncoder.encode("person_level", + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + + VisualizationFrameworkConstants.VIS_CONTAINER_URL_HANDLE + + "=" + URLEncoder.encode("ego_sparkline", + VisualizationController.URL_ENCODING_SCHEME).toString() + + "&" + + VisualizationFrameworkConstants.RENDER_MODE_URL_HANDLE + + "=" + URLEncoder.encode(VisualizationFrameworkConstants.STANDALONE_RENDER_MODE_URL_VALUE, + VisualizationController.URL_ENCODING_SCHEME).toString(); + + System.out.println("context parth full n/w " + contextPath); + + fullTimelineLink = "View full timeline and co-author network
"; + + valueObjectContainer.setFullTimelineNetworkLink(fullTimelineNetworkURL); + + } else { + + fullTimelineLink = "No data available to render full timeline.
"; + + } + + divContextCode.append("

" + fullTimelineLink + "

"); + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return divContextCode.toString(); + + } + + + private String generateDataTable() { + + StringBuilder dataTable = new StringBuilder(); + + dataTable.append("" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""); + + for (Entry currentEntry : yearToUniqueCoauthorsCount.entrySet()) { + dataTable.append("" + + "" + + "" + + ""); + } + + dataTable.append("\n" + +// "" + +// "" + +// "\n" + + "
Unique Co-Authors per year
YearCount
" + currentEntry.getKey() + "" + currentEntry.getValue() + "
*DNA - Data not available
\n"); + + + return dataTable.toString(); + } + + + + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationRequestHandler.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationRequestHandler.java index d976e395a..6baeb65e8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationRequestHandler.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/VisualizationRequestHandler.java @@ -194,12 +194,24 @@ public class VisualizationRequestHandler { private void prepareVisualizationQuerySparklineDataResponse(VisVOContainer authorNodesAndEdges) { + String outputFileName = ""; + Map> yearToCoauthors = new TreeMap>(); - Map> yearToCoauthors = getCoAuthorsStats(authorNodesAndEdges); + if (authorNodesAndEdges.getNodes() == null || authorNodesAndEdges.getNodes().size() < 1 ) { + + outputFileName = "no-coauthorship-net" + ".graphml"; + + } else { + + outputFileName = UtilityFunctions.slugify(authorNodesAndEdges.getEgoNode().getNodeName()) + + "-coauthors" + ".csv"; + + yearToCoauthors = getCoAuthorsStats(authorNodesAndEdges); + + } + + - String outputFileName = UtilityFunctions.slugify(authorNodesAndEdges.getEgoNode().getNodeName()) - + "-coauthors" + ".csv"; - response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/VisualizationRequestHandler.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/VisualizationRequestHandler.java index a7026c2a3..673c6a5c8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/VisualizationRequestHandler.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/VisualizationRequestHandler.java @@ -2,8 +2,12 @@ package edu.cornell.mannlib.vitro.webapp.visualization.personlevel; import java.io.IOException; import java.io.PrintWriter; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.Map.Entry; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -17,14 +21,14 @@ 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.personpubcount.VisualizationCodeGenerator; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Node; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineVOContainer; import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions; public class VisualizationRequestHandler { @@ -55,7 +59,8 @@ public class VisualizationRequestHandler { String visMode = vitroRequest.getParameter(VisualizationFrameworkConstants.VIS_MODE_URL_HANDLE); - String visContainer = vitroRequest.getParameter(VisualizationFrameworkConstants.VIS_CONTAINER_URL_HANDLE); + String egoPubSparklineVisContainerID = "ego_pub_sparkline"; + String uniqueCoauthorsSparklineVisContainerID = "unique_coauthors_sparkline"; edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.QueryHandler coAuthorshipQueryManager = new edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.QueryHandler(egoURIParam, @@ -64,7 +69,7 @@ public class VisualizationRequestHandler { dataSource, log); - edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.QueryHandler sparklineQueryManager = + edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.QueryHandler publicationQueryManager = new edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.QueryHandler(egoURIParam, resultFormatParam, rdfResultFormatParam, @@ -75,7 +80,7 @@ public class VisualizationRequestHandler { edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisVOContainer coAuthorshipVO = coAuthorshipQueryManager.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 @@ -94,38 +99,57 @@ public class VisualizationRequestHandler { } - List authorDocuments = sparklineQueryManager.getVisualizationJavaValueObjects(); + List authorDocuments = publicationQueryManager.getVisualizationJavaValueObjects(); /* * Create a map from the year to number of publications. Use the BiboDocument's * parsedPublicationYear to populate the data. * */ - Map yearToPublicationCount = sparklineQueryManager + Map yearToPublicationCount = publicationQueryManager .getYearToPublicationCount(authorDocuments); + Map yearToUniqueCoauthorCount = getUniqueCoauthorsCountPerYear(coAuthorshipVO); + /* * Computations required to generate HTML for the sparklines & related context. * */ - edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer sparklineVO = - new edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer(); + SparklineVOContainer publicationSparklineVO = new SparklineVOContainer(); + SparklineVOContainer uniqueCoauthorsSparklineVO = new SparklineVOContainer(); - edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisualizationCodeGenerator visualizationCodeGenerator = + edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisualizationCodeGenerator personPubCountVisCodeGenerator = new edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisualizationCodeGenerator( vitroRequest.getRequestURI(), egoURIParam, VisualizationCodeGenerator.FULL_SPARKLINE_MODE_URL_HANDLE, - visContainer, + egoPubSparklineVisContainerID, authorDocuments, yearToPublicationCount, - sparklineVO, - log); + publicationSparklineVO, + log); + + edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisualizationCodeGenerator uniqueCoauthorsVisCodeGenerator = + new edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisualizationCodeGenerator( + vitroRequest.getRequestURI(), + egoURIParam, + VisualizationCodeGenerator.FULL_SPARKLINE_MODE_URL_HANDLE, + uniqueCoauthorsSparklineVisContainerID, + yearToUniqueCoauthorCount, + uniqueCoauthorsSparklineVO, + log); RequestDispatcher requestDispatcher = null; - prepareVisualizationQueryStandaloneResponse(egoURIParam, sparklineVO, request, response, vitroRequest); + prepareVisualizationQueryStandaloneResponse(egoURIParam, + publicationSparklineVO, + uniqueCoauthorsSparklineVO, + egoPubSparklineVisContainerID, + uniqueCoauthorsSparklineVisContainerID, + request, + response, + vitroRequest); // requestDispatcher = request.getRequestDispatcher("/templates/page/blankPage.jsp"); requestDispatcher = request.getRequestDispatcher(Controllers.BASIC_JSP); @@ -151,10 +175,74 @@ public class VisualizationRequestHandler { } + private Map getUniqueCoauthorsCountPerYear( + edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisVOContainer coAuthorshipVO) { + Map yearToUniqueCoauthorCount = new TreeMap(); + + Map> yearToUniqueCoauthors = getUniqueCoAuthorsPerYear(coAuthorshipVO); + + for (Entry> currentEntry : yearToUniqueCoauthors.entrySet()) { + + yearToUniqueCoauthorCount.put(currentEntry.getKey(), currentEntry.getValue().size()); + + } + return yearToUniqueCoauthorCount; + } + + private Map> getUniqueCoAuthorsPerYear(edu.cornell.mannlib.vitro.webapp.visualization.coauthorship.VisVOContainer authorNodesAndEdges) { + + Map> yearToCoAuthors = new TreeMap>(); + + Node egoNode = authorNodesAndEdges.getEgoNode(); + + for (Node currNode : authorNodesAndEdges.getNodes()) { + + /* + * We have already printed the Ego Node info. + * */ + if (currNode != egoNode) { + + for (String year : currNode.getYearToPublicationCount().keySet()) { + + Set coAuthorNodes; + + if (yearToCoAuthors.containsKey(year)) { + + coAuthorNodes = yearToCoAuthors.get(year); + coAuthorNodes.add(currNode); + + } else { + + coAuthorNodes = new HashSet(); + coAuthorNodes.add(currNode); + yearToCoAuthors.put(year, coAuthorNodes); + } + + } + + } + } + + + return yearToCoAuthors; + } + private void prepareVisualizationQueryDataResponse(VisVOContainer coAuthorsipVO) { - String outputFileName = UtilityFunctions.slugify(coAuthorsipVO.getEgoNode().getNodeName()) - + "-coauthor-net" + ".graphml"; + String outputFileName = ""; + + if (coAuthorsipVO.getNodes() == null || coAuthorsipVO.getNodes().size() < 1) { + + outputFileName = "no-coauthorship-net" + ".graphml"; + + } else { + + outputFileName = UtilityFunctions.slugify(coAuthorsipVO.getEgoNode().getNodeName()) + + "-coauthor-net" + ".graphml"; + + } + + response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName); @@ -167,7 +255,6 @@ public class VisualizationRequestHandler { * 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()); @@ -181,15 +268,20 @@ public class VisualizationRequestHandler { private void prepareVisualizationQueryStandaloneResponse( String egoURIParam, - edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer sparklineVO, - HttpServletRequest request, + SparklineVOContainer egoPubSparklineVO, + SparklineVOContainer uniqueCoauthorsSparklineVO, String egoPubSparklineVisContainer, String uniqueCoauthorsSparklineVisContainer, HttpServletRequest request, HttpServletResponse response, VitroRequest vreq) { Portal portal = vreq.getPortal(); request.setAttribute("egoURIParam", egoURIParam); - request.setAttribute("sparklineVO", sparklineVO); + + request.setAttribute("egoPubSparklineVO", egoPubSparklineVO); + request.setAttribute("uniqueCoauthorsSparklineVO", uniqueCoauthorsSparklineVO); + + request.setAttribute("egoPubSparklineContainerID", egoPubSparklineVisContainer); + request.setAttribute("uniqueCoauthorsSparklineVisContainerID", uniqueCoauthorsSparklineVisContainer); request.setAttribute("title", "Person Level Visualization"); request.setAttribute("portalBean", portal); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationCodeGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationCodeGenerator.java index 9d7fe327e..64cc397f9 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationCodeGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationCodeGenerator.java @@ -18,6 +18,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationCo import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineVOContainer; public class VisualizationCodeGenerator { @@ -31,7 +32,7 @@ public class VisualizationCodeGenerator { private static final String visualizationStyleClass = "sparkline_style"; - private static final String defaultVisContainerDivID = "vis_container"; + private static final String defaultVisContainerDivID = "pub_count_vis_container"; public static final String SHORT_SPARKLINE_MODE_URL_HANDLE = "short"; @@ -41,7 +42,7 @@ public class VisualizationCodeGenerator { private Log log; - private VisVOContainer valueObjectContainer; + private SparklineVOContainer valueObjectContainer; private String contextPath; @@ -53,7 +54,7 @@ public class VisualizationCodeGenerator { String visContainer, List authorDocuments, Map yearToPublicationCount, - VisVOContainer valueObjectContainer, + SparklineVOContainer valueObjectContainer, Log log) { this.contextPath = contextPath; @@ -179,7 +180,7 @@ public class VisualizationCodeGenerator { visualizationCode.append("\n"; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationRequestHandler.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationRequestHandler.java index 9931f34b5..ee1f056a8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationRequestHandler.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisualizationRequestHandler.java @@ -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.valueobjects.SparklineVOContainer; import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions; public class VisualizationRequestHandler { @@ -110,7 +111,7 @@ public class VisualizationRequestHandler { * Computations required to generate HTML for the sparklines & related context. * */ - VisVOContainer valueObjectContainer = new VisVOContainer(); + SparklineVOContainer valueObjectContainer = new SparklineVOContainer(); VisualizationCodeGenerator visualizationCodeGenerator = new VisualizationCodeGenerator(vitroRequest.getContextPath(), @@ -290,7 +291,7 @@ public class VisualizationRequestHandler { private void prepareVisualizationQueryStandaloneResponse(HttpServletRequest request, HttpServletResponse response, VitroRequest vreq, - VisVOContainer valueObjectContainer) { + SparklineVOContainer valueObjectContainer) { Portal portal = vreq.getPortal(); @@ -304,7 +305,7 @@ public class VisualizationRequestHandler { } private void prepareVisualizationQueryDynamicResponse(HttpServletRequest request, - HttpServletResponse response, VitroRequest vreq, VisVOContainer valueObjectContainer) { + HttpServletResponse response, VitroRequest vreq, SparklineVOContainer valueObjectContainer) { Portal portal = vreq.getPortal(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisVOContainer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/SparklineVOContainer.java similarity index 92% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisVOContainer.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/SparklineVOContainer.java index 254ab5eed..f664c53f7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/VisVOContainer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/SparklineVOContainer.java @@ -1,6 +1,6 @@ -package edu.cornell.mannlib.vitro.webapp.visualization.personpubcount; +package edu.cornell.mannlib.vitro.webapp.visualization.valueobjects; -public class VisVOContainer { +public class SparklineVOContainer { /* * For now sparklineNumPublicationsText & sparklinePublicationRangeText is left diff --git a/webapp/web/templates/visualization/ajax_vis_content.jsp b/webapp/web/templates/visualization/ajax_vis_content.jsp index a04feace8..fff87e618 100644 --- a/webapp/web/templates/visualization/ajax_vis_content.jsp +++ b/webapp/web/templates/visualization/ajax_vis_content.jsp @@ -1,4 +1,4 @@ -<%@ page import="edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer" %> +<%@ page import="edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineVOContainer" %> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> diff --git a/webapp/web/templates/visualization/person_level.jsp b/webapp/web/templates/visualization/person_level.jsp index 294ce64d4..3c94f1e10 100644 --- a/webapp/web/templates/visualization/person_level.jsp +++ b/webapp/web/templates/visualization/person_level.jsp @@ -1,4 +1,4 @@ -<%@ page import="edu.cornell.mannlib.vitro.webapp.visualization.personpubcount.VisVOContainer"%> +<%@ page import="edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineVOContainer"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> @@ -7,7 +7,11 @@ - + + + + + @@ -37,6 +41,11 @@ font-weight: bold; } +.neutral_author_name { + color: black; + font-weight: bold; +} + .author_moniker { color: #9C9C9C; } @@ -114,12 +123,15 @@ <%-- Sparkline --%>

General Statistics

-
- ${sparkline.sparklineContent} +
+ ${egoPubSparkline.sparklineContent}
+
+ ${uniqueCoauthorsSparkline.sparklineContent} +
-

Ego-Centric Co-Author Network (.GraphML File)

+

Co-Author Network (.GraphML File)

@@ -129,7 +141,7 @@

-
+