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)

### 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>