ingo@233: package de.intevation.gnv.exports;
ingo@233:
ingo@233: import de.intevation.gnv.geobackend.base.Result;
ingo@233: import de.intevation.gnv.geobackend.base.ResultDescriptor;
sascha@779:
tim@335: import de.intevation.gnv.state.exception.StateException;
ingo@233:
sascha@779: import java.util.ArrayList;
sascha@779: import java.util.List;
sascha@779:
sascha@779: import org.apache.log4j.Logger;
ingo@233:
ingo@233: /**
ingo@771: * This is the default implementation of {@link Export.DataCollector}. This
ingo@771: * class serves a method to extract required data from Result
ingo@771: * objects.
ingo@771: *
ingo@771: * @author Ingo Weinzierl
ingo@233: */
ingo@233: public class DefaultDataCollector
ingo@233: implements Export.DataCollector
ingo@233: {
ingo@771: /**
ingo@771: * Logger used to log via log4j.
ingo@771: */
ingo@233: private Logger log = Logger.getLogger(DefaultDataCollector.class);
ingo@233:
ingo@771: /**
ingo@771: * ResultDescriptor used to extract specific attributes from
ingo@771: * Result
object.
ingo@771: */
ingo@233: protected ResultDescriptor rd;
ingo@771:
ingo@771: /**
ingo@771: * Atrribute names in Result
object which should be used for
ingo@771: * data extraction.
ingo@771: */
ingo@233: protected String [] names;
ingo@233:
ingo@233:
ingo@771: /**
ingo@771: * Constructor
ingo@771: *
ingo@771: * @param names See {@link #names}
ingo@771: */
ingo@233: public DefaultDataCollector(String[] names) {
ingo@233: this.names = names;
ingo@233: }
ingo@233:
ingo@771: /**
ingo@771: * This method initializes the ResultDescriptor
rd for a faster
ingo@771: * data extraction.
ingo@771: *
ingo@771: * @param res A Result
object used to get its description.
ingo@771: */
ingo@233: public void init(Result res) {
ingo@233: rd = res.getResultDescriptor();
ingo@233: }
ingo@233:
ingo@771: /**
ingo@771: * This method is used to extract the required data specified by {@link
ingo@771: * #names}.
ingo@771: *
ingo@771: * @param result Result
object.
ingo@771: *
ingo@771: * @return Extracted data.
ingo@771: */
ingo@233: public String[] getData(Result result)
tim@335: throws StateException {
ingo@233:
ingo@233: if (rd == null)
ingo@233: init(result);
ingo@233:
ingo@233: List entries = new ArrayList();
ingo@233:
ingo@233: int[] indices = rd.getColumnIndices(names);
ingo@233: for (int i = 0; i < names.length; ++i) {
ingo@233: entries.add(result.getString(indices[i]));
ingo@233: }
ingo@233:
ingo@233: return (String[]) entries.toArray((new String[entries.size()]));
ingo@233: }
ingo@233: }
ingo@771: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :