view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java @ 4174:eaf83d4ae6b1

Sorted gauges for reference gauge selection in historical discharge calculation based on their name. Now, Gauge implements the Java Comparable interface and takes its name into account.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 18 Oct 2012 13:12:24 +0200
parents d7db9baa4e62
children b3aa91e45010
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.List;

import org.w3c.dom.Element;

import org.apache.log4j.Logger;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.CallContext;

import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.WINFOArtifact;
import de.intevation.flys.artifacts.model.CalculationResult;
import de.intevation.flys.artifacts.model.DataFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.HistoricalDischargeFacet;
import de.intevation.flys.artifacts.model.HistoricalDischargeDifferenceFacet;
import de.intevation.flys.artifacts.model.HistoricalWQTimerange;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.WQTimerange;


/**
 * State to calculate historical discharge curves.
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class HistoricalDischargeComputeState
extends      DefaultState
implements   FacetTypes
{

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

    public static final String DEFAULT_UNIT = "cm";


    @Override
    protected void appendItems(
        Artifact       artifact,
        ElementCreator creator,
        String         name,
        CallContext    context,
        Element        select
    ) {
        // TODO IMPLEMENT ME
    }


    @Override
    public Object computeAdvance(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        logger.debug("HistoricalDischargeComputeState.computeAdvance");

        WINFOArtifact winfo = (WINFOArtifact) artifact;

        CalculationResult res = old instanceof CalculationResult
            ? (CalculationResult) old
            : winfo.getHistoricalDischargeData();

        if (facets == null) {
            return res;
        }

        if (res.getReport().hasProblems()) {
            facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
        }

        WQTimerange[] data = (WQTimerange[]) res.getData();
        if (data == null || data.length == 0) {
            logger.warn("Historical Discharge calculation has no results!");
            return res;
        }

        facets.add(
            new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));

        facets.add(
            new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));

        prepareFacets(facets, data);

        return res;
    }


    protected void prepareFacets(List<Facet> facets, WQTimerange[] wqts) {
        int i = 0;

        for (WQTimerange wqt: wqts) {
            logger.debug("Prepare facet for: " + wqt.getName());

            // TODO CREATE BETTER TITLE FOR FACETS

            facets.add(new HistoricalDischargeFacet(
                i,
                HISTORICAL_DISCHARGE_Q,
                createFacetTitle(wqt)));

            if (wqt instanceof HistoricalWQTimerange) {
                logger.debug("Create another facet for historical differences.");

                facets.add(new HistoricalDischargeDifferenceFacet(
                    i,
                    HISTORICAL_DISCHARGE_Q_DIFF,
                    "DIFF: " + wqt.getName()));
            }

            i++;
        }
    }


    protected String createFacetTitle(WQTimerange wqt) {
        String name = wqt.getName();

        return name != null && name.indexOf("W") >= 0
            ? createFacetTitleW(wqt)
            : createFacetTitleQ(wqt);
    }


    protected String createFacetTitleW(WQTimerange wqt) {
        String name = wqt.getName();
        return name + " " + DEFAULT_UNIT;
    }


    protected String createFacetTitleQ(WQTimerange wqt) {
        return wqt.getName();
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org