This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 27b669e  [ZEPPELIN-4620]. Exported note json is not pretty print
27b669e is described below

commit 27b669e2b4bcccb662a35ebe10e0d72e837f2a3e
Author: Jeff Zhang <zjf...@apache.org>
AuthorDate: Mon Feb 17 15:32:27 2020 +0800

    [ZEPPELIN-4620]. Exported note json is not pretty print
    
    ### What is this PR for?
    The exported note (both zpln and ipynb) are not pretty print. This PR fix 
this is straightforward.
    For zpln, it is done in browser side, for ipynb it is done in server side 
because the conversion happens in server side.
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4620
    
    ### How should this be tested?
    * Tested it manually
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zjf...@apache.org>
    
    Closes #3655 from zjffdu/ZEPPELIN-4620 and squashes the following commits:
    
    138489cfe [Jeff Zhang] [ZEPPELIN-4620]. Exported note json is not pretty 
print
---
 .../java/org/apache/zeppelin/jupyter/JupyterUtil.java   |  5 +++--
 .../java/org/apache/zeppelin/socket/NotebookServer.java | 17 ++++++++++-------
 zeppelin-web/src/app/notebook/notebook-actionBar.html   |  2 +-
 zeppelin-web/src/app/notebook/notebook.controller.js    |  8 ++++----
 .../src/components/websocket/websocket-event.factory.js |  4 ++--
 .../components/websocket/websocket-message.service.js   |  6 +++---
 .../org/apache/zeppelin/notebook/socket/Message.java    |  3 ++-
 7 files changed, 25 insertions(+), 20 deletions(-)

diff --git 
a/zeppelin-jupyter/src/main/java/org/apache/zeppelin/jupyter/JupyterUtil.java 
b/zeppelin-jupyter/src/main/java/org/apache/zeppelin/jupyter/JupyterUtil.java
index a7fb0a7..48e5319 100644
--- 
a/zeppelin-jupyter/src/main/java/org/apache/zeppelin/jupyter/JupyterUtil.java
+++ 
b/zeppelin-jupyter/src/main/java/org/apache/zeppelin/jupyter/JupyterUtil.java
@@ -57,13 +57,14 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 
 /**
  *
  */
 public class JupyterUtil {
 
+  private static Gson Pretty_Gson = new 
GsonBuilder().setPrettyPrinting().create();
+
   private final RuntimeTypeAdapterFactory<Cell> cellTypeFactory;
   private final RuntimeTypeAdapterFactory<Output> outputTypeFactory;
 
@@ -256,7 +257,7 @@ public class JupyterUtil {
     nbformat.addProperty("nbformat", 4);
     nbformat.addProperty("nbformat_minor", 2);
     nbformat.add("cells", cells);
-    return nbformat.toString();
+    return Pretty_Gson.toJson(nbformat);
   }
 
   public static void main(String[] args) throws ParseException, IOException {
diff --git 
a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java 
b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
index 9b4bc53..fab5c8c 100644
--- 
a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
+++ 
b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
@@ -1174,13 +1174,16 @@ public class NotebookServer extends WebSocketServlet
   }
 
   protected void convertNote(NotebookSocket conn, Message fromMessage) throws 
IOException {
-    String note = gson.toJson(fromMessage.get("note"));
-
-    Message resp = new Message(OP.CONVERT_NOTE_NBFORMAT)
-            .put("nbformat", new JupyterUtil().getNbformat(note))
-            .put("name", fromMessage.get("name"));
-
-    conn.send(serializeMessage(resp));
+    String noteId = fromMessage.get("noteId").toString();
+    Note note = getNotebook().getNote(noteId);
+    if (note == null) {
+      throw new IOException("No such note: " + noteId);
+    } else {
+      Message resp = new Message(OP.CONVERTED_NOTE_NBFORMAT)
+              .put("nbformat", new JupyterUtil().getNbformat(note.toJson()))
+              .put("name", fromMessage.get("name"));
+      conn.send(serializeMessage(resp));
+    }
   }
 
   protected Note importNote(NotebookSocket conn, Message fromMessage) throws 
IOException {
diff --git a/zeppelin-web/src/app/notebook/notebook-actionBar.html 
b/zeppelin-web/src/app/notebook/notebook-actionBar.html
index aa3cb07..ed44465 100644
--- a/zeppelin-web/src/app/notebook/notebook-actionBar.html
+++ b/zeppelin-web/src/app/notebook/notebook-actionBar.html
@@ -73,7 +73,7 @@ limitations under the License.
               class="btn btn-default btn-xs"
               ng-hide="viewOnly"
               ng-click="exportNote()"
-              tooltip-placement="bottom" uib-tooltip="Export this note (json)"
+              tooltip-placement="bottom" uib-tooltip="Export this note (zpln)"
               ng-disabled="revisionView">
         <i class="fa fa-download"></i>
       </button>
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js 
b/zeppelin-web/src/app/notebook/notebook.controller.js
index aed2abe..a131101 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -249,7 +249,7 @@ function NotebookCtrl($scope, $route, $routeParams, 
$location, $rootScope,
   });
 
   $scope.exportNote = function() {
-    let jsonContent = JSON.stringify($scope.note);
+    let jsonContent = JSON.stringify($scope.note, null, 2);
     if (jsonContent.length > limit) {
       BootstrapDialog.confirm({
         closable: true,
@@ -257,18 +257,18 @@ function NotebookCtrl($scope, $route, $routeParams, 
$location, $rootScope,
         message: 'Do you still want to export this note?',
         callback: function(result) {
           if (result) {
-            saveAsService.saveAs(jsonContent, $scope.note.name, 'json');
+            saveAsService.saveAs(jsonContent, $scope.note.name, 'zpln');
           }
         },
       });
     } else {
-      saveAsService.saveAs(jsonContent, $scope.note.name, 'json');
+      saveAsService.saveAs(jsonContent, $scope.note.name, 'zpln');
     }
   };
 
   // Export nbformat
   $scope.exportNbformat = function() {
-    websocketMsgSrv.convertNote($scope.note, $scope.note.name);
+    websocketMsgSrv.convertNote($scope.note.id, $scope.note.name);
   };
 
   // Clone note
diff --git a/zeppelin-web/src/components/websocket/websocket-event.factory.js 
b/zeppelin-web/src/components/websocket/websocket-event.factory.js
index 8c6f726..2ed7da2 100644
--- a/zeppelin-web/src/components/websocket/websocket-event.factory.js
+++ b/zeppelin-web/src/components/websocket/websocket-event.factory.js
@@ -183,8 +183,8 @@ function WebsocketEventFactory($rootScope, $websocket, 
$location, baseUrlSrv, sa
       $rootScope.$broadcast('setNoteRevisionResult', data);
     } else if (op === 'PARAS_INFO') {
       $rootScope.$broadcast('updateParaInfos', data);
-    } else if (op === 'CONVERT_NOTE_NBFORMAT') {
-      saveAsService.saveAs(data.nbformat, data.name, 'zepp.ipynb');
+    } else if (op === 'CONVERTED_NOTE_NBFORMAT') {
+      saveAsService.saveAs(data.nbformat, data.name, 'zepl.ipynb');
     } else if (op === 'INTERPRETER_INSTALL_STARTED') {
       ngToast.info(data.message);
     } else if (op === 'INTERPRETER_INSTALL_RESULT') {
diff --git a/zeppelin-web/src/components/websocket/websocket-message.service.js 
b/zeppelin-web/src/components/websocket/websocket-message.service.js
index bbf987b..06d7726 100644
--- a/zeppelin-web/src/components/websocket/websocket-message.service.js
+++ b/zeppelin-web/src/components/websocket/websocket-message.service.js
@@ -270,12 +270,12 @@ function WebsocketMessageService($rootScope, 
websocketEvents) {
       });
     },
 
-    convertNote: function(note, name) {
+    convertNote: function(noteId, noteName) {
       websocketEvents.sendNewEvent({
         op: 'CONVERT_NOTE_NBFORMAT',
         data: {
-          note: note,
-          name: name,
+          noteId: noteId,
+          noteName: noteName,
         },
       });
     },
diff --git 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java
 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java
index 102f0fe..d30306b 100644
--- 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java
+++ 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java
@@ -65,7 +65,8 @@ public class Message implements JsonSerializable {
     IMPORT_NOTE,      // [c-s] import notebook
                       // @param object notebook
 
-    CONVERT_NOTE_NBFORMAT,     // converting note to nbformat
+    CONVERT_NOTE_NBFORMAT,     // [c-s] converting note to nbformat
+    CONVERTED_NOTE_NBFORMAT,     // [s-c] converting note to nbformat
 
     NOTE_UPDATE,
 

Reply via email to