felix@6927: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde felix@6927: * Software engineering by Intevation GmbH felix@6927: * felix@6927: * This file is Free Software under the GNU AGPL (>=v3) felix@6927: * and comes with ABSOLUTELY NO WARRANTY! Check out the felix@6927: * documentation coming with Dive4Elements River for details. felix@6927: */ felix@6927: felix@6927: package org.dive4elements.river.exports.process; felix@6927: felix@6927: import org.apache.log4j.Logger; felix@6927: import org.jfree.data.xy.XYSeries; felix@6927: felix@6927: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; felix@6927: import org.dive4elements.artifacts.CallContext; felix@6927: import org.dive4elements.river.artifacts.model.FacetTypes; felix@6927: import org.dive4elements.river.artifacts.model.WKms; felix@6927: import org.dive4elements.river.artifacts.model.WQKms; felix@6927: felix@6927: import org.dive4elements.river.exports.StyledSeriesBuilder; felix@6927: import org.dive4elements.river.exports.XYChartGenerator; aheinecke@7075: import org.dive4elements.river.exports.DiagramGenerator; felix@6927: import org.dive4elements.river.jfree.StyledXYSeries; felix@6927: import org.dive4elements.river.themes.ThemeDocument; felix@6927: import org.dive4elements.river.utils.DataUtil; felix@6927: felix@6927: /** felix@6927: * Add data to chart/generator. felix@6927: * felix@6927: * @author Björn Ricks felix@6927: */ aheinecke@7057: public class QOutProcessor extends DefaultProcessor { felix@6927: felix@6927: /** Private logger. */ felix@6927: private static final Logger logger = felix@6927: Logger.getLogger(QOutProcessor.class); felix@6927: felix@6927: @Override felix@6927: public void doOut( aheinecke@7075: DiagramGenerator generator, aheinecke@7075: ArtifactAndFacet bundle, aheinecke@7075: ThemeDocument theme, aheinecke@7075: boolean visible) { aheinecke@7075: CallContext context = generator.getCallContext(); aheinecke@7075: WQKms wqkms = (WQKms) bundle.getData(context); aheinecke@7075: aheinecke@7075: XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme); aheinecke@7075: aheinecke@7075: StyledSeriesBuilder.addStepPointsKmQ(series, wqkms); aheinecke@7075: aheinecke@7075: generator.addAxisSeries(series, axisName, visible); aheinecke@7075: aheinecke@7075: generator.handleLTRWaterFlowInversion(wqkms); aheinecke@7075: } aheinecke@7075: aheinecke@7075: @Override aheinecke@7075: public void doOut( felix@6927: XYChartGenerator generator, aheinecke@7075: ArtifactAndFacet bundle, felix@6927: ThemeDocument theme, felix@6927: boolean visible, felix@6927: int index) felix@6927: { felix@6927: CallContext context = generator.getCallContext(); aheinecke@7075: WQKms wqkms = (WQKms) bundle.getData(context); felix@6927: aheinecke@7075: XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme); aheinecke@7075: aheinecke@7075: StyledSeriesBuilder.addStepPointsKmQ(series, wqkms); aheinecke@7075: aheinecke@7075: generator.addAxisSeries(series, index, visible); aheinecke@7075: aheinecke@7075: invertAxis(generator, wqkms); felix@6927: } felix@6927: felix@6927: /** felix@6927: * Returns true if facettype is q-type. felix@6927: */ felix@6927: @Override felix@6927: public boolean canHandle(String facetType) { felix@6927: if (facetType == null) { felix@6927: return false; felix@6927: } felix@6927: felix@6927: if (facetType.equals(FacetTypes.STATIC_WQKMS_Q) felix@6929: || facetType.equals(FacetTypes.LONGITUDINAL_Q) felix@6929: || facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_Q)) { felix@6927: return true; felix@6927: } felix@6927: return false; felix@6927: } felix@6927: felix@6927: /** felix@6927: * This method determines - taking JFreeCharts auto x value ordering into felix@6927: * account - if the x axis need to be inverted. Waterlines in these charts felix@6927: * should decrease. felix@6927: * felix@6927: * @param generator the generator to invert the axis or not. felix@6927: * @param wkms The data object that stores the x and y values used for this felix@6927: * chart. felix@6927: */ felix@6927: public void invertAxis(XYChartGenerator generator, WKms wkms) { felix@6927: boolean wsUp = wkms.guessWaterIncreasing(); felix@6927: boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms()); felix@6927: int size = wkms.size(); felix@6927: boolean inv = ((wsUp && kmUp) || (!wsUp && !kmUp)) && size > 1; felix@6927: felix@6927: if (logger.isDebugEnabled()) { felix@6927: logger.debug("(Wkms)Values : " + size); felix@6927: if (size > 0) { felix@6927: logger.debug("Start km: " + wkms.getKm(0)); felix@6927: logger.debug("End km: " + wkms.getKm(size-1)); felix@6927: } felix@6927: logger.debug("wsUp: " + wsUp); felix@6927: logger.debug("kmUp: " + kmUp); felix@6927: if (size == 1) { felix@6927: logger.debug("InvertAxis not inverting because we have just one km"); felix@6927: } felix@6927: logger.debug("inv: " + inv); felix@6927: } felix@6927: generator.setInverted(inv); felix@6927: } felix@6927: } felix@6927: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :