Skip to content

Commit 118de5c

Browse files
improve maybe number value to number converter
1 parent 9f38c48 commit 118de5c

2 files changed

Lines changed: 101 additions & 49 deletions

File tree

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/GraylogUtils.java

Lines changed: 91 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,101 @@ public static Double getDoubleFromJsonPath(String body, String path) {
3232
}
3333

3434
/**
35-
* Parse Big Decimal number to Double.
36-
* @param number Big Decimal number
37-
* @return Parsed Double value
38-
* @since 2.0.0
35+
* Convert maybe number value to Double.
36+
* @param value maybe number value
37+
* @return Converted Double value
38+
* @since 2.0.1
39+
*/
40+
public static Double valueToDouble(Object value) {
41+
if (value == null) {
42+
return null;
43+
}
44+
45+
if (value instanceof BigDecimal) {
46+
BigDecimal bigDecimalVal = (BigDecimal) value;
47+
48+
return bigDecimalVal.doubleValue();
49+
}
50+
51+
if (value instanceof Long) {
52+
Long longVal = (Long) value;
53+
54+
return longVal.doubleValue();
55+
}
56+
57+
if (value instanceof Float) {
58+
Float floatVal = (Float) value;
59+
60+
return floatVal.doubleValue();
61+
}
62+
63+
if (value instanceof String) {
64+
String stringVal = (String) value;
65+
66+
try {
67+
return Double.valueOf(stringVal);
68+
} catch (NumberFormatException nfe) {
69+
return Double.NaN;
70+
}
71+
}
72+
73+
try {
74+
return (Double) value;
75+
} catch (ClassCastException cce) {
76+
return Double.NaN;
77+
}
78+
}
79+
80+
/**
81+
* Convert maybe number value to Integer.
82+
* @param value maybe number value
83+
* @return Converted Integer value
84+
* @since 2.0.1
3985
*/
40-
public static Double parseBigDecimalToDouble(BigDecimal number) {
41-
if (number == null) {
86+
public static Integer valueToInteger(Object value) {
87+
if (value == null) {
4288
return null;
4389
}
4490

45-
return number.doubleValue();
91+
if (value instanceof BigDecimal) {
92+
BigDecimal bigDecimalVal = (BigDecimal) value;
93+
94+
return bigDecimalVal.intValue();
95+
}
96+
97+
if (value instanceof Long) {
98+
Long longVal = (Long) value;
99+
100+
return longVal.intValue();
101+
}
102+
103+
if (value instanceof Double) {
104+
Double doubleVal = (Double) value;
105+
106+
return doubleVal.intValue();
107+
}
108+
109+
if (value instanceof Float) {
110+
Float floatVal = (Float) value;
111+
112+
return floatVal.intValue();
113+
}
114+
115+
if (value instanceof String) {
116+
String stringVal = (String) value;
117+
118+
try {
119+
return Integer.valueOf(stringVal);
120+
} catch (NumberFormatException nfe) {
121+
return 0;
122+
}
123+
}
124+
125+
try {
126+
return (Integer) value;
127+
} catch (ClassCastException cce) {
128+
return 0;
129+
}
46130
}
47131

48132
/**

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/search/Search.java

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -441,51 +441,23 @@ private Map<String, Map<String, Map<String, Value>>> convertToValueMap(
441441
Statistics statistics = leafFieldValueMap.get(source).get(keyName.toString()).get(field).getStatistics();
442442

443443
if (type.equals(SeriesType.avg.toString())) {
444-
statistics.setAverage(
445-
valueMap.get("value") instanceof BigDecimal
446-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
447-
: (Double) valueMap.get("value")
448-
);
444+
statistics.setAverage(GraylogUtils.valueToDouble(valueMap.get("value")));
449445
} else if (type.equals(SeriesType.card.toString())) {
450-
statistics.setCardinality((Integer) valueMap.get("value"));
446+
statistics.setCardinality(GraylogUtils.valueToInteger(valueMap.get("value")));
451447
} else if (type.equals(SeriesType.count.toString())) {
452-
statistics.setCount((Integer) valueMap.get("value"));
448+
statistics.setCount(GraylogUtils.valueToInteger(valueMap.get("value")));
453449
} else if (type.equals(SeriesType.max.toString())) {
454-
statistics.setMax(
455-
valueMap.get("value") instanceof BigDecimal
456-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
457-
: (Double) valueMap.get("value")
458-
);
450+
statistics.setMax(GraylogUtils.valueToDouble(valueMap.get("value")));
459451
} else if (type.equals(SeriesType.min.toString())) {
460-
statistics.setMin(
461-
valueMap.get("value") instanceof BigDecimal
462-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
463-
: (Double) valueMap.get("value")
464-
);
452+
statistics.setMin(GraylogUtils.valueToDouble(valueMap.get("value")));
465453
} else if (type.equals(SeriesType.stddev.toString())) {
466-
statistics.setStdDeviation(
467-
valueMap.get("value") instanceof BigDecimal
468-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
469-
: (Double) valueMap.get("value")
470-
);
454+
statistics.setStdDeviation(GraylogUtils.valueToDouble(valueMap.get("value")));
471455
} else if (type.equals(SeriesType.sum.toString())) {
472-
statistics.setSum(
473-
valueMap.get("value") instanceof BigDecimal
474-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
475-
: (Double) valueMap.get("value")
476-
);
456+
statistics.setSum(GraylogUtils.valueToDouble(valueMap.get("value")));
477457
} else if (type.equals(SeriesType.sumofsquares.toString())) {
478-
statistics.setSum(
479-
valueMap.get("value") instanceof BigDecimal
480-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
481-
: (Double) valueMap.get("value")
482-
);
458+
statistics.setSum(GraylogUtils.valueToDouble(valueMap.get("value")));
483459
} else if (type.equals(SeriesType.variance.toString())) {
484-
statistics.setSum(
485-
valueMap.get("value") instanceof BigDecimal
486-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
487-
: (Double) valueMap.get("value")
488-
);
460+
statistics.setSum(GraylogUtils.valueToDouble(valueMap.get("value")));
489461
} else if (type.equals(SeriesType.percentile.toString())) {
490462
if (statistics.getPercentiles() == null) {
491463
statistics.setPercentiles(new ArrayList<>());
@@ -495,11 +467,7 @@ private Map<String, Map<String, Map<String, Value>>> convertToValueMap(
495467
statistics.setPercentileRanks(new ArrayList<>());
496468
}
497469

498-
statistics.getPercentiles().add(
499-
valueMap.get("value") instanceof BigDecimal
500-
? GraylogUtils.parseBigDecimalToDouble((BigDecimal) valueMap.get("value"))
501-
: (Double) valueMap.get("value")
502-
);
470+
statistics.getPercentiles().add(GraylogUtils.valueToDouble(valueMap.get("value")));
503471
statistics.getPercentileRanks().add(percentile);
504472
}
505473
}

0 commit comments

Comments
 (0)