/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * 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 * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.core.charts; import java.util.Date; import org.eclipse.core.runtime.IAdaptable; /** * Data series implementation that represents numeric values derived from a * source series. * * @since 1.0 */ public class NumericDataSeries extends DataSeries { public NumericDataSeries(String name, Number[] values, IDataSeries parent) { super(name, convertValues(values, parent)); } public NumericDataSeries(String name, double[] values, IDataSeries parent) { super(name, convertValues(values, parent)); } public NumericDataSeries(String name, int[] values, IDataSeries parent) { super(name, convertValues(values, parent)); } public NumericDataSeries(String name, long[] values, IDataSeries parent) { super(name, convertValues(values, parent)); } protected NumericDataSeries(String name, IAdaptable[] values) { super(name, values); } private static IAdaptable[] convertValues(Number[] values, IDataSeries parent) { IAdaptable[] reference = parent.getValues(); int refIndex = reference.length - values.length; IAdaptable[] v = new IAdaptable[values.length]; for (int i = 0; i < values.length; i++, refIndex++) { Date date = (Date) reference[refIndex].getAdapter(Date.class); v[i] = new NumberValue(date, values[i]); } return v; } private static IAdaptable[] convertValues(double[] values, IDataSeries parent) { IAdaptable[] reference = parent.getValues(); int refIndex = reference.length - values.length; IAdaptable[] v = new IAdaptable[values.length]; for (int i = 0; i < values.length; i++, refIndex++) { Date date = (Date) reference[refIndex].getAdapter(Date.class); v[i] = new NumberValue(date, values[i]); } return v; } private static IAdaptable[] convertValues(int[] values, IDataSeries parent) { IAdaptable[] reference = parent.getValues(); int refIndex = reference.length - values.length; IAdaptable[] v = new IAdaptable[values.length]; for (int i = 0; i < values.length; i++, refIndex++) { Date date = (Date) reference[refIndex].getAdapter(Date.class); v[i] = new NumberValue(date, values[i]); } return v; } private static IAdaptable[] convertValues(long[] values, IDataSeries parent) { IAdaptable[] reference = parent.getValues(); int refIndex = reference.length - values.length; IAdaptable[] v = new IAdaptable[values.length]; for (int i = 0; i < values.length; i++, refIndex++) { Date date = (Date) reference[refIndex].getAdapter(Date.class); v[i] = new NumberValue(date, values[i]); } return v; } /* (non-Javadoc) * @see org.eclipsetrader.charts.core.DataSeries#getSeries(org.eclipse.core.runtime.IAdaptable, org.eclipse.core.runtime.IAdaptable) */ @Override public IDataSeries getSeries(IAdaptable first, IAdaptable last) { NumericDataSeries series = new NumericDataSeries(getName(), getSubset(first, last)); if (isHighestOverride()) { series.setHighest(getHighest()); } if (isLowestOverride()) { series.setLowest(getLowest()); } return series; } }