From 2ffa17c633f5c6f105d5862236cc97fdd218629c Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 22 Oct 2024 17:38:11 -0400 Subject: [PATCH] rrd4j: Merge in upstream changes part 3 thru 8716ead 2024-08-30 --- .../src/org/rrd4j/core/RrdBackendFactory.java | 2 +- .../jrobin/java/src/org/rrd4j/core/RrdDb.java | 2 +- .../java/src/org/rrd4j/core/XmlWriter.java | 6 +- .../java/src/org/rrd4j/data/Source.java | 4 +- .../java/src/org/rrd4j/graph/RrdGraphDef.java | 60 ++++++++++++++++++- .../java/src/org/rrd4j/graph/TimeAxis.java | 58 +++++++++--------- .../src/org/rrd4j/graph/TimeAxisSetting.java | 42 +++++++------ .../java/src/org/rrd4j/graph/ValueAxis.java | 8 +-- .../org/rrd4j/graph/ValueAxisLogarithmic.java | 6 +- .../src/org/rrd4j/graph/ValueAxisMrtg.java | 6 +- .../java/src/org/rrd4j/graph/ValueScaler.java | 20 ++----- 11 files changed, 138 insertions(+), 76 deletions(-) diff --git a/apps/jrobin/java/src/org/rrd4j/core/RrdBackendFactory.java b/apps/jrobin/java/src/org/rrd4j/core/RrdBackendFactory.java index 75491729b..097c9a3a3 100644 --- a/apps/jrobin/java/src/org/rrd4j/core/RrdBackendFactory.java +++ b/apps/jrobin/java/src/org/rrd4j/core/RrdBackendFactory.java @@ -214,7 +214,7 @@ public abstract class RrdBackendFactory implements Closeable { /** * Return the current active factories as a stream. - * @return + * @return the Stream * @since 3.7 */ public static synchronized Stream getActiveFactories() { diff --git a/apps/jrobin/java/src/org/rrd4j/core/RrdDb.java b/apps/jrobin/java/src/org/rrd4j/core/RrdDb.java index bff9da463..e4e9c5633 100644 --- a/apps/jrobin/java/src/org/rrd4j/core/RrdDb.java +++ b/apps/jrobin/java/src/org/rrd4j/core/RrdDb.java @@ -212,7 +212,7 @@ public class RrdDb implements RrdUpdater, Closeable { /** * Internal method used to memorize the pool, without generating a loop * @param pool - * @return + * @return the Builder */ Builder setPoolInternal(RrdDbPool pool) { this.pool = pool; diff --git a/apps/jrobin/java/src/org/rrd4j/core/XmlWriter.java b/apps/jrobin/java/src/org/rrd4j/core/XmlWriter.java index 605dc8025..abe59775f 100644 --- a/apps/jrobin/java/src/org/rrd4j/core/XmlWriter.java +++ b/apps/jrobin/java/src/org/rrd4j/core/XmlWriter.java @@ -77,7 +77,7 @@ public class XmlWriter implements AutoCloseable { /** * Return a new {@link XmlWriter} that will format time stamp as ISO 8601 with this explicit time zone {@link ZoneId} * @param zid - * @return + * @return the XmlWriter */ public XmlWriter withTimeZone(ZoneId zid) { if (indent.length() != 0 || !openTags.isEmpty()) { @@ -90,7 +90,7 @@ public class XmlWriter implements AutoCloseable { /** * Return a new {@link XmlWriter} that will format time stamp using this {@link ZoneId} * @param doubleFormatter - * @return + * @return the XmlWriter */ public XmlWriter withDoubleFormatter(DoubleFormater doubleFormatter) { if (indent.length() != 0 || !openTags.isEmpty()) { @@ -262,7 +262,7 @@ public class XmlWriter implements AutoCloseable { * Format a timestamp using the configured {@link DateTimeFormatter} * * @param timestamp - * @return + * @return the formatted timestamp */ public String formatTimestamp(long timestamp) { return timeFormatter.format(Instant.ofEpochSecond(timestamp)); diff --git a/apps/jrobin/java/src/org/rrd4j/data/Source.java b/apps/jrobin/java/src/org/rrd4j/data/Source.java index cfa5050d5..179298002 100644 --- a/apps/jrobin/java/src/org/rrd4j/data/Source.java +++ b/apps/jrobin/java/src/org/rrd4j/data/Source.java @@ -33,7 +33,7 @@ abstract class Source { /** * @param tStart * @param tEnd - * @return + * @return the Aggregates * @deprecated This method is deprecated. Uses instance of {@link org.rrd4j.data.Variable}, used with {@link org.rrd4j.data.DataProcessor#addDatasource(String, String, Variable)} */ @Deprecated @@ -46,7 +46,7 @@ abstract class Source { * @param tStart * @param tEnd * @param percentile - * @return + * @return the percentile * @deprecated This method is deprecated. Uses instance of {@link org.rrd4j.data.Variable.PERCENTILE}, used with {@link org.rrd4j.data.DataProcessor#addDatasource(String, String, Variable)} */ @Deprecated diff --git a/apps/jrobin/java/src/org/rrd4j/graph/RrdGraphDef.java b/apps/jrobin/java/src/org/rrd4j/graph/RrdGraphDef.java index 298f36b44..424a3a51e 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/RrdGraphDef.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/RrdGraphDef.java @@ -15,7 +15,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.TimeZone; +import java.util.function.Function; import javax.imageio.ImageIO; @@ -108,7 +110,8 @@ public class RrdGraphDef implements RrdGraphConstants, DataHolder { String filename = RrdGraphConstants.IN_MEMORY_IMAGE; // ok long startTime, endTime; // ok TimeAxisSetting timeAxisSetting = null; // ok - TimeLabelFormat timeLabelFormat = null; // ok + TimeLabelFormat timeLabelFormat = null; + Function> formatProvider = s -> Optional.empty(); ValueAxisSetting valueAxisSetting = null; // ok boolean altYGrid = false; // ok boolean noMinorGrid = false; // ok @@ -396,6 +399,54 @@ public class RrdGraphDef implements RrdGraphConstants, DataHolder { timeLabelFormat = format; } + /** + *

This allows to keep the default major and minor grid unit, but with changing only the label formatting, + * that will be formatted differently according to {@link TimeUnit} chosen for the time axis.

+ *

If the returned {@link Optional} is empty, the default formatting will be kept

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Default formatting
{@link TimeUnit}Default pattern
MINUTEHH:mm
HOURHH:mm
DAYEEE dd
WEEK'Week 'w
MONTHMMM
YEARyy
+ * + * + * @param formatProvider An {@link Optional} holding the {@link TimeLabelFormat} to use or empy to keep the default. + * @since 3.10 + */ + public void setTimeLabelFormatter(Function> formatProvider) { + this.formatProvider = formatProvider; + } + /** * Sets vertical axis grid and labels. Makes vertical grid lines appear * at gridStep interval. Every labelFactor*gridStep, a major grid line is printed, @@ -1939,4 +1990,11 @@ public class RrdGraphDef implements RrdGraphConstants, DataHolder { return this.step; } + /** + * @since 3.10 + */ + boolean drawTicks() { + return tickStroke != null && ((! (tickStroke instanceof BasicStroke)) || ((BasicStroke)tickStroke).getLineWidth() > 0); + } + } diff --git a/apps/jrobin/java/src/org/rrd4j/graph/TimeAxis.java b/apps/jrobin/java/src/org/rrd4j/graph/TimeAxis.java index 3e5692f28..89635519b 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/TimeAxis.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/TimeAxis.java @@ -8,21 +8,20 @@ import java.util.Date; class TimeAxis extends Axis { private static final TimeAxisSetting[] tickSettings = { - new TimeAxisSetting(0, SECOND, 30, MINUTE, 5, MINUTE, 5, 0, HH_MM), - new TimeAxisSetting(2, MINUTE, 1, MINUTE, 5, MINUTE, 5, 0, HH_MM), - new TimeAxisSetting(5, MINUTE, 2, MINUTE, 10, MINUTE, 10, 0, HH_MM), - new TimeAxisSetting(10, MINUTE, 5, MINUTE, 20, MINUTE, 20, 0, HH_MM), - new TimeAxisSetting(30, MINUTE, 10, HOUR, 1, HOUR, 1, 0, HH_MM), - new TimeAxisSetting(60, MINUTE, 30, HOUR, 2, HOUR, 2, 0, HH_MM), - new TimeAxisSetting(180, HOUR, 1, HOUR, 6, HOUR, 6, 0, HH_MM), - new TimeAxisSetting(600, HOUR, 6, DAY, 1, DAY, 1, 24 * 3600, "EEE dd"), - new TimeAxisSetting(1800, HOUR, 12, DAY, 1, DAY, 2, 24 * 3600, "EEE dd"), - new TimeAxisSetting(3600, DAY, 1, WEEK, 1, WEEK, 1, 7 * 24 * 3600, "'Week 'w"), - new TimeAxisSetting(3 * 3600L, WEEK, 1, MONTH, 1, WEEK, 2, 7 * 24 * 3600, "'Week 'w"), - new TimeAxisSetting(6 * 3600L, MONTH, 1, MONTH, 1, MONTH, 1, 30 * 24 * 3600, "MMM"), - new TimeAxisSetting(48 * 3600L, MONTH, 1, MONTH, 3, MONTH, 3, 30 * 24 * 3600, "MMM"), - new TimeAxisSetting(10 * 24 * 3600L, YEAR, 1, YEAR, 1, YEAR, 1, 365 * 24 * 3600, "yy"), - new TimeAxisSetting(-1, MONTH, 0, MONTH, 0, MONTH, 0, 0, "") + new TimeAxisSetting(0, TimeUnit.SECOND, 30, TimeUnit.MINUTE, 5, TimeUnit.MINUTE, 5, 0), + new TimeAxisSetting(2, TimeUnit.MINUTE, 1, TimeUnit.MINUTE, 5, TimeUnit.MINUTE, 5, 0), + new TimeAxisSetting(5, TimeUnit.MINUTE, 2, TimeUnit.MINUTE, 10, TimeUnit.MINUTE, 10, 0), + new TimeAxisSetting(10, TimeUnit.MINUTE, 5, TimeUnit.MINUTE, 20, TimeUnit.MINUTE, 20, 0), + new TimeAxisSetting(30, TimeUnit.MINUTE, 10, TimeUnit.HOUR, 1, TimeUnit.HOUR, 1, 0), + new TimeAxisSetting(60, TimeUnit.MINUTE, 30, TimeUnit.HOUR, 2, TimeUnit.HOUR, 2, 0), + new TimeAxisSetting(180, TimeUnit.HOUR, 1, TimeUnit.HOUR, 6, TimeUnit.HOUR, 6, 0), + new TimeAxisSetting(600, TimeUnit.HOUR, 6, TimeUnit.DAY, 1, TimeUnit.DAY, 1, 24 * 3600), + new TimeAxisSetting(1800, TimeUnit.HOUR, 12, TimeUnit.DAY, 1, TimeUnit.DAY, 2, 24 * 3600), + new TimeAxisSetting(3600, TimeUnit.DAY, 1, TimeUnit.WEEK, 1, TimeUnit.WEEK, 1, 7 * 24 * 3600), + new TimeAxisSetting(3 * 3600L, TimeUnit.WEEK, 1, TimeUnit.MONTH, 1, TimeUnit.WEEK, 2, 7 * 24 * 3600), + new TimeAxisSetting(6 * 3600L, TimeUnit.MONTH, 1, TimeUnit.MONTH, 1, TimeUnit.MONTH, 1, 30 * 24 * 3600), + new TimeAxisSetting(48 * 3600L, TimeUnit.MONTH, 1, TimeUnit.MONTH, 3, TimeUnit.MONTH, 3, 30 * 24 * 3600), + new TimeAxisSetting(10 * 24 * 3600L, TimeUnit.YEAR, 1, TimeUnit.YEAR, 1, TimeUnit.YEAR, 1, 365 * 24 * 3600), }; private final ImageParameters im; @@ -76,8 +75,6 @@ class TimeAxis extends Axis { private void drawMinor() { if (!gdef.noMinorGrid) { - // I2P skip ticks if zero width - boolean ticks = ((BasicStroke)gdef.tickStroke).getLineWidth() > 0; adjustStartingTime(tickSetting.minorUnit, tickSetting.minorUnitCount); Paint color = gdef.getColor(ElementsNames.grid); int y0 = im.yorigin, y1 = y0 - im.ysize; @@ -85,8 +82,10 @@ class TimeAxis extends Axis { if (status == 0) { long time = calendar.getTime().getTime() / 1000L; int x = mapper.xtr(time); - if (ticks) + // skip ticks if zero width + if (gdef.drawTicks()) { worker.drawLine(x, y0 - 1, x, y0 + 1, color, gdef.tickStroke); + } worker.drawLine(x, y0, x, y1, color, gdef.gridStroke); } findNextTime(tickSetting.minorUnit, tickSetting.minorUnitCount); @@ -95,8 +94,6 @@ class TimeAxis extends Axis { } private void drawMajor() { - // I2P skip ticks if zero width - boolean ticks = ((BasicStroke)gdef.tickStroke).getLineWidth() > 0; adjustStartingTime(tickSetting.majorUnit, tickSetting.majorUnitCount); Paint color = gdef.getColor(ElementsNames.mgrid); int y0 = im.yorigin, y1 = y0 - im.ysize; @@ -104,8 +101,10 @@ class TimeAxis extends Axis { if (status == 0) { long time = calendar.getTime().getTime() / 1000L; int x = mapper.xtr(time); - if (ticks) + // skip ticks if zero width + if (gdef.drawTicks()) { worker.drawLine(x, y0 - 2, x, y0 + 2, color, gdef.tickStroke); + } worker.drawLine(x, y0, x, y1, color, gdef.gridStroke); } findNextTime(tickSetting.majorUnit, tickSetting.majorUnitCount); @@ -131,7 +130,7 @@ class TimeAxis extends Axis { } } - private void findNextTime(int timeUnit, int timeUnitCount) { + private void findNextTime(TimeUnit timeUnit, int timeUnitCount) { switch (timeUnit) { case SECOND: calendar.add(Calendar.SECOND, timeUnitCount); @@ -162,7 +161,7 @@ class TimeAxis extends Axis { return (time < im.start) ? -1 : (time > im.end) ? +1 : 0; } - private void adjustStartingTime(int timeUnit, int timeUnitCount) { + private void adjustStartingTime(TimeUnit timeUnit, int timeUnitCount) { calendar.setTime(new Date(im.start * 1000L)); switch (timeUnit) { case SECOND: @@ -213,14 +212,19 @@ class TimeAxis extends Axis { private void chooseTickSettings() { if (gdef.timeAxisSetting != null) { tickSetting = new TimeAxisSetting(gdef.timeAxisSetting); - } - else { - for (int i = 0; tickSettings[i].secPerPix >= 0 && secPerPix > tickSettings[i].secPerPix; i++) { - tickSetting = tickSettings[i]; + } else { + for (TimeAxisSetting i: tickSettings) { + if (secPerPix < i.secPerPix) { + break; + } else { + tickSetting = i; + } } } if (gdef.timeLabelFormat != null) { tickSetting = tickSetting.withLabelFormat(gdef.timeLabelFormat); + } else { + gdef.formatProvider.apply(tickSetting.labelUnit).ifPresent(f -> tickSetting = tickSetting.withLabelFormat(f)); } } diff --git a/apps/jrobin/java/src/org/rrd4j/graph/TimeAxisSetting.java b/apps/jrobin/java/src/org/rrd4j/graph/TimeAxisSetting.java index 0fb1cc3f5..17132cf5b 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/TimeAxisSetting.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/TimeAxisSetting.java @@ -2,12 +2,17 @@ package org.rrd4j.graph; class TimeAxisSetting { final long secPerPix; - final int minorUnit, minorUnitCount, majorUnit, majorUnitCount; - final int labelUnit, labelUnitCount, labelSpan; + final TimeUnit majorUnit; + final int majorUnitCount; + final TimeUnit minorUnit; + final int minorUnitCount; + final TimeUnit labelUnit; + final int labelUnitCount; + final int labelSpan; final TimeLabelFormat format; - TimeAxisSetting(long secPerPix, int minorUnit, int minorUnitCount, int majorUnit, int majorUnitCount, - int labelUnit, int labelUnitCount, int labelSpan, TimeLabelFormat format) { + TimeAxisSetting(long secPerPix, TimeUnit minorUnit, int minorUnitCount, TimeUnit majorUnit, int majorUnitCount, + TimeUnit labelUnit, int labelUnitCount, int labelSpan, TimeLabelFormat format) { this.secPerPix = secPerPix; this.minorUnit = minorUnit; this.minorUnitCount = minorUnitCount; @@ -19,6 +24,19 @@ class TimeAxisSetting { this.format = format; } + TimeAxisSetting(long secPerPix, TimeUnit minorUnit, int minorUnitCount, TimeUnit majorUnit, int majorUnitCount, + TimeUnit labelUnit, int labelUnitCount, int labelSpan) { + this.secPerPix = secPerPix; + this.minorUnit = minorUnit; + this.minorUnitCount = minorUnitCount; + this.majorUnit = majorUnit; + this.majorUnitCount = majorUnitCount; + this.labelUnit = labelUnit; + this.labelUnitCount = labelUnitCount; + this.labelSpan = labelSpan; + this.format = new SimpleTimeLabelFormat(labelUnit.getLabel()); + } + TimeAxisSetting(TimeAxisSetting s) { this.secPerPix = s.secPerPix; this.minorUnit = s.minorUnit; @@ -33,20 +51,8 @@ class TimeAxisSetting { TimeAxisSetting(int minorUnit, int minorUnitCount, int majorUnit, int majorUnitCount, int labelUnit, int labelUnitCount, int labelSpan, TimeLabelFormat format) { - this(0, minorUnit, minorUnitCount, majorUnit, majorUnitCount, - labelUnit, labelUnitCount, labelSpan, format); - } - - TimeAxisSetting(long secPerPix, int minorUnit, int minorUnitCount, int majorUnit, int majorUnitCount, - int labelUnit, int labelUnitCount, int labelSpan, String format) { - this(secPerPix, minorUnit, minorUnitCount, majorUnit, majorUnitCount, - labelUnit, labelUnitCount, labelSpan, new SimpleTimeLabelFormat(format)); - } - - TimeAxisSetting(int minorUnit, int minorUnitCount, int majorUnit, int majorUnitCount, - int labelUnit, int labelUnitCount, int labelSpan, String format) { - this(0, minorUnit, minorUnitCount, majorUnit, majorUnitCount, - labelUnit, labelUnitCount, labelSpan, new SimpleTimeLabelFormat(format)); + this(0, TimeUnit.resolveUnit(minorUnit), minorUnitCount, TimeUnit.resolveUnit(majorUnit), majorUnitCount, + TimeUnit.resolveUnit(labelUnit), labelUnitCount, labelSpan, format); } TimeAxisSetting withLabelFormat(TimeLabelFormat f) { diff --git a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxis.java b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxis.java index 2dc2c238f..bb078a6a1 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxis.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxis.java @@ -133,8 +133,6 @@ class ValueAxis extends Axis { int egrid = (int) (im.maxval / gridstep + 1); double scaledstep = gridstep / im.magfact; boolean fractional = isFractional(scaledstep, labfact); - // I2P skip ticks if zero width - boolean ticks = ((BasicStroke)gdef.tickStroke).getLineWidth() > 0; for (int i = sgrid; i <= egrid; i++) { int y = mapper.ytr(gridstep * i); if (y >= im.yorigin - im.ysize && y <= im.yorigin) { @@ -166,14 +164,16 @@ class ValueAxis extends Axis { } int length = (int) (worker.getStringWidth(graph_label, font)); worker.drawString(graph_label, x0 - length - PADDING_VLABEL, y + labelOffset, font, fontColor); - if (ticks) { + // skip ticks if zero width + if (gdef.drawTicks()) { worker.drawLine(x0 - 2, y, x0 + 2, y, mGridColor, gdef.tickStroke); worker.drawLine(x1 - 2, y, x1 + 2, y, mGridColor, gdef.tickStroke); } worker.drawLine(x0, y, x1, y, mGridColor, gdef.gridStroke); } else if (!(gdef.noMinorGrid)) { - if (ticks) { + // skip ticks if zero width + if (gdef.drawTicks()) { worker.drawLine(x0 - 1, y, x0 + 1, y, gridColor, gdef.tickStroke); worker.drawLine(x1 - 1, y, x1 + 1, y, gridColor, gdef.tickStroke); } diff --git a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisLogarithmic.java b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisLogarithmic.java index 4ddcec98c..720252c94 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisLogarithmic.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisLogarithmic.java @@ -113,8 +113,10 @@ class ValueAxisLogarithmic extends Axis { worker.drawString(graphLabel, x0 - length - PADDING_VLABEL, y + labelOffset, font, fontColor); }; IntDoubleLineConsumer drawAxisLines = (y, v, p) -> { - worker.drawLine(x0 - 1, y, x0 + 1, y, p, gdef.tickStroke); - worker.drawLine(x1 - 1, y, x1 + 1, y, p, gdef.tickStroke); + if (gdef.drawTicks()) { + worker.drawLine(x0 - 1, y, x0 + 1, y, p, gdef.tickStroke); + worker.drawLine(x1 - 1, y, x1 + 1, y, p, gdef.tickStroke); + } worker.drawLine(x0, y, x1, y, p, gdef.gridStroke); }; diff --git a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisMrtg.java b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisMrtg.java index b774438e0..c8a2c5751 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisMrtg.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/ValueAxisMrtg.java @@ -62,8 +62,10 @@ class ValueAxisMrtg extends Axis { String graph_label = Util.sprintf(gdef.locale, labfmt, im.scaledstep / im.magfact * (i - im.quadrant)); int length = (int) (worker.getStringWidth(graph_label, font)); worker.drawString(graph_label, xLeft - length - PADDING_VLABEL, y + labelOffset, font, fontColor); - worker.drawLine(xLeft - 2, y, xLeft + 2, y, mGridColor, gdef.tickStroke); - worker.drawLine(xRight - 2, y, xRight + 2, y, mGridColor, gdef.tickStroke); + if (gdef.drawTicks()) { + worker.drawLine(xLeft - 2, y, xLeft + 2, y, mGridColor, gdef.tickStroke); + worker.drawLine(xRight - 2, y, xRight + 2, y, mGridColor, gdef.tickStroke); + } worker.drawLine(xLeft, y, xRight, y, mGridColor, gdef.gridStroke); } } diff --git a/apps/jrobin/java/src/org/rrd4j/graph/ValueScaler.java b/apps/jrobin/java/src/org/rrd4j/graph/ValueScaler.java index 3b69b48fb..fc1f08226 100644 --- a/apps/jrobin/java/src/org/rrd4j/graph/ValueScaler.java +++ b/apps/jrobin/java/src/org/rrd4j/graph/ValueScaler.java @@ -1,11 +1,6 @@ package org.rrd4j.graph; class ValueScaler { - static final String UNIT_UNKNOWN = "?"; - static final String[] UNIT_SYMBOLS = { - "a", "f", "p", "n", "ยต", "m", " ", "K", "M", "G", "T", "P", "E" - }; - static final int SYMB_CENTER = 6; private final double base; private double magfact = -1; // nothing scaled before, rescale @@ -48,16 +43,11 @@ class ValueScaler { sindex = (int) (Math.floor(Math.log(Math.abs(value)) / Math.log(base))); magfact = Math.pow(base, sindex); } - if (sindex <= SYMB_CENTER && sindex >= -SYMB_CENTER) { - unit = UNIT_SYMBOLS[sindex + SYMB_CENTER]; - // I2P show 0.xxx instead of xxx m - if (unit.equals("m")) { - unit = ""; - magfact *= 1000; - } - } - else { - unit = UNIT_UNKNOWN; + unit = String.valueOf(FindUnit.resolveSymbol(sindex)); + // I2P show 0.xxx instead of xxx m + if (unit.equals("m")) { + unit = ""; + magfact *= 1000; } return new Scaled(value / magfact, unit); }