Repository: zeppelin
Updated Branches:
  refs/heads/master e929aef8c -> 67cb82895


[ZEPPELIN-1189] Get note revision websocket api

### What is this PR for?
Adds websocket api for getting note revision.

### What type of PR is it?
Improvement | Feature

### Todos
* [x] - add backend websocket handle
* [x] - add frontend call

### What is the Jira issue?
[#1189](https://issues.apache.org/jira/browse/ZEPPELIN-1189)

### How should this be tested?
green CI (can be tested once frontend implemented)

### 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: Khalid Huseynov <[email protected]>
Author: Khalid Huseynov <[email protected]>
Author: Khalid Huseynov <[email protected]>

Closes #1192 from khalidhuseynov/versioning/get-note-revision-api and squashes 
the following commits:

f1ab994 [Khalid Huseynov] Merge branch 'master' into 
versioning/get-note-revision-api
683b481 [Khalid Huseynov] receive Revision object from frontend
aa0a7d6 [Khalid Huseynov] Revert "change NotebookRepo api to get note revision 
from Revision object to String revId"
ce097ed [Khalid Huseynov] add throws to notebook getRevisionNote
baaa704 [Khalid Huseynov] change NotebookRepo api to get note revision from 
Revision object to String revId
d9751c3 [Khalid Huseynov] add backend ws api to get note revision
3783fc9 [Khalid Huseynov] receive ws NOTE_REVISION msg
79f8ac9 [Khalid Huseynov] add getNoteRevision to front


Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/67cb8289
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/67cb8289
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/67cb8289

Branch: refs/heads/master
Commit: 67cb8289586c622b62255ec13956981e6d2cf3c1
Parents: e929aef
Author: Khalid Huseynov <[email protected]>
Authored: Tue Jul 19 23:09:42 2016 +0900
Committer: Alexander Bezzubov <[email protected]>
Committed: Wed Jul 20 12:13:31 2016 +0900

----------------------------------------------------------------------
 .../org/apache/zeppelin/socket/NotebookServer.java  | 16 ++++++++++++++++
 .../src/app/notebook/notebook.controller.js         |  6 ++++++
 .../websocketEvents/websocketEvents.factory.js      |  2 ++
 .../websocketEvents/websocketMsg.service.js         | 10 ++++++++++
 .../java/org/apache/zeppelin/notebook/Notebook.java |  6 ++++++
 .../zeppelin/notebook/repo/NotebookRepoSync.java    | 11 ++++++++---
 .../apache/zeppelin/notebook/socket/Message.java    |  3 +++
 7 files changed, 51 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
----------------------------------------------------------------------
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 853c0d5..1859ba0 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
@@ -45,6 +45,7 @@ import org.apache.zeppelin.interpreter.InterpreterResult;
 import org.apache.zeppelin.interpreter.InterpreterSetting;
 import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener;
 import org.apache.zeppelin.notebook.*;
+import org.apache.zeppelin.notebook.repo.NotebookRepo.Revision;
 import org.apache.zeppelin.notebook.socket.Message;
 import org.apache.zeppelin.notebook.socket.Message.OP;
 import org.apache.zeppelin.scheduler.Job;
@@ -220,6 +221,9 @@ public class NotebookServer extends WebSocketServlet 
implements
           case CHECKPOINT_NOTEBOOK:
             checkpointNotebook(conn, notebook, messagereceived);
             break;
+          case NOTE_REVISION:
+            getNoteRevision(conn, notebook, messagereceived);
+            break;
           case LIST_NOTEBOOK_JOBS:
             unicastNotebookJobInfo(conn, messagereceived);
             break;
@@ -1129,6 +1133,18 @@ public class NotebookServer extends WebSocketServlet 
implements
     notebook.checkpointNote(noteId, commitMessage, subject);
   }
 
