afreechart/src/main/java/org/afree/data/general/DatasetUtilities.java
/**
     * Returns the range of y-values in the specified dataset for the data items
     * belonging to the visible series and with x-values in the given range.
     * 
     * @param dataset
     *            the dataset (<code>null</code> not permitted).
     * @param visibleSeriesKeys
     *            the visible series keys (<code>null</code> not permitted).
     * @param xRange
     *            the x-range (<code>null</code> not permitted).
     * @param includeInterval
     *            a flag that determines whether or not the y-interval for the
     *            dataset is included (this only applies if the dataset is an
     *            instance of IntervalXYDataset).
     * 
     * @return The y-range (possibly <code>null</code>).
     * 
     * @since JFreeChart 1.0.13
     */
Returns the range of y-values in the specified dataset for the data items
belonging to the visible series and with x-values in the given range.

@param dataset
the dataset (null not permitted).
@param visibleSeriesKeys
the visible series keys (null not permitted).
@param xRange
the x-range (null not permitted).
@param includeInterval
a flag that determines whether or not the y-interval for the
dataset is included (this only applies if the dataset is an
instance of IntervalXYDataset).

@return The y-range (possibly null).


Returns the range of y - values in the specified dataset for the data items belonging to the visible series and with x - values in the given range . @param dataset the dataset ( null not permitted ) . @param visibleSeriesKeys the visible series keys ( null not permitted ) . @param xRange the x - range ( null not permitted ) . @param includeInterval a flag that determines whether or not the y - interval for the dataset is included ( this only applies if the dataset is an instance of IntervalXYDataset ) . @return The y - range ( possibly null ) .
public static Range iterateToFindRangeBounds(XYDataset dataset,
            List visibleSeriesKeys, Range xRange, boolean includeInterval) {
        if (dataset == null) {
            throw new IllegalArgumentException("Null 'dataset' argument.");
        }
        if (visibleSeriesKeys == null) {
            throw new IllegalArgumentException(
                    "Null 'visibleSeriesKeys' argument.");
        }
        if (xRange == null) {
            throw new IllegalArgumentException("Null 'xRange' argument");
        }
        double minimum = Double.POSITIVE_INFINITY;
        double maximum = Double.NEGATIVE_INFINITY;
        if (includeInterval && dataset instanceof OHLCDataset) {
            OHLCDataset ohlc = (OHLCDataset) dataset;
            Iterator iterator = visibleSeriesKeys.iterator();
            while (iterator.hasNext()) {
                Comparable seriesKey = (Comparable) iterator.next();
                int series = dataset.indexOf(seriesKey);
                int itemCount = dataset.getItemCount(series);
                for (int item = 0; item < itemCount; item++) {
                    double x = ohlc.getXValue(series, item);
                    if (xRange.contains(x)) {
                        double lvalue = ohlc.getLowValue(series, item);
                        double uvalue = ohlc.getHighValue(series, item);
                        if (!Double.isNaN(lvalue)) {
                            minimum = Math.min(minimum, lvalue);
                        }
                        if (!Double.isNaN(uvalue)) {
                            maximum = Math.max(maximum, uvalue);
                        }
                    }
                }
            }
        }
        /*
         * else if (includeInterval && dataset instanceof
         * BoxAndWhiskerXYDataset) { // handle special case of
         * BoxAndWhiskerXYDataset BoxAndWhiskerXYDataset bx =
         * (BoxAndWhiskerXYDataset) dataset; Iterator iterator =
         * visibleSeriesKeys.iterator(); while (iterator.hasNext()) { Comparable
         * seriesKey = (Comparable) iterator.next(); int series =
         * dataset.indexOf(seriesKey); int itemCount =
         * dataset.getItemCount(series); for (int item = 0; item < itemCount;
         * item++) { double x = bx.getXValue(series, item); if
         * (xRange.contains(x)) { Number lvalue = bx.getMinRegularValue(series,
         * item); Number uvalue = bx.getMaxRegularValue(series, item); if
         * (lvalue != null) { minimum = Math.min(minimum, lvalue.doubleValue());
         * } if (uvalue != null) { maximum = Math.max(maximum,
         * uvalue.doubleValue()); } } } } }
         */
        else if (includeInterval && dataset instanceof IntervalXYDataset) {
            IntervalXYDataset ixyd = (IntervalXYDataset) dataset;
            Iterator iterator = visibleSeriesKeys.iterator();
            while (iterator.hasNext()) {
                Comparable seriesKey = (Comparable) iterator.next();
                int series = dataset.indexOf(seriesKey);
                int itemCount = dataset.getItemCount(series);
                for (int item = 0; item < itemCount; item++) {
                    double x = ixyd.getXValue(series, item);
                    if (xRange.contains(x)) {
                        double lvalue = ixyd.getStartYValue(series, item);
                        double uvalue = ixyd.getEndYValue(series, item);
                        if (!Double.isNaN(lvalue)) {
                            minimum = Math.min(minimum, lvalue);
                        }
                        if (!Double.isNaN(uvalue)) {
                            maximum = Math.max(maximum, uvalue);
                        }
                    }
                }
            }
        } else {
            Iterator iterator = visibleSeriesKeys.iterator();
            while (iterator.hasNext()) {
                Comparable seriesKey = (Comparable) iterator.next();
                int series = dataset.indexOf(seriesKey);
                int itemCount = dataset.getItemCount(series);
                for (int item = 0; item < itemCount; item++) {
                    double x = dataset.getXValue(series, item);
                    double y = dataset.getYValue(series, item);
                    if (xRange.contains(x)) {
                        if (!Double.isNaN(y)) {
                            minimum = Math.min(minimum, y);
                            maximum = Math.max(maximum, y);
                        }
                    }
                }
            }
        }
        if (minimum == Double.POSITIVE_INFINITY) {
            return null;
        } else {
            return new Range(minimum, maximum);
        }
    }
