blob: 010867f899160c414da0ad8a4532eeb81b7ba19b [file] [log] [blame]
/*******************************************************************************
* 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 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.chart.ui.consumer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartSeries;
import org.eclipse.tracecompass.internal.tmf.chart.core.consumer.IDataConsumer;
import org.eclipse.tracecompass.internal.tmf.chart.core.consumer.ISeriesConsumer;
import com.google.common.collect.ImmutableList;
/**
* This class implements a {@link ISeriesConsumer} for XY series. Such series
* have two data consumers: one for the X axis and the other for the Y axis.
*
* @author Gabriel-Andrew Pollo-Guilbert
*/
public class XYSeriesConsumer implements ISeriesConsumer {
// ------------------------------------------------------------------------
// Members
// ------------------------------------------------------------------------
private final IDataConsumer fXConsumer;
private final IDataConsumer fYConsumer;
private final ChartSeries fChartSeries;
private final List<Object> fConsumedElements = new ArrayList<>();
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructors.
*
* @param series
* The chart series related to this consumer
* @param xConsumer
* The consumer for the X axis
* @param yConsumer
* The consumer for the Y axis
*/
public XYSeriesConsumer(ChartSeries series, IDataConsumer xConsumer, IDataConsumer yConsumer) {
fChartSeries = series;
fXConsumer = xConsumer;
fYConsumer = yConsumer;
}
// ------------------------------------------------------------------------
// Overriden methods
// ------------------------------------------------------------------------
@Override
public void accept(Object obj) {
/* Make sure every consumer can consume their value */
if (!fXConsumer.test(obj) || !fYConsumer.test(obj)) {
return;
}
/* Consume the value for each consumer */
fXConsumer.accept(obj);
fYConsumer.accept(obj);
/* Add the object to the list of consumed objects */
// FIXME: The object is kept for the signals to work correctly, but this
// may cause OutOfMemoryExceptions if we keep all the consumed objects.
fConsumedElements.add(obj);
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
/**
* Accessor that returns the chart series related to this consumer.
*
* FIXME: See if we can avoid exposing the series here
*
* @return The chart series
*/
public ChartSeries getSeries() {
return fChartSeries;
}
/**
* Accessor that returns the list of valid consumed objects.
*
* @return The list of consumed objects
*/
public Collection<Object> getConsumedElements() {
return ImmutableList.copyOf(fConsumedElements);
}
/**
* Accessor that returns the X consumer.
*
* TODO: Once consumer aggregators have been refactored, this method may not
* be necessary
*
* @return The X consumer
*/
public IDataConsumer getXConsumer() {
return fXConsumer;
}
/**
* Accessor that returns the Y consumer.
*
* TODO: Once consumer aggregators have been refactored, this method may not
* be necessary
*
* @return The Y consumer
*/
public IDataConsumer getYConsumer() {
return fYConsumer;
}
}