teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * 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; tom@8292: import org.dive4elements.artifacts.Artifact; ingo@2709: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; tom@8292: import org.dive4elements.artifactdatabase.state.FacetActivity; teichmann@5831: teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; 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; rrenkert@7983: import org.dive4elements.river.artifacts.model.minfo.MiddleBedHeightCalculation; rrenkert@7983: import org.dive4elements.river.artifacts.model.minfo.MiddleBedHeightData; rrenkert@7983: import org.dive4elements.river.artifacts.model.minfo.MiddleBedHeightFacet; rrenkert@7998: import org.dive4elements.river.artifacts.resources.Resources; rrenkert@7989: import org.dive4elements.river.model.River; rrenkert@7989: import org.dive4elements.river.model.Unit; 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: teichmann@8202: /** Private log. */ teichmann@8202: private static final Logger log = Logger.getLogger(MiddleBedHeight.class); ingo@2709: ingo@2709: ingo@2709: @Override ingo@2709: public Object computeAdvance( teichmann@5867: D4EArtifact artifact, ingo@2709: String hash, ingo@2709: CallContext context, ingo@2709: List facets, ingo@2709: Object old ingo@2709: ) { teichmann@8202: log.debug("MiddleBedHeight.computeAdvance"); ingo@2709: ingo@2713: List newFacets = new ArrayList(); sascha@3232: teichmann@6101: BedHeightAccess access = new BedHeightAccess(artifact); rrenkert@7989: River river = access.getRiver(); rrenkert@7989: Unit u = river.getWstUnit(); 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: teichmann@8202: log.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) { tom@8295: MiddleBedHeightFacet mf = new MiddleBedHeightFacet( tom@8295: idx, tom@8295: MIDDLE_BED_HEIGHT_SINGLE, tom@8295: d.getDescription(), tom@8295: ComputeType.ADVANCE, tom@8295: id, tom@8295: hash tom@8295: ); tom@8295: mf.addMetaData(Resources.getMsg( rrenkert@8000: context.getMeta(), tom@8267: "meta.bedheight.cur.elevation", rrenkert@8000: "Current elevation model"), tom@8295: d.getCurElevationModel()); tom@8295: mf.addMetaData(Resources.getMsg( rrenkert@8000: context.getMeta(), tom@8267: "meta.bedheight.old.elevation", rrenkert@8000: "Old elevation model"), tom@8295: d.getOldElevationModel()); tom@8295: mf.addMetaData(Resources.getMsg( rrenkert@8000: context.getMeta(), tom@8267: "meta.bedheight.river.elevation", rrenkert@8000: "River elevation model"), u.getName()); tom@8295: newFacets.add(mf); 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: teichmann@8202: log.debug("Created " + newFacets.size() + " new Facets."); ingo@2713: ingo@2713: facets.addAll(newFacets); ingo@2713: ingo@2713: return res; ingo@2713: } tom@8292: tom@8292: static { tom@8292: // Active/deactivate facets. tom@8292: FacetActivity.Registry.getInstance().register( tom@8292: "minfo", tom@8292: new FacetActivity() { tom@8292: @Override tom@8292: public Boolean isInitialActive( tom@8292: Artifact artifact, tom@8292: Facet facet, tom@8292: String output tom@8292: ) { tom@8292: if (facet.getName().equals(MIDDLE_BED_HEIGHT_SINGLE)) { tom@8292: return Boolean.TRUE; tom@8292: } tom@8292: return null; tom@8292: } tom@8292: }); tom@8292: } ingo@2709: } ingo@2709: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :