Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java @ 836:05bf8534a35a
Using unix line endings only.
gnv-artifacts/trunk@938 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 18 Apr 2010 09:17:25 +0000 |
parents | 9d427dd2a96a |
children | dfd02f8d3602 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java Sat Apr 17 09:35:24 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java Sun Apr 18 09:17:25 2010 +0000 @@ -1,226 +1,226 @@ -/** - * Title: TimeseriesStatistics, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v 1.3 2008/08/18 14:50:33 drewnak Exp $ - * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v $ - * created by: Stefan Blume (blume) - * erstellt am: 06.12.2007 - * Copyright: con terra GmbH, 2005 - * - * modified by: $Author: drewnak $ - * modified on: $Date: 2008/08/18 14:50:33 $ - * Version: $Revision: 1.3 $ - * TAG: $Name: $ - * locked from: $Locker: $ - * CVS State: $State: Exp $ - * Project: $ProjectName$ - */ -package de.intevation.gnv.statistics; - -import de.intevation.gnv.geobackend.base.Result; -import de.intevation.gnv.geobackend.base.ResultDescriptor; - -import de.intevation.gnv.state.describedata.KeyValueDescibeData; - -import de.intevation.gnv.statistics.exception.StatisticsException; - -import java.sql.SQLException; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; - -import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; - -import org.apache.commons.math.stat.regression.SimpleRegression; - -import org.apache.log4j.Logger; - -/** - * This class is used to create a statistic in timeseries products. - * - * @author blume - */ -public class TimeseriesStatistics -extends AbstractStatistics -{ - - /** - * Default Logging instance - */ - private static Logger log = Logger.getLogger(TimeseriesStatistics.class); - - /** - * Constructor - */ - public TimeseriesStatistics() { - } - - - public Collection<StatisticSet> calculateStatistics( - Object result, - Collection<KeyValueDescibeData> parameters, - Collection<KeyValueDescibeData> measurements, - Collection<KeyValueDescibeData> dates - ) - throws StatisticsException { - - if (!(result instanceof Collection)) { - return new ArrayList<StatisticSet>(); - } - - Collection<Result> resultSet = (Collection<Result>)result; - - clearStatistics(); - - DescriptiveStatistics lStatistics = null; - SimpleRegression lRegression = null; - Collection<StatisticSet> statisticSets = new ArrayList<StatisticSet>(); - String break1, break2, break3; - int lSeries = 1; - - if (resultSet == null) { - return statisticSets; - } - - int b1Idx = -1; - int b2Idx = -1; - int b3Idx = -1; - int yIdx = -1; - try { - - Iterator<Result> resultIterator = resultSet.iterator(); - if (resultIterator.hasNext()) { - Result row = resultIterator.next(); - Result previousRow = row; - - if (b1Idx == -1) { - ResultDescriptor rd = row.getResultDescriptor(); - b1Idx = rd.getColumnIndex("GROUP1"); - b2Idx = rd.getColumnIndex("GROUP2"); - b3Idx = rd.getColumnIndex("GROUP3"); - yIdx = rd.getColumnIndex("YORDINATE"); - - if (b1Idx == -1 || b2Idx == -1 || b3Idx == -1 || yIdx == -1) { - return statisticSets; - } - } - break1 = row.getString(b1Idx); - break2 = row.getString(b2Idx); - break3 = row.getString(b3Idx); - lRegression = new SimpleRegression(); - lStatistics = new DescriptiveStatistics(); - while (resultIterator.hasNext()) { - - if (!break1.equals(row.getString(b1Idx)) - || !break2.equals(row.getString(b2Idx)) - || !break3.equals(row.getString(b3Idx)) - ) { - String statisticsName = generateStatisticsName( - break1, break2, - break3, parameters, - measurements, dates); - - statisticSets.add( - generateStatisticsValues( - lStatistics, - lRegression, - statisticsName)); - - lStatistics.clear(); - lRegression.clear(); - - clearStatistics(); - - Double yValue = row.getDouble(yIdx); - - if (yValue != null) { - lStatistics.addValue(yValue); - Double x = calculateXOrdinateValue(previousRow,row); - lRegression.addData(x, yValue); - } - - break1 = row.getString(b1Idx); - break2 = row.getString(b2Idx); - break3 = row.getString(b3Idx); - previousRow = row; - row = resultIterator.next(); - lSeries++; - } else { - - Double value = row.getDouble(yIdx); - if (value != null) { - lStatistics.addValue(value.doubleValue()); - Double x = calculateXOrdinateValue(previousRow,row); - lRegression.addData(x, value.doubleValue()); - } - previousRow = row; - row = resultIterator.next(); - } - - } - - Double yValue = row.getDouble(yIdx); - - if (yValue != null) { - lStatistics.addValue(yValue); - Double x = calculateXOrdinateValue(previousRow, row); - lRegression.addData(x, yValue); - } - - String statisticsName = generateStatisticsName( - break1, break2, - break3, parameters, - measurements, dates); - - statisticSets.add(generateStatisticsValues( - lStatistics, - lRegression, - statisticsName)); - lStatistics.clear(); - lRegression.clear(); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - return statisticSets; - } - - /** - * Nothing is done here. - */ - protected void clearStatistics(){} - - - protected String generateStatisticsName(String break1, - String break2, - String break3, - Collection<KeyValueDescibeData> parameters, - Collection<KeyValueDescibeData> measurements, - Collection<KeyValueDescibeData> dates){ - log.debug("TimeseriesStatistics.generateStatisticsName"); - return this.findValueTitle(parameters,break1)+ " "+ - this.findValueTitle(measurements,break2) + "m"; - } - - - protected String findValueTitle(Collection<KeyValueDescibeData> values, - String id) { - log.debug("TimeseriesStatistics.findValueTitle "+ id); - if (values != null) { - Iterator<KeyValueDescibeData> it = values.iterator(); - while (it.hasNext()) { - KeyValueDescibeData data = it.next(); - if (id.equals(data.getKey())) { - return data.getValue(); - } - } - } - return ""; - } - - - protected double calculateXOrdinateValue(Result previousRow, Result row) throws SQLException { - return new Double((row.getDate("XORDINATE")).getTime() / 1000 / 3600); - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : \ No newline at end of file +/** + * Title: TimeseriesStatistics, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v 1.3 2008/08/18 14:50:33 drewnak Exp $ + * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v $ + * created by: Stefan Blume (blume) + * erstellt am: 06.12.2007 + * Copyright: con terra GmbH, 2005 + * + * modified by: $Author: drewnak $ + * modified on: $Date: 2008/08/18 14:50:33 $ + * Version: $Revision: 1.3 $ + * TAG: $Name: $ + * locked from: $Locker: $ + * CVS State: $State: Exp $ + * Project: $ProjectName$ + */ +package de.intevation.gnv.statistics; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; + +import de.intevation.gnv.statistics.exception.StatisticsException; + +import java.sql.SQLException; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; + +import org.apache.commons.math.stat.regression.SimpleRegression; + +import org.apache.log4j.Logger; + +/** + * This class is used to create a statistic in timeseries products. + * + * @author blume + */ +public class TimeseriesStatistics +extends AbstractStatistics +{ + + /** + * Default Logging instance + */ + private static Logger log = Logger.getLogger(TimeseriesStatistics.class); + + /** + * Constructor + */ + public TimeseriesStatistics() { + } + + + public Collection<StatisticSet> calculateStatistics( + Object result, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates + ) + throws StatisticsException { + + if (!(result instanceof Collection)) { + return new ArrayList<StatisticSet>(); + } + + Collection<Result> resultSet = (Collection<Result>)result; + + clearStatistics(); + + DescriptiveStatistics lStatistics = null; + SimpleRegression lRegression = null; + Collection<StatisticSet> statisticSets = new ArrayList<StatisticSet>(); + String break1, break2, break3; + int lSeries = 1; + + if (resultSet == null) { + return statisticSets; + } + + int b1Idx = -1; + int b2Idx = -1; + int b3Idx = -1; + int yIdx = -1; + try { + + Iterator<Result> resultIterator = resultSet.iterator(); + if (resultIterator.hasNext()) { + Result row = resultIterator.next(); + Result previousRow = row; + + if (b1Idx == -1) { + ResultDescriptor rd = row.getResultDescriptor(); + b1Idx = rd.getColumnIndex("GROUP1"); + b2Idx = rd.getColumnIndex("GROUP2"); + b3Idx = rd.getColumnIndex("GROUP3"); + yIdx = rd.getColumnIndex("YORDINATE"); + + if (b1Idx == -1 || b2Idx == -1 || b3Idx == -1 || yIdx == -1) { + return statisticSets; + } + } + break1 = row.getString(b1Idx); + break2 = row.getString(b2Idx); + break3 = row.getString(b3Idx); + lRegression = new SimpleRegression(); + lStatistics = new DescriptiveStatistics(); + while (resultIterator.hasNext()) { + + if (!break1.equals(row.getString(b1Idx)) + || !break2.equals(row.getString(b2Idx)) + || !break3.equals(row.getString(b3Idx)) + ) { + String statisticsName = generateStatisticsName( + break1, break2, + break3, parameters, + measurements, dates); + + statisticSets.add( + generateStatisticsValues( + lStatistics, + lRegression, + statisticsName)); + + lStatistics.clear(); + lRegression.clear(); + + clearStatistics(); + + Double yValue = row.getDouble(yIdx); + + if (yValue != null) { + lStatistics.addValue(yValue); + Double x = calculateXOrdinateValue(previousRow,row); + lRegression.addData(x, yValue); + } + + break1 = row.getString(b1Idx); + break2 = row.getString(b2Idx); + break3 = row.getString(b3Idx); + previousRow = row; + row = resultIterator.next(); + lSeries++; + } else { + + Double value = row.getDouble(yIdx); + if (value != null) { + lStatistics.addValue(value.doubleValue()); + Double x = calculateXOrdinateValue(previousRow,row); + lRegression.addData(x, value.doubleValue()); + } + previousRow = row; + row = resultIterator.next(); + } + + } + + Double yValue = row.getDouble(yIdx); + + if (yValue != null) { + lStatistics.addValue(yValue); + Double x = calculateXOrdinateValue(previousRow, row); + lRegression.addData(x, yValue); + } + + String statisticsName = generateStatisticsName( + break1, break2, + break3, parameters, + measurements, dates); + + statisticSets.add(generateStatisticsValues( + lStatistics, + lRegression, + statisticsName)); + lStatistics.clear(); + lRegression.clear(); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return statisticSets; + } + + /** + * Nothing is done here. + */ + protected void clearStatistics(){} + + + protected String generateStatisticsName(String break1, + String break2, + String break3, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates){ + log.debug("TimeseriesStatistics.generateStatisticsName"); + return this.findValueTitle(parameters,break1)+ " "+ + this.findValueTitle(measurements,break2) + "m"; + } + + + protected String findValueTitle(Collection<KeyValueDescibeData> values, + String id) { + log.debug("TimeseriesStatistics.findValueTitle "+ id); + if (values != null) { + Iterator<KeyValueDescibeData> it = values.iterator(); + while (it.hasNext()) { + KeyValueDescibeData data = it.next(); + if (id.equals(data.getKey())) { + return data.getValue(); + } + } + } + return ""; + } + + + protected double calculateXOrdinateValue(Result previousRow, Result row) throws SQLException { + return new Double((row.getDate("XORDINATE")).getTime() / 1000 / 3600); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :