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;
+    }
+}

http://dive4elements.wald.intevation.org