Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java @ 1068:a4e490e0af5b
Enable GetFeatureInforRequests on all layer
gnv-artifacts/trunk@1163 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Mon, 07 Jun 2010 12:17:57 +0000 |
parents | 70653c29fc1d |
children | 9bb1979aabbe |
line wrap: on
line source
package de.intevation.gnv.utils; 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 java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; /** * @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 final String[] COLUMNS = { "YORDINATE", "XORDINATE", "GROUP1", "GROUP2", "GROUP3", "GAPID", "SERIES" }; public static Collection<Result> process(Collection<Result> input) { logger.info("Process vector data (" + input.size() + " items)"); ResultDescriptor outDescriptor = initResultDescriptor(); 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(COLUMNS); 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(COLUMNS, 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() { logger.debug("Init ResultDescriptor for outgoing results."); ResultDescriptor desc = new DefaultResultDescriptor(); for (String name: COLUMNS) { desc.addColumn(name, "java.lang.String"); } logger.debug("Outgoing ResultDescriptor has " + desc.getColumnCount() + " columns"); return desc; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :