rrenkert@7985: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde rrenkert@7985: * Software engineering by Intevation GmbH rrenkert@7985: * rrenkert@7985: * This file is Free Software under the GNU AGPL (>=v3) rrenkert@7985: * and comes with ABSOLUTELY NO WARRANTY! Check out the rrenkert@7985: * documentation coming with Dive4Elements River for details. rrenkert@7985: */ rrenkert@7985: rrenkert@7985: package org.dive4elements.river.artifacts.model.minfo; rrenkert@7985: tom@9726: import org.apache.logging.log4j.Logger; tom@9726: import org.apache.logging.log4j.LogManager; rrenkert@7985: rrenkert@7985: import org.dive4elements.artifactdatabase.state.Facet; rrenkert@7985: import org.dive4elements.artifacts.Artifact; rrenkert@7985: import org.dive4elements.artifacts.CallContext; tom@8273: tom@8737: import org.dive4elements.river.utils.Formatter; tom@8737: tom@8559: import org.dive4elements.river.model.BedHeight; tom@8273: rrenkert@7985: import org.dive4elements.river.artifacts.D4EArtifact; rrenkert@7985: import org.dive4elements.river.artifacts.access.RiverAccess; rrenkert@7985: import org.dive4elements.river.artifacts.context.RiverContext; rrenkert@7985: import org.dive4elements.river.artifacts.model.CalculationResult; rrenkert@7985: import org.dive4elements.river.artifacts.model.DataFacet; rrenkert@7985: import org.dive4elements.river.artifacts.math.MovingAverage; rrenkert@7985: import org.dive4elements.river.artifacts.model.ZoomScale; rrenkert@7997: import org.dive4elements.river.artifacts.resources.Resources; rrenkert@7985: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; rrenkert@7985: rrenkert@7985: rrenkert@7985: public class BedDiffHeightSubFilterFacet rrenkert@7985: extends DataFacet rrenkert@7985: { tom@9726: private static Logger log = LogManager.getLogger( tom@8856: BedDiffHeightSubFilterFacet.class); rrenkert@7985: rrenkert@7985: public BedDiffHeightSubFilterFacet() { rrenkert@7985: } rrenkert@7985: tom@8856: public BedDiffHeightSubFilterFacet( tom@8856: int idx, tom@8856: String name, tom@8856: String description, tom@8856: ComputeType type, tom@8856: String stateId, tom@8856: String hash tom@8856: ) { rrenkert@7985: super(idx, name, description, type, hash, stateId); rrenkert@7985: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); tom@8267: this.metaData.put("Y", "chart.bedheight_middle.section.yaxis.label"); rrenkert@7985: } rrenkert@7985: rrenkert@7985: public Object getData(Artifact artifact, CallContext context) { teichmann@8202: log.debug("Get data for bed density at index: " + index); rrenkert@7985: rrenkert@7985: D4EArtifact flys = (D4EArtifact) artifact; rrenkert@7985: rrenkert@7985: CalculationResult res = (CalculationResult) flys.compute(context, hash, rrenkert@7985: stateId, type, false); rrenkert@7985: rrenkert@7985: BedDiffYearResult[] data = rrenkert@7985: (BedDiffYearResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS rrenkert@7985: Double start = (Double)context.getContextValue("startkm"); rrenkert@7985: Double end = (Double)context.getContextValue("endkm"); rrenkert@7985: if(start != null && end != null) { rrenkert@7985: RiverContext fc = (RiverContext)context.globalContext(); rrenkert@7985: // Adaptive smoothing, based on zoom factor/diagram extents. rrenkert@7985: ZoomScale scales = (ZoomScale)fc.get("zoomscale"); rrenkert@7985: RiverAccess access = new RiverAccess((D4EArtifact)artifact); rrenkert@7985: String river = access.getRiverName(); rrenkert@7985: rrenkert@7985: double radius = scales.getRadius(river, start, end); rrenkert@7985: BedDiffYearResult oldData = data[index]; tom@8856: double[][] heights = MovingAverage.weighted( tom@8856: oldData.getHeights2Data(), radius); tom@8737: this.addMetaData( rrenkert@7997: Resources.getMsg(context.getMeta(), tom@8737: "chart.subtitle.radius"), tom@8737: Formatter.getRawFormatter(context).format(radius) + " km"); tom@8273: tom@8559: BedHeight second = BedHeight.getBedHeightById( tom@8273: oldData.getIdSecond()); tom@8273: this.addMetaData(Resources.getMsg( tom@8273: context.getMeta(), tom@8273: "meta.bedheight.cur.elevation"), tom@8273: second.getCurElevationModel().getName()); tom@8332: if (second.getOldElevationModel() != null) { tom@8332: this.addMetaData(Resources.getMsg( tom@8332: context.getMeta(), tom@8332: "meta.bedheight.old.elevation"), tom@8332: second.getOldElevationModel().getName()); tom@8332: } tom@8273: this.addMetaData(Resources.getMsg( tom@8273: context.getMeta(), tom@8273: "meta.bedheight.river.elevation"), tom@8273: access.getRiver().getWstUnit().getName()); tom@8273: rrenkert@7985: return heights; rrenkert@7985: } rrenkert@7985: return null; rrenkert@7985: } rrenkert@7985: rrenkert@7985: /** Copy deeply. */ rrenkert@7985: @Override rrenkert@7985: public Facet deepCopy() { rrenkert@7985: BedDiffHeightSubFilterFacet copy = new BedDiffHeightSubFilterFacet(); rrenkert@7985: copy.set(this); rrenkert@7985: copy.type = type; rrenkert@7985: copy.hash = hash; rrenkert@7985: copy.stateId = stateId; rrenkert@7985: return copy; rrenkert@7985: } rrenkert@7985: } rrenkert@7985: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :