gernotbelger@9050: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9050: * Software engineering by Intevation GmbH gernotbelger@9050: * gernotbelger@9050: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9050: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9050: * documentation coming with Dive4Elements River for details. gernotbelger@9050: */ gernotbelger@9050: gernotbelger@9054: package org.dive4elements.river.artifacts.sinfo.collision; gernotbelger@9050: gernotbelger@9050: import java.util.List; gernotbelger@9050: gernotbelger@9050: import org.dive4elements.artifactdatabase.state.Facet; gernotbelger@9050: import org.dive4elements.artifacts.CallContext; gernotbelger@9050: import org.dive4elements.river.artifacts.ChartArtifact; gernotbelger@9050: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9150: import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; mschaefer@9157: import org.dive4elements.river.artifacts.model.Calculation; gernotbelger@9050: import org.dive4elements.river.artifacts.model.CalculationResult; gernotbelger@9150: import org.dive4elements.river.artifacts.model.DataFacet; gernotbelger@9050: import org.dive4elements.river.artifacts.model.EmptyFacet; gernotbelger@9150: import org.dive4elements.river.artifacts.model.FacetTypes; mschaefer@9157: import org.dive4elements.river.artifacts.model.ReportFacet; gernotbelger@9050: import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; gernotbelger@9050: import org.dive4elements.river.artifacts.states.DefaultState; gernotbelger@9050: mschaefer@9157: /** mschaefer@9157: * State in which a collision count has been calculated. mschaefer@9157: */ gernotbelger@9054: public class CollisionState extends DefaultState { gernotbelger@9050: gernotbelger@9050: /// ** The log that is used in this state. */ mschaefer@9157: // private static Logger log = Logger.getLogger(CollisionState.class); gernotbelger@9050: gernotbelger@9050: private static final long serialVersionUID = 1L; gernotbelger@9050: gernotbelger@9050: /** gernotbelger@9050: * From this state can only be continued trivially. gernotbelger@9050: */ gernotbelger@9050: @Override gernotbelger@9050: protected String getUIProvider() { gernotbelger@9050: return "continue"; gernotbelger@9050: } gernotbelger@9050: gernotbelger@9050: @Override gernotbelger@9050: public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { gernotbelger@9050: if (artifact instanceof ChartArtifact) { gernotbelger@9050: facets.add(new EmptyFacet()); gernotbelger@9050: return null; gernotbelger@9050: } gernotbelger@9050: return compute((SINFOArtifact) artifact, context, hash, facets, old); gernotbelger@9050: } gernotbelger@9050: gernotbelger@9050: @Override gernotbelger@9050: public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { gernotbelger@9050: if (artifact instanceof ChartArtifact) { gernotbelger@9050: facets.add(new EmptyFacet()); gernotbelger@9050: return null; gernotbelger@9050: } gernotbelger@9050: return compute((SINFOArtifact) artifact, context, hash, facets, old); gernotbelger@9050: } gernotbelger@9050: gernotbelger@9050: /** gernotbelger@9050: * Compute result or returned object from cache, create facets. gernotbelger@9050: * gernotbelger@9050: * @param old gernotbelger@9050: * Object that was cached. gernotbelger@9050: */ gernotbelger@9050: private Object compute(final SINFOArtifact sinfo, final CallContext context, final String hash, final List facets, final Object old) { gernotbelger@9050: gernotbelger@9050: final CalculationResult res = doCompute(sinfo, context, old); gernotbelger@9050: gernotbelger@9050: if (facets == null) gernotbelger@9050: return res; gernotbelger@9050: // gernotbelger@9150: final CollisionCalculationResults results = (CollisionCalculationResults) res.getData(); gernotbelger@9150: mschaefer@9157: /* add themes for chart, for each result */ gernotbelger@9195: final List resultList = results.getResults(); gernotbelger@9205: int themeCount = 0; mschaefer@9157: for (int index = 0; index < resultList.size(); index++) { mschaefer@9157: if (resultList.get(index) instanceof CollisionCalcOverviewResult) { mschaefer@9157: final CollisionCalcOverviewResult result = (CollisionCalcOverviewResult) resultList.get(index); gernotbelger@9205: gernotbelger@9205: final int[] singleYears = result.getSingleYears(); gernotbelger@9205: gernotbelger@9205: if (singleYears == null) gernotbelger@9205: facets.add(CollisionCalcProcessor.createFacet(context, hash, this.id, result, index, -1, themeCount++)); mschaefer@9204: else { gernotbelger@9205: for (final int singleYear : singleYears) gernotbelger@9205: facets.add(CollisionCalcProcessor.createFacet(context, hash, this.id, result, index, singleYear, themeCount++)); mschaefer@9204: } mschaefer@9157: } mschaefer@9157: } gernotbelger@9050: mschaefer@9157: if (!resultList.isEmpty()) { gernotbelger@9150: final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id); gernotbelger@9150: final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id); gernotbelger@9150: gernotbelger@9150: facets.add(csv); gernotbelger@9150: facets.add(pdf); gernotbelger@9150: } mschaefer@9157: mschaefer@9157: final Calculation report = res.getReport(); mschaefer@9157: mschaefer@9157: if (report.hasProblems()) { mschaefer@9157: facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id)); mschaefer@9157: } gernotbelger@9050: gernotbelger@9050: return res; gernotbelger@9050: } gernotbelger@9050: gernotbelger@9050: private CalculationResult doCompute(final SINFOArtifact sinfo, final CallContext context, final Object old) { gernotbelger@9050: if (old instanceof CalculationResult) gernotbelger@9050: return (CalculationResult) old; gernotbelger@9050: gernotbelger@9067: return new CollisionCalculation(context).calculate(sinfo); gernotbelger@9050: } gernotbelger@9050: }