From c774147cd3076afd75adec574a46e8c9b03e42fd Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Mon, 10 Apr 2017 17:16:28 +0200 Subject: [PATCH] #5147: fix problem with lazySeq (#5149) --- .../twosigma/beaker/SerializeToString.java | 60 ++++++++++--------- .../jvm/threads/BeakerOutputHandler.java | 6 +- .../beaker/widgets/DisplayAnyWidget.java | 9 ++- .../widgets/internal/SerializeToJson.java | 2 +- .../jupyter/msg/MessageCreatorTest.java | 16 ++++- 5 files changed, 58 insertions(+), 35 deletions(-) diff --git a/kernel/base/src/main/java/com/twosigma/beaker/SerializeToString.java b/kernel/base/src/main/java/com/twosigma/beaker/SerializeToString.java index ca421f1725..50bbf5e095 100644 --- a/kernel/base/src/main/java/com/twosigma/beaker/SerializeToString.java +++ b/kernel/base/src/main/java/com/twosigma/beaker/SerializeToString.java @@ -19,12 +19,11 @@ import java.util.Hashtable; import java.util.Map; +import com.fasterxml.jackson.core.JsonProcessingException; import com.github.lwhite1.tablesaw.api.Table; -import com.twosigma.beaker.easyform.DisplayEasyForm; import com.twosigma.beaker.easyform.EasyForm; import com.twosigma.beaker.easyform.formitem.*; import com.twosigma.beaker.easyform.serializer.*; -import com.twosigma.beaker.fileloader.CsvPlotReader; import com.twosigma.beaker.jvm.object.OutputContainer; import com.twosigma.beaker.mimetype.MIMEContainer; import com.twosigma.beaker.table.TableDisplay; @@ -82,8 +81,6 @@ import com.twosigma.beaker.chart.xychart.plotitem.Text; import com.twosigma.beaker.chart.xychart.plotitem.YAxis; import com.twosigma.beaker.widgets.DisplayAnyWidget; -import com.twosigma.beaker.widgets.DisplayOutputContainer; -import com.twosigma.beaker.widgets.DisplayWidget; import com.twosigma.beaker.widgets.Widget; import com.twosigma.beaker.widgets.internal.InternalWidget; @@ -92,6 +89,8 @@ public class SerializeToString { + private static ObjectMapper objectMapper = new ObjectMapper(); + private static ObjectMapper mapper; private static Map, JsonSerializer> serializerMap = new Hashtable<>(); private static Map, Object> internalWidgetMap = new Hashtable<>(); @@ -158,38 +157,49 @@ public class SerializeToString { mapper = new ObjectMapper(); mapper.registerModule(module); } - - public static boolean isWidget(Object input) { - return (input instanceof EasyForm) - || (input instanceof OutputContainer) - || (input instanceof Table) - || isInternalWidget(input) - || (input instanceof Widget); - } - + public static MIMEContainer doit(Object input) { MIMEContainer ret = null; - if(input != null){ + if (input != null) { if (isWidget(input)) { DisplayAnyWidget.display(input); ret = Text(""); - } else if(input instanceof MIMEContainer) { + } else if (input instanceof MIMEContainer) { ret = (MIMEContainer) input; - } else{ - ret = Text(input); + } else { + ret = asString(input); } - }else{ + } else { ret = Text("null"); } return ret; } - - public static boolean isInternalWidget(Object result){ + + private static MIMEContainer asString(Object input) { + if (input instanceof String) { + return Text(input); + } + try { + return Text(objectMapper.writeValueAsString(input)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private static boolean isWidget(Object input) { + return (input instanceof EasyForm) + || (input instanceof OutputContainer) + || (input instanceof Table) + || isInternalWidget(input) + || (input instanceof Widget); + } + + public static boolean isInternalWidget(Object result) { boolean ret = false; - if(result != null && result instanceof InternalWidget ){ + if (result != null && result instanceof InternalWidget) { for (Class clazz : internalWidgetMap.keySet()) { ret = clazz.isAssignableFrom(result.getClass()); - if(ret){ + if (ret) { break; } } @@ -197,12 +207,6 @@ public static boolean isInternalWidget(Object result){ return ret; } - public static void showInternalWidget(Object result) { - InternalWidget widget = (InternalWidget) result; - widget.sendModel(); - DisplayWidget.display(widget); - } - protected static Map, JsonSerializer> getSerializerMap() { return serializerMap; } diff --git a/kernel/base/src/main/java/com/twosigma/beaker/jvm/threads/BeakerOutputHandler.java b/kernel/base/src/main/java/com/twosigma/beaker/jvm/threads/BeakerOutputHandler.java index afc8d3a34d..953043ecd6 100644 --- a/kernel/base/src/main/java/com/twosigma/beaker/jvm/threads/BeakerOutputHandler.java +++ b/kernel/base/src/main/java/com/twosigma/beaker/jvm/threads/BeakerOutputHandler.java @@ -16,7 +16,7 @@ package com.twosigma.beaker.jvm.threads; public interface BeakerOutputHandler { - public void write(int b); - public void write(byte[] b); - public void write(byte[] b, int off, int len); + void write(int b); + void write(byte[] b); + void write(byte[] b, int off, int len); } diff --git a/kernel/base/src/main/java/com/twosigma/beaker/widgets/DisplayAnyWidget.java b/kernel/base/src/main/java/com/twosigma/beaker/widgets/DisplayAnyWidget.java index c278dacc4e..52f0a3acaf 100644 --- a/kernel/base/src/main/java/com/twosigma/beaker/widgets/DisplayAnyWidget.java +++ b/kernel/base/src/main/java/com/twosigma/beaker/widgets/DisplayAnyWidget.java @@ -21,7 +21,8 @@ import com.twosigma.beaker.fileloader.CsvPlotReader; import com.twosigma.beaker.jvm.object.OutputContainer; import com.twosigma.beaker.table.TableDisplay; -import static com.twosigma.beaker.SerializeToString.showInternalWidget; +import com.twosigma.beaker.widgets.internal.InternalWidget; + import static com.twosigma.beaker.SerializeToString.isInternalWidget; public class DisplayAnyWidget { @@ -45,4 +46,10 @@ public static void display(Object input) { } } + private static void showInternalWidget(Object result) { + InternalWidget widget = (InternalWidget) result; + widget.sendModel(); + DisplayWidget.display(widget); + } + } diff --git a/kernel/base/src/main/java/com/twosigma/beaker/widgets/internal/SerializeToJson.java b/kernel/base/src/main/java/com/twosigma/beaker/widgets/internal/SerializeToJson.java index bd28bc7dad..62c6664b08 100644 --- a/kernel/base/src/main/java/com/twosigma/beaker/widgets/internal/SerializeToJson.java +++ b/kernel/base/src/main/java/com/twosigma/beaker/widgets/internal/SerializeToJson.java @@ -34,7 +34,7 @@ public static String toJson(Object result) { return result != null ? result.toString() : null; } - protected static boolean isBeakerChart(Object result){ + private static boolean isBeakerChart(Object result){ boolean ret = false; if(result != null){ for (Class clazz : getSerializerMap().keySet()) { diff --git a/kernel/base/src/test/java/com/twosigma/beaker/jupyter/msg/MessageCreatorTest.java b/kernel/base/src/test/java/com/twosigma/beaker/jupyter/msg/MessageCreatorTest.java index 1726172918..e6294068e3 100644 --- a/kernel/base/src/test/java/com/twosigma/beaker/jupyter/msg/MessageCreatorTest.java +++ b/kernel/base/src/test/java/com/twosigma/beaker/jupyter/msg/MessageCreatorTest.java @@ -27,6 +27,7 @@ import java.util.Map; import static com.twosigma.beaker.jupyter.msg.MessageCreator.NULL_RESULT; +import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; public class MessageCreatorTest { @@ -55,12 +56,23 @@ public void createMessageWithNullResult_shouldReturnNullStringForNull() throws E @Test public void createMessageWithNotNullResult_shouldReturnResult() throws Exception { //given - seo.finished("1"); + seo.finished("NotNullResult"); //when List message = messageCreator.createMessage(seo); //then Map data = TestWidgetUtils.getData(message.get(0).getMessage()); - assertThat(data.get(MessageCreator.TEXT_PLAIN)).isEqualTo("1"); + assertThat(data.get(MessageCreator.TEXT_PLAIN)).isEqualTo("NotNullResult"); + } + + @Test + public void createMessageForCollection() throws Exception { + //given + seo.finished(asList("1","2")); + //when + List message = messageCreator.createMessage(seo); + //then + Map data = TestWidgetUtils.getData(message.get(0).getMessage()); + assertThat(data.get(MessageCreator.TEXT_PLAIN)).isEqualTo("[\"1\",\"2\"]"); } @Test