From edc77e616b7d2b7ee5b3766a8608c913c9d2b0f6 Mon Sep 17 00:00:00 2001 From: jarek Date: Wed, 13 Jun 2018 10:23:11 +0200 Subject: [PATCH] #5039: (scala) add support for autotranslation --- .../beakerx/BeakerxClientManager.java | 31 +++++++++++++++++++ .../twosigma/beakerx/chart/ChartDetails.java | 6 ++-- .../beakerx/evaluator/BaseEvaluator.java | 3 +- .../com/twosigma/beakerx/kernel/Kernel.java | 5 --- .../beakerx/kernel/KernelFunctionality.java | 2 -- .../kernel/comm/AutotranslationHandler.java | 6 ++-- .../kernel/comm/GetCodeCellsHandler.java | 3 +- .../beakerx/table/TableDisplayActions.java | 6 ++-- .../com/twosigma/beakerx/widget/Button.java | 16 +++++----- .../java/com/twosigma/beakerx/KernelTest.java | 4 --- .../scala/evaluator/BeakerxObjectFactory.java | 2 +- .../evaluator/BeakerxObjectFactoryImpl.java | 16 +++++----- .../scala/evaluator/ScalaEvaluator.java | 11 +++++-- .../evaluator/NoBeakerxObjectTestFactory.java | 2 +- .../autocomplete/db/DbExplorerFactory.java | 3 +- 15 files changed, 74 insertions(+), 42 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/BeakerxClientManager.java diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxClientManager.java b/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxClientManager.java new file mode 100644 index 0000000000..570eb2a20e --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxClientManager.java @@ -0,0 +1,31 @@ +/* + * Copyright 2018 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed 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 com.twosigma.beakerx; + + +public class BeakerxClientManager { + + private static BeakerxClient beakerxClientInst; + + public static BeakerxClient register(BeakerxClient beakerxClient) { + beakerxClientInst = beakerxClient; + return beakerxClientInst; + } + + public static BeakerxClient get() { + return beakerxClientInst; + } +} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/chart/ChartDetails.java b/kernel/base/src/main/java/com/twosigma/beakerx/chart/ChartDetails.java index 6f4195d7de..0fafe6ef83 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/chart/ChartDetails.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/chart/ChartDetails.java @@ -16,7 +16,7 @@ package com.twosigma.beakerx.chart; -import com.twosigma.beakerx.kernel.KernelManager; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.widget.CommActions; import org.apache.commons.lang3.StringUtils; @@ -90,9 +90,9 @@ protected void onActionDetails(HashMap content, Message message) { info.setGraphics(g); updateDetails(info); if (CommActions.ONCLICK.equals(info.getActionType())) { - KernelManager.get().getBeakerx().runByTag(info.getTag()); + BeakerxClientManager.get().runByTag(info.getTag()); } else if (CommActions.ONKEY.equals(info.getActionType())) { - KernelManager.get().getBeakerx().runByTag(info.getTag()); + BeakerxClientManager.get().runByTag(info.getTag()); } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java index 7f5bec94c8..2e0e499e6b 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java @@ -16,6 +16,7 @@ package com.twosigma.beakerx.evaluator; import com.twosigma.beakerx.BeakerxClient; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.DefaultJVMVariables; import com.twosigma.beakerx.inspect.Inspect; import com.twosigma.beakerx.inspect.InspectResult; @@ -70,7 +71,7 @@ public BaseEvaluator(String id, sessionId = sId; executor = cellExecutor; tempFolder = tempFolderFactory.createTempFolder(); - this.beakerxClient = beakerxClient; + this.beakerxClient = BeakerxClientManager.register(beakerxClient); outDir = getOrCreateFile(tempFolder.toString() + File.separator + "outDir").getPath(); classPath = new Classpath(); classPath.add(new PathToJar(outDir)); diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java index 8fb468bd40..26ba39db42 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java @@ -102,11 +102,6 @@ protected Kernel(final String sessionId, initJvmRepr(); } - @Override - public BeakerxClient getBeakerx() { - return this.evaluatorManager.getBeakerx(); - } - public abstract CommOpenHandler getCommOpenHandler(Kernel kernel); public abstract KernelHandler getKernelInfoHandler(Kernel kernel); diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java index 174e58dab0..168f8b3020 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java @@ -99,6 +99,4 @@ public interface KernelFunctionality { MagicKernelManager getManagerByCommId(String commId); void addCommIdManagerMapping(String commId, String kernel); - - BeakerxClient getBeakerx(); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/AutotranslationHandler.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/AutotranslationHandler.java index 4a5a2c12b0..2337405593 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/AutotranslationHandler.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/AutotranslationHandler.java @@ -15,9 +15,12 @@ */ package com.twosigma.beakerx.kernel.comm; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.kernel.KernelFunctionality; import com.twosigma.beakerx.message.Message; + import java.util.Map; + import static com.twosigma.beakerx.handler.KernelHandlerWrapper.wrapBusyIdle; public class AutotranslationHandler extends BaseHandler { @@ -34,9 +37,8 @@ public void handle(Message message) { } private void handleMsg(Message message, KernelFunctionality kernel) { - System.out.println(message); Map data = (Map) message.getContent().get("data"); - kernel.getBeakerx().update((String) data.get("name"), data.get("value")); + BeakerxClientManager.get().update((String) data.get("name"), data.get("value")); } @Override diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/GetCodeCellsHandler.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/GetCodeCellsHandler.java index b4ec37d0db..5b2ba3514c 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/GetCodeCellsHandler.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/GetCodeCellsHandler.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.CodeCell; import com.twosigma.beakerx.jvm.serialization.BasicObjectSerializer; import com.twosigma.beakerx.jvm.serialization.BeakerObjectConverter; @@ -53,7 +54,7 @@ public void handle(Message message) { private void handleMsg(Message message) { try { List cells = getBeakerCodeCells(getValueFromData(message, getHandlerCommand())); - kernel.getBeakerx().getMessageQueue("CodeCells").put(cells); + BeakerxClientManager.get().getMessageQueue("CodeCells").put(cells); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/table/TableDisplayActions.java b/kernel/base/src/main/java/com/twosigma/beakerx/table/TableDisplayActions.java index cb6b1ab959..f7ceceee36 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/table/TableDisplayActions.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/table/TableDisplayActions.java @@ -15,7 +15,7 @@ */ package com.twosigma.beakerx.table; -import com.twosigma.beakerx.kernel.KernelManager; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.message.Message; import com.twosigma.beakerx.table.action.TableActionDetails; import com.twosigma.beakerx.widget.CommActions; @@ -87,11 +87,11 @@ private void onActionDetails(HashMap content, Message message) { tableDisplay.setDetails(details); if (CommActions.CONTEXT_MENU_CLICK.equals(details.getActionType())) { if (tableDisplay.getContextMenuTags() != null && !tableDisplay.getContextMenuTags().isEmpty() && details.getContextMenuItem() != null && !details.getContextMenuItem().isEmpty()) { - KernelManager.get().getBeakerx().runByTag(tableDisplay.getContextMenuTags().get(details.getContextMenuItem())); + BeakerxClientManager.get().runByTag(tableDisplay.getContextMenuTags().get(details.getContextMenuItem())); } } else if (CommActions.DOUBLE_CLICK.equals(details.getActionType())) { if (tableDisplay.getDoubleClickTag() != null && !tableDisplay.getDoubleClickTag().isEmpty()) { - KernelManager.get().getBeakerx().runByTag(tableDisplay.getDoubleClickTag()); + BeakerxClientManager.get().runByTag(tableDisplay.getDoubleClickTag()); } } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/widget/Button.java b/kernel/base/src/main/java/com/twosigma/beakerx/widget/Button.java index b866e6771c..f54cc70c25 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/widget/Button.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/widget/Button.java @@ -15,8 +15,8 @@ */ package com.twosigma.beakerx.widget; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.handler.Handler; -import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.message.Message; import java.io.Serializable; @@ -34,7 +34,7 @@ public class Button extends ValueWidget { public static final String ICON = "icon"; public static final String BUTTON_STYLE = "button_style"; - private String tooltip= EMPTY_STRING; + private String tooltip = EMPTY_STRING; private String tag; private String icon = EMPTY_STRING; private String button_style = EMPTY_STRING; @@ -59,7 +59,7 @@ protected HashMap content(HashMap co content.put(BUTTON_STYLE, button_style); return content; } - + public String getTooltip() { return tooltip; @@ -88,12 +88,12 @@ private void handleOnClick(Message message) { handleCommEventSync(message, CommActions.CLICK, this::onClick); } - public void onClick(HashMap content, Message message){ - if(actionPerformed != null){ + public void onClick(HashMap content, Message message) { + if (actionPerformed != null) { actionPerformed.executeAction(content, message); } - if(getTag() != null && !getTag().isEmpty()){ - KernelManager.get().getBeakerx().runByTag(getTag()); + if (getTag() != null && !getTag().isEmpty()) { + BeakerxClientManager.get().runByTag(getTag()); } } @@ -121,5 +121,5 @@ public void setButton_style(String button_style) { this.button_style = button_style; sendUpdate(BUTTON_STYLE, button_style); } - + } \ No newline at end of file diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java index 0986b11634..2d756d3fa5 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java @@ -432,8 +432,4 @@ public MagicKernelManager getManagerByCommId(String commId) { @Override public void addCommIdManagerMapping(String commId, String kernel) {} - @Override - public BeakerxClient getBeakerx() { - return null; - } } diff --git a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactory.java b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactory.java index dc7e507b8e..24bdad4a72 100644 --- a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactory.java +++ b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactory.java @@ -17,5 +17,5 @@ public interface BeakerxObjectFactory { - String create(String sessionId); + String create(); } diff --git a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactoryImpl.java b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactoryImpl.java index e7995d825f..79ea7f0c07 100644 --- a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactoryImpl.java +++ b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/BeakerxObjectFactoryImpl.java @@ -18,20 +18,20 @@ public class BeakerxObjectFactoryImpl implements BeakerxObjectFactory { @Override - public String create(String sessionId) { - return "import com.twosigma.beakerx.NamespaceClient\n" + + public String create() { + return "import com.twosigma.beakerx.BeakerxClientManager\n" + "import language.dynamics\n" + - "var _beaker = NamespaceClient.getBeaker(\"" + sessionId + "\")\n" + - "object beaker extends Dynamic {\n" + - " def selectDynamic( field : String ) = _beaker.get(field)\n" + + "var _beakerx = BeakerxClientManager.get()\n" + + "object beakerx extends Dynamic {\n" + + " def selectDynamic( field : String ) = _beakerx.get(field)\n" + " def updateDynamic (field : String)(value : Any) : Any = {\n" + - " _beaker.set(field,value)\n" + + " _beakerx.set(field,value)\n" + " return value\n" + " }\n" + " def applyDynamic(methodName: String)(args: AnyRef*) = {\n" + " def argtypes = args.map(_.getClass)\n" + - " def method = _beaker.getClass.getMethod(methodName, argtypes: _*)\n" + - " method.invoke(_beaker,args: _*)\n" + + " def method = _beakerx.getClass.getMethod(methodName, argtypes: _*)\n" + + " method.invoke(_beakerx,args: _*)\n" + " }\n" + "}\n"; } diff --git a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java index 3d77d70b5e..a7f1bc0d49 100644 --- a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java +++ b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java @@ -59,7 +59,14 @@ public class ScalaEvaluator extends BaseEvaluator { private ScalaEvaluatorGlue shell; public ScalaEvaluator(String id, String sId, Provider osp, EvaluatorParameters evaluatorParameters) { - this(id, sId, osp, new BeakerCellExecutor("scala"), new BeakerxObjectFactoryImpl(), new TempFolderFactoryImpl(), evaluatorParameters, new NamespaceClient(sId, new AutotranslationServiceImpl())); + this(id, + sId, + osp, + new BeakerCellExecutor("scala"), + new BeakerxObjectFactoryImpl(), + new TempFolderFactoryImpl(), + evaluatorParameters, + new NamespaceClient(sId, new AutotranslationServiceImpl())); } public ScalaEvaluator(String id, String sId, Provider osp, CellExecutor cellExecutor, BeakerxObjectFactory beakerxObjectFactory, TempFolderFactory tempFolderFactory, EvaluatorParameters evaluatorParameters, BeakerxClient beakerxClient) { @@ -155,7 +162,7 @@ private ScalaEvaluatorGlue createNewEvaluator() { addImportsToShell(shell, getImports().getImportPaths()); } logger.debug("creating beaker object"); - String r = shell.evaluate2(this.beakerxObjectFactory.create(getSessionId())); + String r = shell.evaluate2(this.beakerxObjectFactory.create()); if (r != null && !r.isEmpty()) { logger.warn("ERROR creating beaker object: {}", r); } diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/NoBeakerxObjectTestFactory.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/NoBeakerxObjectTestFactory.java index ed4978d263..a11bf5e4f5 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/NoBeakerxObjectTestFactory.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/NoBeakerxObjectTestFactory.java @@ -18,7 +18,7 @@ public class NoBeakerxObjectTestFactory implements BeakerxObjectFactory { @Override - public String create(String sessionId) { + public String create() { return "()"; } } diff --git a/kernel/sql/src/main/java/com/twosigma/beakerx/sql/autocomplete/db/DbExplorerFactory.java b/kernel/sql/src/main/java/com/twosigma/beakerx/sql/autocomplete/db/DbExplorerFactory.java index b6e2c18764..8d98383b16 100644 --- a/kernel/sql/src/main/java/com/twosigma/beakerx/sql/autocomplete/db/DbExplorerFactory.java +++ b/kernel/sql/src/main/java/com/twosigma/beakerx/sql/autocomplete/db/DbExplorerFactory.java @@ -17,6 +17,7 @@ package com.twosigma.beakerx.sql.autocomplete.db; import com.twosigma.beakerx.BeakerxClient; +import com.twosigma.beakerx.BeakerxClientManager; import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.sql.BeakerParser; import com.twosigma.beakerx.sql.ConnectionStringHolder; @@ -40,7 +41,7 @@ public class DbExplorerFactory { public static DbInfo getDbInfo(String txt, JDBCClient jdbcClient, String sessionId, ConnectionStringHolder defaultConnectionString, Map namedConnectionString) { - final BeakerxClient namespaceClient = KernelManager.get().getBeakerx(); + final BeakerxClient namespaceClient = BeakerxClientManager.get(); final BeakerParser beakerParser; try { beakerParser = new BeakerParser(txt, namespaceClient,