From 96bed7ce0335b52ea8810b4531d9857d801238c4 Mon Sep 17 00:00:00 2001 From: "Stephen V. Williams" Date: Tue, 14 May 2013 14:40:17 -0600 Subject: [PATCH] first pass at creating a csv download option. TODO icons on page, debug failing load --- .../controller/PagedSearchController.java | 44 ++++++++++++++++-- webapp/web/images/share-uri-icon.png | Bin 0 -> 1160 bytes .../body/search/search-csvResults.ftl | 5 ++ .../body/search/search-pagedResults.ftl | 6 +++ 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 webapp/web/images/share-uri-icon.png create mode 100644 webapp/web/templates/freemarker/body/search/search-csvResults.ftl diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java index 7889a825a..510cb2532 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/PagedSearchController.java @@ -70,6 +70,7 @@ public class PagedSearchController extends FreemarkerHttpServlet { protected static final int DEFAULT_MAX_HIT_COUNT = 1000; private static final String PARAM_XML_REQUEST = "xml"; + private static final String PARAM_CSV_REQUEST = "csv"; private static final String PARAM_START_INDEX = "startIndex"; private static final String PARAM_HITS_PER_PAGE = "hitsPerPage"; private static final String PARAM_CLASSGROUP = "classgroup"; @@ -79,7 +80,7 @@ public class PagedSearchController extends FreemarkerHttpServlet { protected static final Map> templateTable; protected enum Format { - HTML, XML; + HTML, XML, CSV; } protected enum Result { @@ -101,9 +102,10 @@ public class PagedSearchController extends FreemarkerHttpServlet { throws IOException, ServletException { VitroRequest vreq = new VitroRequest(request); boolean wasXmlRequested = isRequestedFormatXml(vreq); - if( ! wasXmlRequested ){ + boolean wasCSVRequested = isRequestedFormatCSV(vreq); + if( !wasXmlRequested && !wasCSVRequested){ super.doGet(vreq,response); - }else{ + }else if (wasXMLRequested){ try { ResponseValues rvalues = processRequest(vreq); @@ -113,6 +115,16 @@ public class PagedSearchController extends FreemarkerHttpServlet { } catch (Exception e) { log.error(e, e); } + }else if (wasCSVRequested){ + try { + ResponseValues rvalues = processRequest(vreq); + + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/csv;charset=UTF-8"); + writeTemplate(rvalues.getTemplateName(), rvalues.getMap(), request, response); + } catch (Exception e) { + log.error(e, e); + } } } @@ -672,10 +684,25 @@ public class PagedSearchController extends FreemarkerHttpServlet { return false; } } + + protected boolean isRequestedFormatCSV(VitroRequest req){ + if( req != null ){ + String param = req.getParameter(PARAM_CSV_REQUEST); + if( param != null && "1".equals(param)){ + return true; + }else{ + return false; + } + }else{ + return false; + } + } protected Format getFormat(VitroRequest req){ if( req != null && req.getParameter("xml") != null && "1".equals(req.getParameter("xml"))) return Format.XML; + else if ( req != null && req.getParameter("csv") != null && "1".equals(req.getParameter("csv"))) + return Format.CSV; else return Format.HTML; } @@ -705,9 +732,20 @@ public class PagedSearchController extends FreemarkerHttpServlet { resultsToTemplates = new HashMap(); resultsToTemplates.put(Result.PAGED, "search-xmlResults.ftl"); resultsToTemplates.put(Result.ERROR, "search-xmlError.ftl"); + // resultsToTemplates.put(Result.BAD_QUERY, "search-xmlBadQuery.ftl"); templateTable.put(Format.XML, Collections.unmodifiableMap(resultsToTemplates)); + + // set up CSV format + resultsToTemplates = new HashMap(); + resultsToTemplates.put(Result.PAGED, "search-csvResults.ftl"); + resultsToTemplates.put(Result.ERROR, "search-csvError.ftl"); + + // resultsToTemplates.put(Result.BAD_QUERY, "search-xmlBadQuery.ftl"); + templateTable.put(Format.CSV, Collections.unmodifiableMap(resultsToTemplates)); + + return Collections.unmodifiableMap(templateTable); } } diff --git a/webapp/web/images/share-uri-icon.png b/webapp/web/images/share-uri-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a79edd97b30a571115154c5bd3ef17799e0f7a07 GIT binary patch literal 1160 zcmV;31b6$1P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX3Ih)xD(sL!&Hw-e8c9S!R7l6Y zR#|TwRTMrmo{VR_)^-v*&N7Y?#|}{&L*hO}iqkAqh^0|QLZ6VJ6nJ3~zW~HvK!_J) zgak;?1c4d|pwnjz^H*;y&fi&v$H!oA z*W~C~6hSIb=Xu_KZQi{?!+(XvNL_wmu*m-K5vJ#sPQnWS?iG5zy9T~ zSzL#SUU_z~qoqOE-u4H-xpAvB!RhvQv}pTGRN>TYnwxSg*5pM1u3Q-EHMYt~LRdCS z*W}3Ava~73BAez4)DD+7!KAA5Vj|I%3+H;;n*rdqpZ?&}?>?Hkp5ih?PnyQ8J*Alm zCgpH>0RYYB^7HN*l0XsU_3@!zV=DmMUE8qFI3L6kemeBYw~hppddftV<?D&p5li$)-R5@wZ3I zclYCHisLF$Uw+=!)83roGJ?0&VIl-U?r-k+=n#S+$YIO<@VmQWd5YsITjCqz=T3LD z003Sm+KtB9G&gX%v)iBt0N?=tP!vHBkFBp#4uQ~HP4*(xeI}!|Auav*@(wLMG^8nGr zL3LdU&>AX@(0>IbTZ!P@2TGMdMlpZrvO;S>Pz@|$Bch@$o-R&2L`eYI!alnpQ zd!(co0KWL?<{$UgYVyiRqT8UyFcE6Am}VC|rLoxsPn%ZVs8&9GXgzU;oxSNf4zJL_ zmLk1tBQ-H%{eOpr(h+BBZmH&%R)kza zOblCVj5uY3nbYkr(|Z}Dq}cXYgIW1F8Q2PJM +URI,Name + <#list individuals as individual> + ${individual.uri?xml},${individual.name?xml} + diff --git a/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl b/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl index 5203b4fb3..e5e14dc95 100644 --- a/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl +++ b/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl @@ -8,8 +8,14 @@ <#if classGroupName?has_content>limited to type '${classGroupName}' <#if typeName?has_content>limited to type '${typeName}' + + XML/RDF Results + + + Not the results you expected? +
<#-- Refinement links -->