teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.states; ingo@2709: ingo@2713: import java.util.ArrayList; ingo@2709: import java.util.List; ingo@2709: ingo@2709: import org.apache.log4j.Logger; ingo@2709: teichmann@5831: import org.dive4elements.artifacts.CallContext; ingo@2709: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.BedHeightAccess; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.DataFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.MiddleBedHeightData; teichmann@5831: import org.dive4elements.river.artifacts.model.MiddleBedHeightFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.MiddleBedHeightCalculation; ingo@2709: ingo@2709: felix@4582: /** State in which Middle Bed Heights are generated. */ ingo@2713: public class MiddleBedHeight extends DefaultState implements FacetTypes { ingo@2709: felix@4582: /** Private logger. */ ingo@2709: private static final Logger logger = Logger.getLogger(MiddleBedHeight.class); ingo@2709: ingo@2709: ingo@2709: @Override ingo@2709: public Object computeAdvance( ingo@2709: FLYSArtifact artifact, ingo@2709: String hash, ingo@2709: CallContext context, ingo@2709: List facets, ingo@2709: Object old ingo@2709: ) { ingo@2709: logger.debug("MiddleBedHeight.computeAdvance"); ingo@2709: ingo@2713: List newFacets = new ArrayList(); sascha@3232: felix@4826: BedHeightAccess access = new BedHeightAccess(artifact, context); ingo@2709: ingo@2713: CalculationResult res = old instanceof CalculationResult ingo@2713: ? (CalculationResult) old ingo@3230: : new MiddleBedHeightCalculation().calculate(access); ingo@2713: ingo@2713: if (facets == null || res == null) { ingo@2713: return res; ingo@2713: } ingo@2713: ingo@2713: MiddleBedHeightData[] data = (MiddleBedHeightData[]) res.getData(); ingo@2713: ingo@2713: logger.debug("Calculated " + data.length + " MiddleBedHeightData objects"); ingo@2713: ingo@2713: String id = getID(); ingo@2713: int idx = 0; ingo@2713: ingo@2713: for (MiddleBedHeightData d: data) { ingo@2715: if (d.getStartYear() == d.getEndYear()) { ingo@2715: newFacets.add(new MiddleBedHeightFacet( ingo@2715: idx, ingo@2715: MIDDLE_BED_HEIGHT_SINGLE, ingo@2715: d.getSoundingName(context), ingo@2715: ComputeType.ADVANCE, ingo@2715: id, ingo@2715: hash ingo@2715: )); ingo@2715: } ingo@2715: else { ingo@2715: newFacets.add(new MiddleBedHeightFacet( ingo@2715: idx, ingo@2715: MIDDLE_BED_HEIGHT_EPOCH, ingo@2715: d.getSoundingName(context), ingo@2715: ComputeType.ADVANCE, ingo@2715: id, ingo@2715: hash ingo@2715: )); ingo@2715: } ingo@2713: ingo@2713: idx++; ingo@2713: } ingo@2713: ingo@2713: Facet csv = new DataFacet( ingo@2713: CSV, "CSV data", ComputeType.ADVANCE, hash, id); ingo@2713: ingo@2713: // TODO ADD PDF FACET ingo@2713: ingo@2713: newFacets.add(csv); ingo@2713: ingo@2713: logger.debug("Created " + newFacets.size() + " new Facets."); ingo@2713: ingo@2713: facets.addAll(newFacets); ingo@2713: ingo@2713: return res; ingo@2713: } ingo@2709: } ingo@2709: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :