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@1090: package de.intevation.gnv.state.profile.verticalcrosssection; ingo@1090: ingo@1090: import com.vividsolutions.jts.geom.Coordinate; ingo@1090: import com.vividsolutions.jts.geom.CoordinateSequence; ingo@1090: import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory; ingo@1090: ingo@1090: import com.vividsolutions.jts.io.WKTWriter; ingo@1090: ingo@1094: import de.intevation.gnv.artifacts.ressource.RessourceFactory; ingo@1090: ingo@1090: import de.intevation.gnv.geobackend.base.Result; ingo@1090: import de.intevation.gnv.geobackend.base.ResultDescriptor; ingo@1090: ingo@1090: import de.intevation.gnv.geobackend.base.query.QueryExecutor; ingo@1090: import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; ingo@1090: ingo@1090: import de.intevation.gnv.geobackend.base.query.exception.QueryException; ingo@1090: ingo@1090: import de.intevation.gnv.state.InputData; ingo@1090: ingo@1090: import de.intevation.gnv.utils.WKTUtils; ingo@1090: ingo@1090: import java.util.Collection; ingo@1090: import java.util.Iterator; ingo@1094: import java.util.Locale; ingo@1090: ingo@1090: import org.apache.log4j.Logger; ingo@1090: ingo@1090: /** ingo@1090: * @author Ingo Weinzierl ingo@1090: */ ingo@1090: public class VerticalCrossSectionParallelOutputState ingo@1090: extends VerticalCrossSectionOutputState ingo@1090: { ingo@1090: public static final String QUERY_LINESTRING = ingo@1090: "verticalcrosssection_mesh_parallel_linestring"; ingo@1090: ingo@1090: private static Logger logger = ingo@1090: Logger.getLogger(VerticalCrossSectionParallelOutputState.class); ingo@1090: ingo@1090: @Override ingo@1090: protected String getLineString() { ingo@1090: Coordinate[] coordinates = null; ingo@1090: ingo@1090: try { ingo@1090: String[] filters = generateFilterValues(); ingo@1090: ingo@1090: QueryExecutor exec = QueryExecutorFactory ingo@1090: .getInstance() ingo@1090: .getQueryExecutor(); ingo@1090: ingo@1090: Collection results = exec.executeQuery(QUERY_LINESTRING, filters); ingo@1090: Iterator iter = results.iterator(); ingo@1090: ingo@1090: coordinates = new Coordinate[results.size()]; ingo@1090: int sIdx = -1; ingo@1090: int idx = 0; ingo@1090: ingo@1090: while (iter.hasNext()) { ingo@1090: Result result = (Result) iter.next(); ingo@1090: ingo@1090: if (sIdx == -1) { ingo@1090: ResultDescriptor rd = result.getResultDescriptor(); ingo@1090: sIdx = rd.getColumnIndex("SHAPE"); ingo@1090: } ingo@1090: ingo@1090: logger.debug(result.getString(sIdx)); ingo@1090: Coordinate c = WKTUtils.toCoordinate(result.getString(sIdx)); ingo@1090: ingo@1090: coordinates[idx++] = c; ingo@1090: } ingo@1090: } ingo@1090: catch (QueryException qe) { ingo@1090: logger.error(qe, qe); ingo@1090: } ingo@1090: ingo@1090: CoordinateArraySequenceFactory factory = ingo@1090: CoordinateArraySequenceFactory.instance(); ingo@1090: ingo@1090: if (coordinates == null) ingo@1090: return null; ingo@1090: ingo@1090: CoordinateSequence seq = factory.create(coordinates); ingo@1090: return seq != null ? WKTWriter.toLineString(seq) : null; ingo@1090: } ingo@1090: ingo@1090: ingo@1090: protected String[] generateFilterValues() { ingo@1090: String[] filters = new String[7]; ingo@1090: ingo@1090: InputData parameterid = inputData.get("parameterid"); ingo@1090: InputData timevalue = inputData.get("dateid"); ingo@1090: InputData meshid = inputData.get("meshid"); ingo@1090: InputData axisid = inputData.get("axisid"); ingo@1090: InputData meshpoint = inputData.get("mesh_point"); ingo@1090: ingo@1090: filters[0] = parameterid.getValue(); ingo@1090: filters[1] = "to_date('" + timevalue.getValue() + "', 'YYYY.MM.DD HH24:MI:SS')"; ingo@1090: filters[2] = meshid.getValue(); ingo@1090: filters[3] = meshid.getValue(); ingo@1090: filters[4] = axisid.getValue(); ingo@1090: filters[5] = axisid.getValue(); ingo@1090: filters[6] = meshpoint.getValue(); ingo@1090: ingo@1090: return filters; ingo@1090: } ingo@1094: ingo@1094: ingo@1094: @Override ingo@1094: protected String createChartSubtitle(Locale locale, String uuid) { ingo@1094: String subtitle = super.createChartSubtitle(locale, uuid); ingo@1094: ingo@1094: InputData data = inputData.get("mesh_point"); ingo@1094: if (data == null) ingo@1094: return subtitle; ingo@1094: ingo@1094: RessourceFactory factory = RessourceFactory.getInstance(); ingo@1094: String coordinate = factory.getRessource( ingo@1094: locale, "coordinate", "coordinate"); ingo@1094: ingo@1094: subtitle += "\n" + coordinate + ": "; ingo@1094: subtitle += data.getDescription(data.getValue()); ingo@1094: ingo@1094: return subtitle; ingo@1094: } ingo@1090: } ingo@1090: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :