You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by ti...@apache.org on 2016/03/25 01:51:40 UTC

incubator-asterixdb git commit: add parameter to QueryServiceServlet to indent JSON

Repository: incubator-asterixdb
Updated Branches:
  refs/heads/master b2a5170c6 -> 42e8334a8


add parameter to QueryServiceServlet to indent JSON

Change-Id: Id197d3ad6aa17c9a36bb3845bd3ca75a695ba6d9
Reviewed-on: https://asterix-gerrit.ics.uci.edu/750
Reviewed-by: Yingyi Bu <bu...@gmail.com>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/commit/42e8334a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/tree/42e8334a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/diff/42e8334a

Branch: refs/heads/master
Commit: 42e8334a89d39693243c6db98e289b3e6a63cc7a
Parents: b2a5170
Author: Till Westmann <ti...@apache.org>
Authored: Thu Mar 24 16:52:03 2016 -0700
Committer: Till Westmann <ti...@apache.org>
Committed: Thu Mar 24 17:46:15 2016 -0700

----------------------------------------------------------------------
 .../org/apache/asterix/api/common/SessionConfig.java    |  5 +++++
 .../org/apache/asterix/api/http/servlet/JSONUtil.java   | 12 ++++++++----
 .../asterix/api/http/servlet/QueryServiceServlet.java   |  9 ++++++---
 .../java/org/apache/asterix/result/ResultUtils.java     |  6 ++++++
 4 files changed, 25 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/42e8334a/asterix-app/src/main/java/org/apache/asterix/api/common/SessionConfig.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/api/common/SessionConfig.java b/asterix-app/src/main/java/org/apache/asterix/api/common/SessionConfig.java
index 2ed67b2..7bfc55c 100644
--- a/asterix-app/src/main/java/org/apache/asterix/api/common/SessionConfig.java
+++ b/asterix-app/src/main/java/org/apache/asterix/api/common/SessionConfig.java
@@ -92,6 +92,11 @@ public class SessionConfig {
      */
     public static final String FORMAT_WRAPPER_ARRAY = "format-wrapper-array";
 
+    /**
+     * Format flag: indent JSON results.
+     */
+    public static final String INDENT_JSON = "indent-json";
+
     public interface ResultDecorator {
         PrintWriter print(PrintWriter pw);
     }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/42e8334a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/JSONUtil.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/JSONUtil.java b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/JSONUtil.java
index 56f349c..d69c3c1 100644
--- a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/JSONUtil.java
+++ b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/JSONUtil.java
@@ -26,13 +26,17 @@ import org.json.JSONObject;
 
 public class JSONUtil {
 
-    static final String INDENT = "    ";
+    static final String INDENT = "\t";
 
     public static String indent(String str) {
+        return indent(str, 0);
+    }
+
+    public static String indent(String str, int initialIndent) {
         try {
-            return append(new StringBuilder(), new JSONObject(str), 0).toString();
+            return append(new StringBuilder(), new JSONObject(str), initialIndent).toString();
         } catch (JSONException e) {
-            throw new IllegalArgumentException(e);
+            return str;
         }
     }
 
@@ -43,7 +47,7 @@ public class JSONUtil {
             return append(sb, (JSONArray) o, indent);
         } else if (o instanceof String) {
             return quote(sb, (String) o);
-        } else if (o instanceof Number || o instanceof Boolean) {
+        } else if (JSONObject.NULL.equals(o) || o instanceof Number || o instanceof Boolean) {
             return sb.append(String.valueOf(o));
         }
         throw new UnsupportedOperationException(o.getClass().getSimpleName());

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/42e8334a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
index c4d270b..4376b22 100644
--- a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
+++ b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
@@ -63,7 +63,8 @@ public class QueryServiceServlet extends HttpServlet {
         statement,
         format,
         // Asterix
-        header
+        header,
+        indent
     }
 
     public enum Header {
@@ -159,14 +160,16 @@ public class QueryServiceServlet extends HttpServlet {
         SessionConfig.ResultDecorator resultPostfix = new SessionConfig.ResultDecorator() {
             @Override
             public PrintWriter print(PrintWriter pw) {
-                pw.print(",\n");
+                pw.print("\t,\n");
                 return pw;
             }
         };
 
         SessionConfig.OutputFormat format = getFormat(request);
         SessionConfig sessionConfig = new SessionConfig(resultWriter, format, resultPrefix, resultPostfix);
-        sessionConfig.set(SessionConfig.FORMAT_WRAPPER_ARRAY, (format == SessionConfig.OutputFormat.CLEAN_JSON));
+        sessionConfig.set(SessionConfig.FORMAT_WRAPPER_ARRAY, format == SessionConfig.OutputFormat.CLEAN_JSON);
+        boolean indentJson = Boolean.parseBoolean(request.getParameter(Parameter.indent.name()));
+        sessionConfig.set(SessionConfig.INDENT_JSON, indentJson);
 
         if (format == SessionConfig.OutputFormat.CSV && ("present".equals(request.getParameter(Parameter.header.name()))
                 || request.getHeader(Header.Accept.str()).contains("header=present"))) {

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/42e8334a/asterix-app/src/main/java/org/apache/asterix/result/ResultUtils.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/result/ResultUtils.java b/asterix-app/src/main/java/org/apache/asterix/result/ResultUtils.java
index f1d20d0..2fe7f28 100644
--- a/asterix-app/src/main/java/org/apache/asterix/result/ResultUtils.java
+++ b/asterix-app/src/main/java/org/apache/asterix/result/ResultUtils.java
@@ -33,6 +33,7 @@ import java.util.regex.Pattern;
 import org.apache.asterix.api.common.SessionConfig;
 import org.apache.asterix.api.common.SessionConfig.OutputFormat;
 import org.apache.asterix.api.http.servlet.APIServlet;
+import org.apache.asterix.api.http.servlet.JSONUtil;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.http.ParseException;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -135,6 +136,7 @@ public class ResultUtils {
                 break;
         }
 
+        final boolean indentJSON = conf.is(SessionConfig.INDENT_JSON);
         if (bytesRead > 0) {
             do {
                 try {
@@ -157,6 +159,10 @@ public class ResultUtils {
                             conf.out().print(", ");
                         }
                         notfirst = true;
+                        if (indentJSON) {
+                            // TODO(tillw): this is inefficient - do this during result generation
+                            result = JSONUtil.indent(result, 2);
+                        }
                         conf.out().print(result);
                         if (conf.fmt() == OutputFormat.CSV) {
                             conf.out().print("\r\n");