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: ingo@1074: package de.intevation.gnv.chart; ingo@1074: ingo@1074: import de.intevation.gnv.geobackend.base.Result; ingo@1074: import de.intevation.gnv.geobackend.base.ResultDescriptor; ingo@1074: ingo@1074: import java.util.Collection; ingo@1074: import java.util.Iterator; ingo@1074: import java.util.Locale; ingo@1074: ingo@1074: import org.apache.log4j.Logger; ingo@1074: ingo@1074: import org.jfree.chart.ChartTheme; ingo@1074: ingo@1074: import org.jfree.chart.plot.XYPlot; ingo@1074: ingo@1074: import org.jfree.data.xy.XYSeries; ingo@1074: import org.jfree.data.xy.XYSeriesCollection; ingo@1074: ingo@1074: /** ingo@1074: * This class is used to create xy charts of vertical profiles. ingo@1074: * ingo@1074: * @author Ingo Weinzierl ingo@1074: */ ingo@1074: public class HorizontalProfileVectorChart ingo@1074: extends HorizontalProfileChart ingo@1074: { ingo@1074: private static Logger logger = ingo@1074: Logger.getLogger(HorizontalProfileVectorChart.class); ingo@1074: ingo@1074: ingo@1074: public HorizontalProfileVectorChart( ingo@1074: ChartLabels labels, ingo@1074: ChartTheme theme, ingo@1074: Collection parameters, ingo@1074: Collection measurements, ingo@1074: Collection dates, ingo@1074: Collection result, ingo@1074: Collection timeGaps, ingo@1074: Locale locale, ingo@1074: boolean linesVisible, ingo@1074: boolean shapesVisible ingo@1074: ) { ingo@1074: super(labels, theme, parameters, measurements, dates, result, ingo@1074: timeGaps, locale, linesVisible, shapesVisible); ingo@1074: } ingo@1074: ingo@1074: ingo@1074: @Override ingo@1074: protected void initData() { ingo@1074: Iterator iter = resultSet.iterator(); ingo@1074: Result row = null; ingo@1074: String seriesName = null; ingo@1074: XYSeries series = null; ingo@1074: ingo@1074: int idx = 0; ingo@1074: int startPos = 0; ingo@1074: int endPos = 0; ingo@1074: ingo@1074: double startValue = 0; ingo@1074: double endValue = 0; ingo@1074: ingo@1074: ResultDescriptor rd = null; ingo@1074: int idxSeries = -1; ingo@1074: int idxX = -1; ingo@1074: int idxY = -1; ingo@1074: ingo@1074: Result[] results = ingo@1074: (Result[]) resultSet.toArray(new Result[resultSet.size()]); ingo@1074: ingo@1074: while (iter.hasNext()) { ingo@1074: row = (Result) iter.next(); ingo@1074: ingo@1074: if (rd == null) { ingo@1074: rd = row.getResultDescriptor(); ingo@1074: idxSeries = rd.getColumnIndex("SERIES"); ingo@1074: idxX = rd.getColumnIndex("XORDINATE"); ingo@1074: idxY = rd.getColumnIndex("YORDINATE"); ingo@1074: } ingo@1074: ingo@1074: if (!row.getString(idxSeries).equals(seriesName)) { ingo@1074: logger.debug("prepare data/plot for next dataset."); ingo@1074: ingo@1074: if (series != null) { ingo@1074: gapDetection(results, series, startPos, endPos); ingo@1074: addSeries(series, seriesName, idx); ingo@1074: ingo@1074: startPos = endPos + 1; ingo@1074: } ingo@1074: ingo@1074: seriesName = row.getString(idxSeries); ingo@1074: ingo@1074: logger.debug("next data is '" + seriesName + "'"); ingo@1074: series = new XYSeries(seriesName); ingo@1074: } ingo@1074: ingo@1074: addValue(row, series); ingo@1074: Object x = getValue(row); ingo@1074: Double y = row.getDouble(idxY); ingo@1074: if (x != null && y != null) { ingo@1074: storeMaxRange(ranges, y, seriesName); ingo@1074: storeMaxValue(values, x, seriesName); ingo@1074: } ingo@1074: ingo@1074: endPos++; ingo@1074: } ingo@1074: ingo@1074: if (results.length == 0) ingo@1074: return; ingo@1074: ingo@1074: gapDetection(results, series, startPos, endPos); ingo@1074: addSeries(series, seriesName, idx); ingo@1074: ingo@1074: addDatasets(); ingo@1074: } ingo@1074: ingo@1074: ingo@1074: @Override ingo@1074: protected void addDatasets() { ingo@1074: XYPlot plot = chart.getXYPlot(); ingo@1074: int idx = 0; ingo@1074: ingo@1074: XYSeriesCollection sc = null; ingo@1074: Iterator iter = datasets.keySet().iterator(); ingo@1074: ingo@1074: while (iter.hasNext()) { ingo@1074: String key = (String) iter.next(); ingo@1074: sc = (XYSeriesCollection)datasets.get(key); ingo@1074: plot.setDataset(idx, sc ); ingo@1074: logger.debug("Added " + key + " parameter to plot."); ingo@1074: prepareAxis(key, idx); ingo@1074: adjustRenderer( ingo@1074: idx++, ingo@1074: sc.getSeriesCount(), ingo@1074: linesVisible, ingo@1074: shapesVisible ingo@1074: ); ingo@1074: } ingo@1074: } ingo@1074: } ingo@1074: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :