/*
* Ext GWT - Ext for GWT
* Copyright(c) 2007-2009, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.charts.client.model;
import com.extjs.gxt.charts.client.model.charts.ChartConfig;
import com.extjs.gxt.charts.client.model.charts.PieChart;
import com.extjs.gxt.charts.client.model.charts.PieChart.Slice;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelStringProvider;
/**
* <code>DataProvider</code> implementation for pie charts.
*/
public class PieDataProvider extends DataProvider {
protected String valueProperty;
/**
* Creates a new pie data provider.
*
* @param valueProperty the property name which contains the value
*/
public PieDataProvider(String valueProperty) {
this.valueProperty = valueProperty;
}
public PieDataProvider(String valueProperty, String labelProperty) {
this.valueProperty = valueProperty;
this.labelProperty = labelProperty;
}
public PieDataProvider(String valueProperty, String labelProperty, String textProperty) {
this.valueProperty = valueProperty;
this.labelProperty = labelProperty;
this.textProperty = textProperty;
}
/**
* Returns the label property.
*
* @return the label property
*/
public String getLabelProperty() {
return labelProperty;
}
/**
* Returns the model label provider.
*
* @return the label provider
*/
public ModelStringProvider<ModelData> getLabelProvider() {
return labelProvider;
}
/**
* Returns the model text provider.
*
* @return the model text provider
*/
public ModelStringProvider<ModelData> getTextProvider() {
return textProvider;
}
/**
* Returns the value property.
*
* @return the value property
*/
public String getValueProperty() {
return valueProperty;
}
@Override
public void populateData(ChartConfig config) {
PieChart chart = (PieChart) config;
chart.getValues().clear();
for (ModelData m : store.getModels()) {
Object v = m.get(valueProperty);
Number n = v instanceof String ? Double.parseDouble((String) v) : (Number) v;
chart.addSlices(new Slice(n, getLabel(m, valueProperty), getText(m, valueProperty)));
}
}
/**
* Sets the label property. Works when models contains a property with the
* label value, an alternative is to use a label provider (
* {@link #setLabelProvider(ModelStringProvider)}.
*
* @param labelProperty the label property
*/
public void setLabelProperty(String labelProperty) {
this.labelProperty = labelProperty;
}
/**
* Sets the label provider.
*
* @param labelProvider the label provider
*/
public void setLabelProvider(ModelStringProvider<ModelData> labelProvider) {
this.labelProvider = labelProvider;
}
public void setTextProvider(ModelStringProvider<ModelData> textProvider) {
this.textProvider = textProvider;
}
public void setValueProperty(String valueProperty) {
this.valueProperty = valueProperty;
}
}