ingo@1115: /* ingo@1115: * Copyright (c) 2010 by Intevation GmbH ingo@1115: * ingo@1115: * This program is free software under the LGPL (>=v2.1) ingo@1115: * Read the file LGPL.txt coming with the software for details ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1115: */ ingo@1115: 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 :