Repository: incubator-unomi Updated Branches: refs/heads/master b8ecd0c4d -> a0c5a556f
UNOMI-135 : review Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/a0c5a556 Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/a0c5a556 Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/a0c5a556 Branch: refs/heads/master Commit: a0c5a556fb023c85c6b5814884ec944dc331cf56 Parents: b8ecd0c Author: Abdelkader Midani <[email protected]> Authored: Fri Nov 3 18:19:12 2017 +0100 Committer: Abdelkader Midani <[email protected]> Committed: Fri Nov 3 18:19:30 2017 +0100 ---------------------------------------------------------------------- wab/pom.xml | 14 ++++++++ .../org/apache/unomi/web/ClientServlet.java | 37 ++++++++++++++++++-- wab/src/main/resources/org.apache.unomi.web.cfg | 4 +-- 3 files changed, 51 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/a0c5a556/wab/pom.xml ---------------------------------------------------------------------- diff --git a/wab/pom.xml b/wab/pom.xml index b71a67a..f3572d2 100644 --- a/wab/pom.xml +++ b/wab/pom.xml @@ -73,6 +73,20 @@ <version>1.19</version> </dependency> + <dependency> + <groupId>com.opencsv</groupId> + <artifactId>opencsv</artifactId> + <version>3.10</version> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + </dependency> + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + </dependency> + <!-- Builds on core streaming API; also needs core annotations --> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/a0c5a556/wab/src/main/java/org/apache/unomi/web/ClientServlet.java ---------------------------------------------------------------------- diff --git a/wab/src/main/java/org/apache/unomi/web/ClientServlet.java b/wab/src/main/java/org/apache/unomi/web/ClientServlet.java index 9ce93c3..2fd3851 100644 --- a/wab/src/main/java/org/apache/unomi/web/ClientServlet.java +++ b/wab/src/main/java/org/apache/unomi/web/ClientServlet.java @@ -19,6 +19,7 @@ package org.apache.unomi.web; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.opencsv.CSVWriter; import org.apache.unomi.api.Profile; import org.apache.unomi.api.services.ProfileService; import org.slf4j.Logger; @@ -32,6 +33,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; /** * A servlet filter to serve a context-specific Javascript containing the current request context object. @@ -59,12 +65,12 @@ public class ClientServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String[] pathInfo = req.getPathInfo().substring(1).split("/"); + String[] pathInfo = req.getPathInfo().substring(1).split("\\."); if (pathInfo != null && pathInfo.length > 0) { String operation = pathInfo[0]; String param = pathInfo[1]; switch (operation) { - case "downloadMyProfile": + case "myprofile": if (allowedProfileDownloadFormats.contains(param)) { donwloadCurrentProfile(req, resp, param); } else { @@ -103,6 +109,9 @@ public class ClientServlet extends HttpServlet { case "json": prepareJsonFileToDownload(response, currentProfile); break; + case "csv": + prepareCsvFileToDownload(response, currentProfile); + break; default: return; @@ -112,6 +121,30 @@ public class ClientServlet extends HttpServlet { } } + private void prepareCsvFileToDownload(HttpServletResponse response, Profile currentProfile) { + response.setContentType("text/csv"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + currentProfile.getItemId() + ".csv\""); + try { + StringWriter writer = new StringWriter(); + + //using custom delimiter and quote character + CSVWriter csvWriter = new CSVWriter(writer); + Set<String> keySet = currentProfile.getProperties().keySet(); + List<String> values = new ArrayList(); + for (Object value : currentProfile.getProperties().values()) { + values.add(value.toString().trim().replace("\n", "")); + } + csvWriter.writeNext(keySet.toArray(new String[keySet.size()])); + csvWriter.writeNext(values.toArray(new String[values.size()])); + OutputStream outputStream = response.getOutputStream(); + outputStream.write(writer.toString().getBytes()); + outputStream.flush(); + outputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + private void prepareJsonFileToDownload(HttpServletResponse response, Profile currentProfile) { response.setContentType("text/json"); response.setHeader("Content-Disposition", "attachment; filename=\"" + currentProfile.getItemId() + ".json\""); http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/a0c5a556/wab/src/main/resources/org.apache.unomi.web.cfg ---------------------------------------------------------------------- diff --git a/wab/src/main/resources/org.apache.unomi.web.cfg b/wab/src/main/resources/org.apache.unomi.web.cfg index aa1c637..6282886 100644 --- a/wab/src/main/resources/org.apache.unomi.web.cfg +++ b/wab/src/main/resources/org.apache.unomi.web.cfg @@ -22,5 +22,5 @@ #contextserver.profileIdCookieName=context-profile-id # This setting controls the maximum age of the profile cookie. By default it is set to a year. #contextserver.profileIdCookieMaxAgeInSeconds=31536000 -#Allowed profile download formats, actually only yaml and json are allowed. -allowed.profile.download.formats=yaml,json \ No newline at end of file +#Allowed profile download formats, actually only yaml, json and csv are allowed. +allowed.profile.download.formats=yaml,json,csv \ No newline at end of file
