View Javadoc
1   package org.oxerr.okcoin.rest.dto.deserializer;
2   
3   import java.io.IOException;
4   import java.math.BigDecimal;
5   import java.time.Instant;
6   import java.util.ArrayList;
7   import java.util.List;
8   
9   import org.oxerr.okcoin.rest.dto.Candlestick;
10  import org.oxerr.okcoin.rest.dto.CandlestickChart;
11  
12  import com.fasterxml.jackson.core.JsonParseException;
13  import com.fasterxml.jackson.core.JsonParser;
14  import com.fasterxml.jackson.core.JsonProcessingException;
15  import com.fasterxml.jackson.core.JsonToken;
16  import com.fasterxml.jackson.databind.DeserializationContext;
17  import com.fasterxml.jackson.databind.JsonDeserializer;
18  
19  /**
20   * Deserializer for {@link CandlestickChart}.
21   */
22  public class CandlestickChartDeserializer extends JsonDeserializer<CandlestickChart> {
23  
24  	/**
25  	 * {@inheritDoc}
26  	 */
27  	@Override
28  	public CandlestickChart deserialize(JsonParser p,
29  			DeserializationContext ctxt) throws IOException,
30  			JsonProcessingException {
31  		List<Candlestick> candlesticks = new ArrayList<>();
32  
33  		while (p.nextToken() == JsonToken.START_ARRAY) {
34  			Instant timestamp = Instant.ofEpochMilli(p.nextLongValue(0));
35  			BigDecimal open = nextBigDecimal(p);
36  			BigDecimal high = nextBigDecimal(p);
37  			BigDecimal low = nextBigDecimal(p);
38  			BigDecimal close = nextBigDecimal(p);
39  			BigDecimal volume = nextBigDecimal(p);
40  			p.nextToken(); // END_ARRAY
41  
42  			Candlestick candlestick = new Candlestick(timestamp, open, high, low, close, volume);
43  			candlesticks.add(candlestick);
44  		}
45  
46  		return new CandlestickChart(candlesticks.toArray(new Candlestick[0]));
47  	}
48  
49  	private BigDecimal nextBigDecimal(JsonParser p) throws IOException,
50  			JsonParseException {
51  		return p.nextToken().isScalarValue() ? new BigDecimal(p.getText()) : null;
52  	}
53  
54  }