| 1 | package pl.zankowski.iextrading4j.client.mapper; | |
| 2 | ||
| 3 | import com.fasterxml.jackson.core.JsonParser; | |
| 4 | import com.fasterxml.jackson.databind.DeserializationContext; | |
| 5 | import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer; | |
| 6 | ||
| 7 | import java.io.IOException; | |
| 8 | import java.math.BigDecimal; | |
| 9 | ||
| 10 | class HackyBigDecimalDeserializer extends StdScalarDeserializer<BigDecimal> { | |
| 11 | ||
| 12 | HackyBigDecimalDeserializer() { | |
| 13 | super(BigDecimal.class); | |
| 14 | } | |
| 15 | ||
| 16 | @Override | |
| 17 | public BigDecimal deserialize(final JsonParser parser, final DeserializationContext ctx) throws IOException { | |
| 18 | final String val = parser.getValueAsString(); | |
| 19 | ||
| 20 | // #HACK Sometimes instead of a null they return N/A in number field | |
| 21 | // #HACK In Daily List they return empty String if number is N/A | |
| 22 | // #HACK In Key Stats they return NaN for revenuePerEmployee | |
| 23 |
4
1. deserialize : negated conditional → KILLED 2. deserialize : negated conditional → KILLED 3. deserialize : negated conditional → KILLED 4. deserialize : negated conditional → KILLED |
if (val == null || "N/A".equalsIgnoreCase(val) || "NaN".equalsIgnoreCase(val) || val.isEmpty()) { |
| 24 | return null; | |
| 25 | } | |
| 26 | ||
| 27 | try { | |
| 28 |
1
1. deserialize : replaced return value with null for pl/zankowski/iextrading4j/client/mapper/HackyBigDecimalDeserializer::deserialize → KILLED |
return parser.getDecimalValue(); |
| 29 | } catch (IOException e) { | |
| 30 | // #HACK In Daily List they return numbers as a String | |
| 31 |
1
1. deserialize : replaced return value with null for pl/zankowski/iextrading4j/client/mapper/HackyBigDecimalDeserializer::deserialize → NO_COVERAGE |
return new BigDecimal(val); |
| 32 | } | |
| 33 | } | |
| 34 | ||
| 35 | } | |
Mutations | ||
| 23 |
1.1 2.2 3.3 4.4 |
|
| 28 |
1.1 |
|
| 31 |
1.1 |