diff artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java @ 9432:d194c5b24bf8

Added bundu bzws w calculation and longitudinal sections of wspl and depth
author mschaefer
date Mon, 20 Aug 2018 09:46:02 +0200
parents ddcd52d239cd
children d2f5375ede26
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java	Mon Aug 20 09:42:32 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java	Mon Aug 20 09:46:02 2018 +0200
@@ -1,5 +1,7 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
+/** 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
  *
  * This file is Free Software under the GNU AGPL (>=v3)
  * and comes with ABSOLUTELY NO WARRANTY! Check out the
@@ -13,17 +15,21 @@
 import org.apache.log4j.Logger;
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
 import org.dive4elements.river.artifacts.bundu.BUNDUArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 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.WaterlevelFacet;
 import org.dive4elements.river.artifacts.states.DefaultState;
 
 /**
- * State to compute the fixation realizing (vollmer) results.
- *
- * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ * State to compute the bundu bezugswst results.
  */
 public class BezugswstState extends DefaultState implements FacetTypes {
 
@@ -42,117 +48,75 @@
 
     @Override
     public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
+
         log.debug("BezugswstState.computeAdvance");
-        // TODO: remove this old stuff, or replace it by new
-        // final 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 (artifact instanceof ChartArtifact) {
+            facets.add(new EmptyFacet());
+            return null;
+        }
         return compute((BUNDUArtifact) artifact, context, hash, facets, old);
     }
 
     @Override
     public Object computeFeed(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;
+        }
         return compute((BUNDUArtifact) artifact, context, hash, facets, old);
     }
 
+    /**
+     * Compute result or returned object from cache, create facets.
+     *
+     * @param old
+     *            Object that was cached.
+     */
     private Object compute(final BUNDUArtifact artifact, final CallContext context, final String hash, final List<Facet> facets, final Object old) {
 
-        final BezugswstCalculation s = new BezugswstCalculation(context);
-        final CalculationResult res = s.calculate(artifact);
+        final CalculationResult res = doCompute(artifact, context, old);
 
         if (facets == null)
             return res;
 
-        final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
-        final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
+        final BezugswstCalculationResults results = (BezugswstCalculationResults) res.getData();
 
-        facets.add(csv);
-        facets.add(pdf);
+        final List<AbstractCalculationExportableResult> resultList = results.getResults();
+
+        int facetIndex = 0;
+
+        if (!resultList.isEmpty()) {
+            final BezugswstMainCalculationResult result = (BezugswstMainCalculationResult) resultList.get(0);
+            facets.add(BezugswstHeightProcessor.createWFacet(context, hash, this.id, facetIndex++, 0, result.getWstLabel()));
+            facets.add(BezugswstHeightProcessor.createChannelminFacet(context, hash, this.id, facetIndex++, 0));
+            facets.add(BezugswstHeightProcessor.createBedheightFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel()));
+            facets.add(new WaterlevelFacet(facetIndex++, FacetTypes.LONGITUDINAL_Q, result.getWstLabel(), ComputeType.ADVANCE, this.id, hash));
+
+            facets.add(BezugswstDepthProcessor.createFlowdepthFilteredFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel()));
+            facets.add(BezugswstDepthProcessor.createChanneldepthFacet(context, hash, this.id, facetIndex++, 0));
+
+            final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
+            final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
+
+            facets.add(csv);
+            facets.add(pdf);
+        }
+
+        final Calculation report = res.getReport();
+
+        if (report.hasProblems())
+            facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
 
         return res;
     }
 
+    private CalculationResult doCompute(final BUNDUArtifact uinfo, final CallContext context, final Object old) {
+
+        if (old instanceof CalculationResult)
+            return (CalculationResult) old;
+
+        return new BezugswstCalculation(context).calculate(uinfo);
+    }
 }

http://dive4elements.wald.intevation.org