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 80ce7a0  [ZEPPELIN-4960] Add a button to reload note from storage
80ce7a0 is described below

commit 80ce7a06ca9fb7f17d1eb0d0fdbd7647e6041bfe
Author: Jeff Zhang <[email protected]>
AuthorDate: Mon Jul 20 21:55:22 2020 +0800

    [ZEPPELIN-4960] Add a button to reload note from storage
    
    ### What is this PR for?
    
    This PR add one reload button on the tools bar of note. When click this 
button, note will be reloaded from NotebookRepo.
    
    ### What type of PR is it?
    [Improvement | Feature]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4960
    
    ### How should this be tested?
    * Manually tested
    
    ### Screenshots (if appropriate)
    
![image](https://user-images.githubusercontent.com/164491/106758519-8e031580-666c-11eb-9d12-25c0055a887e.png)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <[email protected]>
    
    Closes #4044 from zjffdu/ZEPPELIN-4960 and squashes the following commits:
    
    8a364b582 [Jeff Zhang] [ZEPPELIN-4960] Add a button to reload note from 
storage
---
 .../java/org/apache/zeppelin/common/Message.java     |  3 +++
 .../org/apache/zeppelin/service/NotebookService.java |  9 ++++++++-
 .../org/apache/zeppelin/socket/NotebookServer.java   | 20 ++++++++++++++++++++
 .../src/app/notebook/notebook-actionBar.html         |  9 +++++++++
 zeppelin-web/src/app/notebook/notebook.controller.js |  5 +++++
 .../websocket/websocket-message.service.js           |  4 ++++
 zeppelin-web/src/index.html                          |  1 +
 7 files changed, 50 insertions(+), 1 deletion(-)

diff --git 
a/zeppelin-common/src/main/java/org/apache/zeppelin/common/Message.java 
b/zeppelin-common/src/main/java/org/apache/zeppelin/common/Message.java
index 5bacc33..c561e74 100644
--- a/zeppelin-common/src/main/java/org/apache/zeppelin/common/Message.java
+++ b/zeppelin-common/src/main/java/org/apache/zeppelin/common/Message.java
@@ -41,6 +41,9 @@ public class Message implements JsonSerializable {
     GET_NOTE,         // [c-s] client load note
                       // @param id note id
 
+    RELOAD_NOTE,      // [c-s] client load note
+                      // @param id note id
+
     NOTE,             // [s-c] note info
                       // @param note serialized Note object
 
diff --git 
a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
 
b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
index 1de3de2..a20036a 100644
--- 
a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
+++ 
b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
@@ -117,7 +117,14 @@ public class NotebookService {
   public Note getNote(String noteId,
                       ServiceContext context,
                       ServiceCallback<Note> callback) throws IOException {
-    Note note = notebook.getNote(noteId);
+    return getNote(noteId, false, context, callback);
+  }
+
+  public Note getNote(String noteId,
+                      boolean reload,
+                      ServiceContext context,
+                      ServiceCallback<Note> callback) throws IOException {
+    Note note = notebook.getNote(noteId, reload);
     if (note == null) {
       callback.onFailure(new NoteNotFoundException(noteId), context);
       return null;
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 4938bd3..0f2de9c 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
@@ -314,6 +314,9 @@ public class NotebookServer extends WebSocketServlet
         case GET_NOTE:
           getNote(conn, context, messagereceived);
           break;
+        case RELOAD_NOTE:
+          reloadNote(conn, messagereceived);
+          break;
         case NEW_NOTE:
           createNote(conn, context, messagereceived);
           break;
@@ -832,6 +835,23 @@ public class NotebookServer extends WebSocketServlet
         });
   }
 
+  private void reloadNote(NotebookSocket conn, Message fromMessage) throws 
IOException {
+    String noteId = (String) fromMessage.get("id");
+    if (noteId == null) {
+      return;
+    }
+    getNotebookService().getNote(noteId, true, getServiceContext(fromMessage),
+            new WebSocketServiceCallback<Note>(conn) {
+              @Override
+              public void onSuccess(Note note, ServiceContext context) throws 
IOException {
+                getConnectionManager().addNoteConnection(note.getId(), conn);
+                conn.send(serializeMessage(new Message(OP.NOTE).put("note", 
note)));
+                updateAngularObjectRegistry(conn, note);
+                sendAllAngularObjects(note, context.getAutheInfo().getUser(), 
conn);
+              }
+            });
+  }
+
   /**
    * Update the AngularObject object in the note to InterpreterGroup and 
AngularObjectRegistry.
    */
diff --git a/zeppelin-web/src/app/notebook/notebook-actionBar.html 
b/zeppelin-web/src/app/notebook/notebook-actionBar.html
index 69d509c..4b31119 100644
--- a/zeppelin-web/src/app/notebook/notebook-actionBar.html
+++ b/zeppelin-web/src/app/notebook/notebook-actionBar.html
@@ -87,6 +87,15 @@ limitations under the License.
       </button>
 
       <button type="button"
+              class="btn btn-default btn-xs"
+              ng-hide="viewOnly"
+              ng-click="reloadNote()"
+              tooltip-placement="bottom" uib-tooltip="Reload from note file"
+              ng-disabled="revisionView">
+        <i class="fa fa-refresh"></i>
+      </button>
+
+      <button type="button"
               class="btn btn-primary btn-xs"
               ng-class="isNoteRunning() ? 'disabled' : ''"
               ng-if="ticket.principal && ticket.principal !== 'anonymous'"
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js 
b/zeppelin-web/src/app/notebook/notebook.controller.js
index e7249f0..ab260d8 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -280,6 +280,11 @@ function NotebookCtrl($scope, $route, $routeParams, 
$location, $rootScope,
     websocketMsgSrv.convertNote($scope.note.id, $scope.note.name);
   };
 
+  // Export nbformat
+  $scope.reloadNote = function() {
+    websocketMsgSrv.reloadNote($scope.note.id);
+  };
+
   // Clone note
   $scope.cloneNote = function(noteId) {
     BootstrapDialog.confirm({
diff --git a/zeppelin-web/src/components/websocket/websocket-message.service.js 
b/zeppelin-web/src/components/websocket/websocket-message.service.js
index ee2f773..49b16aa 100644
--- a/zeppelin-web/src/components/websocket/websocket-message.service.js
+++ b/zeppelin-web/src/components/websocket/websocket-message.service.js
@@ -81,6 +81,10 @@ function WebsocketMessageService($rootScope, 
websocketEvents) {
       websocketEvents.sendNewEvent({op: 'GET_NOTE', data: {id: noteId}});
     },
 
+    reloadNote: function(noteId) {
+      websocketEvents.sendNewEvent({op: 'RELOAD_NOTE', data: {id: noteId}});
+    },
+
     updateNote: function(noteId, noteName, noteConfig) {
       websocketEvents.sendNewEvent({op: 'NOTE_UPDATE', data: {id: noteId, 
name: noteName, config: noteConfig}});
     },
diff --git a/zeppelin-web/src/index.html b/zeppelin-web/src/index.html
index 0b26e10..4f577ad 100644
--- a/zeppelin-web/src/index.html
+++ b/zeppelin-web/src/index.html
@@ -191,6 +191,7 @@ limitations under the License.
     <script 
src="bower_components/ace-builds/src-noconflict/keybinding-emacs.js"></script>
     <script 
src="bower_components/ace-builds/src-noconflict/ext-language_tools.js"></script>
     <script 
src="bower_components/ace-builds/src-noconflict/theme-chrome.js"></script>
+    <script 
src="bower_components/ace-builds/src-noconflict/mode-javascript.js"></script>
     <script src="bower_components/angular-ui-ace/ui-ace.js"></script>
     <script src="bower_components/jquery.scrollTo/jquery.scrollTo.js"></script>
     <script src="bower_components/d3/d3.js"></script>

Reply via email to