view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonDataset.java @ 799:feeaf5aec552

ISSUE213: Wrong Geometrytype used for the generation of an Layer with Multipolygon-Geometries gnv-artifacts/trunk@881 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 06 Apr 2010 11:56:53 +0000
parents cdade5005cba
children feae2f9d6c6f
line wrap: on
line source
package de.intevation.gnv.jfreechart;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.jfree.data.Range;

import org.jfree.data.general.AbstractSeriesDataset;

/**
 * An implementation of {@link org.jfree.data.xy.XYDataset} to create 2D charts.
 * This dataset contains several <code>PolygonSeries</code> and is used by
 * <code>PolygonRenderer</code> to draw its items into a 2D chart.
 * 
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class PolygonDataset
extends      AbstractSeriesDataset
{
    /**
     * PolygonSeries included in this Dataset
     */
    private List data;


    /**
     * Constructor.
     */
    public PolygonDataset() {
        data = new ArrayList();
    }

    /**
     * Constructs a new PolygonDataset containing multiple PolygonSeries.
     *
     * @param series A collection containing some PolygonSeries.
     */
    public PolygonDataset(Collection series) {
        data = new ArrayList(series);
    }

    /**
     * Constructs a PolygonDataset with a single PolygonSeries.
     * 
     * @param series A PolygonSeries.
     */
    public PolygonDataset(PolygonSeries series) {
        this();

        if (series != null) {
            data.add(series);
        }
    }


    /**
     *
     * @param series
     */
    public void addSeries(PolygonSeries series) {
        if (series == null)
            throw new IllegalArgumentException("Null 'series' argument.");

        data.add(series);
    }

    /**
     *
     * @param series
     */
    public void addAllSeries(Collection<PolygonSeries> series) {
        data.addAll(series);
    }

    /**
     * Retrieves the x-axis range of all PolygonSeries in this dataset.
     *
     * @return range of the x-axis.
     */
    public Range getDomainBounds() {
        double lower       = Double.POSITIVE_INFINITY;
        double upper       = Double.NEGATIVE_INFINITY;
        int    seriesCount = getSeriesCount();

        for (int s = 0; s < seriesCount; s++) {
            PolygonSeries series = getSeries(s);

            Range domainRange = series.getDomainBounds();
            double minX = domainRange.getLowerBound();
            if (!Double.isNaN(minX)) {
                lower = Math.min(lower, minX);
            }

            double maxX = domainRange.getUpperBound();
            if (!Double.isNaN(maxX)) {
                upper = Math.max(upper, maxX);
            }
        }

        return new Range(lower, upper);
    }


    /**
     * Retrieves the y-axis range of all PolygonSeries in this dataset.
     *
     * @return the y-axis range.
     */
    public Range getRangeBounds() {
        double lower       = Double.POSITIVE_INFINITY;
        double upper       = Double.NEGATIVE_INFINITY;
        int    seriesCount = getSeriesCount();

        for (int i = 0; i < seriesCount; i++) {
            PolygonSeries series = getSeries(i);

            Range range = series.getRangeBounds();
            double minX = range.getLowerBound();
            if (!Double.isNaN(minX)) {
                lower = Math.min(lower, minX);
            }

            double maxX = range.getUpperBound();
            if (!Double.isNaN(maxX)) {
                upper = Math.max(upper, maxX);
            }
        }

        return new Range(lower, upper);
    }


    /**
     * Returns the number of series in this dataset.
     *
     * @return the number of series in this dataset.
     */
    public int getSeriesCount() {
        return data.size();
    }


    /**
     * Returns the key for a series.
     *
     * @param index Index of a specific series.
     * @return the series key of the series with the given index.
     */
    public Comparable getSeriesKey(int index) {
        return ((PolygonSeries)data.get(index)).getKey();
    }


    /**
     *
     * @param idx Index.
     * @return the series with the given index.
     */
    public PolygonSeries getSeries(int idx) {
        return (PolygonSeries)data.get(idx);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org