Vaadin 8 Charts Timeline, Как реализовать отложенную загрузку значений - PullRequest
0 голосов
/ 04 мая 2018

Описание проблемы

Context

Я пытаюсь визуализировать большой набор данных значений X-Y с помощью диаграмм Ваадина. Я хотел бы иметь возможность загружать лениво значения, которые будут загружены, так как набор данных большой. Этого можно достичь, установив окно исправлений и позволяя пользователю изменять даты. Поэтому, если пользователь выбирает startDate и endDate через RangeSelector , должны загружаться только эти значения.

Текущий подход

Каждая точка моделируется как:

public final class TimestampedDoubleValue{
         private final long timestampInMillis;
         private final long value; 

         public TimestampedDoubleValue(long timestampInMillis,long value){
            this.value=value;
            this.timestampInMillis=timestampInMillis;
         }

         public final long getTimestampInMillis {return timestampInMillis;}
         public final long getValue {return value;}

}

Я пытаюсь следовать подходу, подобному тому, который использовался для реализации отложенной загрузки в сетке Ваадина. https://vaadin.com/blog/lazy-loading-with-vaadin-8

Для реализации отложенной загрузки я создаю DataProvider и SeriesDataProvider, основанный на DataProvider.

Однако я не смог найти никакой документации или примеров относительно отложенной загрузки в Чартах. Я нашел некоторые заметки о DataProvider и SeriesDataProvider, но в них явно не упоминается отложенная загрузка. ListDataProvider, показанный в примерах, является решением в памяти без отложенной загрузки. https://vaadin.com/docs/v8/charts/java-api/charts-getting-started.html

Кроме того, я не могу определить, может ли этот подход использоваться для отложенной загрузки и возможна ли отложенная загрузка вообще в шкале времени диаграмм Vaadin с использованием Java-API.

Например, в Javadoc DataProviderSeries указано следующее:

Обратите внимание, что даже если вы используете ленивую загрузку DataProvider, эта серия будет работать с энтузиазмом и загружать все данные от провайдера одновременно.

https://demo.vaadin.com/javadoc/com.vaadin/vaadin-charts/4.0.1/com/vaadin/addon/charts/model/DataProviderSeries.html

public class TimeseriesDataProvider<F> extends AbstractBackEndDataProvider<TimestampedDoubleValue, F> {

public final DataProviderSeries<TimestampedDoubleValue> getDataProviderSeries() {
    final DataProviderSeries<TimestampedDoubleValue> dataProviderSeries = new DataProviderSeries<>(this);
    dataProviderSeries.setX(TimestampedDoubleValue::getTimestampInMillis);
    dataProviderSeries.setY(TimestampedDoubleValue::getValue);
    dataProviderSeries.setAutomaticChartUpdateEnabled(true);

    return dataProviderSeries;
}

 /*
 * @see com.vaadin.data.provider.DataProvider#isInMemory()
 */
@Override
public final boolean isInMemory() {
    return false;
}

/*
 * @see com.vaadin.data.provider.AbstractBackEndDataProvider#fetchFromBackEnd(com.vaadin.data.provider.Query)
 */
@Override
protected Stream<TimestampedDoubleValue> fetchFromBackEnd(final Query<TimestampedDoubleValue, F> query) {
   return FetchService.streamResults();

}

/* 
 * @see com.vaadin.data.provider.AbstractBackEndDataProvider#sizeInBackEnd(com.vaadin.data.provider.Query)
 */
@Override
protected int sizeInBackEnd(final Query<TimestampedDoubleValue, F> query) {
            return FetchService.countInBackend();
}

}

Вопросы

  1. Можно ли использовать отложенную загрузку на временной шкале, если да, то как? Существование DataProviderSeries и его связь с DataProvider предполагает, что это так. Однако Javadoc DataProviderSeries предлагает иное. (см. выше).

  2. В серии DataProvider есть фильтр (введите F в приведенном выше коде), который передается внутри запроса в качестве аргумента. Как ввести фильтр, чтобы он передавался в качестве аргумента?

...