From 97bfd7d8c2dd18ad5a93a8374b7cd397612bf4c2 Mon Sep 17 00:00:00 2001 From: Renjith Kamath Date: Fri, 29 Jul 2016 18:28:31 +0530 Subject: [PATCH 1/5] ZEPPELIN-1254 Make get and save Interpreter bindings calls via websocket --- .../zeppelin/socket/NotebookServer.java | 49 +++++++++++++++++++ .../src/app/notebook/notebook.controller.js | 36 ++++---------- .../websocketEvents.factory.js | 2 + .../websocketEvents/websocketMsg.service.js | 9 ++++ .../test/spec/controllers/notebook.js | 3 +- .../zeppelin/notebook/socket/Message.java | 8 ++- 6 files changed, 79 insertions(+), 28 deletions(-) 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 0f8ce70fc39..455c1a7062f 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 @@ -39,6 +39,7 @@ import org.apache.zeppelin.interpreter.InterpreterGroup; import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; +import org.apache.zeppelin.rest.message.InterpreterSettingListForNoteBind; import org.apache.zeppelin.user.AuthenticationInfo; import org.apache.zeppelin.interpreter.InterpreterOutput; import org.apache.zeppelin.interpreter.InterpreterResult; @@ -234,6 +235,12 @@ public void onMessage(NotebookSocket conn, String msg) { case LIST_UPDATE_NOTEBOOK_JOBS: unicastUpdateNotebookJobInfo(conn, messagereceived); break; + case GET_INTERPRETER_BINDINGS: + getInterpreterBindings(conn, messagereceived); + break; + case SAVE_INTERPRETER_BINDINGS: + saveInterpreterBindings(conn, messagereceived); + break; default: break; } @@ -411,6 +418,48 @@ public void unicastUpdateNotebookJobInfo(NotebookSocket conn, Message fromMessag .put("notebookRunningJobs", response))); } + public void saveInterpreterBindings(NotebookSocket conn, Message fromMessage) { + try { + List settingIdList = gson.fromJson(String.valueOf( + fromMessage.data.get("selectedSettingIds")), new TypeToken>() { + }.getType()); + notebook().bindInterpretersToNote((String) fromMessage.data.get("noteID"), settingIdList); + } catch (Exception e) { + LOG.error("Error while saving interpreter bindings", e); + } + } + + public void getInterpreterBindings(NotebookSocket conn, Message fromMessage) + throws IOException { + List settingList = new LinkedList<>(); + + List selectedSettings = + notebook().getBindedInterpreterSettings((String) fromMessage.data.get("noteID")); + for (InterpreterSetting setting : selectedSettings) { + settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), + setting.getInterpreterInfos(), true)); + } + + List availableSettings = notebook().getInterpreterFactory().get(); + for (InterpreterSetting setting : availableSettings) { + boolean selected = false; + for (InterpreterSetting selectedSetting : selectedSettings) { + if (selectedSetting.getId().equals(setting.getId())) { + selected = true; + break; + } + } + + if (!selected) { + settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), + setting.getInterpreterInfos(), false)); + } + } + + conn.send(serializeMessage(new Message(OP.INTERPRETER_BINDINGS) + .put("interpreterBindings", settingList))); + } + public List> generateNotebooksInfo(boolean needsReload, AuthenticationInfo subject) { diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js b/zeppelin-web/src/app/notebook/notebook.controller.js index dc59f50ae71..3a847070f89 100644 --- a/zeppelin-web/src/app/notebook/notebook.controller.js +++ b/zeppelin-web/src/app/notebook/notebook.controller.js @@ -450,22 +450,13 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro }; var getInterpreterBindings = function(callback) { - $http.get(baseUrlSrv.getRestApiBase() + '/notebook/interpreter/bind/' + $scope.note.id). - success(function(data, status, headers, config) { - $scope.interpreterBindings = data.body; - $scope.interpreterBindingsOrig = angular.copy($scope.interpreterBindings); // to check dirty - if (callback) { - callback(); - } - }). - error(function(data, status, headers, config) { - if (status !== 0) { - console.log('Error %o %o', status, data.message); - } - }); + websocketMsgSrv.getInterpreterBindings($scope.note.id); }; - var getInterpreterBindingsCallBack = function() { + $scope.$on('interpreterBindings', function(event, data) { + $scope.interpreterBindings = data.interpreterBindings; + $scope.interpreterBindingsOrig = angular.copy($scope.interpreterBindings); // to check dirty + var selected = false; var key; var setting; @@ -490,7 +481,7 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro } $scope.showSetting = true; } - }; + }); $scope.interpreterSelectionListeners = { accept: function(sourceItemHandleScope, destSortableScope) {return true;}, @@ -530,16 +521,9 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro selectedSettingIds.push(setting.id); } } - - $http.put(baseUrlSrv.getRestApiBase() + '/notebook/interpreter/bind/' + $scope.note.id, - selectedSettingIds). - success(function(data, status, headers, config) { - console.log('Interpreter binding %o saved', selectedSettingIds); - $scope.showSetting = false; - }). - error(function(data, status, headers, config) { - console.log('Error %o %o', status, data.message); - }); + websocketMsgSrv.saveInterpreterBindings($scope.note.id, selectedSettingIds); + console.log('Interpreter bindings %o saved', selectedSettingIds); + $scope.showSetting = false; }; $scope.toggleSetting = function() { @@ -983,7 +967,7 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro } initializeLookAndFeel(); //open interpreter binding setting when there're none selected - getInterpreterBindings(getInterpreterBindingsCallBack); + getInterpreterBindings(); //getInterpreterBindings(getInterpreterBindingsCallBack); }); $scope.$on('$destroy', function() { diff --git a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js index 76571374998..e4f45db0218 100644 --- a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js +++ b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js @@ -113,6 +113,8 @@ angular.module('zeppelinWebApp').factory('websocketEvents', $rootScope.$broadcast('listRevisionHistory', data); } else if (op === 'NOTE_REVISION') { $rootScope.$broadcast('noteRevision', data); + } else if (op === 'INTERPRETER_BINDINGS') { + $rootScope.$broadcast('interpreterBindings', data); } }); diff --git a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js index a4f7802d348..0e4034c941e 100644 --- a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js +++ b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js @@ -196,6 +196,15 @@ angular.module('zeppelinWebApp').service('websocketMsgSrv', function($rootScope, unsubscribeJobManager: function() { websocketEvents.sendNewEvent({op: 'UNSUBSCRIBE_JOBMANAGER'}); + }, + + getInterpreterBindings: function(noteID) { + websocketEvents.sendNewEvent({op: 'GET_INTERPRETER_BINDINGS', data: {noteID: noteID}}); + }, + + saveInterpreterBindings: function(noteID, selectedSettingIds) { + websocketEvents.sendNewEvent({op: 'SAVE_INTERPRETER_BINDINGS', + data: {noteID: noteID, selectedSettingIds: selectedSettingIds}}); } }; diff --git a/zeppelin-web/test/spec/controllers/notebook.js b/zeppelin-web/test/spec/controllers/notebook.js index d9b35b17b77..2223f3c30f1 100644 --- a/zeppelin-web/test/spec/controllers/notebook.js +++ b/zeppelin-web/test/spec/controllers/notebook.js @@ -7,7 +7,8 @@ describe('Controller: NotebookCtrl', function() { var websocketMsgSrvMock = { getNotebook: function() {}, - listRevisionHistory: function() {} + listRevisionHistory: function() {}, + getInterpreterBindings: function() {} }; var baseUrlSrvMock = { 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 e2f5fe9186f..e91dfbb99e7 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 @@ -127,8 +127,14 @@ public static enum OP { APP_STATUS_CHANGE, // [s-c] on app status change LIST_NOTEBOOK_JOBS, // [c-s] get notebook job management infomations - LIST_UPDATE_NOTEBOOK_JOBS // [c-s] get job management informations for until unixtime + LIST_UPDATE_NOTEBOOK_JOBS, // [c-s] get job management informations for until unixtime // @param unixTime + GET_INTERPRETER_BINDINGS, // [c-s] get interpreter bindings + // @param noteID + SAVE_INTERPRETER_BINDINGS, // [c-s] save interpreter bindings + // @param noteID + // @param selectedSettingIds + INTERPRETER_BINDINGS // [s-c] interpreter bindings } public OP op; From 299bb511bff676a5e4e5482bcc6ed958a8acf79f Mon Sep 17 00:00:00 2001 From: Renjith Kamath Date: Mon, 1 Aug 2016 17:42:30 +0530 Subject: [PATCH 2/5] ZEPPELIN-1254 review fix --- .../apache/zeppelin/rest/NotebookRestApi.java | 30 ++-------- .../zeppelin/socket/NotebookServer.java | 52 +++++------------ .../InterpreterSettingsList.java} | 8 +-- .../utils/InterpreterBindingUtils.java | 58 +++++++++++++++++++ 4 files changed, 81 insertions(+), 67 deletions(-) rename zeppelin-server/src/main/java/org/apache/zeppelin/{rest/message/InterpreterSettingListForNoteBind.java => types/InterpreterSettingsList.java} (84%) create mode 100644 zeppelin-server/src/main/java/org/apache/zeppelin/utils/InterpreterBindingUtils.java diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java index 700fe1a1c2d..80b086805f1 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -39,18 +38,18 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import org.apache.commons.lang3.StringUtils; +import org.apache.zeppelin.utils.InterpreterBindingUtils; import org.quartz.CronExpression; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.zeppelin.annotation.ZeppelinApi; -import org.apache.zeppelin.interpreter.InterpreterSetting; import org.apache.zeppelin.notebook.Note; import org.apache.zeppelin.notebook.Notebook; import org.apache.zeppelin.notebook.NotebookAuthorization; import org.apache.zeppelin.notebook.Paragraph; import org.apache.zeppelin.rest.message.CronRequest; -import org.apache.zeppelin.rest.message.InterpreterSettingListForNoteBind; +import org.apache.zeppelin.types.InterpreterSettingsList; import org.apache.zeppelin.rest.message.NewNotebookRequest; import org.apache.zeppelin.rest.message.NewParagraphRequest; import org.apache.zeppelin.rest.message.RunParagraphWithParametersRequest; @@ -186,29 +185,8 @@ public Response bind(@PathParam("noteId") String noteId, String req) throws IOEx @Path("interpreter/bind/{noteId}") @ZeppelinApi public Response bind(@PathParam("noteId") String noteId) { - List settingList = new LinkedList<>(); - - List selectedSettings = notebook.getBindedInterpreterSettings(noteId); - for (InterpreterSetting setting : selectedSettings) { - settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), - setting.getInterpreterInfos(), true)); - } - - List availableSettings = notebook.getInterpreterFactory().get(); - for (InterpreterSetting setting : availableSettings) { - boolean selected = false; - for (InterpreterSetting selectedSetting : selectedSettings) { - if (selectedSetting.getId().equals(setting.getId())) { - selected = true; - break; - } - } - - if (!selected) { - settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), - setting.getInterpreterInfos(), false)); - } - } + List settingList = + InterpreterBindingUtils.getInterpreterBindings(notebook, noteId); return new JsonResponse<>(Status.OK, "", settingList).build(); } 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 455c1a7062f..6684c7c6bfc 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 @@ -16,19 +16,10 @@ */ package org.apache.zeppelin.socket; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.UnknownHostException; -import java.util.*; -import java.util.concurrent.ConcurrentLinkedQueue; - -import javax.servlet.http.HttpServletRequest; - import com.google.common.base.Strings; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; - import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars; import org.apache.zeppelin.display.AngularObject; @@ -37,14 +28,12 @@ import org.apache.zeppelin.helium.ApplicationEventListener; import org.apache.zeppelin.helium.HeliumPackage; import org.apache.zeppelin.interpreter.InterpreterGroup; -import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; -import org.apache.zeppelin.rest.message.InterpreterSettingListForNoteBind; -import org.apache.zeppelin.user.AuthenticationInfo; import org.apache.zeppelin.interpreter.InterpreterOutput; import org.apache.zeppelin.interpreter.InterpreterResult; import org.apache.zeppelin.interpreter.InterpreterSetting; +import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; +import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; import org.apache.zeppelin.notebook.*; import org.apache.zeppelin.notebook.repo.NotebookRepo; import org.apache.zeppelin.notebook.repo.NotebookRepo.Revision; @@ -54,6 +43,9 @@ import org.apache.zeppelin.scheduler.Job.Status; import org.apache.zeppelin.server.ZeppelinServer; import org.apache.zeppelin.ticket.TicketContainer; +import org.apache.zeppelin.types.InterpreterSettingsList; +import org.apache.zeppelin.user.AuthenticationInfo; +import org.apache.zeppelin.utils.InterpreterBindingUtils; import org.apache.zeppelin.utils.SecurityUtils; import org.eclipse.jetty.websocket.servlet.WebSocketServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; @@ -61,6 +53,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.UnknownHostException; +import java.util.*; +import java.util.concurrent.ConcurrentLinkedQueue; + /** * Zeppelin websocket service. */ @@ -431,30 +430,9 @@ public void saveInterpreterBindings(NotebookSocket conn, Message fromMessage) { public void getInterpreterBindings(NotebookSocket conn, Message fromMessage) throws IOException { - List settingList = new LinkedList<>(); - - List selectedSettings = - notebook().getBindedInterpreterSettings((String) fromMessage.data.get("noteID")); - for (InterpreterSetting setting : selectedSettings) { - settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), - setting.getInterpreterInfos(), true)); - } - - List availableSettings = notebook().getInterpreterFactory().get(); - for (InterpreterSetting setting : availableSettings) { - boolean selected = false; - for (InterpreterSetting selectedSetting : selectedSettings) { - if (selectedSetting.getId().equals(setting.getId())) { - selected = true; - break; - } - } - - if (!selected) { - settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(), - setting.getInterpreterInfos(), false)); - } - } + String noteID = (String) fromMessage.data.get("noteID"); + List settingList = + InterpreterBindingUtils.getInterpreterBindings(notebook(), noteID); conn.send(serializeMessage(new Message(OP.INTERPRETER_BINDINGS) .put("interpreterBindings", settingList))); diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java b/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java similarity index 84% rename from zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java rename to zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java index 6ec5a54a3ac..34a987ed161 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.zeppelin.rest.message; +package org.apache.zeppelin.types; import java.util.List; @@ -24,14 +24,14 @@ /** * InterpreterSetting information for binding */ -public class InterpreterSettingListForNoteBind { +public class InterpreterSettingsList { private String id; private String name; private boolean selected; private List interpreters; - public InterpreterSettingListForNoteBind(String id, String name, - List interpreters, boolean selected) { + public InterpreterSettingsList(String id, String name, + List interpreters, boolean selected) { this.id = id; this.name = name; this.interpreters = interpreters; diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/utils/InterpreterBindingUtils.java b/zeppelin-server/src/main/java/org/apache/zeppelin/utils/InterpreterBindingUtils.java new file mode 100644 index 00000000000..9333afd9ef8 --- /dev/null +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/utils/InterpreterBindingUtils.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.zeppelin.utils; + +import org.apache.zeppelin.interpreter.InterpreterSetting; +import org.apache.zeppelin.notebook.Notebook; +import org.apache.zeppelin.types.InterpreterSettingsList; + +import java.util.LinkedList; +import java.util.List; + +/** + * Utils for interpreter bindings + */ +public class InterpreterBindingUtils { + public static List getInterpreterBindings(Notebook notebook, + String noteId) { + List settingList = new LinkedList<>(); + List selectedSettings = + notebook.getBindedInterpreterSettings(noteId); + for (InterpreterSetting setting : selectedSettings) { + settingList.add(new InterpreterSettingsList(setting.getId(), setting.getName(), + setting.getInterpreterInfos(), true)); + } + + List availableSettings = notebook.getInterpreterFactory().get(); + for (InterpreterSetting setting : availableSettings) { + boolean selected = false; + for (InterpreterSetting selectedSetting : selectedSettings) { + if (selectedSetting.getId().equals(setting.getId())) { + selected = true; + break; + } + } + + if (!selected) { + settingList.add(new InterpreterSettingsList(setting.getId(), setting.getName(), + setting.getInterpreterInfos(), false)); + } + } + + return settingList; + } +} From ab0bced9d6bfd47c702c9bb15d9332445a1d845e Mon Sep 17 00:00:00 2001 From: Renjith Kamath Date: Tue, 2 Aug 2016 16:05:08 +0530 Subject: [PATCH 3/5] ZEPPELIN-1254 boradcast after updating the interpreter bindings --- .../org/apache/zeppelin/rest/NotebookRestApi.java | 1 + .../apache/zeppelin/socket/NotebookServer.java | 15 +++++++++++---- .../src/app/notebook/notebook.controller.js | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java index 80b086805f1..f33bef19ae8 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java @@ -187,6 +187,7 @@ public Response bind(@PathParam("noteId") String noteId, String req) throws IOEx public Response bind(@PathParam("noteId") String noteId) { List settingList = InterpreterBindingUtils.getInterpreterBindings(notebook, noteId); + notebookServer.broadcastInterpreterBindings(noteId, settingList); return new JsonResponse<>(Status.OK, "", settingList).build(); } 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 6684c7c6bfc..78305f760d3 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 @@ -418,11 +418,14 @@ public void unicastUpdateNotebookJobInfo(NotebookSocket conn, Message fromMessag } public void saveInterpreterBindings(NotebookSocket conn, Message fromMessage) { + String noteId = (String) fromMessage.data.get("noteID"); try { List settingIdList = gson.fromJson(String.valueOf( fromMessage.data.get("selectedSettingIds")), new TypeToken>() { }.getType()); - notebook().bindInterpretersToNote((String) fromMessage.data.get("noteID"), settingIdList); + notebook().bindInterpretersToNote(noteId, settingIdList); + broadcastInterpreterBindings(noteId, + InterpreterBindingUtils.getInterpreterBindings(notebook(), noteId)); } catch (Exception e) { LOG.error("Error while saving interpreter bindings", e); } @@ -433,9 +436,7 @@ public void getInterpreterBindings(NotebookSocket conn, Message fromMessage) String noteID = (String) fromMessage.data.get("noteID"); List settingList = InterpreterBindingUtils.getInterpreterBindings(notebook(), noteID); - - conn.send(serializeMessage(new Message(OP.INTERPRETER_BINDINGS) - .put("interpreterBindings", settingList))); + broadcastInterpreterBindings(noteID, settingList); } public List> generateNotebooksInfo(boolean needsReload, @@ -477,6 +478,12 @@ public void broadcastNote(Note note) { broadcast(note.id(), new Message(OP.NOTE).put("note", note)); } + public void broadcastInterpreterBindings(String noteId, + List settingList) { + broadcast(noteId, new Message(OP.INTERPRETER_BINDINGS) + .put("interpreterBindings", settingList)); + } + public void broadcastNoteList(AuthenticationInfo subject) { List> notesInfo = generateNotebooksInfo(false, subject); broadcastAll(new Message(OP.NOTES_INFO).put("notes", notesInfo)); diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js b/zeppelin-web/src/app/notebook/notebook.controller.js index 3a847070f89..5d6e359a126 100644 --- a/zeppelin-web/src/app/notebook/notebook.controller.js +++ b/zeppelin-web/src/app/notebook/notebook.controller.js @@ -449,7 +449,7 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro } }; - var getInterpreterBindings = function(callback) { + var getInterpreterBindings = function() { websocketMsgSrv.getInterpreterBindings($scope.note.id); }; @@ -967,7 +967,7 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro } initializeLookAndFeel(); //open interpreter binding setting when there're none selected - getInterpreterBindings(); //getInterpreterBindings(getInterpreterBindingsCallBack); + getInterpreterBindings(); }); $scope.$on('$destroy', function() { From 55d95ec767166d4f5a8fb6c1e0254ae465dc1cd5 Mon Sep 17 00:00:00 2001 From: Renjith Kamath Date: Tue, 2 Aug 2016 21:20:01 +0530 Subject: [PATCH 4/5] ZEPPELIN-1254 review fix --- .../main/java/org/apache/zeppelin/socket/NotebookServer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 78305f760d3..00971ad8e8b 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 @@ -436,7 +436,8 @@ public void getInterpreterBindings(NotebookSocket conn, Message fromMessage) String noteID = (String) fromMessage.data.get("noteID"); List settingList = InterpreterBindingUtils.getInterpreterBindings(notebook(), noteID); - broadcastInterpreterBindings(noteID, settingList); + conn.send(serializeMessage(new Message(OP.INTERPRETER_BINDINGS) + .put("interpreterBindings", settingList))); } public List> generateNotebooksInfo(boolean needsReload, From 6ac17486db445f71d77054343882c793974469a8 Mon Sep 17 00:00:00 2001 From: Renjith Kamath Date: Wed, 3 Aug 2016 17:55:12 +0530 Subject: [PATCH 5/5] ZEPPELIN-1254 revert indentation --- .../java/org/apache/zeppelin/types/InterpreterSettingsList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java b/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java index 34a987ed161..e0169167619 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/types/InterpreterSettingsList.java @@ -31,7 +31,7 @@ public class InterpreterSettingsList { private List interpreters; public InterpreterSettingsList(String id, String name, - List interpreters, boolean selected) { + List interpreters, boolean selected) { this.id = id; this.name = name; this.interpreters = interpreters;