view gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionParallelOutputState.java @ 1145:dfe1ac687c7f tip

added tags
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:16:15 +0200
parents f953c9a559d8
children
line wrap: on
line source
/*
 * Copyright (c) 2010 by Intevation GmbH
 *
 * This program is free software under the LGPL (>=v2.1)
 * Read the file LGPL.txt coming with the software for details
 * or visit http://www.gnu.org/licenses/ if it does not exist.
 */

package de.intevation.gnv.state.profile.verticalcrosssection;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;

import com.vividsolutions.jts.io.WKTWriter;

import de.intevation.gnv.artifacts.ressource.RessourceFactory;

import de.intevation.gnv.geobackend.base.Result;
import de.intevation.gnv.geobackend.base.ResultDescriptor;

import de.intevation.gnv.geobackend.base.query.QueryExecutor;
import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory;

import de.intevation.gnv.geobackend.base.query.exception.QueryException;

import de.intevation.gnv.state.InputData;

import de.intevation.gnv.utils.WKTUtils;

import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;

import org.apache.log4j.Logger;

/**
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class VerticalCrossSectionParallelOutputState
extends      VerticalCrossSectionOutputState
{
    public static final String QUERY_LINESTRING =
        "verticalcrosssection_mesh_parallel_linestring";

    private static Logger logger =
        Logger.getLogger(VerticalCrossSectionParallelOutputState.class);

    @Override
    protected String getLineString() {
        Coordinate[] coordinates = null;

        try {
            String[] filters = generateFilterValues();

            QueryExecutor exec = QueryExecutorFactory
                .getInstance()
                .getQueryExecutor();

            Collection results = exec.executeQuery(QUERY_LINESTRING, filters);
            Iterator   iter    = results.iterator();

            coordinates = new Coordinate[results.size()];
            int sIdx    = -1;
            int idx     = 0;

            while (iter.hasNext()) {
                Result result = (Result) iter.next();

                if (sIdx == -1) {
                    ResultDescriptor rd = result.getResultDescriptor();
                    sIdx = rd.getColumnIndex("SHAPE");
                }

                logger.debug(result.getString(sIdx));
                Coordinate c = WKTUtils.toCoordinate(result.getString(sIdx));

                coordinates[idx++] = c;
            }
        }
        catch (QueryException qe) {
            logger.error(qe, qe);
        }

        CoordinateArraySequenceFactory factory =
            CoordinateArraySequenceFactory.instance();

        if (coordinates == null)
            return null;

        CoordinateSequence seq = factory.create(coordinates);
        return seq != null ? WKTWriter.toLineString(seq) : null;
    }


    protected String[] generateFilterValues() {
        String[] filters = new String[7];

        InputData parameterid = inputData.get("parameterid");
        InputData timevalue   = inputData.get("dateid");
        InputData meshid      = inputData.get("meshid");
        InputData axisid      = inputData.get("axisid");
        InputData meshpoint   = inputData.get("mesh_point");

        filters[0] = parameterid.getValue();
        filters[1] = "to_date('" + timevalue.getValue() + "', 'YYYY.MM.DD HH24:MI:SS')";
        filters[2] = meshid.getValue();
        filters[3] = meshid.getValue();
        filters[4] = axisid.getValue();
        filters[5] = axisid.getValue();
        filters[6] = meshpoint.getValue();

        return filters;
    }


    @Override
    protected String createChartSubtitle(Locale locale, String uuid) {
        String subtitle = super.createChartSubtitle(locale, uuid);

        InputData data = inputData.get("mesh_point");
        if (data == null)
            return subtitle;

        RessourceFactory factory = RessourceFactory.getInstance();
        String coordinate        = factory.getRessource(
            locale, "coordinate", "coordinate");

        subtitle += "\n" + coordinate + ": ";
        subtitle += data.getDescription(data.getValue());

        return subtitle;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org