/*******************************************************************************
* Copyright (c) 2016 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.tracecompass.internal.provisional.tmf.chart.core.model;
import java.util.Collection;
import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.descriptor.IDataChartDescriptor;
/**
* This is the base class used by the chart plugin to make a chart. In order to
* make a chart with the default chart maker dialog, this interface must be
* implemented. It should also be noted that we can make a chart without using
* this interface by building the series manually.
* <p>
* This data provider needs to provide the following:
* <ul>
* <li>a name</li>
* <li>a stream of raw objects</li>
* <li>a list of data descriptors</li>
* </ul>
* The name is the name of the data provider. It is the name used in the chart.
* For the stream and the descriptors, consider a table containing multiples
* rows and columns. Here, data descriptors would describe each column. They
* would tell information about the type of data inside a column.
* <p>
* With such table, it would be possible to make a chart with two columns (e.g.
* scatter plot). Rather than providing each column, this class provides a
* stream of all the rows. This facilitate data processing. In order to generate
* data from rows, data descriptors are used for mapping values inside.
* <p>
* This analogy of a table is not the limit of this plugin. We can have a type
* more complex than simple row as long as a data descriptor can be used to
* obtain values from it.
*
* @param <T>
* The type of objects it provides
*
* @author Gabriel-Andrew Pollo-Guilbert
*/
public interface IDataChartProvider<T> {
/**
* This method returns the name of the data provider.
*
* @return The name of the data provider
*/
String getName();
/**
* This method returns the stream of raw data that will be used for making
* charts.
*
* @return The source of data
*/
Stream<@NonNull T> getSource();
/**
* This method returns a list of data descriptors used for describing the
* data returned by {@link #getSource()}. Each descriptor describes possible
* data that can be extracted from each object of the input source.
*
* @return The list of descriptors
*/
Collection<IDataChartDescriptor<T, ?>> getDataDescriptors();
}