/**
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
*/
package org.diirt.datasource.extra;
import java.util.ArrayList;
import java.util.List;
import org.diirt.datasource.ReadFunction;
import org.diirt.datasource.expression.DesiredRateExpression;
import org.diirt.datasource.expression.DesiredRateExpressionImpl;
import org.diirt.vtype.VImage;
import org.diirt.vtype.VNumber;
import org.diirt.vtype.VNumberArray;
import org.diirt.datasource.expression.DesiredRateExpressionList;
/**
* A waterfall plot.
*
* @author carcassi
*/
public class WaterfallPlot extends DesiredRateExpressionImpl<VImage> {
WaterfallPlot(DesiredRateExpression<? extends List<? extends VNumberArray>> expression, String name) {
super(expression, new WaterfallPlotFunction(new DoubleArrayTimeCacheFromVDoubleArray(expression.getFunction()), WaterfallPlotParameters.defaults().internalCopy()), name);
}
<T extends VNumber> WaterfallPlot(DesiredRateExpressionList<List<T>> expressions, String name) {
super(expressions, new WaterfallPlotFunction(new DoubleArrayTimeCacheFromVDoubles(getFunctions(expressions)), WaterfallPlotParameters.defaults().internalCopy()), name);
}
private static <T extends VNumber> List<ReadFunction<List<T>>> getFunctions(DesiredRateExpressionList<List<T>> exp) {
List<ReadFunction<List<T>>> functions = new ArrayList<ReadFunction<List<T>>>();
for (DesiredRateExpression<List<T>> desiredRateExpression : exp.getDesiredRateExpressions()) {
functions.add(desiredRateExpression.getFunction());
}
return functions;
}
private volatile WaterfallPlotParameters parameters = WaterfallPlotParameters.defaults();
WaterfallPlotFunction getPlotter() {
return (WaterfallPlotFunction) getFunction();
}
/**
* Changes parameters of the waterfall plot.
*
* @param newParameters parameters to change
* @return this
*/
public WaterfallPlot with(WaterfallPlotParameters... newParameters) {
parameters = new WaterfallPlotParameters(parameters, newParameters);
WaterfallPlotParameters.InternalCopy copy = parameters.internalCopy();
getPlotter().setParameters(copy);
return this;
}
/**
* Returns the full set of parameters currently being used.
*
* @return the current parameters
*/
public WaterfallPlotParameters getParameters() {
return parameters;
}
}