From 3b8ac290a7c435a3aa13e4c852acb5cf440ec7ad Mon Sep 17 00:00:00 2001 From: cdtank Date: Wed, 12 Jan 2011 19:29:03 +0000 Subject: [PATCH] 1. Attempting to delete old visualization back-end & front-end --- .../PersonPublicationCountQueryRunner.java | 220 ------ .../PersonPublicationCountRequestHandler.java | 370 ---------- ...ersonPublicationCountVisCodeGenerator.java | 689 ------------------ 3 files changed, 1279 deletions(-) delete mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountQueryRunner.java delete mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java delete mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountVisCodeGenerator.java diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountQueryRunner.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountQueryRunner.java deleted file mode 100644 index 661b3c35..00000000 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountQueryRunner.java +++ /dev/null @@ -1,220 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.visualization.personpubcount; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; - -import com.hp.hpl.jena.iri.IRI; -import com.hp.hpl.jena.iri.IRIFactory; -import com.hp.hpl.jena.iri.Violation; -import com.hp.hpl.jena.query.DataSource; -import com.hp.hpl.jena.query.Query; -import com.hp.hpl.jena.query.QueryExecution; -import com.hp.hpl.jena.query.QueryExecutionFactory; -import com.hp.hpl.jena.query.QueryFactory; -import com.hp.hpl.jena.query.QuerySolution; -import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.query.Syntax; -import com.hp.hpl.jena.rdf.model.RDFNode; - -import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants; -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.valueobjects.BiboDocument; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Individual; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.QueryRunner; - - - -/** - * This query runner is used to execute a sparql query that will fetch all the publications - * defined by bibo:Document property for a particular individual. - * - * @author cdtank - */ -public class PersonPublicationCountQueryRunner implements QueryRunner> { - - protected static final Syntax SYNTAX = Syntax.syntaxARQ; - - private String personURI; - private DataSource dataSource; - - private Individual author; - - public Individual getAuthor() { - return author; - } - - private Log log; - - private static final String SPARQL_QUERY_COMMON_SELECT_CLAUSE = "" - + "SELECT (str(?authorLabel) as ?authorLabelLit) " - + " (str(?document) as ?documentLit) " - + " (str(?documentMoniker) as ?documentMonikerLit) " - + " (str(?documentLabel) as ?documentLabelLit) " - + " (str(?documentBlurb) as ?documentBlurbLit) " - + " (str(?publicationYear) as ?publicationYearLit) " - + " (str(?publicationYearMonth) as ?publicationYearMonthLit) " - + " (str(?publicationDate) as ?publicationDateLit) " - + " (str(?documentDescription) as ?documentDescriptionLit) "; - - private static final String SPARQL_QUERY_COMMON_WHERE_CLAUSE = "" - + "?document rdfs:label ?documentLabel ." - + "OPTIONAL { ?document core:year ?publicationYear } ." - + "OPTIONAL { ?document core:yearMonth ?publicationYearMonth } ." - + "OPTIONAL { ?document core:date ?publicationDate } ." - + "OPTIONAL { ?document vitro:moniker ?documentMoniker } ." - + "OPTIONAL { ?document vitro:blurb ?documentBlurb } ." - + "OPTIONAL { ?document vitro:description ?documentDescription }"; - - public PersonPublicationCountQueryRunner(String personURI, - DataSource dataSource, Log log) { - - this.personURI = personURI; - this.dataSource = dataSource; - this.log = log; - - } - - private Set createJavaValueObjects(ResultSet resultSet) { - Set authorDocuments = new HashSet(); - - while (resultSet.hasNext()) { - QuerySolution solution = resultSet.nextSolution(); - - BiboDocument biboDocument = new BiboDocument( - solution.get(QueryFieldLabels.DOCUMENT_URL) - .toString()); - - RDFNode documentLabelNode = solution.get(QueryFieldLabels.DOCUMENT_LABEL); - if (documentLabelNode != null) { - biboDocument.setDocumentLabel(documentLabelNode.toString()); - } - - - RDFNode documentBlurbNode = solution.get(QueryFieldLabels.DOCUMENT_BLURB); - if (documentBlurbNode != null) { - biboDocument.setDocumentBlurb(documentBlurbNode.toString()); - } - - RDFNode documentmonikerNode = solution.get(QueryFieldLabels.DOCUMENT_MONIKER); - if (documentmonikerNode != null) { - biboDocument.setDocumentMoniker(documentmonikerNode.toString()); - } - - RDFNode documentDescriptionNode = solution.get(QueryFieldLabels.DOCUMENT_DESCRIPTION); - if (documentDescriptionNode != null) { - biboDocument.setDocumentDescription(documentDescriptionNode.toString()); - } - - RDFNode publicationYearNode = solution.get(QueryFieldLabels.DOCUMENT_PUBLICATION_YEAR); - if (publicationYearNode != null) { - biboDocument.setPublicationYear(publicationYearNode.toString()); - } - - RDFNode publicationYearMonthNode = solution.get( - QueryFieldLabels - .DOCUMENT_PUBLICATION_YEAR_MONTH); - if (publicationYearMonthNode != null) { - biboDocument.setPublicationYearMonth(publicationYearMonthNode.toString()); - } - - RDFNode publicationDateNode = solution.get(QueryFieldLabels.DOCUMENT_PUBLICATION_DATE); - if (publicationDateNode != null) { - biboDocument.setPublicationDate(publicationDateNode.toString()); - } - - /* - * Since we are getting publication count for just one author at a time we need - * to create only one "Individual" instance. We test against the null for "author" to - * make sure that it has not already been instantiated. - * */ - RDFNode authorURLNode = solution.get(QueryFieldLabels.AUTHOR_URL); - if (authorURLNode != null && author == null) { - author = new Individual(authorURLNode.toString()); - RDFNode authorLabelNode = solution.get(QueryFieldLabels.AUTHOR_LABEL); - if (authorLabelNode != null) { - author.setIndividualLabel(authorLabelNode.toString()); - } - } - - authorDocuments.add(biboDocument); - } - return authorDocuments; - } - - private ResultSet executeQuery(String queryURI, - DataSource dataSource) { - - QueryExecution queryExecution = null; -// try { - Query query = QueryFactory.create(getSparqlQuery(queryURI), SYNTAX); - -// QuerySolutionMap qs = new QuerySolutionMap(); -// qs.add("authPerson", queryParam); // bind resource to s - - queryExecution = QueryExecutionFactory.create(query, dataSource); - - -// if (query.isSelectType()) { - return queryExecution.execSelect(); -// } -// } finally { -// if (queryExecution != null) { -// queryExecution.close(); -// } -// } -// return null; - } - - private String getSparqlQuery(String queryURI) { -// Resource uri1 = ResourceFactory.createResource(queryURI); - - String sparqlQuery = QueryConstants.getSparqlPrefixQuery() - + SPARQL_QUERY_COMMON_SELECT_CLAUSE - + "(str(<" + queryURI + ">) as ?authPersonLit) " - + "WHERE { " - + "<" + queryURI + "> rdf:type foaf:Person ;" - + " rdfs:label ?authorLabel ;" - + " core:authorInAuthorship ?authorshipNode . " - + " ?authorshipNode rdf:type core:Authorship ;" - + " core:linkedInformationResource ?document . " - + SPARQL_QUERY_COMMON_WHERE_CLAUSE - + "}"; - - log.debug("SPARQL query for person pub count -> \n" + sparqlQuery); - return sparqlQuery; - } - - public Set getQueryResult() - throws MalformedQueryParametersException { - - if (StringUtils.isNotBlank(this.personURI)) { - - /* - * To test for the validity of the URI submitted. - * */ - IRIFactory iRIFactory = IRIFactory.jenaImplementation(); - IRI iri = iRIFactory.create(this.personURI); - if (iri.hasViolation(false)) { - String errorMsg = ((Violation) iri.violations(false).next()).getShortMessage(); - log.error("Pub Count vis Query " + errorMsg); - throw new MalformedQueryParametersException( - "URI provided for an individual is malformed."); - } - - } else { - throw new MalformedQueryParametersException("URL parameter is either null or empty."); - } - - ResultSet resultSet = executeQuery(this.personURI, - this.dataSource); - - return createJavaValueObjects(resultSet); - } - -} diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java deleted file mode 100644 index c3e773da..00000000 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java +++ /dev/null @@ -1,370 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.visualization.personpubcount; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.skife.csv.CSVWriter; -import org.skife.csv.SimpleWriter; - -import com.hp.hpl.jena.query.DataSource; -import com.itextpdf.text.Document; -import com.itextpdf.text.DocumentException; -import com.itextpdf.text.pdf.PdfWriter; - -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.VisualizationFrameworkConstants; -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.SparklineData; -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.visutils.UtilityFunctions; -import edu.cornell.mannlib.vitro.webapp.visualization.visutils.VisualizationRequestHandler; - -/** - * - * This request handler is used to serve the content related to an individual's - * publications over the years like, - * 1. Sprakline representing this - * 2. An entire page dedicated to the sparkline vis which will also have links to - * download the data using which the sparkline was rendered & its tabular representation etc. - * 3. Downloadable CSV file containing number of publications over the years. - * 4. Downloadable PDf file containing the publications content, among other things. - * Currently this is disabled because the feature is half-baked. We plan to activate this in - * the next major release. - * - * @author cdtank - */ -public class PersonPublicationCountRequestHandler implements VisualizationRequestHandler { - - public void generateVisualization(VitroRequest vitroRequest, - HttpServletRequest request, - HttpServletResponse response, - Log log, - DataSource dataSource) { - - String peronURI = vitroRequest.getParameter( - VisualizationFrameworkConstants - .INDIVIDUAL_URI_KEY); - - String renderMode = vitroRequest.getParameter( - VisualizationFrameworkConstants - .RENDER_MODE_KEY); - - String visMode = vitroRequest.getParameter( - VisualizationFrameworkConstants - .VIS_MODE_KEY); - - String visContainer = vitroRequest.getParameter( - VisualizationFrameworkConstants - .VIS_CONTAINER_KEY); - - QueryRunner> queryManager = - new PersonPublicationCountQueryRunner(peronURI, dataSource, log); - - try { - Set authorDocuments = queryManager.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); - - Individual author = ((PersonPublicationCountQueryRunner) queryManager).getAuthor(); - - if (VisualizationFrameworkConstants.DATA_RENDER_MODE - .equalsIgnoreCase(renderMode)) { - - prepareDataResponse(author, - authorDocuments, - yearToPublicationCount, - response); - return; - } - - - /* - * For now we are disabling the capability to render pdf file. - * */ - /* - if (VisualizationFrameworkConstants.PDF_RENDER_MODE - .equalsIgnoreCase(renderMode)) { - - preparePDFResponse(author, - authorDocuments, - yearToPublicationCount, - response); - return; - } - */ - - /* - * Computations required to generate HTML for the sparkline & related context. - * */ - PersonPublicationCountVisCodeGenerator visualizationCodeGenerator = - new PersonPublicationCountVisCodeGenerator(vitroRequest.getContextPath(), - peronURI, - visMode, - visContainer, - authorDocuments, - yearToPublicationCount, - log); - - SparklineData sparklineData = visualizationCodeGenerator - .getValueObjectContainer(); - - /* - * This is side-effecting because the response of this method is just to redirect to - * a page with visualization on it. - * */ - RequestDispatcher requestDispatcher = null; - - if (VisualizationFrameworkConstants.DYNAMIC_RENDER_MODE - .equalsIgnoreCase(renderMode)) { - - prepareDynamicResponse(request, - response, - vitroRequest, - sparklineData, - yearToPublicationCount); - requestDispatcher = request.getRequestDispatcher("/templates/page/blankPage.jsp"); - - } else { - prepareStandaloneResponse(request, - response, - vitroRequest, - sparklineData); - requestDispatcher = request.getRequestDispatcher(Controllers.BASIC_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 { - UtilityFunctions.handleMalformedParameters( - e.getMessage(), - "Visualization Query Error - Individual Publication Count", - vitroRequest, - request, - response, - log); - } catch (ServletException e1) { - log.error(e1.getStackTrace()); - } catch (IOException e1) { - log.error(e1.getStackTrace()); - } - return; - } - } - - private void writePublicationsOverTimeCSV(Map yearToPublicationCount, - PrintWriter responseWriter) { - - CSVWriter csvWriter = new SimpleWriter(responseWriter); - - try { - csvWriter.append(new String[]{"Year", "Publications"}); - for (Entry currentEntry : yearToPublicationCount.entrySet()) { - csvWriter.append(new Object[]{currentEntry.getKey(), currentEntry.getValue()}); - } - } catch (IOException e) { - e.printStackTrace(); - } - - responseWriter.flush(); - - } - - /** - * Provides response when csv file containing the publication count over the years - * is requested. - * @param author - * @param authorDocuments - * @param yearToPublicationCount - * @param response - */ - private void prepareDataResponse( - Individual author, - Set authorDocuments, - Map yearToPublicationCount, - HttpServletResponse response) { - - String authorName = null; - - /* - * To protect against cases where there are no author documents associated with the - * individual. - * */ - if (authorDocuments.size() > 0) { - authorName = author.getIndividualLabel(); - } - - /* - * To make sure that null/empty records for author names do not cause any mischief. - * */ - if (StringUtils.isBlank(authorName)) { - authorName = "no-author"; - } - - String outputFileName = UtilityFunctions.slugify(authorName) - + "_publications-per-year" + ".csv"; - - 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. - * */ - writePublicationsOverTimeCSV(yearToPublicationCount, responseWriter); - - responseWriter.close(); - - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Provides response when an entire page dedicated to publication sparkline is requested. - * @param request - * @param response - * @param vreq - * @param valueObjectContainer - */ - private void prepareStandaloneResponse(HttpServletRequest request, - HttpServletResponse response, VitroRequest vreq, - SparklineData valueObjectContainer) { - - Portal portal = vreq.getPortal(); - - request.setAttribute("sparklineVO", valueObjectContainer); - - request.setAttribute("bodyJsp", "/templates/visualization/publication_count.jsp"); - request.setAttribute("portalBean", portal); - request.setAttribute("title", "Individual Publication Count visualization"); - request.setAttribute("scripts", "/templates/visualization/visualization_scripts.jsp"); - - } - - /** - * Provides response when the publication sparkline has to be rendered in already existing - * page, e.g. profile page. - * @param request - * @param response - * @param vreq - * @param valueObjectContainer - * @param yearToPublicationCount - */ - private void prepareDynamicResponse( - HttpServletRequest request, - HttpServletResponse response, - VitroRequest vreq, - SparklineData valueObjectContainer, - Map yearToPublicationCount) { - - Portal portal = vreq.getPortal(); - - request.setAttribute("sparklineVO", valueObjectContainer); - - if (yearToPublicationCount.size() > 0) { - request.setAttribute("shouldVIVOrenderVis", true); - } else { - request.setAttribute("shouldVIVOrenderVis", false); - } - - request.setAttribute("portalBean", portal); - request.setAttribute("bodyJsp", "/templates/visualization/ajax_vis_content.jsp"); - } - - private void preparePDFResponse( - Individual author, - Set authorDocuments, - Map yearToPublicationCount, - HttpServletResponse response) { - - String authorName = null; - - /* - * To protect against cases where there are no author documents associated with the - * individual. - * */ - if (authorDocuments.size() > 0) { - authorName = author.getIndividualLabel(); - } - - /* - * To make sure that null/empty records for author names do not cause any mischief. - * */ - if (StringUtils.isBlank(authorName)) { - authorName = "no-author"; - } - - String outputFileName = UtilityFunctions.slugify(authorName) + "_report" + ".pdf"; - - response.setContentType("application/pdf"); - response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName); - - ServletOutputStream responseOutputStream; - try { - responseOutputStream = response.getOutputStream(); - - - Document document = new Document(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - PdfWriter pdfWriter = PdfWriter.getInstance(document, baos); - document.open(); - - PDFDocument pdfDocument = new PDFDocument(authorName, - yearToPublicationCount, - document, - pdfWriter); - - document.close(); - - // setting some response headers & content type - response.setHeader("Expires", "0"); - response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); - response.setHeader("Pragma", "public"); - response.setContentLength(baos.size()); - // write ByteArrayOutputStream to the ServletOutputStream - baos.writeTo(responseOutputStream); - responseOutputStream.flush(); - responseOutputStream.close(); - - } catch (IOException e) { - e.printStackTrace(); - } catch (DocumentException e) { - e.printStackTrace(); - } - } -} diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountVisCodeGenerator.java deleted file mode 100644 index 78d50c4f..00000000 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountVisCodeGenerator.java +++ /dev/null @@ -1,689 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.visualization.personpubcount; - -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.constants.VisConstants; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.BiboDocument; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SparklineData; - - - -@SuppressWarnings("serial") -public class PersonPublicationCountVisCodeGenerator { - - /* - * There are 2 modes of sparkline that are available via this visualization. - * 1. Short Sparkline - This sparkline will render all the data points (or sparks), - * which in this case are the publications over the years, from the last 10 years. - * - * 2. Full Sparkline - This sparkline will render all the data points (or sparks) - * spanning the career of the person & last 10 years at the minimum, in case if - * the person started his career in the last 10 yeras. - * */ - private static final Map VIS_DIV_NAMES = new HashMap() { { - - put("SHORT_SPARK", "pub_count_short_sparkline_vis"); - put("FULL_SPARK", "pub_count_full_sparkline_vis"); - - } }; - - private static final String VISUALIZATION_STYLE_CLASS = "sparkline_style"; - - private static final String DEFAULT_VIS_CONTAINER_DIV_ID = "pub_count_vis_container"; - - private Map yearToPublicationCount; - - private Log log; - - private SparklineData sparklineData; - - private String contextPath; - - private String individualURI; - - public PersonPublicationCountVisCodeGenerator(String contextPath, - String individualURIParam, - String visMode, - String visContainer, - Set authorDocuments, - Map yearToPublicationCount, - Log log) { - - this.contextPath = contextPath; - this.individualURI = individualURIParam; - - this.yearToPublicationCount = yearToPublicationCount; - this.sparklineData = new SparklineData(); - - this.log = log; - - generateVisualizationCode(visMode, visContainer, authorDocuments); - } - - /** - * This method is used to generate the visualization code (HMTL, CSS & JavaScript). - * There 2 parts to it - 1. Actual Content Code & 2. Context Code. - * 1. Actual Content code in this case is the sparkline image, text related to - * data and the wrapping tables. This is generated via call to google vis API through - * JavaScript. - * 2. Context code is generally optional but contains code pertaining to tabulated - * data & links to download files etc. - * @param visMode - * @param visContainer - * @param authorDocuments - */ - private void generateVisualizationCode(String visMode, - String visContainer, - Set authorDocuments) { - - sparklineData.setSparklineContent(getMainVisualizationCode(authorDocuments, - visMode, - visContainer)); - - - sparklineData.setSparklineContext(getVisualizationContextCode(visMode)); - - } - - private String getMainVisualizationCode(Set authorDocuments, - String visMode, - String providedVisContainerID) { - - int numOfYearsToBeRendered = 0; - int currentYear = Calendar.getInstance().get(Calendar.YEAR); - int shortSparkMinYear = currentYear - - VisConstants.MINIMUM_YEARS_CONSIDERED_FOR_SPARKLINE - + 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(yearToPublicationCount.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(); - - if (yearToPublicationCount.size() > 0) { - try { - minPublishedYear = Integer.parseInt(Collections.min(publishedYears)); - } catch (NoSuchElementException e1) { - log.debug("vis: " + e1.getMessage() + " error occurred for " - + yearToPublicationCount.toString()); - } catch (NumberFormatException e2) { - log.debug("vis: " + e2.getMessage() + " error occurred for " - + yearToPublicationCount.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"); - - visualizationCode.append("\n"; - } - - private String getVisualizationContextCode(String visMode) { - - String visualizationContextCode = ""; - if (VisualizationFrameworkConstants.SHORT_SPARKLINE_VIS_MODE.equalsIgnoreCase(visMode)) { - visualizationContextCode = generateShortVisContext(); - } else { - visualizationContextCode = generateFullVisContext(); - } - - log.debug(visualizationContextCode); - - return visualizationContextCode; - } - - private String generateFullVisContext() { - - StringBuilder divContextCode = new StringBuilder(); - - String csvDownloadURLHref = ""; - - if (yearToPublicationCount.size() > 0) { - - try { - if (getCSVDownloadURL() != null) { - - csvDownloadURLHref = "Download data as .csv file.
"; - sparklineData.setDownloadDataLink(getCSVDownloadURL()); - - } else { - csvDownloadURLHref = ""; - } - - } catch (UnsupportedEncodingException e) { - csvDownloadURLHref = ""; - } - } else { - csvDownloadURLHref = "No data available to export.
"; - } - - String tableCode = generateDataTable(); - - divContextCode.append("

" + tableCode + csvDownloadURLHref + "

"); - - sparklineData.setTable(tableCode); - - return divContextCode.toString(); - } - - private String getCSVDownloadURL() - throws UnsupportedEncodingException { - - if (yearToPublicationCount.size() > 0) { - - String secondaryContextPath = ""; - if (!contextPath.contains(VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX)) { - secondaryContextPath = VisualizationFrameworkConstants.VISUALIZATION_URL_PREFIX; - } - - String downloadURL = contextPath - + secondaryContextPath - + "?" + VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY - + "=" + URLEncoder.encode(individualURI, - VisualizationController.URL_ENCODING_SCHEME) - .toString() - + "&" + VisualizationFrameworkConstants.VIS_TYPE_KEY - + "=" + URLEncoder.encode( - VisualizationFrameworkConstants - .PERSON_PUBLICATION_COUNT_VIS, - VisualizationController.URL_ENCODING_SCHEME) - .toString() - + "&" + VisualizationFrameworkConstants.RENDER_MODE_KEY - + "=" + URLEncoder.encode(VisualizationFrameworkConstants - .DATA_RENDER_MODE, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.VIS_MODE_KEY - + "=" + URLEncoder.encode("coauthorship", - VisualizationController.URL_ENCODING_SCHEME).toString(); - return downloadURL; - } else { - return null; - } - } - - private String generateShortVisContext() { - - StringBuilder divContextCode = new StringBuilder(); - - try { - - String fullTimelineLink, fullTimelineCoPILink; - if (yearToPublicationCount.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.RENDER_MODE_KEY - + "=" + URLEncoder.encode(VisualizationFrameworkConstants - .STANDALONE_RENDER_MODE, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.VIS_MODE_KEY - + "=" + URLEncoder.encode("coauthorship", - VisualizationController.URL_ENCODING_SCHEME).toString(); - - fullTimelineLink = "View all VIVO " - + "publications and corresponding co-author network."; - - sparklineData.setFullTimelineNetworkLink(fullTimelineNetworkURL); - - String fullTimelineCoPINetworkURL = 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.RENDER_MODE_KEY - + "=" + URLEncoder.encode(VisualizationFrameworkConstants - .STANDALONE_RENDER_MODE, - VisualizationController.URL_ENCODING_SCHEME).toString() - + "&" - + VisualizationFrameworkConstants.VIS_MODE_KEY - + "=" + URLEncoder.encode("copi", - VisualizationController.URL_ENCODING_SCHEME).toString(); - - fullTimelineCoPILink = "View all " - + "grants and corresponding co-pi network."; - - sparklineData.setFullTimelineCoPINetworkLink(fullTimelineCoPINetworkURL); - - } else { - fullTimelineLink = "No data available to render full timeline.
"; - fullTimelineCoPILink = "No data available to render full timeline.
"; - - } - - divContextCode.append("" + fullTimelineLink + ""); - divContextCode.append("

" + fullTimelineCoPILink + ""); - - } catch (UnsupportedEncodingException e) { - log.error(e); - } - return divContextCode.toString(); - } - - private String generateDataTable() { - - String csvDownloadURLHref = ""; - - try { - if (getCSVDownloadURL() != null) { - csvDownloadURLHref = "(.CSV File)"; - } else { - csvDownloadURLHref = ""; - } - } catch (UnsupportedEncodingException e) { - csvDownloadURLHref = ""; - } - - StringBuilder dataTable = new StringBuilder(); - - dataTable.append("" - + "" - + "" - + "" - + "" - + "" - + "" - + "" - + ""); - - for (Entry currentEntry : yearToPublicationCount.entrySet()) { - dataTable.append("" - + "" - + "" - + ""); - } - - dataTable.append("\n
Publications per year " + csvDownloadURLHref + "
YearPublications
" + currentEntry.getKey() + "" + currentEntry.getValue() + "
\n"); - - return dataTable.toString(); - } - - public SparklineData getValueObjectContainer() { - return sparklineData; - } -}