felix@7390: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde felix@7390: * Software engineering by Intevation GmbH felix@7390: * felix@7390: * This file is Free Software under the GNU AGPL (>=v3) felix@7390: * and comes with ABSOLUTELY NO WARRANTY! Check out the felix@7390: * documentation coming with Dive4Elements River for details. felix@7390: */ felix@7390: felix@7390: package org.dive4elements.river.exports.process; felix@7390: felix@7390: import java.util.List; felix@7390: felix@7390: import org.apache.log4j.Logger; felix@7390: import org.jfree.data.xy.XYSeries; felix@7390: felix@7390: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; felix@7390: import org.dive4elements.artifacts.CallContext; felix@7391: import org.dive4elements.river.artifacts.model.minfo.BedHeightSingleData; felix@7394: import org.dive4elements.river.artifacts.model.FacetTypes; felix@7390: import org.dive4elements.river.exports.XYChartGenerator; felix@7390: import org.dive4elements.river.exports.DiagramGenerator; felix@7390: import org.dive4elements.river.jfree.StyledXYSeries; felix@7390: import org.dive4elements.river.model.BedHeightSingleValue; felix@7390: import org.dive4elements.river.themes.ThemeDocument; felix@7390: felix@7390: public class BedHeightProcessor extends DefaultProcessor { felix@7390: felix@7390: private final static Logger logger = felix@7390: Logger.getLogger(BedHeightProcessor.class); felix@7390: felix@7390: public static final String I18N_AXIS_LABEL_DEFAULT felix@7395: = "Sohlhoehe [m]"; felix@7390: public static final String I18N_AXIS_LABEL = felix@7395: "chart.bedheight.height.yaxis.label"; felix@7390: felix@7390: @Override felix@7390: public void doOut( felix@7390: DiagramGenerator generator, felix@7390: ArtifactAndFacet bundle, felix@7390: ThemeDocument theme, felix@7390: boolean visible) { felix@7390: XYSeries series = prepareSeries(bundle, theme, generator.getCallContext()); felix@7390: generator.addAxisSeries(series, axisName, visible); felix@7390: } felix@7390: felix@7390: @Override felix@7390: public void doOut( felix@7390: XYChartGenerator generator, felix@7390: ArtifactAndFacet bundle, felix@7390: ThemeDocument theme, felix@7390: boolean visible, felix@7390: int index felix@7390: ) { felix@7390: XYSeries series = prepareSeries(bundle, theme, generator.getCallContext()); felix@7390: generator.addAxisSeries(series, index, visible); felix@7390: } felix@7390: felix@7390: /** Prepare an series, independent of axis. */ felix@7390: private XYSeries prepareSeries(ArtifactAndFacet bundle, felix@7390: ThemeDocument theme, CallContext context) { felix@7390: Object data = bundle.getData(context); felix@7390: XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), felix@7390: theme); felix@7391: if (data instanceof BedHeightSingleData) { felix@7391: BedHeightSingleData bData = (BedHeightSingleData)data; felix@7396: double[] heights = bData.getHeights(); felix@7390: double[] stations = bData.getStations().toNativeArray(); felix@7390: felix@7390: logger.debug("doBedheightSingleOut"); felix@7390: felix@7396: for (int i = 0; i < heights.length; i++) { felix@7396: series.add(stations[i], heights[i], false); felix@7390: } felix@7390: } else if (data instanceof List) { felix@7390: List bData = (List)data; felix@7390: felix@7390: logger.debug("doBedheightSingleValueOut"); felix@7390: felix@7390: for(BedHeightSingleValue bvalue: bData) { felix@7396: series.add(bvalue.getStation(), bvalue.getHeight()); felix@7390: } felix@7390: } felix@7390: else { felix@7390: logger.error("Unknown data type " + data.getClass()); felix@7390: } felix@7390: return series; felix@7390: } felix@7390: felix@7390: felix@7390: @Override felix@7390: public boolean canHandle(String facettype) { felix@7394: return FacetTypes.BEDHEIGHT.equals(facettype); felix@7390: } felix@7390: felix@7390: @Override felix@7390: public String getAxisLabel(DiagramGenerator generator) { felix@7390: return generator.msg( felix@7390: I18N_AXIS_LABEL, felix@7390: I18N_AXIS_LABEL_DEFAULT); felix@7390: } felix@7390: }