public static Range iterateToFindRangeBounds ( XYDataset dataset , List visibleSeriesKeys , Range xRange , boolean includeInterval ) { if ( dataset == null ) { throw new IllegalArgumentException ( "Null 'dataset' argument." ) ; } if ( visibleSeriesKeys == null ) { throw new IllegalArgumentException ( "Null 'visibleSeriesKeys' argument." ) ; } if ( xRange == null ) { throw new IllegalArgumentException ( "Null 'xRange' argument" ) ; } double minimum = Double . POSITIVE_INFINITY ; double maximum = Double . NEGATIVE_INFINITY ; if ( includeInterval && dataset instanceof OHLCDataset ) { OHLCDataset ohlc = ( OHLCDataset ) dataset ; Iterator iterator = visibleSeriesKeys . iterator ( ) ; while ( iterator . hasNext ( ) ) { Comparable seriesKey = ( Comparable ) iterator . next ( ) ; int series = dataset . indexOf ( seriesKey ) ; int itemCount = dataset . getItemCount ( series ) ; for ( int item = 0 ; item < itemCount ; item ++ ) { double x = ohlc . getXValue ( series , item ) ; if ( xRange . contains ( x ) ) { double lvalue = ohlc . getLowValue ( series , item ) ; double uvalue = ohlc . getHighValue ( series , item ) ; if ( ! Double . isNaN ( lvalue ) ) { minimum = Math . min ( minimum , lvalue ) ; } if ( ! Double . isNaN ( uvalue ) ) { maximum = Math . max ( maximum , uvalue ) ; } } } } } /*
         * else if (includeInterval && dataset instanceof
         * BoxAndWhiskerXYDataset) { // handle special case of
         * BoxAndWhiskerXYDataset BoxAndWhiskerXYDataset bx =
         * (BoxAndWhiskerXYDataset) dataset; Iterator iterator =
         * visibleSeriesKeys.iterator(); while (iterator.hasNext()) { Comparable
         * seriesKey = (Comparable) iterator.next(); int series =
         * dataset.indexOf(seriesKey); int itemCount =
         * dataset.getItemCount(series); for (int item = 0; item < itemCount;
         * item++) { double x = bx.getXValue(series, item); if
         * (xRange.contains(x)) { Number lvalue = bx.getMinRegularValue(series,
         * item); Number uvalue = bx.getMaxRegularValue(series, item); if
         * (lvalue != null) { minimum = Math.min(minimum, lvalue.doubleValue());
         * } if (uvalue != null) { maximum = Math.max(maximum,
         * uvalue.doubleValue()); } } } } }
         */ else if ( includeInterval && dataset instanceof IntervalXYDataset ) { IntervalXYDataset ixyd = ( IntervalXYDataset ) dataset ; Iterator iterator = visibleSeriesKeys . iterator ( ) ; while ( iterator . hasNext ( ) ) { Comparable seriesKey = ( Comparable ) iterator . next ( ) ; int series = dataset . indexOf ( seriesKey ) ; int itemCount = dataset . getItemCount ( series ) ; for ( int item = 0 ; item < itemCount ; item ++ ) { double x = ixyd . getXValue ( series , item ) ; if ( xRange . contains ( x ) ) { double lvalue = ixyd . getStartYValue ( series , item ) ; double uvalue = ixyd . getEndYValue ( series , item ) ; if ( ! Double . isNaN ( lvalue ) ) { minimum = Math . min ( minimum , lvalue ) ; } if ( ! Double . isNaN ( uvalue ) ) { maximum = Math . max ( maximum , uvalue ) ; } } } } } else { Iterator iterator = visibleSeriesKeys . iterator ( ) ; while ( iterator . hasNext ( ) ) { Comparable seriesKey = ( Comparable ) iterator . next ( ) ; int series = dataset . indexOf ( seriesKey ) ; int itemCount = dataset . getItemCount ( series ) ; for ( int item = 0 ; item < itemCount ; item ++ ) { double x = dataset . getXValue ( series , item ) ; double y = dataset . getYValue ( series , item ) ; if ( xRange . contains ( x ) ) { if ( ! Double . isNaN ( y ) ) { minimum = Math . min ( minimum , y ) ; maximum = Math . max ( maximum , y ) ; } } } } } if ( minimum == Double . POSITIVE_INFINITY ) { return null ; } else { return new Range ( minimum , maximum ) ; } }
Returns the range of y-values in the specified dataset for the data items
 belonging to the visible series and with x-values in the given range.
Returns the range of y - values in the specified dataset for the data items belonging to the visible series and with x - values in the given range .
// handle three cases by dataset type // handle special case of OHLCDataset // handle special case of IntervalXYDataset // standard case - plain XYDataset