changeset 8889:f87f435df856

Allow to configure lower and upper margin of a chart axis
author gernotbelger
date Wed, 14 Feb 2018 18:45:01 +0100
parents caa52aec08c0
children 90b7f45ff4ae
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, 53 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml	Wed Feb 14 18:16:03 2018 +0100
+++ b/artifacts/doc/conf/generators/longitudinal-diagram-defaults.xml	Wed Feb 14 18:45:01 2018 +0100
@@ -15,7 +15,7 @@
     <axis name="Tau"/>
     <axis name="Q" include-zero="true"/>
     <axis name="FlowdepthAxis" include-zero="true"/>
-    <axis name="tkhAxis" include-zero="true" />
+    <axis name="tkhAxis" include-zero="true" upperMargin="4.0" />
     <domain-axis key="chart.longitudinal.section.xaxis.label" default="Fluss-Km" inverted="org.dive4elements.river.exports.IsKmUpEvaluator()">
         <arg expr="artifact.river"/>
     </domain-axis>
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java	Wed Feb 14 18:16:03 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java	Wed Feb 14 18:45:01 2018 +0100
@@ -109,16 +109,15 @@
     } // class Instance
 
     public static class AxisAttributes {
-        private String  name;
-        private boolean isLeftAlign; // TODO: Remove!
-        private boolean forceAlign;  // TODO: Remove!
-        private boolean includeZero; // TODO: Use Evaluator
+        private final String  name;
+        private final boolean isLeftAlign; // TODO: Remove!
+        private final boolean forceAlign;  // TODO: Remove!
+        private final boolean includeZero; // TODO: Use Evaluator
 
-        private Evaluator isInverted;
-        private Evaluator isLog;
-
-        public AxisAttributes() {
-        }
+        private final Evaluator isInverted;
+        private final Evaluator isLog;
+        private final double lowerMargin;
+        private final double upperMargin;
 
         public AxisAttributes(
             String    name,
@@ -126,7 +125,9 @@
             boolean   forceAlign,
             boolean   includeZero,
             Evaluator isInverted,
-            Evaluator isLog
+            Evaluator isLog,
+            double lowerMargin,
+            double upperMargin
         ) {
             this.name        = name;
             this.isLeftAlign = isLeftAlign;
@@ -134,6 +135,8 @@
             this.includeZero = includeZero;
             this.isInverted  = isInverted;
             this.isLog       = isLog;
+            this.lowerMargin = lowerMargin;
+            this.upperMargin = upperMargin;
         }
 
         public String getName() {
@@ -159,15 +162,20 @@
         public Evaluator isLog() {
             return isLog;
         }
+        
+        public double getLowerMargin() {
+            return this.lowerMargin;
+        }
+        
+        public double getUpperMargin() {
+            return this.upperMargin;
+        }
     } // class AxisAttributes
 
     public class DomainAxisAttributes extends AxisAttributes {
 
         private Title title;
 
-        public DomainAxisAttributes() {
-        }
-
         public DomainAxisAttributes(
             String    name,
             boolean   isLeftAlign,
@@ -178,7 +186,7 @@
             Title     title
         ) {
             super(name, isLeftAlign, forceAlign, includeZero, isInverted,
-                    isLog);
+                    isLog, 0.0, 0.0);
             this.title = title;
         }
 
@@ -375,6 +383,9 @@
             String isInverted = axisElement.getAttribute("inverted");
             String isLog = axisElement.getAttribute("logarithmic");
 
+            final double lowerMargin = parseDouble( axisElement.getAttribute("lowerMargin"), 0.0 );
+            final double upperMargin = parseDouble( axisElement.getAttribute("upperMargin"), 0.0 );
+            
             if (name.isEmpty()) {
                 continue;
             }
@@ -394,7 +405,22 @@
             axesAttrs.add(new AxisAttributes(
                 name, isleftAlign, forceAlign,
                 includeZero.equals("true"),
-                isInvertedE, isLogE));
+                isInvertedE, isLogE,
+                lowerMargin,upperMargin));
+        }
+    }
+    
+    private static double parseDouble( final String text, final double defaultValue ) {
+        if( text == null || text.isEmpty() )
+            return defaultValue;
+        
+        try {
+            return Double.parseDouble(text);
+        }
+        catch (final NumberFormatException e) {
+            e.printStackTrace();
+            log.error(String.format("Invalid double attribute: ", text), e);
+            return defaultValue;
         }
     }
 
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java	Wed Feb 14 18:16:03 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java	Wed Feb 14 18:45:01 2018 +0100
@@ -36,7 +36,7 @@
 import org.dive4elements.artifacts.CallContext;
 
 import org.dive4elements.river.artifacts.D4EArtifact;
-
+import org.dive4elements.river.exports.DiagramAttributes.AxisAttributes;
 import org.dive4elements.river.exports.process.Processor;
 
 import org.dive4elements.river.jfree.RiverAnnotation;
@@ -1270,19 +1270,25 @@
 
     @Override
     protected NumberAxis createYAxis(int index) {
+        
+        final AxisAttributes axisAttributes = diagramAttributes.getAxesAttributes().get(index);
+        
+        boolean logarithmic = (Boolean)axisAttributes.isLog().evaluate((D4EArtifact)getMaster(), context);
+
         NumberAxis axis;
-        boolean logarithmic = (Boolean)diagramAttributes.getAxesAttributes().
-            get(index).isLog().evaluate((D4EArtifact)getMaster(), context);
-
         if (logarithmic) {
             axis = new LogarithmicAxis(getYAxisLabel(index));
         } else {
             axis = super.createYAxis(index);
         }
 
-        if (diagramAttributes.getAxesAttributes().get(index).includeZero()) {
+        if (axisAttributes.includeZero()) {
             axis.setAutoRangeIncludesZero(true);
         }
+        
+        axis.setLowerMargin(axisAttributes.getLowerMargin());
+        axis.setUpperMargin(axisAttributes.getUpperMargin());
+        
         return axis;
     }
 

http://dive4elements.wald.intevation.org