Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java @ 4232:b3aa91e45010
Implemented the Q evaluation mode for historical discharge calculations.
Added the calculation itself, created new facets, added themes and improved the chart generator
to support the new facets.
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 07:25:35 +0200 |
parents | d7db9baa4e62 |
children | 49cb65d5932d |
line wrap: on
line source
package de.intevation.flys.artifacts.states; import java.util.List; import org.apache.log4j.Logger; import org.w3c.dom.Element; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.WINFOArtifact; import de.intevation.flys.artifacts.access.HistoricalDischargeAccess; import de.intevation.flys.artifacts.access.HistoricalDischargeAccess.EvaluationMode; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.DataFacet; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.HistoricalDischargeDifferenceFacet; import de.intevation.flys.artifacts.model.HistoricalDischargeFacet; import de.intevation.flys.artifacts.model.HistoricalWQTimerange; import de.intevation.flys.artifacts.model.ReportFacet; import de.intevation.flys.artifacts.model.WQTimerange; /** * State to calculate historical discharge curves. * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class HistoricalDischargeComputeState extends DefaultState implements FacetTypes { private static final Logger logger = Logger .getLogger(HistoricalDischargeComputeState.class); public static final String DEFAULT_UNIT = "cm"; @Override protected void appendItems(Artifact artifact, ElementCreator creator, String name, CallContext context, Element select) { // TODO IMPLEMENT ME } @Override public Object computeAdvance(FLYSArtifact artifact, String hash, CallContext context, List<Facet> facets, Object old) { logger.debug("HistoricalDischargeComputeState.computeAdvance"); WINFOArtifact winfo = (WINFOArtifact) artifact; CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old : winfo.getHistoricalDischargeData(); if (facets == null) { return res; } if (res.getReport().hasProblems()) { facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id)); } WQTimerange[] data = (WQTimerange[]) res.getData(); if (data == null || data.length == 0) { logger.warn("Historical Discharge calculation has no results!"); return res; } facets .add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); facets .add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); prepareFacets(facets, data, new HistoricalDischargeAccess(artifact)); return res; } protected void prepareFacets(List<Facet> facets, WQTimerange[] wqts, HistoricalDischargeAccess access) { int i = 0; for (WQTimerange wqt : wqts) { logger.debug("Prepare facet for: " + wqt.getName()); EvaluationMode evalMode = access.getEvaluationMode(); if (evalMode == EvaluationMode.W) { facets.add(new HistoricalDischargeFacet(i, HISTORICAL_DISCHARGE_Q, createFacetTitle(wqt))); if (wqt instanceof HistoricalWQTimerange) { logger .debug("Create another facet for historical differences."); // TODO CREATE BETTER TITLE FOR FACETS facets.add(new HistoricalDischargeDifferenceFacet(i, HISTORICAL_DISCHARGE_Q_DIFF, "DIFF: " + wqt.getName())); } } else { facets.add(new HistoricalDischargeFacet(i, HISTORICAL_DISCHARGE_W, createFacetTitle(wqt))); if (wqt instanceof HistoricalWQTimerange) { logger .debug("Create another facet for historical differences."); // TODO CREATE BETTER TITLE FOR FACETS facets.add(new HistoricalDischargeDifferenceFacet(i, HISTORICAL_DISCHARGE_W_DIFF, "DIFF: " + wqt.getName())); } } i++; } } protected String createFacetTitle(WQTimerange wqt) { String name = wqt.getName(); return name != null && name.indexOf("W") >= 0 ? createFacetTitleW(wqt) : createFacetTitleQ(wqt); } protected String createFacetTitleW(WQTimerange wqt) { String name = wqt.getName(); return name + " " + DEFAULT_UNIT; } protected String createFacetTitleQ(WQTimerange wqt) { return wqt.getName(); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :