aheinecke@7145: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde aheinecke@7145: * Software engineering by Intevation GmbH aheinecke@7145: * aheinecke@7145: * This file is Free Software under the GNU AGPL (>=v3) aheinecke@7145: * and comes with ABSOLUTELY NO WARRANTY! Check out the aheinecke@7145: * documentation coming with Dive4Elements River for details. aheinecke@7145: */ aheinecke@7145: aheinecke@7145: package org.dive4elements.river.exports.process; aheinecke@7145: aheinecke@7145: import org.apache.log4j.Logger; aheinecke@7145: import org.jfree.data.xy.XYSeries; aheinecke@7145: aheinecke@7689: import java.util.List; aheinecke@7689: aheinecke@7145: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; aheinecke@7145: import org.dive4elements.artifacts.CallContext; aheinecke@7145: import org.dive4elements.river.artifacts.model.FacetTypes; aheinecke@7145: import org.dive4elements.river.exports.DiagramGenerator; aheinecke@7145: import org.dive4elements.river.exports.StyledSeriesBuilder; teichmann@7901: import org.dive4elements.river.jfree.GapInserter; aheinecke@7145: import org.dive4elements.river.jfree.StyledXYSeries; aheinecke@7145: import org.dive4elements.river.themes.ThemeDocument; aheinecke@7145: aheinecke@7145: import org.dive4elements.river.artifacts.model.minfo.BedDiffYearResult; aheinecke@7689: import org.dive4elements.river.model.BedHeightSingleValue; aheinecke@7689: import org.dive4elements.river.artifacts.model.minfo.BedHeightSingleData; aheinecke@7689: aheinecke@7145: import org.dive4elements.river.artifacts.model.minfo.MorphologicWidth; aheinecke@7145: aheinecke@7145: public class BedWidthProcessor extends DefaultProcessor { aheinecke@7145: aheinecke@7145: private final static Logger logger = aheinecke@7145: Logger.getLogger(BedWidthProcessor.class); aheinecke@7145: aheinecke@7145: public static final String I18N_AXIS_LABEL_DEFAULT = aheinecke@7145: "Breite [m]"; aheinecke@7145: public static final String I18N_AXIS_LABEL = aheinecke@7145: "chart.beddifference.yaxis.label.morph"; aheinecke@7145: teichmann@7901: public static final double GAP_WIDTH = 100.0; teichmann@7901: aheinecke@7145: @Override aheinecke@7145: public void doOut( aheinecke@7145: DiagramGenerator generator, aheinecke@7145: ArtifactAndFacet bundle, aheinecke@7145: ThemeDocument theme, aheinecke@7145: boolean visible) { aheinecke@7145: CallContext context = generator.getCallContext(); aheinecke@7145: XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), aheinecke@7145: theme); aheinecke@7145: Object data = bundle.getData(context); rrenkert@7830: String facetName = bundle.getFacetName(); aheinecke@7145: rrenkert@7830: if (facetName.equals(FacetTypes.BED_DIFFERENCE_SOUNDING_WIDTH) && rrenkert@7830: data instanceof BedDiffYearResult) { aheinecke@7145: BedDiffYearResult bData = (BedDiffYearResult) data; rrenkert@7834: StyledSeriesBuilder.addPoints( rrenkert@7834: series, rrenkert@7834: bData.getSoundingWidthData(), rrenkert@7834: false, rrenkert@7834: 0.110d); rrenkert@7830: } else if (facetName.equals(FacetTypes.BED_DIFFERENCE_MORPH_WIDTH1) && rrenkert@7830: data instanceof BedDiffYearResult) { rrenkert@7830: BedDiffYearResult bData = (BedDiffYearResult) data; rrenkert@7830: StyledSeriesBuilder.addPoints(series, bData.getMorphWidth1Data(), true); rrenkert@7830: } else if (facetName.equals(FacetTypes.BED_DIFFERENCE_MORPH_WIDTH2) && rrenkert@7830: data instanceof BedDiffYearResult) { rrenkert@7830: BedDiffYearResult bData = (BedDiffYearResult) data; rrenkert@7830: StyledSeriesBuilder.addPoints(series, bData.getMorphWidth2Data(), true); aheinecke@7145: } else if (data instanceof MorphologicWidth) { aheinecke@7145: MorphologicWidth bData = (MorphologicWidth) data; aheinecke@7145: StyledSeriesBuilder.addPoints(series, bData.getAsArray(), true); aheinecke@7689: } else if (data instanceof BedHeightSingleData) { aheinecke@7689: BedHeightSingleData bData = (BedHeightSingleData)data; rrenkert@7828: double[] width = bData.getSoundingWidths(); aheinecke@7689: double[] stations = bData.getStations().toNativeArray(); aheinecke@7689: teichmann@7901: GapInserter gi = new GapInserter(series, GAP_WIDTH); teichmann@7901: aheinecke@7689: for (int i = 0; i < width.length; i++) { teichmann@7901: gi.add(stations[i], width[i]); aheinecke@7689: } aheinecke@7689: } else if (data instanceof List) { aheinecke@7689: List bData = (List)data; aheinecke@7689: aheinecke@7689: for(BedHeightSingleValue bvalue: bData) { aheinecke@7689: series.add(bvalue.getStation(), bvalue.getSoundingWidth()); aheinecke@7689: } aheinecke@7148: } else { aheinecke@7148: logger.error("Unknown data for facet: " + bundle.getFacetName()); aheinecke@7145: } aheinecke@7145: aheinecke@7145: generator.addAxisSeries(series, axisName, visible); aheinecke@7145: } aheinecke@7145: aheinecke@7145: @Override aheinecke@7145: public boolean canHandle(String facettype) { rrenkert@7830: return facettype.equals(FacetTypes.BED_DIFFERENCE_SOUNDING_WIDTH) || rrenkert@7830: facettype.equals(FacetTypes.BED_DIFFERENCE_MORPH_WIDTH1) || rrenkert@7830: facettype.equals(FacetTypes.BED_DIFFERENCE_MORPH_WIDTH2) || aheinecke@7689: facettype.equals(FacetTypes.MORPHOLOGIC_WIDTH) || aheinecke@7689: facettype.equals(FacetTypes.BEDHEIGHT_SOUNDING_WIDTH); aheinecke@7145: } aheinecke@7145: aheinecke@7145: @Override aheinecke@7145: public String getAxisLabel(DiagramGenerator generator) { aheinecke@7145: return generator.msg( aheinecke@7145: I18N_AXIS_LABEL, aheinecke@7145: I18N_AXIS_LABEL_DEFAULT); aheinecke@7145: } aheinecke@7145: }