Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonSeries.java @ 1129:ccfa07b88476
merged geo-backend
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:01 +0200 |
parents | f953c9a559d8 |
children |
line wrap: on
line source
/* * Copyright (c) 2010 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details * or visit http://www.gnu.org/licenses/ if it does not exist. */ package de.intevation.gnv.jfreechart; import java.util.HashMap; import java.util.Map; import org.jfree.data.Range; import org.jfree.data.general.Series; /** * This class represents a series of polygon items. * * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha Teichmann</a> * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class PolygonSeries extends Series { /** * Polygons. */ protected CompactXYItems [] rings; /** * A map containing attribues. */ protected Map attributes; /** * The unique key of this series. */ private static long uniqueKey; /** * * @return a unique key. */ protected synchronized static Long createUniqueKey() { return new Long(uniqueKey++); } /** * Constructor to create an empty PolygonSeries with a unique key. */ public PolygonSeries() { this(createUniqueKey(), null); } /** * * @param key The key used for this series. * @param rings Polygons. */ public PolygonSeries(Comparable key, CompactXYItems [] rings) { this(key, null, rings, new HashMap()); } /** * * @param key The key used for this series. * @param description A description of this series. * @param rings Polygons. */ public PolygonSeries( Comparable key, String description, CompactXYItems[] rings ) { this(key, description, rings, new HashMap()); } /** * * @param key The key used for this series. * @param description A description of this series. * @param rings Polygons. * @param attributes Some attribues. */ public PolygonSeries( Comparable key, String description, CompactXYItems [] rings, Map attributes ) { super(key, description); this.rings = rings; this.attributes = attributes; } public void setRings(CompactXYItems [] rings) { this.rings = rings; } public CompactXYItems [] getRings() { return rings; } public void addRing(CompactXYItems newRing) { if (rings == null) { rings = new CompactXYItems [] { newRing }; } else { CompactXYItems [] nRings = new CompactXYItems[rings.length + 1]; System.arraycopy(rings, 0, nRings, 0, rings.length); nRings[rings.length] = newRing; rings = nRings; } } public void addRings(CompactXYItems [] newRings) { if (newRings == null || newRings.length == 0) { return; } if (rings == null || rings.length == 0) { rings = newRings; } else { CompactXYItems [] both = new CompactXYItems[rings.length + newRings.length]; System.arraycopy(rings, 0, both, 0, rings.length); System.arraycopy(newRings, 0, both, rings.length, newRings.length); rings = both; } } public Object getAttribute(Object key) { return attributes.get(key); } public Object setAttribute(Object key, Object value) { return attributes.put(key, value); } public int getItemCount() { return rings != null ? rings.length : 0; } public CompactXYItems getItem(int idx) { return rings[idx]; } public Object removeAttribute(Object key) { return attributes.remove(key); } public boolean hasAttribute(Object key) { return attributes.containsKey(key); } /** * * @return the range of the x axis. */ public Range getDomainBounds() { double upper = Double.NEGATIVE_INFINITY; double lower = Double.POSITIVE_INFINITY; int count = getItemCount(); for (int i = 0; i < count; i++) { CompactXYItems items = getItem(i); double minX = items.getMinX(); double maxX = items.getMaxX(); if (!Double.isNaN(minX)) { lower = Math.min(lower, minX); } if (!Double.isNaN(maxX)) { upper = Math.max(upper, maxX); } } if (lower > upper) { return null; } return new Range(lower, upper); } /** * * @return the range of the y axis. */ public Range getRangeBounds() { double upper = Double.NEGATIVE_INFINITY; double lower = Double.POSITIVE_INFINITY; int count = getItemCount(); for (int i = 0; i < count; i++) { CompactXYItems items = getItem(i); double minY = items.getMinY(); double maxY = items.getMaxY(); if (!Double.isNaN(minY)) { lower = Math.min(lower, minY); } if (!Double.isNaN(maxY)) { upper = Math.max(upper, maxY); } } if (lower > upper) { return null; } return new Range(lower, upper); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :