From 89b9e7c67d835e5716ede71b7645a6da2527d5a9 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Sun, 17 Feb 2013 15:48:21 +0100 Subject: [PATCH] more work on axis tick calculators, making abstract --- .../xeiam/xchart/internal/chartpart/Axis.java | 2 +- .../xchart/internal/chartpart/AxisTick.java | 13 +-- .../AxisTickCalculator.java | 94 ++++++++++++++++++- .../DateAxisTickCalculator.java | 81 ++-------------- .../LogarithmicAxisTickCalculator.java | 83 ++-------------- ...tor.java => NumberAxisTickCalculator.java} | 84 ++--------------- ...malFormatter.java => NumberFormatter.java} | 4 +- .../com/xeiam/xchart/style/StyleManager.java | 8 +- ...t.java => DateAxisTickCalculatorTest.java} | 26 +++-- .../unit/DecimalAxisTickCalculatorTest.java | 57 +++++++++++ .../xeiam/xchart/unit/ValueFormatterTest.java | 4 +- 11 files changed, 211 insertions(+), 245 deletions(-) rename xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/{DecimalAxisTickCalculator.java => NumberAxisTickCalculator.java} (59%) rename xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/{DecimalFormatter.java => NumberFormatter.java} (98%) rename xchart/src/test/java/com/xeiam/xchart/unit/{DecimalGridStepTest.java => DateAxisTickCalculatorTest.java} (56%) create mode 100644 xchart/src/test/java/com/xeiam/xchart/unit/DecimalAxisTickCalculatorTest.java diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java index e5e1a3b8..d7e0d81b 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java @@ -33,7 +33,7 @@ public class Axis implements ChartPart { public enum AxisType { - Number, Date, Logarithmic; + Number, Date; } /** parent */ diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java index 2fdc5157..3274a342 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java @@ -23,8 +23,7 @@ import com.xeiam.xchart.Chart; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.axistickcalculator.AxisTickCalculator; import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator; -import com.xeiam.xchart.internal.chartpart.axistickcalculator.DecimalAxisTickCalculator; -import com.xeiam.xchart.internal.chartpart.axistickcalculator.LogarithmicAxisTickCalculator; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator; /** * An axis tick @@ -84,17 +83,19 @@ public class AxisTick implements ChartPart { if (axis.getAxisType() == AxisType.Number) { - gridStep = new DecimalAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); + gridStep = new NumberAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); } else if (axis.getAxisType() == AxisType.Date) { gridStep = new DateAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); - } else if (axis.getAxisType() == AxisType.Logarithmic) { - - gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); } + // if (getChart().getStyleManager()) { + // + // gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); + // } + if (isVisible) { axisTickLabels.paint(g); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java index 8a924230..35bf74aa 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java @@ -21,15 +21,103 @@ */ package com.xeiam.xchart.internal.chartpart.axistickcalculator; +import java.math.BigDecimal; +import java.util.LinkedList; import java.util.List; +import com.xeiam.xchart.internal.chartpart.Axis.AxisType; +import com.xeiam.xchart.internal.chartpart.Axis.Direction; +import com.xeiam.xchart.internal.chartpart.AxisPair; +import com.xeiam.xchart.style.StyleManager; + /** * @author timmolter */ -public interface AxisTickCalculator { +public abstract class AxisTickCalculator { + + /** the default tick mark step hint for x axis */ + protected static final int DEFAULT_TICK_MARK_STEP_HINT_X = 74; + + /** the default tick mark step hint for y axis */ + protected static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; + + /** the List of tick label position in pixels */ + protected List<Integer> tickLocations = new LinkedList<Integer>();; + + /** the List of tick label values */ + protected List<String> tickLabels = new LinkedList<String>(); + + protected final Direction axisDirection; + + protected final int workingSpace; + + protected final BigDecimal minValue; + + protected final BigDecimal maxValue; + + protected final StyleManager styleManager; + + public AxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { + + this.axisDirection = axisDirection; + this.workingSpace = workingSpace; + this.minValue = minValue; + this.maxValue = maxValue; + this.styleManager = styleManager; + + calculate(); + } + + private void calculate() { + + // a check if all axis data are the exact same values + if (minValue == maxValue) { + if (getAxisType() == AxisType.Number) { + tickLabels.add(styleManager.getDecimalFormatter().formatNumber(maxValue)); + } else if (getAxisType() == AxisType.Date) { + tickLabels.add(styleManager.getDateFormatter().formatDateValue(maxValue, maxValue, maxValue)); + } + tickLocations.add((int) (workingSpace / 2.0)); + return; + } + + // tick space - a percentage of the working space available for ticks, i.e. 95% + int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space + + // where the tick should begin in the working space in pixels + int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); + + BigDecimal gridStep = getGridStep(tickSpace); + BigDecimal firstPosition = getFirstPosition(minValue, gridStep); + + // generate all tickLabels and tickLocations from the first to last position + for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { + + if (getAxisType() == AxisType.Number) { + tickLabels.add(styleManager.getDecimalFormatter().formatNumber(tickPosition)); + } else if (getAxisType() == AxisType.Date) { + tickLabels.add(styleManager.getDateFormatter().formatDateValue(tickPosition, minValue, maxValue)); + } + // here we convert tickPosition finally to plot space, i.e. pixels + int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); + tickLocations.add(tickLabelPosition); + } + } + + public List<Integer> getTickLocations() { + + return tickLocations; + } + + public List<String> getTickLabels() { + + return tickLabels; + } + + public abstract BigDecimal getGridStep(int tickSpace); - public List<Integer> getTickLocations(); + public abstract BigDecimal getFirstPosition(BigDecimal minValue, BigDecimal gridStep); - public List<String> getTickLabels(); + public abstract AxisType getAxisType(); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java index fd93c28c..b007ff60 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java @@ -22,11 +22,9 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator; import java.math.BigDecimal; -import java.util.LinkedList; -import java.util.List; +import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; -import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; /** @@ -34,29 +32,7 @@ import com.xeiam.xchart.style.StyleManager; * * @author timmolter */ -public class DateAxisTickCalculator implements AxisTickCalculator { - - /** the default tick mark step hint for x axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_X = 74; - - /** the default tick mark step hint for y axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; - - /** the List of tick label position in pixels */ - private List<Integer> tickLocations = new LinkedList<Integer>();; - - /** the List of tick label values */ - private List<String> tickLabels = new LinkedList<String>(); - - private final Direction axisDirection; - - private final int workingSpace; - - private final BigDecimal minValue; - - private final BigDecimal maxValue; - - private final StyleManager styleManager; +public class DateAxisTickCalculator extends AxisTickCalculator { /** * Constructor @@ -69,43 +45,8 @@ public class DateAxisTickCalculator implements AxisTickCalculator { */ public DateAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { - this.axisDirection = axisDirection; - this.workingSpace = workingSpace; - this.minValue = minValue; - this.maxValue = maxValue; - this.styleManager = styleManager; - - calculate(); - } - - private void calculate() { - - // a check if all axis data are the exact same values - if (minValue == maxValue) { - tickLabels.add(styleManager.getDateFormatter().formatDateValue(maxValue, maxValue, maxValue)); - tickLocations.add((int) (workingSpace / 2.0)); - return; - } - - // tick space - a percentage of the working space available for ticks, i.e. 95% - int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space - System.out.println("tickSpace= " + tickSpace); - - // where the tick should begin in the working space in pixels - int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); - - BigDecimal gridStep = getGridStepForDecimal(tickSpace); + super(axisDirection, workingSpace, minValue, maxValue, styleManager); - BigDecimal firstPosition = getFirstPosition(minValue, gridStep); - - // generate all tickLabels and tickLocations from the first to last position - for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { - - tickLabels.add(styleManager.getDateFormatter().formatDateValue(tickPosition, minValue, maxValue)); - // here we convert tickPosition finally to plot space, i.e. pixels - int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); - tickLocations.add(tickLabelPosition); - } } /** @@ -114,7 +55,8 @@ public class DateAxisTickCalculator implements AxisTickCalculator { * @param tickSpace in plot space * @return */ - private BigDecimal getGridStepForDecimal(int tickSpace) { + @Override + public BigDecimal getGridStep(int tickSpace) { // the span of the data double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space @@ -182,7 +124,8 @@ public class DateAxisTickCalculator implements AxisTickCalculator { return value; } - private BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { + @Override + public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { BigDecimal firstPosition; if (min.remainder(gridStep).doubleValue() <= 0.0) { @@ -194,15 +137,9 @@ public class DateAxisTickCalculator implements AxisTickCalculator { } @Override - public List<Integer> getTickLocations() { - - return tickLocations; - } - - @Override - public List<String> getTickLabels() { + public AxisType getAxisType() { - return tickLabels; + return AxisType.Date; } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java index 7cd44ab0..0ea90c66 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java @@ -22,11 +22,9 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator; import java.math.BigDecimal; -import java.util.LinkedList; -import java.util.List; +import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; -import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; /** @@ -34,29 +32,7 @@ import com.xeiam.xchart.style.StyleManager; * * @author timmolter */ -public class LogarithmicAxisTickCalculator implements AxisTickCalculator { - - /** the default tick mark step hint for x axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_X = 74; - - /** the default tick mark step hint for y axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; - - /** the List of tick label position in pixels */ - private List<Integer> tickLocations = new LinkedList<Integer>();; - - /** the List of tick label values */ - private List<String> tickLabels = new LinkedList<String>(); - - private final Direction axisDirection; - - private final int workingSpace; - - private final BigDecimal minValue; - - private final BigDecimal maxValue; - - private final StyleManager styleManager; +public class LogarithmicAxisTickCalculator extends AxisTickCalculator { /** * Constructor @@ -69,43 +45,7 @@ public class LogarithmicAxisTickCalculator implements AxisTickCalculator { */ public LogarithmicAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { - this.axisDirection = axisDirection; - this.workingSpace = workingSpace; - this.minValue = minValue; - this.maxValue = maxValue; - this.styleManager = styleManager; - - calculate(); - } - - private void calculate() { - - // a check if all axis data are the exact same values - if (minValue == maxValue) { - tickLabels.add(styleManager.getDecimalFormatter().formatNumber(maxValue)); - tickLocations.add((int) (workingSpace / 2.0)); - return; - } - - // tick space - a percentage of the working space available for ticks, i.e. 95% - int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space - System.out.println("tickSpace= " + tickSpace); - - // where the tick should begin in the working space in pixels - int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); - - BigDecimal gridStep = getGridStepForDecimal(tickSpace); - - BigDecimal firstPosition = getFirstPosition(minValue, gridStep); - - // generate all tickLabels and tickLocations from the first to last position - for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { - - tickLabels.add(styleManager.getDecimalFormatter().formatNumber(tickPosition)); - // here we convert tickPosition finally to plot space, i.e. pixels - int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); - tickLocations.add(tickLabelPosition); - } + super(axisDirection, workingSpace, minValue, maxValue, styleManager); } /** @@ -114,7 +54,8 @@ public class LogarithmicAxisTickCalculator implements AxisTickCalculator { * @param tickSpace in plot space * @return */ - private BigDecimal getGridStepForDecimal(int tickSpace) { + @Override + public BigDecimal getGridStep(int tickSpace) { // the span of the data double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space @@ -182,7 +123,8 @@ public class LogarithmicAxisTickCalculator implements AxisTickCalculator { return value; } - private BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { + @Override + public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { BigDecimal firstPosition; if (min.remainder(gridStep).doubleValue() <= 0.0) { @@ -194,15 +136,8 @@ public class LogarithmicAxisTickCalculator implements AxisTickCalculator { } @Override - public List<Integer> getTickLocations() { + public AxisType getAxisType() { - return tickLocations; + return AxisType.Number; } - - @Override - public List<String> getTickLabels() { - - return tickLabels; - } - } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java similarity index 59% rename from xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalAxisTickCalculator.java rename to xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java index f22f06ed..936eba15 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java @@ -22,11 +22,9 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator; import java.math.BigDecimal; -import java.util.LinkedList; -import java.util.List; +import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; -import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; /** @@ -34,29 +32,7 @@ import com.xeiam.xchart.style.StyleManager; * * @author timmolter */ -public class DecimalAxisTickCalculator implements AxisTickCalculator { - - /** the default tick mark step hint for x axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_X = 74; - - /** the default tick mark step hint for y axis */ - private static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; - - /** the List of tick label position in pixels */ - private List<Integer> tickLocations = new LinkedList<Integer>();; - - /** the List of tick label values */ - private List<String> tickLabels = new LinkedList<String>(); - - private final Direction axisDirection; - - private final int workingSpace; - - private final BigDecimal minValue; - - private final BigDecimal maxValue; - - private final StyleManager styleManager; +public class NumberAxisTickCalculator extends AxisTickCalculator { /** * Constructor @@ -67,45 +43,9 @@ public class DecimalAxisTickCalculator implements AxisTickCalculator { * @param maxValue * @param styleManager */ - public DecimalAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { + public NumberAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { - this.axisDirection = axisDirection; - this.workingSpace = workingSpace; - this.minValue = minValue; - this.maxValue = maxValue; - this.styleManager = styleManager; - - calculate(); - } - - private void calculate() { - - // a check if all axis data are the exact same values - if (minValue == maxValue) { - tickLabels.add(styleManager.getDecimalFormatter().formatNumber(maxValue)); - tickLocations.add((int) (workingSpace / 2.0)); - return; - } - - // tick space - a percentage of the working space available for ticks, i.e. 95% - int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space - System.out.println("tickSpace= " + tickSpace); - - // where the tick should begin in the working space in pixels - int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); - - BigDecimal gridStep = getGridStepForDecimal(tickSpace); - - BigDecimal firstPosition = getFirstPosition(minValue, gridStep); - - // generate all tickLabels and tickLocations from the first to last position - for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { - - tickLabels.add(styleManager.getDecimalFormatter().formatNumber(tickPosition)); - // here we convert tickPosition finally to plot space, i.e. pixels - int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); - tickLocations.add(tickLabelPosition); - } + super(axisDirection, workingSpace, minValue, maxValue, styleManager); } /** @@ -114,7 +54,8 @@ public class DecimalAxisTickCalculator implements AxisTickCalculator { * @param tickSpace in plot space * @return */ - private BigDecimal getGridStepForDecimal(int tickSpace) { + @Override + public BigDecimal getGridStep(int tickSpace) { // the span of the data double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space @@ -182,7 +123,8 @@ public class DecimalAxisTickCalculator implements AxisTickCalculator { return value; } - private BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { + @Override + public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { BigDecimal firstPosition; if (min.remainder(gridStep).doubleValue() <= 0.0) { @@ -194,15 +136,9 @@ public class DecimalAxisTickCalculator implements AxisTickCalculator { } @Override - public List<Integer> getTickLocations() { - - return tickLocations; - } - - @Override - public List<String> getTickLabels() { + public AxisType getAxisType() { - return tickLabels; + return AxisType.Number; } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalFormatter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberFormatter.java similarity index 98% rename from xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalFormatter.java rename to xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberFormatter.java index 27fb6d48..594fa777 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DecimalFormatter.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberFormatter.java @@ -29,7 +29,7 @@ import java.util.Locale; /** * @author timmolter */ -public class DecimalFormatter { +public class NumberFormatter { private String normalDecimalPattern; private String scientificDecimalPattern; @@ -39,7 +39,7 @@ public class DecimalFormatter { /** * Constructor */ - public DecimalFormatter() { + public NumberFormatter() { normalDecimalPattern = "#.####"; scientificDecimalPattern = "0.##E0"; diff --git a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java index 37ad7c29..244f8344 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java @@ -26,7 +26,7 @@ import java.awt.Font; import java.awt.Stroke; import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateFormatter; -import com.xeiam.xchart.internal.chartpart.axistickcalculator.DecimalFormatter; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberFormatter; import com.xeiam.xchart.style.theme.Theme; import com.xeiam.xchart.style.theme.XChartTheme; @@ -98,7 +98,7 @@ public class StyleManager { // Formatting //////////////////////////////// - private DecimalFormatter decimalFormatter; + private NumberFormatter decimalFormatter; private DateFormatter dateFormatter; /** @@ -160,7 +160,7 @@ public class StyleManager { errorBarsColor = theme.getErrorBarsColor(); // Formatting //////////////////////////////// - decimalFormatter = new DecimalFormatter(); + decimalFormatter = new NumberFormatter(); dateFormatter = new DateFormatter(); } @@ -755,7 +755,7 @@ public class StyleManager { // Formatting //////////////////////////////// - public DecimalFormatter getDecimalFormatter() { + public NumberFormatter getDecimalFormatter() { return decimalFormatter; } diff --git a/xchart/src/test/java/com/xeiam/xchart/unit/DecimalGridStepTest.java b/xchart/src/test/java/com/xeiam/xchart/unit/DateAxisTickCalculatorTest.java similarity index 56% rename from xchart/src/test/java/com/xeiam/xchart/unit/DecimalGridStepTest.java rename to xchart/src/test/java/com/xeiam/xchart/unit/DateAxisTickCalculatorTest.java index c85b834b..ae524862 100644 --- a/xchart/src/test/java/com/xeiam/xchart/unit/DecimalGridStepTest.java +++ b/xchart/src/test/java/com/xeiam/xchart/unit/DateAxisTickCalculatorTest.java @@ -21,22 +21,34 @@ */ package com.xeiam.xchart.unit; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + import org.junit.Test; +import com.xeiam.xchart.internal.chartpart.Axis.Direction; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator; +import com.xeiam.xchart.style.StyleManager; + /** * @author timmolter */ -public class DecimalGridStepTest { +public class DateAxisTickCalculatorTest { @Test public void testDateOneMinuteTimespan() { - // DecimalGridStep decimalGridStep = new DecimalGridStep(); - // BigDecimal gridStep = decimalGridStep.getGridStepForDecimal(Direction.X, 30, 600); - // System.out.println("gridStep= " + gridStep); - // BigDecimal first = decimalGridStep.getFirstPosition(new BigDecimal(-15), gridStep); - // System.out.println("first= " + first); + DateAxisTickCalculator decimalAxisTickCalculator = new DateAxisTickCalculator(Direction.X, 600, new BigDecimal(1361110661000L), new BigDecimal(1361110721000L), new StyleManager()); - } + List<String> tickLabels = decimalAxisTickCalculator.getTickLabels(); + System.out.println(Arrays.toString(tickLabels.toArray())); + // assertThat(tickLabels.size(), equalTo(7)); + // assertThat(tickLabels.get(0), equalTo("-15")); + // List<Integer> tickLocations = decimalAxisTickCalculator.getTickLocations(); + // System.out.println(Arrays.toString(tickLocations.toArray())); + // assertThat(tickLocations.size(), equalTo(7)); + // assertThat(tickLocations.get(0), equalTo(15)); + } } diff --git a/xchart/src/test/java/com/xeiam/xchart/unit/DecimalAxisTickCalculatorTest.java b/xchart/src/test/java/com/xeiam/xchart/unit/DecimalAxisTickCalculatorTest.java new file mode 100644 index 00000000..e9e91b38 --- /dev/null +++ b/xchart/src/test/java/com/xeiam/xchart/unit/DecimalAxisTickCalculatorTest.java @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2013 Xeiam LLC http://xeiam.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.xeiam.xchart.unit; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +import com.xeiam.xchart.internal.chartpart.Axis.Direction; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator; +import com.xeiam.xchart.style.StyleManager; + +/** + * @author timmolter + */ +public class DecimalAxisTickCalculatorTest { + + @Test + public void testDateOneMinuteTimespan() { + + NumberAxisTickCalculator decimalAxisTickCalculator = new NumberAxisTickCalculator(Direction.X, 600, new BigDecimal(-15), new BigDecimal(15), new StyleManager()); + + List<String> tickLabels = decimalAxisTickCalculator.getTickLabels(); + System.out.println(Arrays.toString(tickLabels.toArray())); + assertThat(tickLabels.size(), equalTo(7)); + assertThat(tickLabels.get(0), equalTo("-15")); + + List<Integer> tickLocations = decimalAxisTickCalculator.getTickLocations(); + System.out.println(Arrays.toString(tickLocations.toArray())); + assertThat(tickLocations.size(), equalTo(7)); + assertThat(tickLocations.get(0), equalTo(15)); + } +} diff --git a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java index 61321f15..ac59498f 100644 --- a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java +++ b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java @@ -31,7 +31,7 @@ import java.util.TimeZone; import org.junit.Test; import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateFormatter; -import com.xeiam.xchart.internal.chartpart.axistickcalculator.DecimalFormatter; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberFormatter; /** * @author timmolter @@ -43,7 +43,7 @@ public class ValueFormatterTest { @Test public void testNumberFormatting() { - DecimalFormatter axisTickLabelFormatter = new DecimalFormatter(); + NumberFormatter axisTickLabelFormatter = new NumberFormatter(); // big axisTickLabelFormatter.setLocale(locale); -- GitLab