Search in sources :

Example 1 with TableMap

use of io.deephaven.web.client.api.TableMap 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 TableMap

use of io.deephaven.web.client.api.TableMap in project deephaven-core by deephaven.

the class JsMultiSeries method requestTable.

private void requestTable(TableMap tableMap, Object key) {
    // TODO ask the server in parallel for the series name
    String seriesName = descriptor.getName() + ": " + key;
    tableMap.getTable(key).then(table -> {
        SeriesDescriptor seriesInstance = new SeriesDescriptor();
        seriesInstance.setName(seriesName);
        seriesInstance.setPlotStyle(getPlotStyle());
        seriesInstance.setLineColor(getOrDefault(seriesName, descriptor.getLineColor()));
        seriesInstance.setShapeColor(getOrDefault(seriesName, descriptor.getPointColor()));
        seriesInstance.setLinesVisible(getOrDefault(seriesName, descriptor.getLinesVisible()));
        seriesInstance.setShapesVisible(getOrDefault(seriesName, descriptor.getPointsVisible()));
        Boolean gradientVisible = getOrDefault(seriesName, descriptor.getGradientVisible());
        if (gradientVisible != null) {
            seriesInstance.setGradientVisible(gradientVisible);
        }
        seriesInstance.setYToolTipPattern(getOrDefault(seriesName, descriptor.getYToolTipPattern()));
        seriesInstance.setXToolTipPattern(getOrDefault(seriesName, descriptor.getXToolTipPattern()));
        seriesInstance.setShapeLabel(getOrDefault(seriesName, descriptor.getPointLabel()));
        seriesInstance.setShapeSize(getOrDefault(seriesName, descriptor.getPointSize()));
        seriesInstance.setShape(getOrDefault(seriesName, descriptor.getPointShape()));
        seriesInstance.setPointLabelFormat(getOrDefault(seriesName, descriptor.getPointLabelFormat()));
        int tableId = figure.registerTable(table);
        seriesInstance.setDataSourcesList(descriptor.getDataSourcesList().map((multiSeriesSource, p1, p2) -> {
            SourceDescriptor sourceDescriptor = new SourceDescriptor();
            sourceDescriptor.setColumnName(multiSeriesSource.getColumnName());
            sourceDescriptor.setAxisId(multiSeriesSource.getAxisId());
            sourceDescriptor.setTableId(tableId);
            sourceDescriptor.setType(multiSeriesSource.getType());
            return sourceDescriptor;
        }));
        JsSeries series = new JsSeries(seriesInstance, figure, axes);
        series.setMultiSeries(this);
        series.initSources(Collections.singletonMap(tableId, table), Collections.emptyMap());
        CustomEventInit init = CustomEventInit.create();
        init.setDetail(series);
        parent.addSeriesFromMultiSeries(series);
        figure.fireEvent(JsFigure.EVENT_SERIES_ADDED, init);
        parent.fireEvent(JsChart.EVENT_SERIES_ADDED, init);
        return null;
    });
}
Also used : JsProperty(jsinterop.annotations.JsProperty) JsIgnore(jsinterop.annotations.JsIgnore) TableMap(io.deephaven.web.client.api.TableMap) Map(java.util.Map) CustomEventInit(elemental2.dom.CustomEventInit) CustomEvent(elemental2.dom.CustomEvent) 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) CustomEventInit(elemental2.dom.CustomEventInit)

Example 3 with TableMap

use of io.deephaven.web.client.api.TableMap in project deephaven-core by deephaven.

the class JsMultiSeries method initSources.

@JsIgnore
public void initSources(Map<Integer, TableMap> plotHandlesToTableMaps) {
    descriptor.getDataSourcesList().asList().stream().mapToInt(MultiSeriesSourceDescriptor::getTableMapId).distinct().forEach(plotHandle -> {
        TableMap tableMap = plotHandlesToTableMaps.get(plotHandle);
        tableMap.getKeys().forEach((p0, p1, p2) -> {
            requestTable(tableMap, p0);
            return null;
        });
        tableMap.addEventListener(TableMap.EVENT_KEYADDED, event -> {
            requestTable(tableMap, ((CustomEvent) event).detail);
        });
    });
}
Also used : TableMap(io.deephaven.web.client.api.TableMap) JsIgnore(jsinterop.annotations.JsIgnore)

Aggregations

TableMap (io.deephaven.web.client.api.TableMap)3 CustomEventInit (elemental2.dom.CustomEventInit)2 io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor (io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.figuredescriptor)2 Collections (java.util.Collections)2 Map (java.util.Map)2 JsIgnore (jsinterop.annotations.JsIgnore)2 JsArray (elemental2.core.JsArray)1 CustomEvent (elemental2.dom.CustomEvent)1 IThenable (elemental2.promise.IThenable)1 Promise (elemental2.promise.Promise)1 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 JsTable (io.deephaven.web.client.api.JsTable)1 RemoverFn (io.deephaven.web.shared.fu.RemoverFn)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 JsMethod (jsinterop.annotations.JsMethod)1 JsProperty (jsinterop.annotations.JsProperty)1 Js (jsinterop.base.Js)1 JsPropertyMap (jsinterop.base.JsPropertyMap)1