mschaefer@9432: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde mschaefer@9432: * Software engineering by mschaefer@9432: * Björnsen Beratende Ingenieure GmbH mschaefer@9432: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9072: * gernotbelger@9072: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9072: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9072: * documentation coming with Dive4Elements River for details. gernotbelger@9072: */ gernotbelger@9274: gernotbelger@9072: package org.dive4elements.river.artifacts.bundu.bezugswst; gernotbelger@9072: gernotbelger@9274: import java.util.List; gernotbelger@9274: gernotbelger@9274: import org.apache.log4j.Logger; gernotbelger@9274: import org.dive4elements.artifactdatabase.state.Facet; gernotbelger@9274: import org.dive4elements.artifacts.CallContext; mschaefer@9432: import org.dive4elements.river.artifacts.ChartArtifact; gernotbelger@9274: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9313: import org.dive4elements.river.artifacts.bundu.BUNDUArtifact; mschaefer@9432: import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; mschaefer@9432: import org.dive4elements.river.artifacts.model.Calculation; gernotbelger@9274: import org.dive4elements.river.artifacts.model.CalculationResult; gernotbelger@9274: import org.dive4elements.river.artifacts.model.DataFacet; mschaefer@9432: import org.dive4elements.river.artifacts.model.EmptyFacet; gernotbelger@9274: import org.dive4elements.river.artifacts.model.FacetTypes; mschaefer@9432: import org.dive4elements.river.artifacts.model.ReportFacet; gernotbelger@9072: import org.dive4elements.river.artifacts.states.DefaultState; mschaefer@9444: import org.dive4elements.river.model.BedHeightValueType; gernotbelger@9072: gernotbelger@9072: /** mschaefer@9432: * State to compute the bundu bezugswst results. gernotbelger@9072: */ gernotbelger@9274: public class BezugswstState extends DefaultState implements FacetTypes { gernotbelger@9072: gernotbelger@9318: private static final long serialVersionUID = 1L; gernotbelger@9072: gernotbelger@9274: /** The log used in this class. */ gernotbelger@9274: private static Logger log = Logger.getLogger(BezugswstState.class); gernotbelger@9274: gernotbelger@9360: private static final String I18N_WQ_CURVE = "fix.vollmer.wq.curve"; gernotbelger@9072: gernotbelger@9072: /** gernotbelger@9274: * The default constructor that initializes an empty State object. gernotbelger@9072: */ gernotbelger@9274: public BezugswstState() { gernotbelger@9072: } gernotbelger@9072: gernotbelger@9274: @Override gernotbelger@9274: public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { mschaefer@9432: gernotbelger@9274: log.debug("BezugswstState.computeAdvance"); mschaefer@9432: mschaefer@9432: if (artifact instanceof ChartArtifact) { mschaefer@9432: facets.add(new EmptyFacet()); mschaefer@9432: return null; mschaefer@9432: } gernotbelger@9313: return compute((BUNDUArtifact) artifact, context, hash, facets, old); gernotbelger@9313: } gernotbelger@9274: gernotbelger@9313: @Override gernotbelger@9313: public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { gernotbelger@9274: mschaefer@9432: if (artifact instanceof ChartArtifact) { mschaefer@9432: facets.add(new EmptyFacet()); mschaefer@9432: return null; mschaefer@9432: } gernotbelger@9313: return compute((BUNDUArtifact) artifact, context, hash, facets, old); gernotbelger@9313: } gernotbelger@9274: mschaefer@9432: /** mschaefer@9432: * Compute result or returned object from cache, create facets. mschaefer@9432: * mschaefer@9432: * @param old mschaefer@9432: * Object that was cached. mschaefer@9432: */ gernotbelger@9313: private Object compute(final BUNDUArtifact artifact, final CallContext context, final String hash, final List facets, final Object old) { gernotbelger@9274: mschaefer@9432: final CalculationResult res = doCompute(artifact, context, old); gernotbelger@9274: gernotbelger@9313: if (facets == null) gernotbelger@9313: return res; gernotbelger@9274: mschaefer@9432: final BezugswstCalculationResults results = (BezugswstCalculationResults) res.getData(); gernotbelger@9313: mschaefer@9432: final List resultList = results.getResults(); mschaefer@9432: mschaefer@9432: int facetIndex = 0; mschaefer@9432: mschaefer@9432: if (!resultList.isEmpty()) { mschaefer@9432: final BezugswstMainCalculationResult result = (BezugswstMainCalculationResult) resultList.get(0); mschaefer@9432: facets.add(BezugswstHeightProcessor.createChannelminFacet(context, hash, this.id, facetIndex++, 0)); mschaefer@9432: facets.add(BezugswstHeightProcessor.createBedheightFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel())); mschaefer@9438: final String nameQ = result.getWstLabel(); mschaefer@9438: final String nameW = "W(" + nameQ + ")"; mschaefer@9438: facets.add(new BezugswstFixationFacet(0, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, this.id)); mschaefer@9438: facets.add(new BezugswstFixationFacet(0, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, this.id)); mschaefer@9444: for (int i = BedHeightValueType.FIELD_FIRST_INDEX; i <= BedHeightValueType.FIELD_LAST_INDEX; i++) mschaefer@9444: facets.add(BezugswstHeightProcessor.createFieldBedheightFacet(context, hash, this.id, facetIndex++, 0, i)); mschaefer@9432: mschaefer@9432: facets.add(BezugswstDepthProcessor.createFlowdepthFilteredFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel())); mschaefer@9432: facets.add(BezugswstDepthProcessor.createChanneldepthFacet(context, hash, this.id, facetIndex++, 0)); mschaefer@9444: for (int i = BedHeightValueType.FIELD_FIRST_INDEX; i <= BedHeightValueType.FIELD_LAST_INDEX; i++) mschaefer@9444: facets.add(BezugswstDepthProcessor.createFieldDepthFacet(context, hash, this.id, facetIndex++, 0, i)); mschaefer@9432: mschaefer@9432: final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id); mschaefer@9432: final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id); mschaefer@9432: mschaefer@9432: facets.add(csv); mschaefer@9432: facets.add(pdf); mschaefer@9432: } mschaefer@9432: mschaefer@9432: final Calculation report = res.getReport(); mschaefer@9432: mschaefer@9432: if (report.hasProblems()) mschaefer@9432: facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id)); gernotbelger@9274: gernotbelger@9274: return res; gernotbelger@9274: } gernotbelger@9313: mschaefer@9432: private CalculationResult doCompute(final BUNDUArtifact uinfo, final CallContext context, final Object old) { mschaefer@9432: mschaefer@9432: if (old instanceof CalculationResult) mschaefer@9432: return (CalculationResult) old; mschaefer@9432: mschaefer@9432: return new BezugswstCalculation(context).calculate(uinfo); mschaefer@9432: } gernotbelger@9274: }