Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java @ 1115:f953c9a559d8
Added license file and license headers.
gnv-artifacts/trunk@1260 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 02 Nov 2010 17:46:55 +0000 |
parents | 846b2b70b2e0 |
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.utils; import de.intevation.artifacts.CallContext; import de.intevation.gnv.chart.Chart; import de.intevation.gnv.chart.ChartLabels; import de.intevation.gnv.chart.DefaultHistogram; import de.intevation.gnv.geobackend.base.DefaultResult; import de.intevation.gnv.geobackend.base.DefaultResultDescriptor; import de.intevation.gnv.geobackend.base.Result; import de.intevation.gnv.geobackend.base.ResultDescriptor; import de.intevation.gnv.histogram.HistogramHelper; import de.intevation.gnv.state.describedata.KeyValueDescibeData; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import org.apache.log4j.Logger; import org.jfree.chart.ChartTheme; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public final class VectorDataProcessor { private static Logger logger = Logger.getLogger(VectorDataProcessor.class); public static Collection<Result> process( Collection<Result> input, String[] columnNames) { logger.info("Process vector data (" + input.size() + " items)"); ResultDescriptor outDescriptor = initResultDescriptor(columnNames); ResultDescriptor inDescriptor = null; int[] inIndices = null; int columns = -1; Map series = new HashMap(); // for each result of the incoming result for (Result result: input) { if (inDescriptor == null || inIndices == null) { inDescriptor = result.getResultDescriptor(); inIndices = inDescriptor.getColumnIndices(columnNames); columns = inDescriptor.getColumnCount(); } // for each column of the incoming result object for (int i = 0; i < columns; i++) { String name = inDescriptor.getColumnName(i); if (!StringUtils.contains(columnNames, name)) { List list = (List) series.get(name); if (list == null) list = new ArrayList(); Result out = new DefaultResult(outDescriptor); Object value = result.getObject(i); // skipp results that have no data value if (value == null) continue; out.addColumnValue(0, value); // add meta data to result object // TODO: Maybe we could do this one single time, because the // TODO: meta data will not change for (int j = 1; j < inIndices.length -1; j++) { out.addColumnValue(j, result.getObject(inIndices[j])); } // add the name of the component to distinguish between // different series later in the chart creation out.addColumnValue(inIndices.length-1, name); list.add(out); series.put(name, list); } } } // finally, we put all lists together Iterator iter = series.values().iterator(); List output = new ArrayList(); while (iter.hasNext()) { output.addAll((Collection)iter.next()); } logger.info("Data processing created " + output.size() + " elements."); return output; } public static ResultDescriptor initResultDescriptor(String[] columnNames) { logger.debug("Init ResultDescriptor for outgoing results."); ResultDescriptor desc = new DefaultResultDescriptor(); for (String name: columnNames) { desc.addColumn(name, "java.lang.String"); } logger.debug("Outgoing ResultDescriptor has " + desc.getColumnCount() + " columns"); return desc; } public static Chart[] getHistograms( String uuid, CallContext callContext, Collection<KeyValueDescibeData> results, ChartTheme theme, Map requestParameter ) { Locale locale = (Locale) requestParameter.get("locale"); Object[][] data = HistogramHelper.prepareVectorialHistogramData(results); int size = data.length; Chart[] histograms = new Chart[size]; for (int i = 0; i < size; i++) { ChartLabels labels = HistogramHelper.createHistogramLabels( uuid, callContext, locale, data[i]); histograms[i] = new DefaultHistogram( labels, data[i], theme, requestParameter); } return histograms; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :