view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DischargeLongitudinalSection.java @ 5240:9c024718bffb

WaterlevelParser: Use Wst-structures directly (instead of Waterlevel*).
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 12 Mar 2013 10:55:14 +0100
parents fc0cdcae8f07
children 14db045d6368
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifactdatabase.state.FacetActivity;

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

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

import de.intevation.flys.artifacts.access.Calculation4Access;

import de.intevation.flys.artifacts.model.Calculation4;
import de.intevation.flys.artifacts.model.CalculationResult;
import de.intevation.flys.artifacts.model.ConstantWQKms;
import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
import de.intevation.flys.artifacts.model.DataFacet;
import de.intevation.flys.artifacts.model.EmptyFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.ReportFacet;
import de.intevation.flys.artifacts.model.WQCKms;
import de.intevation.flys.artifacts.model.WQKms;
import de.intevation.flys.artifacts.model.WaterlevelFacet;

import java.util.List;

import org.apache.log4j.Logger;

public class DischargeLongitudinalSection
extends      DefaultState
implements   FacetTypes
{
    private static Logger log =
        Logger.getLogger(DischargeLongitudinalSection.class);

    static {
        // Active/deactivate facets.
        FacetActivity.Registry.getInstance().register(
            "winfo",
            new FacetActivity() {
                @Override
                public Boolean isInitialActive(
                    Artifact artifact,
                    Facet    facet,
                    String   output
                ) {
                    String name = facet.getName();
                    if (name.equals(DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT)) {
                        return Boolean.FALSE;
                    }
                    return Boolean.TRUE;
                }
            });
    }

    @Override
    public Object computeAdvance(
        FLYSArtifact artifact,
        String       hash,
        CallContext  context,
        List<Facet>  facets,
        Object       old
    ) {
        if (artifact instanceof ChartArtifact) {
            ChartArtifact chart = (ChartArtifact)artifact;
            facets.add(new EmptyFacet());
            return null;
        }

        Calculation4Access access = new Calculation4Access(artifact);

        CalculationResult res = old instanceof CalculationResult
            ? (CalculationResult)old
            : new Calculation4(access).calculate();

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

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

        for (int i = 0; i < wqkms.length; i++) {
            String nameW = null;
            String nameQ = null;

            if (access.isQ()) {
                nameQ = wqkms[i].getName();
                nameW = "W(" + nameQ + ")";
            }
            else {
                nameW = wqkms[i].getName();
                nameQ = "Q(" + nameW + ")";
            }

            // Do not generate Waterlevel/Waterline facets 
            // for Q only curves.
            if (!(wqkms[i] instanceof ConstantWQKms)) {

                Facet w = new WaterlevelFacet(
                    i, DISCHARGE_LONGITUDINAL_W, nameW);

                Facet s = new CrossSectionWaterLineFacet(i, nameW);

                Facet q = new WaterlevelFacet(
                    i, DISCHARGE_LONGITUDINAL_Q, nameQ);
                facets.add(s);
                facets.add(w);
                facets.add(q);
            }
            else {
                Facet q;
                if (nameQ.contains("geschnitten")) {
                    q = new WaterlevelFacet(
                        i, DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT, nameQ);
                }
                else {
                    q = new WaterlevelFacet(
                        i, DISCHARGE_LONGITUDINAL_Q_INFOLD, nameQ);
                }
                facets.add(q);
            }

            if (wqkms[i] instanceof WQCKms) {
                // TODO DO i18n

                String nameC = nameW.replace(
                    "benutzerdefiniert",
                    "benutzerdefiniert [korrigiert]");

                Facet c = new WaterlevelFacet(
                    i, DISCHARGE_LONGITUDINAL_C, nameC);

                // Here, avoid index clash with Facet "s" above and
                // signal the WINFO later that we want to access Cs.
                Facet r = new CrossSectionWaterLineFacet(i + 1, nameC);

                facets.add(c);
                facets.add(r);
            }
        }

        if (wqkms.length > 0) {
            facets.add(new DataFacet(CSV, "CSV data"));
            facets.add(new DataFacet(WST, "WST data"));
        }

        if (res.getReport().hasProblems()) {
            facets.add(new ReportFacet());
        }

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

http://dive4elements.wald.intevation.org