+  private void getNoteRevision(NotebookSocket conn, Notebook notebook, Message 
fromMessage)
+      throws IOException {
+    String noteId = (String) fromMessage.get("noteId");
+    Revision revision = (Revision) fromMessage.get("revision");
+    AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal);
+    Note revisionNote = notebook.getNoteRevision(noteId, revision, subject);
+    conn.send(serializeMessage(new Message(OP.NOTE_REVISION)
+        .put("noteId", noteId)
+        .put("revisionId", revision)
+        .put("data", revisionNote)));
+  }
+
   /**
    * This callback is for the paragraph that runs on ZeppelinServer
    * @param noteId

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-web/src/app/notebook/notebook.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js 
b/zeppelin-web/src/app/notebook/notebook.controller.js
index 7d58e46..4727650 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -175,6 +175,12 @@ 
angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
     document.getElementById('note.checkpoint.message').value = '';
   };
 
+  // receive certain revision of note
+  $scope.$on('noteRevision', function(event, data) {
+    console.log('received note revision %o', data);
+    //TODO(xxx): render it
+  });
+
   $scope.runNote = function() {
     BootstrapDialog.confirm({
       closable: true,

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js
----------------------------------------------------------------------
diff --git 
a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js 
b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js
index 2fb5003..6c9eeee 100644
--- a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js
+++ b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js
@@ -109,6 +109,8 @@ angular.module('zeppelinWebApp').factory('websocketEvents',
       $rootScope.$broadcast('appLoad', data);
     } else if (op === 'APP_STATUS_CHANGE') {
       $rootScope.$broadcast('appStatusChange', data);
+    } else if (op === 'NOTE_REVISION') {
+      $rootScope.$broadcast('noteRevision', data);
     }
   });
 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
----------------------------------------------------------------------
diff --git 
a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js 
b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
index 698b8ff..9a82c9b 100644
--- a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
+++ b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
@@ -161,6 +161,16 @@ 
angular.module('zeppelinWebApp').service('websocketMsgSrv', function($rootScope,
       });
     },
 
+    getNoteRevision: function(noteId, revisionId) {
+      websocketEvents.sendNewEvent({
+        op: 'NOTE_REVISION',
+        data: {
+          noteId: noteId,
+          revisionId: revisionId
+        }
+      });
+    },
+
     isConnected: function() {
       return websocketEvents.isConnected();
     },

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
index c56c4ee..9937d61 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
@@ -55,6 +55,7 @@ import org.apache.zeppelin.interpreter.InterpreterGroup;
 import org.apache.zeppelin.interpreter.InterpreterSetting;
 import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry;
 import org.apache.zeppelin.notebook.repo.NotebookRepo;
+import org.apache.zeppelin.notebook.repo.NotebookRepo.Revision;
 import org.apache.zeppelin.notebook.repo.NotebookRepoSync;
 import org.apache.zeppelin.resource.ResourcePoolUtils;
 import org.apache.zeppelin.scheduler.Job;
@@ -357,6 +358,11 @@ public class Notebook implements NoteEventListener {
     notebookRepo.checkpoint(noteId, checkpointMessage, subject);
   }
 
+  public Note getNoteRevision(String noteId, Revision revision, 
AuthenticationInfo subject)
+      throws IOException {
+    return notebookRepo.get(noteId, revision, subject);
+  }
+
   @SuppressWarnings("rawtypes")
   private Note loadNoteFromRepo(String id, AuthenticationInfo subject) {
     Note note = null;

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
index ab53f5f..4e735e8 100644
--- 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
+++ 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
@@ -354,9 +354,14 @@ public class NotebookRepoSync implements NotebookRepo {
   }
 
   @Override
-  public Note get(String noteId, Revision rev, AuthenticationInfo subject) 
throws IOException {
-    // Auto-generated method stub
-    return null;
+  public Note get(String noteId, Revision rev, AuthenticationInfo subject) {
+    Note revisionNote = null;
+    try {
+      revisionNote = getRepo(0).get(noteId, rev, subject);
+    } catch (IOException e) {
+      LOG.error("Failed to get revision {} of note {}", rev.id, noteId, e);
+    }
+    return revisionNote;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java
----------------------------------------------------------------------
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 08b3235..c0baf40 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
@@ -114,6 +114,9 @@ public class Message {
     CHECKPOINT_NOTEBOOK,    // [c-s] checkpoint notebook to storage repository
                             // @param noteId
                             // @param checkpointName
+    NOTE_REVISION,          // [c-s] get certain revision of note
+                            // @param noteId
+                            // @param revisionId
 
     APP_APPEND_OUTPUT,      // [s-c] append output
     APP_UPDATE_OUTPUT,      // [s-c] update (replace) output

Reply via email to