Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java @ 9496:d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
author | gernotbelger |
---|---|
date | Wed, 26 Sep 2018 15:48:05 +0200 |
parents | 094ed9d1f2ad |
children | 853f2dafc16e |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java Tue Sep 25 16:43:51 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java Wed Sep 26 15:48:05 2018 +0200 @@ -12,11 +12,7 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; -import java.awt.Paint; import java.awt.Stroke; -import java.awt.TexturePaint; -import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.text.DateFormat; @@ -38,7 +34,6 @@ import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; import org.dive4elements.artifactdatabase.state.Settings; import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.ArtifactCollection; import org.dive4elements.artifacts.ArtifactNamespaceContext; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.CallMeta; @@ -56,12 +51,10 @@ import org.dive4elements.river.jfree.DoubleBounds; import org.dive4elements.river.jfree.EnhancedLineAndShapeRenderer; import org.dive4elements.river.jfree.RiverAnnotation; -import org.dive4elements.river.jfree.StableXYDifferenceRenderer; import org.dive4elements.river.jfree.Style; -import org.dive4elements.river.jfree.StyledAreaSeriesCollection; import org.dive4elements.river.jfree.StyledSeries; +import org.dive4elements.river.jfree.StyledXYDataset; import org.dive4elements.river.themes.ThemeDocument; -import org.dive4elements.river.utils.Formatter; import org.jfree.chart.JFreeChart; import org.jfree.chart.LegendItem; import org.jfree.chart.LegendItemCollection; @@ -478,7 +471,7 @@ addMetadataSubtitle(chart); /* add the real chart title, but as subtitle after the metadata */ - final String chartTitle = getChartTitle(this.context); + final String chartTitle = getChartTitle(this.context); if (chartTitle != null) { final TextTitle title = new TextTitle(chartTitle, JFreeChart.DEFAULT_TITLE_FONT); chart.addSubtitle(title); @@ -487,7 +480,6 @@ addSubtitles(this.context, chart); } - /** * Adds a metadata sub-title to the chart if it gets exported */ @@ -503,7 +495,7 @@ final TextTitle subtitle = new TextTitle(text, titleFont); subtitle.setHorizontalAlignment(HorizontalAlignment.LEFT); - subtitle.setMargin(new RectangleInsets(10,10,10,10)); + subtitle.setMargin(new RectangleInsets(10, 10, 10, 10)); chart.addSubtitle(subtitle); } @@ -517,9 +509,6 @@ return Collections.emptyList(); } - final CollectionCallContext ccc = (CollectionCallContext) this.context; - final ArtifactCollection collection = ccc.getCollection(); - final List<String> subtitles = new ArrayList<>(); /* version */ @@ -817,7 +806,7 @@ plot.setDataset(datasetIndex, dataset); plot.mapDatasetToRangeAxis(datasetIndex, axisIndex); - applyThemes(plot, dataset, datasetIndex, axisDataset.isArea(dataset)); + applyThemes(plot, dataset, datasetIndex); datasetIndex++; } @@ -839,18 +828,21 @@ protected abstract NumberAxis createYAxis(final int index); /** - * @param idx + * @param datasetIndex * "index" of dataset/series (first dataset to be drawn has * index 0), correlates with renderer index. * @param isArea * true if the series describes an area and shall be rendered * as such. */ - private void applyThemes(final XYPlot plot, final XYDataset series, final int idx, final boolean isArea) { - if (isArea) - applyAreaTheme(plot, (StyledAreaSeriesCollection) series, idx); + private void applyThemes(final XYPlot plot, final XYDataset dataset, final int datasetIndex) { + + final Font legendFont = createLegendLabelFont(); + + if (dataset instanceof StyledXYDataset) + ((StyledXYDataset) dataset).applyTheme(this.context.getMeta(), plot, datasetIndex, legendFont); else - applyLineTheme(plot, series, idx); + applyLineTheme(plot, dataset, datasetIndex, legendFont); } /** @@ -883,12 +875,8 @@ * @return a new instance of EnhancedLineAndShapeRenderer. */ private XYLineAndShapeRenderer createRenderer(final XYPlot plot, final int idx) { - log.debug("Create EnhancedLineAndShapeRenderer for idx: " + idx); - final EnhancedLineAndShapeRenderer r = new EnhancedLineAndShapeRenderer(true, false); - r.setPlot(plot); - return r; } @@ -903,15 +891,14 @@ * The XYDataset which needs to support Series objects. * @param idx * The index of the renderer / dataset. + * @param legendFont2 */ - private void applyLineTheme(final XYPlot plot, final XYDataset dataset, final int idx) { + private void applyLineTheme(final XYPlot plot, final XYDataset dataset, final int idx, final Font legendFont) { log.debug("Apply LineTheme for dataset at index: " + idx); final LegendItemCollection lic = new LegendItemCollection(); final LegendItemCollection anno = plot.getFixedLegendItems(); - final Font legendFont = createLegendLabelFont(); - final XYLineAndShapeRenderer renderer = createRenderer(plot, idx); for (int s = 0, num = dataset.getSeriesCount(); s < num; s++) { @@ -951,64 +938,6 @@ plot.setRenderer(idx, renderer); } - /** - * @param plot - * The plot. - * @param area - * A StyledAreaSeriesCollection object. - * @param idx - * The index of the dataset. - */ - private final void applyAreaTheme(final XYPlot plot, final StyledAreaSeriesCollection area, final int idx) { - final LegendItemCollection lic = new LegendItemCollection(); - final LegendItemCollection anno = plot.getFixedLegendItems(); - - final Font legendFont = createLegendLabelFont(); - - log.debug("Registering an 'area'renderer at idx: " + idx); - - final StableXYDifferenceRenderer dRenderer = new StableXYDifferenceRenderer(); - - if (area.getMode() == StyledAreaSeriesCollection.FILL_MODE.UNDER) { - dRenderer.setPositivePaint(createTransparentPaint()); - } - - plot.setRenderer(idx, dRenderer); - - area.applyTheme(dRenderer); - - // i18n - dRenderer.setAreaLabelNumberFormat(Formatter.getFormatter(this.context.getMeta(), 2, 4)); - - dRenderer.setAreaLabelTemplate(Resources.getMsg(this.context.getMeta(), "area.label.template", "Area=%sm2")); - - final LegendItem legendItem = dRenderer.getLegendItem(idx, 0); - if (legendItem != null) { - legendItem.setLabelFont(legendFont); - lic.add(legendItem); - } else { - log.warn("Could not get LegentItem for renderer: " + idx + ", series-idx " + 0); - } - - if (anno != null) { - lic.addAll(anno); - } - - plot.setFixedLegendItems(lic); - } - - /** - * Returns a transparently textured paint. - * - * @return a transparently textured paint. - */ - private static Paint createTransparentPaint() { - // TODO why not use a transparent color? - final BufferedImage texture = new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR); - - return new TexturePaint(texture, new Rectangle2D.Double(0d, 0d, 0d, 0d)); - } - private void preparePDFContext(final CallContext context) { final int[] dimension = getExportDimension(); @@ -1069,21 +998,27 @@ final Bounds[] xyBounds = ChartHelper.getBounds(dataset); - if (xyBounds == null) { - log.warn("Skip XYDataset for Axis (invalid ranges): " + idx); - return; - } + // if (xyBounds == null) { + // log.warn("Skip XYDataset for Axis (invalid ranges): " + idx); + // return; + // } if (visible) { if (log.isDebugEnabled()) { log.debug("Add new AxisDataset at index: " + idx); - log.debug("X extent: " + xyBounds[0]); - log.debug("Y extent: " + xyBounds[1]); + if (xyBounds != null) { + log.debug("X extent: " + xyBounds[0]); + log.debug("Y extent: " + xyBounds[1]); + } } axisDataset.addDataset(dataset); } + /* No range merging, for areas extending to infinity this causes problems. */ + if (xyBounds == null || StyledSeriesBuilder.isBigDoubleValue(xyBounds[1].getLower()) || StyledSeriesBuilder.isBigDoubleValue(xyBounds[1].getLower())) + return; + combineXBounds(xyBounds[0], 0); combineYBounds(xyBounds[1], idx); }