package jm.org.data.area;
import static jm.org.data.area.AreaConstants.SEARCH_SUCCESS;
import static jm.org.data.area.AreaConstants.WORLD_SEARCH;
import java.util.Arrays;
import org.achartengine.GraphicalView;
import org.achartengine.chartdemo.demo.chart.AreaChart;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.AsyncTask;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class GetChartData extends AsyncTask<Void, Void, Boolean> {
public static final String TAG = GetChartData.class.getSimpleName();
private GraphicalView chart;
private LinearLayout layout;
private String indicator;
private String[] countryList;
private AreaApplication area;
private ProgressDialog dialog;
private Context mContext;
int reload_count = 0;
public GetChartData(LinearLayout chart_layout, Context context, ProgressDialog progress,
String indicatorStr, String[] contries){
area = (AreaApplication) context.getApplicationContext();
mContext = context;
indicator = indicatorStr;
countryList = contries;
dialog = progress;
layout = chart_layout;
}
public void setIndicator(String indicatorStr){
indicator = indicatorStr;
}
public void setCountries(String[] contries){
countryList = contries;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
try {
Log.e(TAG, "Calling Generic Search 0");
if (area.areaData.genericSearch(WORLD_SEARCH, indicator,
countryList) >= SEARCH_SUCCESS) {
return true; // Generic Search Completed correctly
}
} catch (IllegalStateException ilEx) {
Log.e(TAG,
"DATABASE LOCK: Error pulling/storing data for Chart");
}
return false;
}
@Override
protected void onPostExecute(Boolean initResult) {
super.onPostExecute(initResult);
if (initResult) {
Log.e(TAG, "Completed Chart pull");
renderChart();
} else {
Log.e(TAG, "Problem with pull data");
displayError();
}
if (dialog.isShowing()) {
dialog.dismiss();
}
}
public void renderChart() {
Log.d(TAG, String.format("Indicator: %s. Country list: %s", indicator,
Arrays.toString(countryList)));
chart = new AreaChart().execute(mContext, indicator, countryList);
if (chart == null){
reload_count++;
Toast.makeText(mContext, "Error in Loading Chart data.\n Chart is Reloading",
Toast.LENGTH_SHORT).show();
if (dialog.isShowing()) {
dialog.dismiss();
}
if (reload_count > 1){
displayError();
}else{
reload(countryList);
}
}else{
Log.e(TAG, "chart view " + chart.toString() + " - " + layout.getId()
+ "current indicator" + indicator + " - " + "First country: "
+ countryList[0] + " from " + countryList.length);
// chart.refreshDrawableState();
// layout.refreshDrawableState();
layout.removeAllViewsInLayout();
layout.setBackgroundColor(Color.BLUE);
layout.addView(chart, new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));/**/
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
public GraphicalView renderChart(int yes) {
Log.d(TAG, String.format("Indicator: %s. Country list: %s", indicator,
Arrays.toString(countryList)));
chart = new AreaChart().execute(mContext, indicator, countryList);
if (chart == null){
Toast.makeText(mContext, "Error in Loading Chart data.\n Chart is Reloading",
Toast.LENGTH_SHORT).show();
if (dialog.isShowing()) {
dialog.dismiss();
}
reload(countryList);
}
Log.e(TAG, "chart view " + chart.toString() + " - " + layout.getId()
+ "current indicator" + indicator + " - " + "First country: "
+ countryList[0] + " from " + countryList.length);
return chart;
}
private void displayError() {
TextView txt = new TextView(mContext);
layout.removeAllViewsInLayout();
txt.append("No Data Retrieved For Indicator\n" + indicator);
layout.addView(txt);
reload_count = 0;
}
public void reload(String[] countries) {
countryList = countries;
if (countryList.length < 1){
displayError();
if (dialog.isShowing()) {
dialog.dismiss();
}
}else{
this.execute();
}
}
}