Mercurial > dive4elements > river
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); + } }