ingo@2191: package de.intevation.flys.artifacts.states;
ingo@2191:
ingo@2215: import java.util.List;
ingo@2191:
ingo@2191: import org.w3c.dom.Element;
ingo@2191:
ingo@2215: import org.apache.log4j.Logger;
ingo@2215:
ingo@2191: import de.intevation.artifacts.Artifact;
ingo@2191: import de.intevation.artifacts.CallContext;
ingo@2191:
ingo@2191: import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
ingo@2191:
ingo@2215: import de.intevation.artifactdatabase.state.Facet;
ingo@2191:
ingo@2215: import de.intevation.flys.artifacts.FLYSArtifact;
ingo@2215: import de.intevation.flys.artifacts.WINFOArtifact;
ingo@2215: import de.intevation.flys.artifacts.model.CalculationResult;
ingo@2258: import de.intevation.flys.artifacts.model.DataFacet;
ingo@2215: import de.intevation.flys.artifacts.model.FacetTypes;
ingo@2215: import de.intevation.flys.artifacts.model.HistoricalDischargeFacet;
ingo@2311: import de.intevation.flys.artifacts.model.HistoricalDischargeDifferenceFacet;
ingo@2311: import de.intevation.flys.artifacts.model.HistoricalWQTimerange;
ingo@2244: import de.intevation.flys.artifacts.model.ReportFacet;
ingo@2228: import de.intevation.flys.artifacts.model.WQTimerange;
ingo@2191:
ingo@2191:
ingo@2191: /**
felix@3047: * State to calculate historical discharge curves.
ingo@2191: * @author Ingo Weinzierl
ingo@2191: */
ingo@2215: public class HistoricalDischargeComputeState
ingo@2215: extends DefaultState
ingo@2215: implements FacetTypes
ingo@2215: {
ingo@2215:
ingo@2215: private static final Logger logger =
ingo@2215: Logger.getLogger(HistoricalDischargeComputeState.class);
ingo@2215:
ingo@2191:
ingo@2191: @Override
ingo@2191: protected void appendItems(
ingo@2191: Artifact artifact,
ingo@2191: ElementCreator creator,
ingo@2191: String name,
ingo@2191: CallContext context,
ingo@2191: Element select
ingo@2191: ) {
ingo@2191: // TODO IMPLEMENT ME
ingo@2191: }
ingo@2215:
ingo@2215:
ingo@2215: @Override
ingo@2215: public Object computeAdvance(
ingo@2215: FLYSArtifact artifact,
ingo@2215: String hash,
ingo@2215: CallContext context,
ingo@2215: List facets,
ingo@2215: Object old
ingo@2215: ) {
ingo@2215: logger.debug("HistoricalDischargeComputeState.computeAdvance");
ingo@2215:
ingo@2215: WINFOArtifact winfo = (WINFOArtifact) artifact;
ingo@2215:
ingo@2215: CalculationResult res = old instanceof CalculationResult
ingo@2215: ? (CalculationResult) old
ingo@2215: : winfo.getHistoricalDischargeData();
ingo@2215:
ingo@2215: if (facets == null) {
ingo@2215: return res;
ingo@2215: }
ingo@2215:
ingo@2250: if (res.getReport().hasProblems()) {
ingo@2250: facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
ingo@2250: }
ingo@2250:
ingo@2228: WQTimerange[] data = (WQTimerange[]) res.getData();
ingo@2228: if (data == null || data.length == 0) {
ingo@2228: logger.warn("Historical Discharge calculation has no results!");
ingo@2228: return res;
ingo@2228: }
ingo@2215:
ingo@2258: facets.add(
ingo@2258: new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
ingo@2258:
ingo@2258: facets.add(
ingo@2258: new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));
ingo@2258:
ingo@2228: prepareFacets(facets, data);
ingo@2215:
ingo@2215: return res;
ingo@2215: }
ingo@2228:
ingo@2228:
ingo@2228: protected void prepareFacets(List facets, WQTimerange[] wqts) {
ingo@2228: int i = 0;
ingo@2228:
ingo@2228: for (WQTimerange wqt: wqts) {
ingo@2228: logger.debug("Prepare facet for: " + wqt.getName());
ingo@2228:
ingo@2228: // TODO CREATE BETTER TITLE FOR FACETS
ingo@2228:
ingo@2228: facets.add(new HistoricalDischargeFacet(
ingo@2311: i,
ingo@2228: HISTORICAL_DISCHARGE_Q,
ingo@2228: wqt.getName()));
ingo@2311:
ingo@2311: if (wqt instanceof HistoricalWQTimerange) {
ingo@2311: logger.debug("Create another facet for historical differences.");
ingo@2311:
ingo@2311: facets.add(new HistoricalDischargeDifferenceFacet(
ingo@2311: i,
ingo@2311: HISTORICAL_DISCHARGE_Q_DIFF,
ingo@2311: "DIFF: " + wqt.getName()));
ingo@2311: }
ingo@2311:
ingo@2311: i++;
ingo@2228: }
ingo@2228: }
ingo@2191: }
ingo@2191: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :