view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeDischargeState.java @ 2989:ee3dbc4a802d

Added more checks in CrossSectionFactory.isNewst() to prevent IndexOutOfBoundsExceptions. flys-artifacts/trunk@4536 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Sun, 27 May 2012 13:35:15 +0000
parents 89731cb8c385
children 49727e9dcfde
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.List;

import org.apache.log4j.Logger;

import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.CallContext;

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.ChartArtifact;
import de.intevation.flys.artifacts.GaugeDischargeArtifact;
import de.intevation.flys.artifacts.FLYSArtifact;

import de.intevation.flys.artifacts.model.GaugeDischargeFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.WQKms;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.EmptyFacet;
import de.intevation.flys.artifacts.model.CalculationResult;

import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.utils.FLYSUtils;


/**
 * The only state for an GaugeDischargeState (River and km known).
 */
public class GaugeDischargeState
extends      DefaultState
implements   FacetTypes
{
    /** Developer-centric description of facet. */
    public static final String I18N_DESCRIPTION = "facet.discharge.curve";

    /** The logger that is used in this state. */
    private static final Logger logger = Logger.getLogger(GaugeDischargeState.class);


    /**
     * Add an GaugeDischargeFacet to list of Facets.
     *
     * @param artifact Ignored.
     * @param hash Ignored.
     * @param context Ignored.
     * @param meta CallMeta to be used for internationalization.
     * @param facets List to add AnnotationFacet to.
     *
     * @return null.
     */
    @Override
    public Object computeInit(
        FLYSArtifact artifact,
        String       hash,
        Object       context,
        CallMeta     meta,
        List<Facet>  facets
    ) {
        logger.debug("GaugeDischargeState.computeInit()");

        // TODO caching, / CalculationResultusage

        GaugeDischargeFacet facet = new GaugeDischargeFacet(
            0,
            DISCHARGE_CURVE,
            DISCHARGE_CURVE);
            //Resources.getMsg(meta, I18N_DESCRIPTION, I18N_DESCRIPTION));
        facets.add(facet);

        return null;
    }
    //WINFOArtifact#getDischargeCurveData


    @Override
    public Object computeAdvance(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        // TODO why are the facets null here?
        //if (facets == null) facets = new List<Facet>();
        if (artifact instanceof GaugeDischargeArtifact) {
            logger.debug("GaugeDischargeState.computeAdvance()");
            GaugeDischargeArtifact dischargeArtifact = (GaugeDischargeArtifact) artifact;

            CalculationResult res;

            /*if (old instanceof CalculationResult) {
                res = (CalculationResult) old;
            }
            else {*/
                res = dischargeArtifact.getDischargeCurveData();
            //}

            WQKms[] wqkms = (WQKms[]) res.getData();

            if (wqkms != null && facets != null) {
                logger.debug("GaugeDischargeState.computeAdvance(): create facets");
                // Create an i18ed name for a (w or q) duration curve facet.
                Object[] args = new Object[] {
                    FLYSUtils.getRiver(dischargeArtifact).getName(),
                    FLYSUtils.getLocations(dischargeArtifact)[0]
                };

                String nameW = Resources.getMsg(
                    context.getMeta(),
                    "chart.duration.curve.curve.w",
                    "",
                    args);

                String nameQ = Resources.getMsg(
                    context.getMeta(),
                    "chart.duration.curve.curve.q",
                    "",
                    args);

                /*Facet w = new DurationCurveFacet(DURATION_W, nameW);
                Facet q = new DurationCurveFacet(DURATION_Q, nameQ);

                facets.add(w);*/
                GaugeDischargeFacet facet = new GaugeDischargeFacet(
                    0,
                    "A"+DISCHARGE_CURVE,
                    "A"+DISCHARGE_CURVE);
                    //Resources.getMsg(meta, I18N_DESCRIPTION, I18N_DESCRIPTION));
                facets.add(facet);

                //facets.add(new DataFacet(CSV, "CSV data"));
                //facets.add(new DataFacet(PDF, "PDF data"));

                if (res.getReport().hasProblems()) {
                    facets.add(new ReportFacet());
                }
            }
            else {
                if (wqkms == null)
                logger.debug("GaugeDischargeState.computeAdvance(): wqkms 0");
                else
                logger.debug("GaugeDischargeState.computeAdvance(): facets 0");
            }

            return res;
        }
        else if (artifact instanceof ChartArtifact) {
            ChartArtifact chart = (ChartArtifact)artifact;
            facets.add(new EmptyFacet());
            return null;
        }
        return null;
    }

}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org