Mercurial > dive4elements > river
changeset 9283:55e2155ab52d
Introduced new option 'tick-units' for axes. Configured the count Axis to only allow for integer ticks.
author | gernotbelger |
---|---|
date | Fri, 20 Jul 2018 15:24:05 +0200 |
parents | 7efb27005d0d |
children | 486b6160962f |
files | artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java |
diffstat | 3 files changed, 55 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml Fri Jul 20 14:58:34 2018 +0200 +++ b/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml Fri Jul 20 15:24:05 2018 +0200 @@ -18,7 +18,7 @@ <axis name="tkhAxis" include-zero="true" /> <axis name="flowdepthDevelopmentAxis"/> <axis name="flowdepthDevelopmentPerYearAxis"/> - <axis name="countAxis" include-zero="true"/> + <axis name="countAxis" include-zero="true" tick-units="integer"/> <axis name="durationAxis" include-zero="true"/> <domain-axis key="chart.longitudinal.section.xaxis.label" default="Fluss-Km" inverted="org.dive4elements.river.exports.IsKmUpEvaluator()">
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Fri Jul 20 14:58:34 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Fri Jul 20 15:24:05 2018 +0200 @@ -15,9 +15,10 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; - +import org.dive4elements.river.exports.DiagramAttributes.AxisAttributes.TickUnits; import org.dive4elements.river.exports.process.Processor; - +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.TickUnitSource; import org.apache.log4j.Logger; import org.dive4elements.artifacts.CallContext; @@ -115,6 +116,24 @@ } // class Instance public static class AxisAttributes { + + /** Possible point of extension in order to support different tick units per axis.*/ + public static enum TickUnits { + standard { + @Override + public TickUnitSource createTickUnits() { + return NumberAxis.createStandardTickUnits(); + } + }, integer { + @Override + public TickUnitSource createTickUnits() { + return NumberAxis.createIntegerTickUnits(); + } + }; + + public abstract TickUnitSource createTickUnits(); + } + private final String name; private final boolean isLeftAlign; // TODO: Remove! private final boolean forceAlign; // TODO: Remove! @@ -124,6 +143,7 @@ private final Evaluator isLog; private final double lowerMargin; private final double upperMargin; + private TickUnits tickUnits; public AxisAttributes( String name, @@ -132,6 +152,7 @@ boolean includeZero, Evaluator isInverted, Evaluator isLog, + TickUnits tickUnits, double lowerMargin, double upperMargin ) { @@ -141,6 +162,7 @@ this.includeZero = includeZero; this.isInverted = isInverted; this.isLog = isLog; + this.tickUnits = tickUnits; this.lowerMargin = lowerMargin; this.upperMargin = upperMargin; } @@ -176,6 +198,10 @@ public double getUpperMargin() { return this.upperMargin; } + + public TickUnits getTickUnits() { + return this.tickUnits; + } } // class AxisAttributes public class DomainAxisAttributes extends AxisAttributes { @@ -192,7 +218,7 @@ Title title ) { super(name, isLeftAlign, forceAlign, includeZero, isInverted, - isLog, 0.0, 0.0); + isLog, TickUnits.standard, 0.0, 0.0); this.title = title; } @@ -391,6 +417,8 @@ String isInverted = axisElement.getAttribute("inverted"); String isLog = axisElement.getAttribute("logarithmic"); + final TickUnits tickUnits = parseTickUnits(axisElement); + final double lowerMargin = parseDouble( axisElement.getAttribute("lowerMargin"), 0.0 ); final double upperMargin = parseDouble( axisElement.getAttribute("upperMargin"), 0.0 ); @@ -406,6 +434,7 @@ else if ("force".equals(part)) forceAlign = true; } + Evaluator isInvertedE = parseEvaluator(isInverted, FALSE); Evaluator isLogE = parseEvaluator(isLog, FALSE); @@ -413,11 +442,25 @@ axesAttrs.add(new AxisAttributes( name, isleftAlign, forceAlign, includeZero.equals("true"), - isInvertedE, isLogE, + isInvertedE, isLogE, tickUnits, lowerMargin,upperMargin)); } } + private TickUnits parseTickUnits(Element axisElement) { + final String attribute = axisElement.getAttribute("tick-units"); + if( attribute == null || attribute.trim().isEmpty()) + return TickUnits.standard; + + try { + return TickUnits.valueOf(attribute); + } + catch (Exception e) { + log.error(String.format("Invalid tick-units: %s", attribute), e); + return TickUnits.standard; + } + } + private static double parseDouble( final String text, final double defaultValue ) { if( text == null || text.isEmpty() ) return defaultValue; @@ -427,7 +470,7 @@ } catch (final NumberFormatException e) { e.printStackTrace(); - log.error(String.format("Invalid double attribute: ", text), e); + log.error(String.format("Invalid double attribute: %s", text), e); return defaultValue; } }
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Fri Jul 20 14:58:34 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Fri Jul 20 15:24:05 2018 +0200 @@ -31,6 +31,7 @@ import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.exports.DiagramAttributes.AxisAttributes; +import org.dive4elements.river.exports.DiagramAttributes.AxisAttributes.TickUnits; import org.dive4elements.river.exports.process.Processor; import org.dive4elements.river.jfree.AxisDataset; import org.dive4elements.river.jfree.Bounds; @@ -1294,7 +1295,11 @@ axis.setLowerMargin(axisAttributes.getLowerMargin()); axis.setUpperMargin(axisAttributes.getUpperMargin()); - + + TickUnits tickUnits = axisAttributes.getTickUnits(); + if( tickUnits != TickUnits.standard ) + axis.setStandardTickUnits(tickUnits.createTickUnits()); + return axis; }