Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/process/HistoricalDischargeProcessor.java @ 8188:407c9598352f
Use processors for historical discharge curves.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Thu, 04 Sep 2014 15:26:55 +0200 |
parents | |
children | e4606eae8ea5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/HistoricalDischargeProcessor.java Thu Sep 04 15:26:55 2014 +0200 @@ -0,0 +1,90 @@ +package org.dive4elements.river.exports.process; + +import org.apache.log4j.Logger; +import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.artifacts.model.WQKms; +import org.dive4elements.river.exports.DiagramGenerator; +import org.dive4elements.river.exports.StyledSeriesBuilder; +import org.dive4elements.river.jfree.StyledXYSeries; +import org.dive4elements.river.themes.ThemeDocument; +import org.jfree.data.xy.XYSeries; + + +public class HistoricalDischargeProcessor +extends DefaultProcessor +implements FacetTypes +{ + + private final static Logger logger = + Logger.getLogger(HistoricalDischargeProcessor.class); + + /** Station for which the diagram is shown. */ + private double km; + + /** Tolerance for comparison of kilometers. */ + public static final double KM_EPSILON = 0.001d; + + + /** This processor needs to be constructed with a given km. */ + public HistoricalDischargeProcessor() { + km = Double.NaN; + } + + + public HistoricalDischargeProcessor(double km) { + this.km = km; + } + + + /** Process data, add it to plot. */ + @Override + public void doOut( + DiagramGenerator generator, + ArtifactAndFacet bundle, + ThemeDocument theme, + boolean visible + ) { + logger.debug("do out: " + bundle.getFacetName()); + CallContext context = generator.getCallContext(); + Object data = bundle.getData(context); + if (data instanceof WQKms) { + doDischargeOut(generator, bundle, theme, visible); + } + } + + /** True if this processor knows how to deal with facetType. */ + @Override + public boolean canHandle(String facetType) { + return HISTORICAL_DISCHARGE_WQ_CURVE.equals(facetType); + } + + + /** The station of the current calculation/view. */ + protected double getKm() { + return km; + } + + /** + * Add series with discharge curve to diagram. + */ + protected void doDischargeOut( + DiagramGenerator generator, + ArtifactAndFacet bundle, + ThemeDocument theme, + boolean visible + ) { + CallContext context = generator.getCallContext(); + WQKms data = (WQKms)bundle.getData(context); + XYSeries series = new StyledXYSeries(bundle.getFacetName(), theme); + double[][] wqData = new double[2][data.size()]; + for (int i = 0; i < data.size(); i++) { + wqData[0][i] = data.getQ(i); + wqData[1][i] = data.getW(i); + } + StyledSeriesBuilder.addPoints(series, wqData, false); + + generator.addAxisSeries(series, axisName, visible); + } +}