view artifacts/src/main/java/org/dive4elements/river/artifacts/states/DischargeLongitudinalSection.java @ 9479:2b83d3a96703

i18n TODO "benutzerdefiniert" = "custom" fixed
author gernotbelger
date Mon, 10 Sep 2018 15:31:55 +0200
parents 3f49835a00c3
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.artifacts.states;

import java.util.List;

import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifactdatabase.state.FacetActivity;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.access.Calculation4Access;
import org.dive4elements.river.artifacts.model.Calculation4;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.ConstantWQKms;
import org.dive4elements.river.artifacts.model.CrossSectionWaterLineFacet;
import org.dive4elements.river.artifacts.model.DataFacet;
import org.dive4elements.river.artifacts.model.EmptyFacet;
import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.model.ReportFacet;
import org.dive4elements.river.artifacts.model.WQCKms;
import org.dive4elements.river.artifacts.model.WQKms;
import org.dive4elements.river.artifacts.model.WaterlevelFacet;
import org.dive4elements.river.artifacts.resources.Resources;

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(final Artifact artifact, final Facet facet, final String output) {
                final String name = facet.getName();
                if (name.equals(DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT)) {
                    return Boolean.FALSE;
                }
                return Boolean.TRUE;
            }
        });
    }

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

        final Calculation4Access access = new Calculation4Access(artifact);

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

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

        final 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)) {

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

                final Facet s = new CrossSectionWaterLineFacet(i, nameW, ComputeType.ADVANCE, hash, getID(), Integer.valueOf(i));

                final 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);
            }

            final String custom = Resources.getMsg(context.getMeta(), "common.custom");
            if (wqkms[i] instanceof WQCKms) {
                // TODO DO i18n

                final String nameC = nameW.replace(custom, Resources.getMsg(context.getMeta(), "custom.corrected"));

                final 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.
                final Facet r = new CrossSectionWaterLineFacet(i + 1, nameC, ComputeType.ADVANCE, hash, getID(), Integer.valueOf(i + 1));

                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