/** * 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.graphene; import java.util.Arrays; import org.diirt.datasource.BasicTypeSupport; import org.diirt.datasource.NotificationSupport; import org.diirt.datasource.ReadFunction; import org.diirt.datasource.TypeSupport; import org.diirt.datasource.vtype.DataTypeSupport; import org.diirt.vtype.VNumber; import org.diirt.vtype.VNumberArray; import org.diirt.datasource.expression.DesiredRateExpression; import org.diirt.datasource.expression.DesiredRateExpressionImpl; import org.diirt.datasource.expression.DesiredRateExpressionList; import org.diirt.datasource.expression.DesiredRateExpressionListImpl; import org.diirt.util.array.ListNumbers; import org.diirt.vtype.VTable; import org.diirt.vtype.ValueFactory; /** * * @author carcassi */ public class ExpressionLanguage { private ExpressionLanguage() {} static { // Add support for Epics types. DataTypeSupport.install(); // Add support for Basic types BasicTypeSupport.install(); TypeSupport.addTypeSupport(NotificationSupport.immutableTypeSupport(Graph2DResult.class)); } public static HistogramGraph2DExpression histogramGraphOf( DesiredRateExpression<?> arrayData) { return new HistogramGraph2DExpression(arrayData); } public static IntensityGraph2DExpression intensityGraphOf( DesiredRateExpression<?> arrayData) { return new IntensityGraph2DExpression(arrayData); } public static LineGraph2DExpression lineGraphOf(DesiredRateExpression<? extends VNumberArray> vDoubleArray) { return lineGraphOf(vDoubleArray, null, null, null); } public static LineGraph2DExpression lineGraphOf(final DesiredRateExpression<? extends VNumberArray> yArray, final DesiredRateExpression<? extends VNumber> xInitialOffset, final DesiredRateExpression<? extends VNumber> xIncrementSize) { DesiredRateExpression<VTable> data = new DesiredRateExpressionImpl<>(createList(yArray, xInitialOffset, xIncrementSize), new ReadFunction<VTable>() { @Override public VTable readValue() { VNumberArray values = yArray.getFunction().readValue(); VNumber offset = xInitialOffset.getFunction().readValue(); VNumber increment = xIncrementSize.getFunction().readValue(); if (values == null || offset == null || increment == null) { return null; } return ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, double.class), Arrays.asList("X", "Y"), Arrays.<Object>asList(ListNumbers.linearList(offset.getValue().doubleValue(), increment.getValue().doubleValue(), values.getData().size()), new ListDoubleView(values.getData()))); } }, "data"); return lineGraphOf(data, null, null, null); } public static LineGraph2DExpression lineGraphOf(final DesiredRateExpression<? extends VNumberArray> xVDoubleArray, final DesiredRateExpression<? extends VNumberArray> yVDoubleArray) { DesiredRateExpression<VTable> data = new DesiredRateExpressionImpl<>(createList(xVDoubleArray, yVDoubleArray), new ReadFunction<VTable>() { @Override public VTable readValue() { VNumberArray xValues = xVDoubleArray.getFunction().readValue(); VNumberArray yValues = yVDoubleArray.getFunction().readValue(); if (xValues == null || yValues == null) { return null; } return ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, double.class), Arrays.asList("X", "Y"), Arrays.<Object>asList(new ListDoubleView(xValues.getData()), new ListDoubleView(yValues.getData()))); } }, "data"); return lineGraphOf(data, null, null, null); } public static LineGraph2DExpression lineGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName, DesiredRateExpression<?> tooltipColumnName) { return new LineGraph2DExpression(tableData, xColumnName, yColumnName, tooltipColumnName); } public static MultilineGraph2DExpression multilineGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName) { return new MultilineGraph2DExpression(tableData, xColumnName, yColumnName); } public static MultiAxisLineGraph2DExpression multiAxisLineGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName) { return new MultiAxisLineGraph2DExpression(tableData, xColumnName, yColumnName); } public static SparklineGraph2DExpression sparklineGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName) { return new SparklineGraph2DExpression(tableData, xColumnName, yColumnName); } public static ScatterGraph2DExpression scatterGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName, DesiredRateExpression<?> tooltipColumnName) { return new ScatterGraph2DExpression(tableData, xColumnName, yColumnName, tooltipColumnName); } public static BubbleGraph2DExpression bubbleGraphOf( DesiredRateExpression<?> tableData, DesiredRateExpression<?> xColumnName, DesiredRateExpression<?> yColumnName, DesiredRateExpression<?> sizeColumnName, DesiredRateExpression<?> tooltipColumnName) { return new BubbleGraph2DExpression(tableData, xColumnName, yColumnName, sizeColumnName, tooltipColumnName); } @SafeVarargs static <T> DesiredRateExpressionList<T> createList(DesiredRateExpressionList<? extends T>... expressions) { DesiredRateExpressionList<T> list = new DesiredRateExpressionListImpl<T>(); for (DesiredRateExpressionList<? extends T> exp : expressions) { if (exp != null) { list.and(exp); } } return list; } static <T> ReadFunction<T> functionOf(DesiredRateExpression<T> exp) { if (exp == null) { return null; } else { return exp.getFunction(); } } }