ingo@1115: /*
ingo@1115: * Copyright (c) 2010 by Intevation GmbH
ingo@1115: *
ingo@1115: * This program is free software under the LGPL (>=v2.1)
ingo@1115: * Read the file LGPL.txt coming with the software for details
ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@1115: */
ingo@1115:
sascha@422: package de.intevation.gnv.jfreechart;
sascha@422:
sascha@779: import java.util.ArrayList;
sascha@779: import java.util.Collection;
sascha@422: import java.util.List;
sascha@422:
sascha@422: import org.jfree.data.Range;
sascha@779:
sascha@422: import org.jfree.data.general.AbstractSeriesDataset;
sascha@422:
sascha@422: /**
ingo@795: * An implementation of {@link org.jfree.data.xy.XYDataset} to create 2D charts.
ingo@795: * This dataset contains several PolygonSeries
and is used by
ingo@795: * PolygonRenderer
to draw its items into a 2D chart.
sascha@803: *
sascha@780: * @author Ingo Weinzierl
sascha@422: */
sascha@422: public class PolygonDataset
sascha@422: extends AbstractSeriesDataset
sascha@422: {
ingo@795: /**
ingo@795: * PolygonSeries included in this Dataset
ingo@795: */
sascha@422: private List data;
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: * Constructor.
ingo@795: */
sascha@422: public PolygonDataset() {
sascha@436: data = new ArrayList();
sascha@422: }
sascha@422:
ingo@795: /**
ingo@795: * Constructs a new PolygonDataset containing multiple PolygonSeries.
ingo@795: *
ingo@795: * @param series A collection containing some PolygonSeries.
ingo@795: */
sascha@436: public PolygonDataset(Collection series) {
sascha@436: data = new ArrayList(series);
sascha@436: }
sascha@422:
ingo@795: /**
ingo@795: * Constructs a PolygonDataset with a single PolygonSeries.
sascha@803: *
ingo@795: * @param series A PolygonSeries.
ingo@795: */
sascha@422: public PolygonDataset(PolygonSeries series) {
sascha@436: this();
sascha@422:
sascha@422: if (series != null) {
sascha@422: data.add(series);
sascha@422: }
sascha@422: }
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: *
ingo@795: * @param series
ingo@795: */
sascha@422: public void addSeries(PolygonSeries series) {
sascha@422: if (series == null)
sascha@422: throw new IllegalArgumentException("Null 'series' argument.");
sascha@422:
sascha@422: data.add(series);
sascha@422: }
sascha@422:
ingo@795: /**
ingo@795: *
ingo@795: * @param series
ingo@795: */
sascha@447: public void addAllSeries(Collection series) {
sascha@447: data.addAll(series);
sascha@447: }
sascha@422:
ingo@795: /**
ingo@795: * Retrieves the x-axis range of all PolygonSeries in this dataset.
ingo@795: *
ingo@795: * @return range of the x-axis.
ingo@795: */
sascha@422: public Range getDomainBounds() {
sascha@422: double lower = Double.POSITIVE_INFINITY;
sascha@422: double upper = Double.NEGATIVE_INFINITY;
sascha@422: int seriesCount = getSeriesCount();
sascha@422:
sascha@422: for (int s = 0; s < seriesCount; s++) {
sascha@422: PolygonSeries series = getSeries(s);
sascha@422:
sascha@422: Range domainRange = series.getDomainBounds();
sascha@422: double minX = domainRange.getLowerBound();
sascha@422: if (!Double.isNaN(minX)) {
sascha@422: lower = Math.min(lower, minX);
sascha@422: }
sascha@422:
sascha@422: double maxX = domainRange.getUpperBound();
sascha@422: if (!Double.isNaN(maxX)) {
sascha@422: upper = Math.max(upper, maxX);
sascha@422: }
sascha@422: }
sascha@422:
sascha@422: return new Range(lower, upper);
sascha@422: }
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: * Retrieves the y-axis range of all PolygonSeries in this dataset.
ingo@795: *
ingo@795: * @return the y-axis range.
ingo@795: */
sascha@422: public Range getRangeBounds() {
sascha@422: double lower = Double.POSITIVE_INFINITY;
sascha@422: double upper = Double.NEGATIVE_INFINITY;
sascha@422: int seriesCount = getSeriesCount();
sascha@422:
sascha@422: for (int i = 0; i < seriesCount; i++) {
sascha@422: PolygonSeries series = getSeries(i);
sascha@422:
sascha@422: Range range = series.getRangeBounds();
sascha@422: double minX = range.getLowerBound();
sascha@422: if (!Double.isNaN(minX)) {
sascha@422: lower = Math.min(lower, minX);
sascha@422: }
sascha@422:
sascha@422: double maxX = range.getUpperBound();
sascha@422: if (!Double.isNaN(maxX)) {
sascha@422: upper = Math.max(upper, maxX);
sascha@422: }
sascha@422: }
sascha@422:
sascha@422: return new Range(lower, upper);
sascha@422: }
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: * Returns the number of series in this dataset.
ingo@795: *
ingo@795: * @return the number of series in this dataset.
ingo@795: */
sascha@422: public int getSeriesCount() {
sascha@422: return data.size();
sascha@422: }
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: * Returns the key for a series.
ingo@795: *
ingo@795: * @param index Index of a specific series.
ingo@795: * @return the series key of the series with the given index.
ingo@795: */
ingo@795: public Comparable getSeriesKey(int index) {
ingo@795: return ((PolygonSeries)data.get(index)).getKey();
sascha@422: }
sascha@422:
sascha@422:
ingo@795: /**
ingo@795: *
ingo@795: * @param idx Index.
ingo@795: * @return the series with the given index.
ingo@795: */
sascha@422: public PolygonSeries getSeries(int idx) {
sascha@422: return (PolygonSeries)data.get(idx);
sascha@422: }
sascha@422: }
sascha@836: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :