package com.onaro.util.chart; import com.onaro.commons.util.MapOfLists; import ilog.views.chart.data.IlvAbstractDataSet; import ilog.views.chart.data.IlvAbstractDataSource; import ilog.views.chart.data.IlvDataSet; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Will show a bar for each KEY. the bar will count the OBJ, and will display differetn colors based on the CRITERIA */ public abstract class BarDataSource extends IlvAbstractDataSource { private static final long serialVersionUID = 1L; private List datas = Collections.emptyList(); public void setData(MapOfLists map) { Set types = new HashSet(); //reset the data holder datas = new ArrayList(map.size()); //update the data for (Map.Entry> entry : map.entrySet()) { KEY key = entry.getKey(); MapOfLists mapedObjs = new MapOfLists(); for (OBJ obj : entry.getValue()) { CRITERIA criteria = extractCeriteria(obj); mapedObjs.add(criteria, obj); types.add(criteria); } datas.add(new Data(key, mapedObjs)); } if(datas.size() < 3){ //buffer with empty bars datas.add(0,getEmptyData()); datas.add(getEmptyData()); } IlvDataSet[] dataSets = new IlvDataSet[types.size()]; int i = 0; for (CRITERIA type : types) { dataSets[i] = new BarDataSet(type); i++; } initDataSets(dataSets); } protected abstract String getCriteriaName(CRITERIA criteria); protected abstract CRITERIA extractCeriteria(OBJ obj); protected abstract String getKeyName(KEY key); protected abstract Data getEmptyData(); public class BarDataSet extends IlvAbstractDataSet { private static final long serialVersionUID = 1L; private CRITERIA type; public BarDataSet(CRITERIA type) { this.type = type; setName(getCriteriaName(type)); } public int getDataCount() { return datas.size(); } public double getXData(int i) { return i; } public String getDataLabel(int i) { return getKeyName(getKey(i)); } public KEY getKey(int i) { return datas.get(i).getKey(); } public double getYData(int i) { Collection objs = datas.get(i).getObjs().get(type); return objs != null ? objs.size() : 0; } } protected class Data { private KEY key; private MapOfLists objs; public Data(KEY key, MapOfLists objs) { this.key = key; this.objs = objs; } public KEY getKey() { return key; } public MapOfLists getObjs() { return objs; } } }