Search in sources :

Example 1 with io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor

use of io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor in project deephaven-core by deephaven.

the class JsFigureFactory method create.

private static Promise<JsFigure> create(JsFigureDescriptor descriptor) {
    JsArray<JsTable> tables = descriptor.getTables();
    if (tables == null || tables.length == 0) {
        return (Promise<JsFigure>) (Promise) Promise.reject("No tables provided for Figure creation");
    }
    FigureDescriptor figureDescriptor = convertJsFigureDescriptor(descriptor);
    FetchObjectResponse response = new FetchObjectResponse();
    response.setData(figureDescriptor.serializeBinary());
    Promise<?>[] tableCopyPromises = tables.map((table, index, all) -> table.copy(false)).asArray(new Promise[0]);
    return Promise.all(tableCopyPromises).then(unknownTableCopies -> {
        JsArray<JsTable> jsTableCopies = Js.cast(unknownTableCopies);
        JsTable[] tableCopies = jsTableCopies.asArray(new JsTable[0]);
        return new JsFigure(c -> c.apply(null, response), (figure, descriptor1) -> {
            // We need to listen for disconnects and reconnects
            boolean[] isTableDisconnected = new boolean[tableCopies.length];
            ArrayList<RemoverFn> removerFns = new ArrayList<>(tableCopies.length * 3);
            for (int i = 0; i < tableCopies.length; i++) {
                final int tableIndex = i;
                // Tables are closed when the figure is closed, no need to remove listeners later
                removerFns.add(tableCopies[i].addEventListener(JsTable.EVENT_DISCONNECT, ignore -> {
                    isTableDisconnected[tableIndex] = true;
                    for (int j = 0; j < isTableDisconnected.length; j++) {
                        if (isTableDisconnected[j] && j != tableIndex) {
                            return;
                        }
                    }
                    figure.fireEvent(JsFigure.EVENT_DISCONNECT);
                    figure.unsubscribe();
                }));
                removerFns.add(tableCopies[i].addEventListener(JsTable.EVENT_RECONNECT, ignore -> {
                    isTableDisconnected[tableIndex] = false;
                    for (int j = 0; j < isTableDisconnected.length; j++) {
                        if (isTableDisconnected[j]) {
                            return;
                        }
                    }
                    try {
                        figure.verifyTables();
                        figure.fireEvent(JsFigure.EVENT_RECONNECT);
                        figure.enqueueSubscriptionCheck();
                    } catch (JsFigure.FigureSourceException e) {
                        final CustomEventInit init = CustomEventInit.create();
                        init.setDetail(e);
                        figure.fireEvent(JsFigure.EVENT_RECONNECTFAILED, init);
                    }
                }));
                removerFns.add(tableCopies[i].addEventListener(JsTable.EVENT_RECONNECTFAILED, err -> {
                    for (RemoverFn removerFn : removerFns) {
                        removerFn.remove();
                    }
                    figure.unsubscribe();
                    final CustomEventInit init = CustomEventInit.create();
                    init.setDetail(err);
                    figure.fireEvent(JsFigure.EVENT_RECONNECTFAILED, init);
                }));
            }
            return Promise.resolve(new JsFigure.FigureTableFetchData(tableCopies, new TableMap[0], Collections.emptyMap()));
        }).refetch();
    });
}
Also used : IThenable(elemental2.promise.IThenable) TableMap(io.deephaven.web.client.api.TableMap) RemoverFn(io.deephaven.web.shared.fu.RemoverFn) FigureDescriptor(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.FigureDescriptor) JsMethod(jsinterop.annotations.JsMethod) HashMap(java.util.HashMap) CustomEventInit(elemental2.dom.CustomEventInit) Promise(elemental2.promise.Promise) JsPropertyMap(jsinterop.base.JsPropertyMap) JsArray(elemental2.core.JsArray) ArrayList(java.util.ArrayList) Js(jsinterop.base.Js) FetchObjectResponse(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.object_pb.FetchObjectResponse) JsTable(io.deephaven.web.client.api.JsTable) Map(java.util.Map) Collections(java.util.Collections) io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor) ArrayList(java.util.ArrayList) Promise(elemental2.promise.Promise) JsTable(io.deephaven.web.client.api.JsTable) RemoverFn(io.deephaven.web.shared.fu.RemoverFn) CustomEventInit(elemental2.dom.CustomEventInit) FetchObjectResponse(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.object_pb.FetchObjectResponse) FigureDescriptor(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.FigureDescriptor)

Example 2 with io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor

use of io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor in project deephaven-core by deephaven.

the class JsFigureFactory method convertJsFigureDescriptor.

private static FigureDescriptor convertJsFigureDescriptor(JsFigureDescriptor jsDescriptor) {
    FigureDescriptor descriptor = new FigureDescriptor();
    descriptor.setTitle(jsDescriptor.title);
    descriptor.setTitleFont(jsDescriptor.titleFont);
    descriptor.setTitleColor(jsDescriptor.titleColor);
    descriptor.setUpdateInterval("" + jsDescriptor.updateInterval);
    descriptor.setCols(jsDescriptor.cols);
    descriptor.setRows(jsDescriptor.rows);
    JsArray<JsTable> tables = jsDescriptor.getTables();
    JsArray<JsChartDescriptor> charts = jsDescriptor.charts;
    ChartDescriptor[] chartDescriptors = new ChartDescriptor[charts.length];
    for (int i = 0; i < charts.length; i++) {
        chartDescriptors[i] = convertJsChartDescriptor(charts.getAt(i), tables);
    }
    descriptor.setChartsList(chartDescriptors);
    return descriptor;
}
Also used : JsTable(io.deephaven.web.client.api.JsTable) FigureDescriptor(io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.FigureDescriptor)

Aggregations

FigureDescriptor (io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.FigureDescriptor)2 JsTable (io.deephaven.web.client.api.JsTable)2 JsArray (elemental2.core.JsArray)1 CustomEventInit (elemental2.dom.CustomEventInit)1 IThenable (elemental2.promise.IThenable)1 Promise (elemental2.promise.Promise)1 io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor (io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor)1 FetchObjectResponse (io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.object_pb.FetchObjectResponse)1 TableMap (io.deephaven.web.client.api.TableMap)1 RemoverFn (io.deephaven.web.shared.fu.RemoverFn)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 JsMethod (jsinterop.annotations.JsMethod)1 Js (jsinterop.base.Js)1 JsPropertyMap (jsinterop.base.JsPropertyMap)1