Mercurial > dive4elements > river
changeset 7068:726d998dce29 generator-refactoring
Remove Axis Walker, unabstract Diagram generator
Diagram generator can now be used as an instance configured
in the out-generators config
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 20 Sep 2013 14:55:44 +0200 |
parents | eb24d5203d17 |
children | 9b52c501c57e |
files | artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java |
diffstat | 3 files changed, 139 insertions(+), 79 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Fri Sep 20 14:54:26 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Fri Sep 20 14:55:44 2013 +0200 @@ -126,16 +126,7 @@ /** List of annotations to insert in plot. */ protected List<RiverAnnotation> annotations = new ArrayList<RiverAnnotation>(); - /** - * A mini interface that allows to walk over the YAXIS enums defined in - * subclasses. - */ - public interface YAxisWalker { - - int length(); - - String getId(int idx); - } // end of YAxisWalker interface + protected abstract List<AxisSection> buildYAxisSections(); /** * Default constructor that initializes internal data structures. @@ -169,8 +160,6 @@ boolean visible); - protected abstract YAxisWalker getYAxisWalker(); - protected abstract Series getSeriesOf(XYDataset dataset, int idx); @@ -181,6 +170,13 @@ */ protected abstract String getDefaultChartTitle(); + /** + * Returns the default Y-Axis label of a chart. + * + * @return the default Y-Axis label of a chart. + */ + protected abstract String getDefaultYAxisLabel(int index); + /** * Returns the default X-Axis label of a chart. @@ -189,18 +185,6 @@ */ protected abstract String getDefaultXAxisLabel(); - - /** - * This method is called to retrieve the default label for an Y axis at - * position <i>pos</i>. - * - * @param pos The position of an Y axis. - * - * @return the default Y axis label at position <i>pos</i>. - */ - protected abstract String getDefaultYAxisLabel(int pos); - - /** * This method is used to create new AxisDataset instances which may differ * in concrete subclasses. @@ -481,38 +465,6 @@ /** - * Creates a list of Section for the chart's Y axes. This method makes use - * of <i>getYAxisWalker</i> to be able to access all Y axes defined in - * subclasses. - * - * @return a list of Y axis sections. - */ - protected List<AxisSection> buildYAxisSections() { - List<AxisSection> axisSections = new ArrayList<AxisSection>(); - - YAxisWalker walker = getYAxisWalker(); - for (int i = 0, n = walker.length(); i < n; i++) { - AxisSection ySection = new AxisSection(); - ySection.setIdentifier(walker.getId(i)); - ySection.setLabel(getYAxisLabel(i)); - ySection.setFontSize(14); - ySection.setFixed(false); - - // XXX We are able to find better default ranges that [0,0], the - // only problem is, that we do NOT have a better range than [0,0] - // for each axis, because the initial chart will not have a dataset - // for each axis set! - ySection.setUpperRange(0d); - ySection.setLowerRange(0d); - - axisSections.add(ySection); - } - - return axisSections; - } - - - /** * Returns the <i>settings</i> as <i>ChartSettings</i>. * * @return the <i>settings</i> as <i>ChartSettings</i> or null, if @@ -804,6 +756,10 @@ return fontSize != null ? fontSize : DEFAULT_FONT_SIZE; } + /** + * Glue between axis names and index. + */ + protected abstract String axisIndexToName(int index); /** * This method returns the font size for an Y axis. If the font size is @@ -812,15 +768,13 @@ * * @return the font size for the x axis. */ - protected int getYAxisFontSize(int pos) { + protected int getYAxisFontSize(int index) { ChartSettings chartSettings = getChartSettings(); if (chartSettings == null) { return DEFAULT_FONT_SIZE; } - YAxisWalker walker = getYAxisWalker(); - - AxisSection as = chartSettings.getAxisSection(walker.getId(pos)); + AxisSection as = chartSettings.getAxisSection(axisIndexToName(index)); if (as == null) { return DEFAULT_FONT_SIZE; } @@ -829,7 +783,6 @@ return fontSize != null ? fontSize : DEFAULT_FONT_SIZE; } - /** * This method returns the export dimension specified in ChartSettings as * int array [width,height]. @@ -860,6 +813,8 @@ * @return the Y-Axis label of a chart at position <i>0</i>. */ protected String getYAxisLabel(int pos) { + return "TODO lalal"; + /* ChartSettings chartSettings = getChartSettings(); if (chartSettings == null) { return getDefaultYAxisLabel(pos); @@ -875,7 +830,7 @@ } } - return getDefaultYAxisLabel(pos); + return getDefaultYAxisLabel(pos);*/ } @@ -1417,9 +1372,7 @@ * @return an instance of IdentifiableNumberAxis. */ protected NumberAxis createNumberAxis(int idx, String label) { - YAxisWalker walker = getYAxisWalker(); - - return new IdentifiableNumberAxis(walker.getId(idx), label); + return new IdentifiableNumberAxis(axisIndexToName(idx), label); } @@ -1428,7 +1381,6 @@ * Shall be overriden by subclasses. */ protected NumberAxis createYAxis(int index) { - YAxisWalker walker = getYAxisWalker(); Font labelFont = new Font( DEFAULT_FONT_NAME, @@ -1436,7 +1388,7 @@ getYAxisFontSize(index)); IdentifiableNumberAxis axis = new IdentifiableNumberAxis( - walker.getId(index), + axisIndexToName(index), getYAxisLabel(index)); axis.setAutoRangeIncludesZero(false);
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Fri Sep 20 14:54:26 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Fri Sep 20 14:55:44 2013 +0200 @@ -284,5 +284,13 @@ } return -1; } + + public String getAxisName(int index) { + AxisAttributes att = axesAttrs.get(index); + if (att == null) { + return ""; /* null? */ + } + return att.getName(); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Fri Sep 20 14:54:26 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Fri Sep 20 14:55:44 2013 +0200 @@ -41,6 +41,7 @@ import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.exports.process.Processor; import org.dive4elements.river.jfree.AxisDataset; import org.dive4elements.river.jfree.AnnotationHelper; @@ -71,11 +72,7 @@ * <li> There should always be a Y-Axis on the "left". </li> * </ul> */ -public abstract class DiagramGenerator extends ChartGenerator2 { - - /** Enumerator over existing axes. */ - @Override - protected abstract YAxisWalker getYAxisWalker(); +public class DiagramGenerator extends ChartGenerator2 { public static final int AXIS_SPACE = 5; @@ -110,7 +107,6 @@ diagramAttributes = new DiagramAttributes(config); } - /** * Generate the chart anew (including localized axis and all). */ @@ -375,6 +371,15 @@ logger.debug("..............."); } + /** + * Registers an area to be drawn. + * @param area Area to be drawn. + * @param axisName Name of the axis. + * @param visible Whether or not to be visible (important for range calculations). + */ + public void addAreaSeries(StyledAreaSeriesCollection area, String axisName, boolean visible) { + addAreaSeries(area, diagramAttributes.getAxisIndex(axisName), visible); + } /** * Registers an area to be drawn. @@ -399,13 +404,12 @@ } } - /** * Add given series if visible, if not visible adjust ranges (such that * all points in data would be plotted once visible). - * @param series the data series to include in plot. - * @param index ('symbolic') index of the series and of its axis. - * @param visible whether or not the data should be plotted. + * @param series the data series to include in plot. + * @param index index of the axis. + * @param visible whether or not the data should be plotted. */ public void addAxisSeries(XYSeries series, int index, boolean visible) { if (series == null) { @@ -416,8 +420,17 @@ series.getMinY() + " | " + series.getMaxY()); addAxisDataset(new XYSeriesCollection(series), index, visible); + } - AxisDataset axisDataset = (AxisDataset) getAxisDataset(index); + /** + * Add given series if visible, if not visible adjust ranges (such that + * all points in data would be plotted once visible). + * @param series the data series to include in plot. + * @param axisName name of the axis. + * @param visible whether or not the data should be plotted. + */ + public void addAxisSeries(XYSeries series, String axisName, boolean visible) { + addAxisSeries(series, diagramAttributes.getAxisIndex(axisName), visible); } @@ -981,6 +994,93 @@ this.inverted = inverted; } + @Override + public String getDefaultChartTitle() { + DiagramAttributes.Title dTitle = diagramAttributes.getTitle(); + if (dTitle == null) { + return "Title not configured in conf.xml"; + } + + return dTitle.evaluate((D4EArtifact)getMaster(), context); + } + + @Override + public String getDefaultChartSubtitle() { + DiagramAttributes.Title dTitle = diagramAttributes.getSubtitle(); + if (dTitle == null) { + return "Subtitle not configured in conf.xml"; + } + + return dTitle.evaluate((D4EArtifact)getMaster(), context); + } + + /** + * Get internationalized label for the x axis. + */ + @Override + protected String getDefaultXAxisLabel() { + return "TODO X axis label"; +/* D4EArtifact flys = (D4EArtifact) master; + + return msg( + I18N_XAXIS_LABEL, + I18N_XAXIS_LABEL_DEFAULT, + new Object[] { RiverUtils.getRiver(flys).getName() }); */ + } + + @Override + protected String getDefaultYAxisLabel(int index) { + return "TODO Y Axis label"; +/* String label = "default"; + + if (index == YAXIS.W.idx) { + label = getWAxisLabel(); + } + else if (index == YAXIS.Q.idx) { + label = msg(getQAxisLabelKey(), getQAxisDefaultLabel()); + } + else if (index == YAXIS.D.idx) { + label = msg(I18N_WDIFF_YAXIS_LABEL, I18N_WDIFF_YAXIS_LABEL_DEFAULT); + } + + return label;*/ + } + + + /** + * Creates a list of Section for the chart's Y axes. + * + * @return a list of Y axis sections. + */ + protected List<AxisSection> buildYAxisSections() { + List<AxisSection> axisSections = new ArrayList<AxisSection>(); + + List<DiagramAttributes.AxisAttributes> axesAttrs = diagramAttributes.getAxesAttributes(); + + for (int i = 0, n = axesAttrs.size(); i < n; i++) { + AxisSection ySection = new AxisSection(); + ySection.setIdentifier(diagramAttributes.getAxisName(i)); + ySection.setLabel(getYAxisLabel(i)); + ySection.setFontSize(14); + ySection.setFixed(false); + + // XXX We are able to find better default ranges that [0,0], the + // only problem is, that we do NOT have a better range than [0,0] + // for each axis, because the initial chart will not have a dataset + // for each axis set! + ySection.setUpperRange(0d); + ySection.setLowerRange(0d); + + axisSections.add(ySection); + } + + return axisSections; + } + + protected String axisIndexToName(int index) { + return diagramAttributes.getAxisName(index); + } + /** Add the acutal data to the diagram according to the processors. * For every outable facets, this function is * called and handles the data accordingly. */ @@ -1004,7 +1104,7 @@ for (Processor pr: diagramAttributes.getProcessors()) { if (pr.canHandle(facetName)) { -// pr.doOut(this, bundle, theme, visible, 0); + pr.doOut(this, bundle, theme, visible); } } }