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

Reply via email to