From dea26c95278d11ff2e6181da7768b1086edbc3fe Mon Sep 17 00:00:00 2001
From: cdtank
Date: Wed, 12 Jan 2011 17:18:16 +0000
Subject: [PATCH] 1. Cleaned up paths in the freemarker templates to not refer
old visualization urls. 2. Changed web.xml url-pattern mapping from old
visualization servlet TO freemarkerized version. 3. Updated style for
temporal graph vis. 4. Changed freemarkerized code snippets to not refer old
visualization servlets.
---
productMods/WEB-INF/web.xml | 26 ++
.../visualization/entitycomparison/layout.css | 4 +
.../visualization/dummyVisClient.ftl | 9 +-
.../freemarker/visualization/grantCount.ftl | 7 -
.../visualization/grantSparklineContent.ftl | 238 --------------
.../utilities/UtilitiesRequestHandler.java | 2 +-
.../visutils/AllPropertiesQueryRunner.java | 2 +-
.../freemarker/visutils/PDFDocument.java | 297 ++++++++++++++++++
8 files changed, 330 insertions(+), 255 deletions(-)
delete mode 100644 productMods/templates/freemarker/visualization/grantCount.ftl
delete mode 100644 productMods/templates/freemarker/visualization/grantSparklineContent.ftl
create mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/PDFDocument.java
diff --git a/productMods/WEB-INF/web.xml b/productMods/WEB-INF/web.xml
index b28b9411..d1c097e6 100644
--- a/productMods/WEB-INF/web.xml
+++ b/productMods/WEB-INF/web.xml
@@ -1273,6 +1273,9 @@
/admin/sparqlquery
+
+
+
DummyVisClientFM
@@ -1292,16 +1298,31 @@
DummyVisClientFM
/admin/dummyVisClientfm
+
+
+
+ DummyVisClientFM
+ /admin/dummyVisClient
+
+
+
StandardVisualizationController
@@ -1313,6 +1334,11 @@
/visualizationfm
+
+ StandardVisualizationController
+ /visualization
+
+
AjaxVisualizationController
edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.AjaxVisualizationController
diff --git a/productMods/css/visualization/entitycomparison/layout.css b/productMods/css/visualization/entitycomparison/layout.css
index 15bc301c..8d5ea50b 100644
--- a/productMods/css/visualization/entitycomparison/layout.css
+++ b/productMods/css/visualization/entitycomparison/layout.css
@@ -187,6 +187,10 @@ li{
background-color: #ECFFB3 !important;
}
+.datatablerowhighlight td {
+ font-weight: bold !important;
+}
+
/*
.metallic{
background-color: #212D34;
diff --git a/productMods/templates/freemarker/visualization/dummyVisClient.ftl b/productMods/templates/freemarker/visualization/dummyVisClient.ftl
index ba8925ee..a31dcd73 100644
--- a/productMods/templates/freemarker/visualization/dummyVisClient.ftl
+++ b/productMods/templates/freemarker/visualization/dummyVisClient.ftl
@@ -12,7 +12,7 @@ ${urls.base}
<#assign loadingImageLink = '/${themeDir}site_icons/visualization/ajax-loader.gif'>
<#assign uri="http://vivo-trunk.indiana.edu/individual/n6079">
-<#assign testURL = '${urls.base}/visualization?vis=person_pub_count&container=ajax_recipient&render_mode=dynamic&vis_mode=wth&uri=${uri?url}'>
+<#assign testURL = '${urls.base}/visualizationfm?vis=person_pub_count&container=ajax_recipient&render_mode=dynamic&vis_mode=wth&uri=${uri?url}'>
-
-
-
-
-<#if sparklineVO.shortVisMode>
-
-
- View all grants and corresponding co-pi network.
-
-
-
-<#else>
-
-
-
-
-
- Grants per year (.CSV File)
-
-
-
-
- Year
- |
-
- Grants
- |
-
-
-
-
- <#list sparklineVO.yearToActivityCount?keys as year>
-
-
- ${year}
- |
-
- ${sparklineVO.yearToActivityCount[year]}
- |
-
- #list>
-
-
-
- Download data as .csv file.
-
-
-
-#if>
-
-
\ No newline at end of file
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 7311d25d..1012c097 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
@@ -25,7 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.AllPro
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.GenericQueryRunner;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler;
-import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.GenericQueryMap;
+import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.GenericQueryMap;
/**
* This request handler is used when you need helpful information to add more context
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/AllPropertiesQueryRunner.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/AllPropertiesQueryRunner.java
index fa5f8be5..523c1084 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/AllPropertiesQueryRunner.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/AllPropertiesQueryRunner.java
@@ -21,7 +21,7 @@ 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.GenericQueryMap;
+import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.GenericQueryMap;
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/PDFDocument.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/PDFDocument.java
new file mode 100644
index 00000000..9a687849
--- /dev/null
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/PDFDocument.java
@@ -0,0 +1,297 @@
+/* $This file is distributed under the terms of the license in /doc/license.txt$ */
+
+package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Stroke;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import com.itextpdf.text.BadElementException;
+import com.itextpdf.text.BaseColor;
+import com.itextpdf.text.Chunk;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.DocumentException;
+import com.itextpdf.text.Element;
+import com.itextpdf.text.Font;
+import com.itextpdf.text.FontFactory;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.Paragraph;
+import com.itextpdf.text.Phrase;
+import com.itextpdf.text.pdf.ColumnText;
+import com.itextpdf.text.pdf.PdfContentByte;
+import com.itextpdf.text.pdf.PdfGState;
+import com.itextpdf.text.pdf.PdfPCell;
+import com.itextpdf.text.pdf.PdfPTable;
+import com.itextpdf.text.pdf.PdfWriter;
+
+public class PDFDocument {
+
+
+ static Stroke stroke = new BasicStroke(5.f, BasicStroke.CAP_ROUND,
+ BasicStroke.JOIN_ROUND);
+
+ final static Color bg = Color.green;
+
+ final static Color fg = Color.black;
+
+ public PDFDocument(String authorName,
+ Map yearToPublicationCount,
+ Document document,
+ PdfWriter pdfWriter) {
+
+// setPreferredSize(new Dimension(600,400));
+
+ try {
+
+ document.addTitle("PDF Pipeline iText Prototype");
+ document.addAuthor(authorName);
+ document.addSubject("This example tests text, color, image, transparency & table functionality.");
+ document.addKeywords("text, color, image, transparency, table");
+ document.addCreator("Standalone PDF Renderer using iText");
+
+ Paragraph header = new Paragraph();
+
+ Font pageHeaderStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 15, Font.BOLDITALIC | Font.UNDERLINE);
+ Font featureHeaderStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 10, new BaseColor(Color.red));
+
+ header.add(new Chunk("PDF Pipeline Prototype v2 using iText\n",
+ pageHeaderStyle));
+
+ header.setSpacingAfter(15f);
+
+
+ document.add(header);
+
+
+ Paragraph content = new Paragraph();
+
+ content.add(new Chunk("Publication Count - Author Name - " + authorName,
+ featureHeaderStyle));
+
+ content.setSpacingAfter(15f);
+
+ document.add(content);
+ // step4
+
+ PdfPTable publicationCount = createTable(yearToPublicationCount);
+
+ document.add(publicationCount);
+
+ content = new Paragraph();
+
+ content.add(new Chunk("Transparency of Shapes",
+ featureHeaderStyle));
+
+ content.setSpacingAfter(15f);
+
+ document.add(content);
+
+ createTransparencyShapes(document, pdfWriter);
+
+
+ createImage(document, pdfWriter, featureHeaderStyle);
+
+ } catch (DocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+
+ private void createImage(Document document, PdfWriter writer,
+ Font featureHeaderStyle) throws BadElementException,
+ MalformedURLException, IOException, DocumentException {
+ Image imageSprite = Image.getInstance(new URL("http://lh3.ggpht.com/_4msVPAgKJv8/SCRYD-pPVKI/AAAAAAAAAYU/zUN963EPoZc/s1024/102_0609.JPG"));
+ imageSprite.setAbsolutePosition(400, 500);
+ imageSprite.scaleAbsolute(171.0f, 250.0f);
+ float imageSpriteY = document.getPageSize().getHeight() * 0.60f;
+ float imageSpriteX = document.getPageSize().getWidth() * 0.65f;
+ imageSprite.setAlignment(Image.UNDERLYING);
+
+ document.add(imageSprite);
+
+ PdfContentByte cb = writer.getDirectContent();
+ ColumnText ct = new ColumnText(cb);
+ Chunk imageHeader = new Chunk("Images",
+ featureHeaderStyle);
+ ct.addText(imageHeader);
+ ct.setAlignment(Element.ALIGN_LEFT);
+ ct.setSimpleColumn(imageSpriteX, imageSpriteY - imageSprite.getScaledHeight(),
+ imageSpriteX + imageSprite.getScaledWidth(), imageSpriteY + imageSprite.getScaledHeight() + 20);
+ ct.go();
+
+ ct = new ColumnText(cb);
+ Chunk imageFooter = new Chunk("Footer to be set for a figure. Similar to 'image cpation'.",
+ FontFactory.getFont(FontFactory.TIMES_ROMAN, 8));
+ ct.addText(imageFooter);
+ ct.setAlignment(Element.ALIGN_CENTER);
+ ct.setSimpleColumn(imageSpriteX, imageSpriteY - 150, imageSpriteX + imageSprite.getScaledWidth(), imageSpriteY);
+ ct.go();
+ }
+
+ private void createTransparencyShapes(Document document,
+ PdfWriter writer) throws Exception {
+ PdfContentByte cb = writer.getDirectContent();
+
+ pictureBackdrop(document.leftMargin(), 350, cb);
+ cb.saveState();
+ PdfGState gs1 = new PdfGState();
+ gs1.setFillOpacity(0.5f);
+ cb.setGState(gs1);
+ pictureCircles(document.leftMargin(), 350, cb);
+ cb.restoreState();
+
+ cb.resetRGBColorFill();
+ }
+
+ /**
+ * Prints a square and fills half of it with a gray rectangle.
+ * @param x
+ * @param y
+ * @param cb
+ * @throws Exception
+ */
+ public void pictureBackdrop(float x, float y, PdfContentByte cb) throws Exception {
+ cb.setColorStroke(new BaseColor(Color.black));
+ cb.setColorFill(new BaseColor(Color.gray));
+ cb.rectangle(x, y, 100, 200);
+ cb.fill();
+ cb.setLineWidth(2);
+ cb.rectangle(x, y, 200, 200);
+ cb.stroke();
+ }
+
+ /**
+ * Prints 3 circles in different colors that intersect with eachother.
+ * @param x
+ * @param y
+ * @param cb
+ * @throws Exception
+ */
+ public void pictureCircles(float x, float y, PdfContentByte cb) throws Exception {
+
+ cb.saveState();
+ PdfGState gs1 = new PdfGState();
+ gs1.setFillOpacity(1.0f);
+ cb.setGState(gs1);
+ cb.setColorFill(new BaseColor(Color.red));
+ cb.circle(x + 70, y + 70, 50);
+ cb.fill();
+ cb.restoreState();
+
+ cb.setColorFill(new BaseColor(Color.yellow));
+ cb.circle(x + 100, y + 130, 50);
+ cb.fill();
+ cb.setColorFill(new BaseColor(Color.blue));
+ cb.circle(x + 130, y + 70, 50);
+ cb.fill();
+ }
+
+ private PdfPTable createTable(Map yearToPublicationCount) {
+
+ Font normalContentStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 11);
+ Font summaryContentStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.BOLDITALIC);
+ BaseColor summaryBackgroundColor = new BaseColor(0xEE, 0xEE, 0xEE);
+ BaseColor headerBackgroundColor = new BaseColor(0xC3, 0xD9, 0xFF);
+ BaseColor bodyBackgroundColor = new BaseColor(Color.white);
+
+ PdfPTable table = new PdfPTable(2);
+ table.setWidthPercentage(36.0f);
+
+ table.setHorizontalAlignment(Element.ALIGN_LEFT);
+ table.getDefaultCell().setBorderWidth(0.0f);
+ table.setHeaderRows(2);
+
+ PdfPCell cell;
+ cell = new PdfPCell(new Phrase("Publications per year", normalContentStyle));
+ setTableCaptionStyle(summaryBackgroundColor, cell);
+ table.addCell(cell);
+
+ cell = new PdfPCell(new Phrase("Year", normalContentStyle));
+ setTableHeaderStyle(headerBackgroundColor, cell);
+ table.addCell(cell);
+
+ cell.setPhrase(new Phrase("Publications", normalContentStyle));
+ table.addCell(cell);
+
+
+
+ setTableBodyStyle(bodyBackgroundColor, cell);
+ int totalPublications = 0;
+
+ for (Entry currentEntry : yearToPublicationCount.entrySet()) {
+
+ cell.setPhrase(new Phrase(currentEntry.getKey(), normalContentStyle));
+ table.addCell(cell);
+
+ cell.setPhrase(new Phrase(currentEntry.getValue().toString(), normalContentStyle));
+ table.addCell(cell);
+
+ totalPublications += currentEntry.getValue();
+ }
+
+ setTableFooterStyle(summaryBackgroundColor, cell);
+ cell.setPhrase(new Phrase("Total", summaryContentStyle));
+ table.addCell(cell);
+
+ cell.setPhrase(new Phrase(String.valueOf(totalPublications), summaryContentStyle));
+ table.addCell(cell);
+
+ return table;
+ }
+
+ private void setTableFooterStyle(BaseColor footerBackgroundColor,
+ PdfPCell cell) {
+ cell.setBorderWidth(0.0f);
+ cell.setBackgroundColor(footerBackgroundColor);
+ cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+ cell.setPaddingTop(5f);
+ cell.setPaddingRight(10f);
+ cell.setPaddingBottom(5f);
+ cell.setPaddingLeft(10f);
+ }
+
+ private void setTableBodyStyle(BaseColor bodyBackgroundColor,
+ PdfPCell cell) {
+ cell.setBorderWidth(0.0f);
+ cell.setBackgroundColor(bodyBackgroundColor);
+ cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+ cell.setPaddingTop(5f);
+ cell.setPaddingRight(10f);
+ cell.setPaddingBottom(5f);
+ cell.setPaddingLeft(10f);
+ }
+
+ private void setTableHeaderStyle(BaseColor headerBackgroundColor,
+ PdfPCell cell) {
+ cell.setBorderWidth(0.0f);
+ cell.setBackgroundColor(headerBackgroundColor);
+ cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+ cell.setPaddingTop(5f);
+ cell.setPaddingRight(10f);
+ cell.setPaddingBottom(5f);
+ cell.setPaddingLeft(10f);
+ }
+
+ private void setTableCaptionStyle(BaseColor summaryBackgroundColor,
+ PdfPCell cell) {
+ cell.setBorderWidth(0.0f);
+ cell.setBackgroundColor(summaryBackgroundColor);
+ cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+ cell.setPaddingTop(5.0f);
+ cell.setPaddingRight(10.0f);
+ cell.setPaddingBottom(5.0f);
+ cell.setPaddingLeft(10.0f);
+ cell.setColspan(2);
+ }
+
+}