From 20cc55e0b22817519c2affb70d4b5f478d9ae42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mitusi=C5=84ski?= <33416713+lmitusinski@users.noreply.github.com> Date: Tue, 17 Jul 2018 20:54:35 +0200 Subject: [PATCH] #7461 fix for displaying EasyForm in OutputContainer for JVM kernels (#7691) * #7461 fix for displaying EasyForm in OutputContainer for JVM kernels * #7461 introducing WidgetItem interface for handling display on output container items --- .../twosigma/beakerx/easyform/EasyForm.java | 19 +++++++++++---- .../object/OutputContainerLayoutManager.java | 9 ++++---- .../com/twosigma/beakerx/widget/Widget.java | 17 +++++++++----- .../twosigma/beakerx/widget/WidgetItem.java | 23 +++++++++++++++++++ 4 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/widget/WidgetItem.java diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/easyform/EasyForm.java b/kernel/base/src/main/java/com/twosigma/beakerx/easyform/EasyForm.java index 61e301806a..5f5c732be7 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/easyform/EasyForm.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/easyform/EasyForm.java @@ -25,15 +25,16 @@ import com.twosigma.beakerx.easyform.formitem.widgets.ComboBoxWidget; import com.twosigma.beakerx.easyform.formitem.widgets.DatePickerComponentWidget; import com.twosigma.beakerx.easyform.formitem.widgets.PasswordWidget; +import com.twosigma.beakerx.easyform.formitem.widgets.RadioButtonComponentWidget; import com.twosigma.beakerx.easyform.formitem.widgets.SelectMultipleSingleWidget; import com.twosigma.beakerx.easyform.formitem.widgets.SelectMultipleWidget; -import com.twosigma.beakerx.easyform.formitem.widgets.RadioButtonComponentWidget; import com.twosigma.beakerx.easyform.formitem.widgets.TextAreaWidget; import com.twosigma.beakerx.easyform.formitem.widgets.TextFieldWidget; import com.twosigma.beakerx.widget.DOMWidget; import com.twosigma.beakerx.widget.DisplayableWidget; import com.twosigma.beakerx.widget.ValueWidget; import com.twosigma.beakerx.widget.Widget; +import com.twosigma.beakerx.widget.WidgetItem; import org.apache.commons.lang3.StringUtils; import java.util.Collection; @@ -45,7 +46,7 @@ import java.util.stream.Collectors; @SuppressWarnings("unchecked") -public class EasyForm extends ObservableMap implements DisplayableWidget { +public class EasyForm extends ObservableMap implements DisplayableWidget, WidgetItem { public static final Integer HORIZONTAL = 1; public static final Integer VERTICAL = 2; @@ -375,12 +376,20 @@ public void setNotReady() { this.ready = Boolean.FALSE; } + public EasyFormView getView(){ + EasyFormView easyFormView = new EasyFormView(this.getCommFunctionalities()); + easyFormView.setEasyFormName(this.getCaption()); + return easyFormView; + } + @Override public void display() { this.setReady(); - EasyFormView easyFormView = new EasyFormView(this.getCommFunctionalities()); - easyFormView.setEasyFormName(this.getCaption()); - easyFormView.display(); + this.getView().display(); } + @Override + public Widget asWidget() { + return getView(); + } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/jvm/object/OutputContainerLayoutManager.java b/kernel/base/src/main/java/com/twosigma/beakerx/jvm/object/OutputContainerLayoutManager.java index 0499ffcefb..d114d07276 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/jvm/object/OutputContainerLayoutManager.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/jvm/object/OutputContainerLayoutManager.java @@ -17,9 +17,10 @@ import com.twosigma.beakerx.MIMEContainerFactory; import com.twosigma.beakerx.mimetype.MIMEContainer; -import com.twosigma.beakerx.widget.Widget; import com.twosigma.beakerx.widget.HTML; import com.twosigma.beakerx.widget.HTMLPre; +import com.twosigma.beakerx.widget.Widget; +import com.twosigma.beakerx.widget.WidgetItem; import java.util.List; import java.util.Optional; @@ -54,13 +55,13 @@ private Optional toWidget(Object item) { if (item == null) { return handleNull(); } + if (item instanceof WidgetItem) { + return of(((WidgetItem) item).asWidget()); + } Widget widget = MIMEContainerFactory.getTableDisplay(item); if (widget != null) { return of(widget); } - if (item instanceof Widget) { - return of((Widget) item); - } if (item instanceof MIMEContainer) { return of(createHTML(((MIMEContainer) item).getData().toString())); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/widget/Widget.java b/kernel/base/src/main/java/com/twosigma/beakerx/widget/Widget.java index 3e794288ad..5d77f55d5c 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/widget/Widget.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/widget/Widget.java @@ -15,18 +15,18 @@ */ package com.twosigma.beakerx.widget; +import com.twosigma.beakerx.kernel.KernelManager; +import com.twosigma.beakerx.kernel.comm.Comm; +import com.twosigma.beakerx.kernel.comm.TargetNamesEnum; +import com.twosigma.beakerx.message.Message; + import java.io.Serializable; import java.util.HashMap; import static com.twosigma.beakerx.handler.KernelHandlerWrapper.wrapBusyIdle; import static com.twosigma.beakerx.kernel.msg.JupyterMessages.DISPLAY_DATA; -import com.twosigma.beakerx.kernel.KernelManager; -import com.twosigma.beakerx.kernel.comm.Comm; -import com.twosigma.beakerx.kernel.comm.TargetNamesEnum; -import com.twosigma.beakerx.message.Message; - -public abstract class Widget implements CommFunctionality, DisplayableWidget { +public abstract class Widget implements CommFunctionality, DisplayableWidget, WidgetItem { public static final String APPLICATION_VND_JUPYTER_WIDGET_VIEW_JSON = "application/vnd.jupyter.widget-view+json"; public static final String MODEL_ID = "model_id"; @@ -179,4 +179,9 @@ public interface WidgetDisplayMethodStrategy { void display(Widget widget); } + @Override + public Widget asWidget() { + return this; + } + } \ No newline at end of file diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/widget/WidgetItem.java b/kernel/base/src/main/java/com/twosigma/beakerx/widget/WidgetItem.java new file mode 100644 index 0000000000..ffef4873e0 --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/widget/WidgetItem.java @@ -0,0 +1,23 @@ +/* + * 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.widget; + +import com.twosigma.beakerx.widget.Widget; + +public interface WidgetItem { + + Widget asWidget(); +}