Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java @ 9274:1c8eeaf6031f
bundu.wst workflow
author | gernotbelger |
---|---|
date | Thu, 19 Jul 2018 17:33:24 +0200 |
parents | 02739b8c010d |
children | 6ffcbb4f35d5 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java Thu Jul 19 17:32:27 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java Thu Jul 19 17:33:24 2018 +0200 @@ -1,32 +1,169 @@ -/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde - * Software engineering by - * Björnsen Beratende Ingenieure GmbH - * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt +/* 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.bundu.bezugswst; +import java.text.DateFormat; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.artifacts.CallMeta; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.FixRealizingAccess; +import org.dive4elements.river.artifacts.model.CalculationResult; +import org.dive4elements.river.artifacts.model.CrossSectionWaterLineFacet; +import org.dive4elements.river.artifacts.model.DataFacet; +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.fixings.FixOutlierFacet; +import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculation; +import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult; +import org.dive4elements.river.artifacts.model.fixings.FixReferenceEventsFacet; +import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; +import org.dive4elements.river.artifacts.model.fixings.FixWaterlevelFacet; +import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.DefaultState; +import org.dive4elements.river.utils.Formatter; +import org.dive4elements.river.utils.UniqueDateFormatter; /** - * @author Domenico Nardi Tironi + * State to compute the fixation realizing (vollmer) results. + * + * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> */ -public class BezugswstState extends DefaultState { +public class BezugswstState extends DefaultState implements FacetTypes { - /// ** The log that is used in this state. */ - // private static Logger log = Logger.getLogger(FlowDepthState.class); + /* + * TODO: THIS CLASS IS A CLONE OF FixRealizingCompute + * + + * ++ + * +++ + * ++++ + * +++++ + * ++++++ + * +++++++ + * ++++++++ + * +++++++++ + * ++++++++++ + * +++++++++++ + * IT does not work here + */ - private static final long serialVersionUID = 1L; + /** The log used in this class. */ + private static Logger log = Logger.getLogger(BezugswstState.class); + + public static final String I18N_WQ_CURVE = "fix.vollmer.wq.curve"; + + public static final String I18N_WQ_OUTLIER = "fix.vollmer.wq.outliers"; /** - * From this state can only be continued trivially. + * The default constructor that initializes an empty State object. */ - @Override - protected String getUIProvider() { - return "continue"; + public BezugswstState() { } -} \ No newline at end of file + @Override + public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) { + log.debug("BezugswstState.computeAdvance"); + + CalculationResult res; + + final FixRealizingAccess access = new FixRealizingAccess(artifact); + + if (old instanceof CalculationResult) { + res = (CalculationResult) old; + } else { + final FixRealizingCalculation calc = new FixRealizingCalculation(access); + res = calc.calculate(); + } + + if (facets == null) { + return res; + } + + if (res.getReport().hasProblems()) { + facets.add(new ReportFacet()); + } + + final String id = getID(); + final CallMeta meta = context.getMeta(); + + final FixRealizingResult fixRes = (FixRealizingResult) res.getData(); + final WQKms[] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0]; + + 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 + ")"; + } + + final Facet wq = new FixWaterlevelFacet(i, FIX_WQ_LS, nameW, ComputeType.ADVANCE, hash, id); + + final Facet w = new FixWaterlevelFacet(i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, id); + + final Facet q = new FixWaterlevelFacet(i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, id); + final Facet csFacet = new CrossSectionWaterLineFacet(i, nameW); + + facets.add(wq); + facets.add(w); + facets.add(q); + facets.add(csFacet); + + // XXX: THIS CAN NOT HAPPEN! REMOVE IT! + if (wqkms[i] instanceof WQCKms) { + final String nameC = nameW.replace("benutzerdefiniert", "benutzerdefiniert [korrigiert]"); + + final Facet c = new FixWaterlevelFacet(i, DISCHARGE_LONGITUDINAL_C, nameC); + + facets.add(c); + } + } + + if (wqkms.length > 0) { + final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); + final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm"); + + final Collection<Date> reds = fixRes.getReferenceEventsDates(); + final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds); + + int i = 0; + for (final Date d : reds) { + facets.add(new FixReferenceEventsFacet((1 << 9) | i, FIX_EVENTS, cf.format(d))); + i++; + } + + facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); + + facets.add(new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id)); + + facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); + } + + facets.add(new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id)); + + facets.add(new FixWQCurveFacet(0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" + access.getFunction() + ")")); + + if (access.getPreprocessing()) { + facets.add(new FixOutlierFacet(0, FIX_OUTLIER, Resources.getMsg(meta, I18N_WQ_OUTLIER, I18N_WQ_OUTLIER))); + } + + return res; + } +}