package com.github.wuxudong.rncharts.data; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; import com.github.mikephil.charting.data.BarData; import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; 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 BarDataExtract extends DataExtract<BarData, BarEntry> { @Override BarData createData() { return new BarData(); } @Override IDataSet<BarEntry> createDataSet(ArrayList<BarEntry> entries, String label) { return new BarDataSet(entries, label); } @Override BarEntry createEntry(ReadableArray values, int index) { BarEntry entry; float x = index; if (ReadableType.Map.equals(values.getType(index))) { ReadableMap map = values.getMap(index); if (map.hasKey("x")) { x = (float) map.getDouble("x"); } if (ReadableType.Array.equals(map.getType("y"))) { entry = new BarEntry(x, BridgeUtils.convertToFloatArray(map.getArray("y"))); } else if (ReadableType.Number.equals(map.getType("y"))) { entry = new BarEntry(x, (float) map.getDouble("y")); } else { throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index)); } entry.setData(ConversionUtil.toMap(map)); } else if (ReadableType.Array.equals(values.getType(index))) { entry = new BarEntry(x, BridgeUtils.convertToFloatArray(values.getArray(index))); } else if (ReadableType.Number.equals(values.getType(index))) { entry = new BarEntry(x, (float) values.getDouble(index)); } else { throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index)); } return entry; } @Override void dataSetConfig(IDataSet<BarEntry> dataSet, ReadableMap config) { BarDataSet barDataSet = (BarDataSet) dataSet; ChartDataSetConfigUtils.commonConfig(barDataSet, config); ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(barDataSet, config); if (BridgeUtils.validate(config, ReadableType.Number, "barShadowColor")) { barDataSet.setBarShadowColor(config.getInt("barShadowColor")); } if (BridgeUtils.validate(config, ReadableType.Number, "highlightAlpha")) { barDataSet.setHighLightAlpha(config.getInt("highlightAlpha")); } if (BridgeUtils.validate(config, ReadableType.Array, "stackLabels")) { barDataSet.setStackLabels(BridgeUtils.convertToStringArray(config.getArray("stackLabels"))); } } @Override void dataConfig(BarData data, ReadableMap config) { super.dataConfig(data, config); if (BridgeUtils.validate(config, ReadableType.Number, "barWidth")) { data.setBarWidth((float) config.getDouble("barWidth")); } if (BridgeUtils.validate(config, ReadableType.Map, "group")) { ReadableMap propMap = config.getMap("group"); if (BridgeUtils.validate(propMap, ReadableType.Number, "fromX") && BridgeUtils.validate(propMap, ReadableType.Number, "groupSpace") && BridgeUtils.validate(propMap, ReadableType.Number, "barSpace") ) { float fromX = (float) propMap.getDouble("fromX"); float groupSpace = (float) propMap.getDouble("groupSpace"); float barSpace = (float) propMap.getDouble("barSpace"); data.groupBars(fromX, groupSpace, barSpace); } } } }