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 787c1538f..78f36d9b5 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 @@ -14,8 +14,7 @@ public class CoAuthorshipGraphMLWriter { private StringBuilder coAuthorshipGraphMLContent; - public final String GRAPHML_HEADER = "" - + " \n" + private final String GRAPHML_HEADER = "\n" + " getUpdatedDepartmentPublicationsOverTime( - Map currentEmployeeYearToPublicationCount, - Map currentDepartmentYearToPublicationCount) { - - Map departmentYearToPublicationCount; - -// System.out.println("inside get updated dept pub obr time"); - - /* - * In case this is the first time we are consolidating publication counts over time for a department. - * */ - if (currentDepartmentYearToPublicationCount == null) { - departmentYearToPublicationCount = new TreeMap(); - -// System.out.println("new dept yr pub cnt"); - - } else { - departmentYearToPublicationCount = currentDepartmentYearToPublicationCount; - } - - - Iterator employeePubCountIterator = currentEmployeeYearToPublicationCount.entrySet().iterator(); - - while (employeePubCountIterator.hasNext()) { - Map.Entry employeePubCountEntry = (Map.Entry) employeePubCountIterator.next(); - - String employeePublicationYear = employeePubCountEntry.getKey(); - Integer employeePublicationCount = employeePubCountEntry.getValue(); - - try { - if (departmentYearToPublicationCount.containsKey(employeePublicationYear)) { - departmentYearToPublicationCount.put(employeePublicationYear, - departmentYearToPublicationCount - .get(employeePublicationYear) - + employeePublicationCount); - - } else { - departmentYearToPublicationCount.put(employeePublicationYear, employeePublicationCount); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - return departmentYearToPublicationCount; - } - - private void prepareVisualizationQueryPDFResponse(Individual college, - List authorDocuments, - Map yearToPublicationCount) { - - String authorName = null; - - /* - * To protect against cases where there are no author documents associated with the - * individual. - * */ - if (authorDocuments.size() > 0) { - authorName = college.getIndividualLabel(); - } - - /* - * To make sure that null/empty records for author names do not cause any mischief. - * */ - if (authorName == null) { - authorName = ""; - } - - String outputFileName = 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(); - - response.setHeader("Expires", "0"); - response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); - response.setHeader("Pragma", "public"); - response.setContentLength(baos.size()); - - baos.writeTo(responseOutputStream); - responseOutputStream.flush(); - responseOutputStream.close(); - - } catch (IOException e) { - e.printStackTrace(); - } catch (DocumentException e) { - e.printStackTrace(); - } - } - private void prepareVisualizationQueryDataResponse(VisVOContainer authorNodesAndEdges) { - String egoName = null; - - Node egoNode = authorNodesAndEdges.getEgoNode(); - - - /* - * To protect against cases where there are no author documents associated with the - * individual. - * */ -// System.out.println(collegeURLToVO); - if (egoNode != null) { - egoName = egoNode.getNodeName(); - } - - /* - * To make sure that null/empty records for author names do not cause any mischief. - * */ - if (egoName == null) { - egoName = ""; - } - - String outputFileName = slugify(egoName) + "co-authorship" + ".txt"; - - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition","attachment;filename=" + outputFileName); + response.setContentType("text/xml"); try { @@ -318,97 +158,34 @@ public class VisualizationRequestHandler { * We are side-effecting responseWriter since we are directly manipulating the response * object of the servlet. * */ - generateCsvFileBuffer(authorNodesAndEdges, - responseWriter); - + + CoAuthorshipGraphMLWriter coAuthorShipGraphMLWriter = new CoAuthorshipGraphMLWriter(authorNodesAndEdges); + + responseWriter.append(coAuthorShipGraphMLWriter.getCoAuthorshipGraphMLContent()); + responseWriter.close(); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); } } - /** - * Currently the approach for slugifying filenames is naive. In future if there is need, - * we can write more sophisticated method. - * @param textToBeSlugified - * @return - */ - private String slugify(String textToBeSlugified) { - return textToBeSlugified.toLowerCase().replaceAll("[^a-zA-Z0-9-]", "-") - .substring(0, VisConstants.MAX_NAME_TEXT_LENGTH); - } - - private void generateCsvFileBuffer(VisVOContainer authorNodesAndEdges, - PrintWriter printWriter) { - - Node egoNode = authorNodesAndEdges.getEgoNode(); - Set authorNodes = authorNodesAndEdges.getNodes(); - Set edges = authorNodesAndEdges.getEdges(); - - printWriter.append("\nEGO => "); - printWriter.append(egoNode.getNodeID() + " - " + egoNode.getNodeName() + " -> " + egoNode.getNodeURL() + "\n"); - printWriter.append("\tEarliest Publication - " + egoNode.getEarliestPublicationYearCount() - + "\n\tLatest Publication - " + egoNode.getLatestPublicationYearCount() - + "\n\tUnknown Publication - " + egoNode.getUnknownPublicationYearCount()); - -// authorNodes.remove(egoNode); - - for (Node currNode : authorNodes) { - - printWriter.append("\nCO-AUTHOR => "); - printWriter.append(currNode.getNodeID() + " - " + currNode.getNodeName() + " -> " + currNode.getNodeURL() + "\n"); - printWriter.append("\tEarliest Publication - " + currNode.getEarliestPublicationYearCount() - + "\n\tLatest Publication - " + currNode.getLatestPublicationYearCount() - + "\n\tUnknown Publication - " + currNode.getUnknownPublicationYearCount() - + "\n\tTotal Publications - " + currNode.getNumOfAuthoredWorks()); - - - } - - for (Edge currentEdge : edges) { - - printWriter.append("\nEdge => "); - printWriter.append(currentEdge.getEdgeID() + " => " + currentEdge.getSourceNode().getNodeName() + " - " - + currentEdge.getTargetNode().getNodeName() + "\n"); - printWriter.append("\tEarliest Collaboration - " + currentEdge.getEarliestCollaborationYearCount() - + "\n\tLatest Collaboration - " + currentEdge.getLatestCollaborationYearCount() - + "\n\tUnknown Collaboration - " + currentEdge.getUnknownCollaborationYearCount() - + "\n\tTotal Collaboration - " + currentEdge.getNumOfCoAuthoredWorks()); - - } - - printWriter.flush(); - - } - - private void prepareVisualizationQueryStandaloneResponse(HttpServletRequest request, - HttpServletResponse response, VitroRequest vreq, - String visContentCode, String visContextCode) { + private void prepareVisualizationQueryStandaloneResponse(String egoURIParam, + HttpServletRequest request, + HttpServletResponse response, + VitroRequest vreq) { Portal portal = vreq.getPortal(); - request.setAttribute("visContentCode", visContentCode); - request.setAttribute("visContextCode", visContextCode); +// request.setAttribute("visContentCode", visContentCode); +// request.setAttribute("visContextCode", visContextCode); - request.setAttribute("bodyJsp", "/templates/visualization/publication_count.jsp"); + request.setAttribute("egoURIParam", egoURIParam); + + request.setAttribute("bodyJsp", "/templates/visualization/co_authorship.jsp"); request.setAttribute("portalBean", portal); - request.setAttribute("title", "Individual Publication Count Visualization"); - request.setAttribute("scripts", "/templates/visualization/visualization_scripts.jsp"); - - } - - private void prepareVisualizationQueryDynamicResponse(HttpServletRequest request, - HttpServletResponse response, VitroRequest vreq, - String visContentCode, String visContextCode) { - - Portal portal = vreq.getPortal(); - - request.setAttribute("visContentCode", visContentCode); - request.setAttribute("visContextCode", visContextCode); - - request.setAttribute("portalBean", portal); - request.setAttribute("bodyJsp", "/templates/visualization/ajax_vis_content.jsp"); +// request.setAttribute("title", "Individual Publication Count Visualization"); +// request.setAttribute("scripts", "/templates/visualization/visualization_scripts.jsp"); } diff --git a/webapp/web/js/visualization/coauthorship/AC_OETags.js b/webapp/web/js/visualization/coauthorship/AC_OETags.js new file mode 100644 index 000000000..6366467ea --- /dev/null +++ b/webapp/web/js/visualization/coauthorship/AC_OETags.js @@ -0,0 +1,292 @@ +// Flash Player Version Detection - Rev 1.6 +// Detect Client Browser type +// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved. +var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; +var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; +var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; + +function ControlVersion() +{ + var version; + var axo; + var e; + + // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry + + try { + // version will be set for 7.X or greater players + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + version = axo.GetVariable("$version"); + } catch (e) { + } + + if (!version) + { + try { + // version will be set for 6.X players only + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + + // installed player is some revision of 6.0 + // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29, + // so we have to be careful. + + // default to the first public version + version = "WIN 6,0,21,0"; + + // throws if AllowScripAccess does not exist (introduced in 6.0r47) + axo.AllowScriptAccess = "always"; + + // safe to call for 6.0r47 or greater + version = axo.GetVariable("$version"); + + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 4.X or 5.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = axo.GetVariable("$version"); + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 3.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = "WIN 3,0,18,0"; + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 2.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + version = "WIN 2,0,0,11"; + } catch (e) { + version = -1; + } + } + + return version; +} + +// JavaScript helper required to detect Flash Player PlugIn version information +function GetSwfVer(){ + // NS/Opera version >= 3 check for Flash plugin in plugin array + var flashVer = -1; + + if (navigator.plugins != null && navigator.plugins.length > 0) { + if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { + var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; + var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; + var descArray = flashDescription.split(" "); + var tempArrayMajor = descArray[2].split("."); + var versionMajor = tempArrayMajor[0]; + var versionMinor = tempArrayMajor[1]; + var versionRevision = descArray[3]; + if (versionRevision == "") { + versionRevision = descArray[4]; + } + if (versionRevision[0] == "d") { + versionRevision = versionRevision.substring(1); + } else if (versionRevision[0] == "r") { + versionRevision = versionRevision.substring(1); + if (versionRevision.indexOf("d") > 0) { + versionRevision = versionRevision.substring(0, versionRevision.indexOf("d")); + } + } else if (versionRevision[0] == "b") { + versionRevision = versionRevision.substring(1); + } + var flashVer = versionMajor + "." + versionMinor + "." + versionRevision; + } + } + // MSN/WebTV 2.6 supports Flash 4 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; + // WebTV 2.5 supports Flash 3 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; + // older WebTV supports Flash 2 + else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; + else if ( isIE && isWin && !isOpera ) { + flashVer = ControlVersion(); + } + return flashVer; +} + +// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available +function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) +{ + versionStr = GetSwfVer(); + if (versionStr == -1 ) { + return false; + } else if (versionStr != 0) { + if(isIE && isWin && !isOpera) { + // Given "WIN 2,0,0,11" + tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"] + tempString = tempArray[1]; // "2,0,0,11" + versionArray = tempString.split(","); // ['2', '0', '0', '11'] + } else { + versionArray = versionStr.split("."); + } + var versionMajor = versionArray[0]; + var versionMinor = versionArray[1]; + var versionRevision = versionArray[2]; + + // is the major.revision >= requested major.revision AND the minor version >= requested minor + if (versionMajor > parseFloat(reqMajorVer)) { + return true; + } else if (versionMajor == parseFloat(reqMajorVer)) { + if (versionMinor > parseFloat(reqMinorVer)) + return true; + else if (versionMinor == parseFloat(reqMinorVer)) { + if (versionRevision >= parseFloat(reqRevision)) + return true; + } + } + return false; + } +} + +function AC_AddExtension(src, ext) +{ + var qIndex = src.indexOf('?'); + if ( qIndex != -1) + { + // Add the extention (if needed) before the query params + var path = src.substring(0, qIndex); + if (path.length >= ext.length && path.lastIndexOf(ext) == (path.length - ext.length)) + return src; + else + return src.replace(/\?/, ext+'?'); + } + else + { + // Add the extension (if needed) to the end of the URL + if (src.length >= ext.length && src.lastIndexOf(ext) == (src.length - ext.length)) + return src; // Already have extension + else + return src + ext; + } +} + +function AC_Generateobj(objAttrs, params, embedAttrs) +{ + var str = ''; + if (isIE && isWin && !isOpera) + { + str += ' '; + str += ''; + } else { + str += ' +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> + + + + + + + + + + + + + + + + + + + + + + + + +Co-Authorship Visualization + + + + + + + + + + + +
+

Co-Author Network

+ + +
+
+
+
+
+
+ + +
+
+





+ +
+
+
+
+
+ + + + + diff --git a/webapp/web/templates/visualization/dummy_vis_client.jsp b/webapp/web/templates/visualization/dummy_vis_client.jsp index 6dc72c6c9..aa0aa4263 100644 --- a/webapp/web/templates/visualization/dummy_vis_client.jsp +++ b/webapp/web/templates/visualization/dummy_vis_client.jsp @@ -87,12 +87,18 @@
- + + + + + + +