package com.github.wuxudong.rncharts.data;
import android.graphics.Paint;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableType;
import com.github.mikephil.charting.data.CandleData;
import com.github.mikephil.charting.data.CandleDataSet;
import com.github.mikephil.charting.data.CandleEntry;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.wuxudong.rncharts.utils.BridgeUtils;
import com.github.wuxudong.rncharts.utils.ChartDataSetConfigUtils;
import com.github.wuxudong.rncharts.utils.ConversionUtil;
import java.util.ArrayList;
/**
* Created by xudong on 02/03/2017.
*/
public class CandleDataExtract extends DataExtract<CandleData, CandleEntry> {
@Override
CandleData createData() {
return new CandleData();
}
@Override
IDataSet<CandleEntry> createDataSet(ArrayList<CandleEntry> entries, String label) {
return new CandleDataSet(entries, label);
}
@Override
void dataSetConfig(IDataSet<CandleEntry> dataSet, ReadableMap config) {
CandleDataSet candleDataSet = (CandleDataSet) dataSet;
ChartDataSetConfigUtils.commonConfig(candleDataSet, config);
ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(candleDataSet, config);
ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(candleDataSet, config);
// CandleDataSet only config
if (BridgeUtils.validate(config, ReadableType.Number, "barSpace")) {
candleDataSet.setBarSpace((float) config.getDouble("barSpace"));
}
if (BridgeUtils.validate(config, ReadableType.Number, "shadowWidth")) {
candleDataSet.setShadowWidth((float) config.getDouble("shadowWidth"));
}
if (BridgeUtils.validate(config, ReadableType.Number, "shadowColor")) {
candleDataSet.setShadowColor(config.getInt("shadowColor"));
}
if (BridgeUtils.validate(config, ReadableType.Boolean, "shadowColorSameAsCandle")) {
candleDataSet.setShadowColorSameAsCandle(config.getBoolean("shadowColorSameAsCandle"));
}
if (BridgeUtils.validate(config, ReadableType.Number, "neutralColor")) {
candleDataSet.setNeutralColor(config.getInt("neutralColor"));
}
if (BridgeUtils.validate(config, ReadableType.Number, "decreasingColor")) {
candleDataSet.setDecreasingColor(config.getInt("decreasingColor"));
}
if (BridgeUtils.validate(config, ReadableType.String, "decreasingPaintStyle")) {
candleDataSet.setDecreasingPaintStyle(Paint.Style.valueOf(config.getString("decreasingPaintStyle").toUpperCase()));
}
if (BridgeUtils.validate(config, ReadableType.Number, "increasingColor")) {
candleDataSet.setIncreasingColor(config.getInt("increasingColor"));
}
if (BridgeUtils.validate(config, ReadableType.String, "increasingPaintStyle")) {
candleDataSet.setIncreasingPaintStyle(Paint.Style.valueOf(config.getString("increasingPaintStyle").toUpperCase()));
}
}
@Override
CandleEntry createEntry(ReadableArray values, int index) {
if (!ReadableType.Map.equals(values.getType(index))) {
throw new IllegalArgumentException();
}
ReadableMap map = values.getMap(index);
float x = index;
if (map.hasKey("x")) {
x = (float) map.getDouble("x");
}
if (
!BridgeUtils.validate(map, ReadableType.Number, "shadowH") ||
!BridgeUtils.validate(map, ReadableType.Number, "shadowL") ||
!BridgeUtils.validate(map, ReadableType.Number, "open") ||
!BridgeUtils.validate(map, ReadableType.Number, "close")) {
throw new IllegalArgumentException("CandleStick data must contain: shadowH, shadowL, open and close values");
}
float shadowH = (float) map.getDouble("shadowH");
float shadowL = (float) map.getDouble("shadowL");
float open = (float) map.getDouble("open");
float close = (float) map.getDouble("close");
CandleEntry candleEntry = new CandleEntry(x, shadowH, shadowL, open, close, ConversionUtil.toMap(map));
return candleEntry;
}
}