/*******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* 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:
* IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse
*******************************************************************************/
package org.eclipse.linuxtools.systemtap.graphing.core.adapters;
import java.util.Arrays;
import org.eclipse.linuxtools.internal.systemtap.graphing.core.Localization;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IHistoricalDataSet;
public class ScrollAdapter implements IAdapter {
public ScrollAdapter(IHistoricalDataSet data, int xSeries, int[] ySeries, String key) {
this.data = data;
this.xSeries = xSeries;
this.ySeries = Arrays.copyOf(ySeries, ySeries.length);
this.key = key;
}
@Override
public Number getYSeriesMax(int y, int start, int end) {
return getSeriesMax(ySeries[y], start, end);
}
@Override
public Number getSeriesMax(int series, int start, int end) {
if(start < 0 || end > data.getRowCount() || start > end)
return null;
Number max = new Double(Double.NEGATIVE_INFINITY);
Number cur;
Object[] dataColumn = data.getHistoricalData(key, series, start, end);
for(int i=0; i<dataColumn.length; i++) {
try {
cur = new Double(Double.parseDouble(dataColumn[i].toString()));
if(max.doubleValue() < cur.doubleValue())
max = cur;
} catch (NumberFormatException e) {}
}
return max;
}
@Override
public String[] getLabels() {
String[] labels = data.getTitles();
String[] labels2 = new String[ySeries.length + 1];
labels2[0] = (IDataSet.COL_ROW_NUM == xSeries) ? Localization.getString("ScrollAdapter.RowNum") : labels[xSeries]; //$NON-NLS-1$
for(int i=0; i<ySeries.length; i++)
labels2[i+1] = labels[ySeries[i]];
return labels2;
}
@Override
public int getSeriesCount() {
return ySeries.length;
}
@Override
public int getRecordCount() {
return data.getEntryCount();
}
@Override
public Object[][] getData() {
return getData(0, getRecordCount());
}
//[Row][Column]
@Override
public Object[][] getData(int start, int end) {
Object[][] o = new Object[Math.min(end-start,getRecordCount())][ySeries.length+1];
Object[] x = data.getHistoricalData(key, xSeries, start, end);
Object[][] y = new Object[ySeries.length][data.getEntryCount()];
for(int i=0; i<ySeries.length; i++)
y[i] = data.getHistoricalData(key, ySeries[i], start, end);
for(int j,i=0; i<o.length; i++) {
o[i][0] = x[i];
for(j=0; j<ySeries.length; j++)
o[i][j+1] = y[j][i];
}
return o;
}
private IHistoricalDataSet data;
private int xSeries;
private int[] ySeries;
private String key;
}