Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/exports/process/WOutProcessor.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/exports/process/WOutProcessor.java@397ff862b417 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/exports/process/WOutProcessor.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,116 @@ +package org.dive4elements.river.exports.process; + +import org.apache.log4j.Logger; +import org.jfree.data.xy.XYSeries; +import org.w3c.dom.Document; + +import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.artifacts.model.WKms; +import org.dive4elements.river.exports.StyledSeriesBuilder; +import org.dive4elements.river.exports.XYChartGenerator; +import org.dive4elements.river.jfree.StyledAreaSeriesCollection; +import org.dive4elements.river.jfree.StyledXYSeries; +import org.dive4elements.river.utils.DataUtil; +import org.dive4elements.river.utils.ThemeUtil; + +/** + * Add data to chart/generator. + * + * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> + */ +public class WOutProcessor implements Processor { + + /** Private logger. */ + private static final Logger logger = + Logger.getLogger(WOutProcessor.class); + + @Override + public void doOut( + XYChartGenerator generator, + ArtifactAndFacet aaf, + Document theme, + boolean visible, + int index) + { + CallContext context = generator.getCallContext(); + WKms wkms = (WKms) aaf.getData(context); + + logger.debug("doOut"); + + XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme); + + StyledSeriesBuilder.addPoints(series, wkms); + generator.addAxisSeries(series, index, visible); + + // If a "band around the curve shall be drawn, add according area. + double bandWidth = ThemeUtil.parseBandWidth(theme); + if (bandWidth > 0 ) { + XYSeries seriesDown = new StyledXYSeries( + "band " + aaf.getFacetDescription(), false, theme); + XYSeries seriesUp = new StyledXYSeries( + aaf.getFacetDescription()+"+/-"+bandWidth, false, theme); + StyledSeriesBuilder.addUpperBand(seriesUp, wkms, bandWidth); + StyledSeriesBuilder.addLowerBand(seriesDown, wkms, bandWidth); + + StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme); + area.addSeries(seriesUp); + area.addSeries(seriesDown); + area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); + generator.addAreaSeries(area, index, visible); + } + + invertAxis(generator, wkms); + } + + /** + * Returns true if facettype is longitutinal_section.w . + */ + @Override + public boolean canHandle(String facetType) { + if (facetType == null) { + return false; + } + + if (facetType.equals(FacetTypes.LONGITUDINAL_W) + || facetType.equals(FacetTypes.STATIC_WKMS) + || facetType.equals(FacetTypes.HEIGHTMARKS_POINTS) + || facetType.equals(FacetTypes.STATIC_WQKMS) + || facetType.equals(FacetTypes.STATIC_WQKMS_W) + || facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_W)) + { + return true; + } + return false; + } + + /** + * This method determines - taking JFreeCharts auto x value ordering into + * account - if the x axis need to be inverted. Waterlines in these charts + * should decrease. + * + * @param wkms The data object that stores the x and y values used for this + * chart. + */ + public void invertAxis(XYChartGenerator generator, WKms wkms) { + boolean wsUp = wkms.guessWaterIncreasing(); + boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms()); + boolean inv = (wsUp && kmUp) || (!wsUp && !kmUp); + + int size = wkms.size(); + + if (logger.isDebugEnabled()) { + logger.debug("(Wkms)Values : " + size); + if (size > 0) { + logger.debug("Start km: " + wkms.getKm(0)); + logger.debug("End km: " + wkms.getKm(size-1)); + } + logger.debug("wsUp: " + wsUp); + logger.debug("kmUp: " + kmUp); + logger.debug("inv: " + inv); + } + generator.setInverted(inv); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :