/*******************************************************************************
* Copyright (c) 2008-2009 SWTChart project. All rights reserved.
*
* This code is distributed under the terms of the Eclipse Public License v1.0
* which is available at http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.swtchart.internal.compress;
import java.util.ArrayList;
/**
* A compressor for bar series data.
*/
public class CompressBarSeries extends Compress
{
/*
* @see Compress#addNecessaryPlots(ArrayList, ArrayList, ArrayList)
*/
@Override
protected void addNecessaryPlots ( ArrayList<Double> xList, ArrayList<Double> yList, ArrayList<Integer> indexList )
{
double prevX = xSeries[0];
double maxY = Double.NaN;
int prevIndex = 0;
for ( int i = 0; i < xSeries.length; i++ )
{
if ( xSeries[i] >= config.getXLowerValue () )
{
if ( isInSameGridXAsPrevious ( xSeries[i] ) )
{
if ( maxY < ySeries[i] )
{
maxY = ySeries[i];
}
}
else
{
if ( !Double.isNaN ( maxY ) )
{
addToList ( xList, yList, indexList, prevX, maxY, prevIndex );
}
prevX = xSeries[i];
maxY = ySeries[i];
prevIndex = i;
}
}
if ( xSeries[i] > config.getXUpperValue () )
{
break;
}
}
addToList ( xList, yList, indexList, prevX, maxY, prevIndex );
}
/**
* Checks if the given x coordinate is in the same grid as previous.
*
* @param x
* the X coordinate
* @return true if the given coordinate is in the same grid as previous
*/
private boolean isInSameGridXAsPrevious ( double x )
{
int xGridIndex = (int) ( ( x - config.getXLowerValue () ) / ( config.getXUpperValue () - config
.getXLowerValue () ) * config.getWidthInPixel () );
boolean isInSameGridAsPrevious = ( xGridIndex == previousXGridIndex );
previousXGridIndex = xGridIndex;
return isInSameGridAsPrevious;
}
}