view flys-artifacts/src/main/java/de/intevation/flys/exports/process/WOutProcessor.java @ 4488:5041105d2edd

Check if response code from GGInA is 200 OK Only parse the GGInA response if the status code is 200 OK. This improves the error message if GGInA is not available and shows the real reason instead of a JDOM error while parsing the response.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 14 Nov 2012 10:36:21 +0100
parents a5993b69439b
children 547041487266
line wrap: on
line source
package de.intevation.flys.exports.process;

import org.apache.log4j.Logger;
import org.jfree.data.xy.XYSeries;
import org.w3c.dom.Document;

import de.intevation.artifactdatabase.state.ArtifactAndFacet;
import de.intevation.artifacts.CallContext;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.WKms;
import de.intevation.flys.exports.StyledSeriesBuilder;
import de.intevation.flys.exports.XYChartGenerator;
import de.intevation.flys.jfree.StyledAreaSeriesCollection;
import de.intevation.flys.jfree.StyledXYSeries;
import de.intevation.flys.utils.DataUtil;
import de.intevation.flys.utils.ThemeUtil;

/**
 * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a>
 */
public class WOutProcessor implements Processor {

    private static final Logger logger =
            Logger.getLogger(WOutProcessor.class);

    @Override
    public void doOut(
            XYChartGenerator generator,
            ArtifactAndFacet    aaf,
            Document             theme,
            boolean               visible,
            int                         index)
    {
        CallContext context = generator.getCallContext();
        WKms wkms = (WKms) aaf.getData(context);

        logger.debug("doOut");

        XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme);

        StyledSeriesBuilder.addPoints(series, wkms);
        generator.addAxisSeries(series, index, visible);

        // If a "band around the curve shall be drawn, add according area.
        double bandWidth = ThemeUtil.parseBandWidth(theme);
        if (bandWidth > 0 ) {
            XYSeries seriesDown = new StyledXYSeries(
                "band " + aaf.getFacetDescription(), false, theme);
            XYSeries seriesUp = new StyledXYSeries(
                aaf.getFacetDescription()+"+/-"+bandWidth, false, theme);
            StyledSeriesBuilder.addUpperBand(seriesUp, wkms, bandWidth);
            StyledSeriesBuilder.addLowerBand(seriesDown, wkms, bandWidth);

            StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme);
            area.addSeries(seriesUp);
            area.addSeries(seriesDown);
            area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN);
            generator.addAreaSeries(area, index, visible);
        }

        invertAxis(generator, wkms);
    }

    /**
     * Returns true if facettype is longitutinal_section.w
     */
    @Override
    public boolean canHandle(String facettype) {
        if (facettype == null) {
            return false;
        }

        if (facettype.equals(FacetTypes.LONGITUDINAL_W)
                || facettype.equals(FacetTypes.STATIC_WKMS)
                || facettype.equals(FacetTypes.HEIGHTMARKS_POINTS)
                || facettype.equals(FacetTypes.STATIC_WQKMS)
                || facettype.equals(FacetTypes.STATIC_WQKMS_W)
                || facettype.equals(FacetTypes.DISCHARGE_LONGITUDINAL_W))
        {
            return true;
        }
        return false;
    }

    /**
     * This method determines - taking JFreeCharts auto x value ordering into
     * account - if the x axis need to be inverted. Waterlines in these charts
     * should decrease.
     *
     * @param wkms The data object that stores the x and y values used for this
     * chart.
     */
    public void invertAxis(XYChartGenerator generator, WKms wkms) {
        boolean wsUp = wkms.guessWaterIncreasing();
        boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms());
        boolean inv = (wsUp && kmUp) || (!wsUp && !kmUp);

        int size = wkms.size();

        if (logger.isDebugEnabled()) {
            logger.debug("(Wkms)Values  : " + size);
            if (size > 0) {
                logger.debug("Start km: " + wkms.getKm(0));
                logger.debug("End   km: " + wkms.getKm(size-1));
            }
            logger.debug("wsUp: " + wsUp);
            logger.debug("kmUp: " + kmUp);
            logger.debug("inv:  " + inv);
        }
        generator.setInverted(inv);
    }

}

http://dive4elements.wald.intevation.org