ingo@235: package de.intevation.gnv.exports;
ingo@235:
sascha@779: import com.vividsolutions.jts.geom.Point;
sascha@779:
sascha@779: import com.vividsolutions.jts.io.ParseException;
sascha@779: import com.vividsolutions.jts.io.WKTReader;
sascha@779:
sascha@779: import de.intevation.gnv.geobackend.base.Result;
sascha@779:
sascha@779: import de.intevation.gnv.state.exception.StateException;
sascha@779:
ingo@235: import org.apache.log4j.Logger;
ingo@235:
ingo@235: /**
ingo@815: * This class is a specialization of DefaultDataCollector
. The
ingo@771: * difference between these classes is, that this class extracts points served
ingo@771: * by a wkt string.
ingo@771: *
ingo@771: * @author Ingo Weinzierl
ingo@235: */
ingo@235: public class ShapeDataCollector
ingo@235: extends DefaultDataCollector
ingo@235: {
ingo@771: /**
ingo@771: * Logger used for logging with log4j.
ingo@771: */
ingo@235: private Logger log = Logger.getLogger(ShapeDataCollector.class);
ingo@235:
ingo@771: /**
ingo@771: * WKTReader to parse points from wkt strings.
ingo@771: */
ingo@235: protected WKTReader wktReader = new WKTReader();
ingo@235:
ingo@771: /**
ingo@771: * Constructor
ingo@771: *
ingo@771: * @param names Attributes used to be extracted.
ingo@771: */
ingo@235: public ShapeDataCollector(String[] names) {
ingo@235: super(names);
ingo@235: }
ingo@235:
ingo@771: /**
ingo@771: * This method takes point from wkt strings as well and split them into x
ingo@771: * and y coordinate.
ingo@771: *
ingo@771: * @see de.intevation.gnv.exports.Export.DataCollector#getData(Result)
ingo@771: */
sascha@778: public String[] getData(Result result)
tim@335: throws StateException {
ingo@235:
ingo@235: if (rd == null)
ingo@235: init(result);
ingo@235:
ingo@235: try {
ingo@235: String [] entries = new String[names.length+1];
ingo@235: int j = 0;
ingo@235: for (int i = 0; i < names.length; i++) {
sascha@778:
ingo@235: if (names[i].equals("SHAPE")) {
ingo@235: Point p = (Point)wktReader.read(result.getString("SHAPE"));
ingo@235:
ingo@235: entries[j++] = ""+p.getX();
ingo@235: entries[j++] = ""+p.getY();
ingo@235: }
ingo@235: else {
ingo@235: entries[j++] = result.getString(names[i]);
ingo@235: }
ingo@235: }
ingo@235:
ingo@235: return entries;
ingo@235: }
ingo@235: catch (ParseException pe) {
ingo@235: log.error(pe, pe);
tim@335: throw new StateException(
ingo@235: "Error occured while parsing a Point from WKT.");
ingo@235: }
ingo@235: }
ingo@235: }
ingo@771: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :