package org.achartengine.chartlib; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import org.achartengine.ChartFactory; import org.achartengine.chart.PointStyle; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.content.Context; import android.graphics.Color; import android.view.View; public class AlertChart extends AbstractChart { private String mTitleString; private String mXAxisString; private int mHighPoint; private int mLowPoint; public LinkedList<AlertMoment> alertMoments; public class AlertMoment{ public String mLabel; public int mHigh; public int mMedium; public int mLow; } public void addAlertMoment(){ alertMoments.add(new AlertMoment()); } public void setLastMomentHighAlert(int point){ alertMoments.getLast().mHigh = point; if(point > mHighPoint) mHighPoint = point; if(point < mLowPoint) mLowPoint = point; } public void setLastMomentMediumAlert(int point){ alertMoments.getLast().mMedium = point; if(point > mHighPoint) mHighPoint = point; if(point < mLowPoint) mLowPoint = point; } public void setLastMomentLowAlert(int point){ alertMoments.getLast().mLow = point; if(point > mHighPoint) mHighPoint = point; if(point < mLowPoint) mLowPoint = point; } public void setLastMomentLabel(String label){ alertMoments.getLast().mLabel = label; } public AlertChart(){ alertMoments = new LinkedList<AlertMoment>(); } public void setTitleString(String titleString){ mTitleString = titleString; } public void setXAxisString(String xAxisString){ mXAxisString = xAxisString; } /** * Executes the chart demo. * @param context the context * @return the built intent */ public View execute(Context context) { String[] titles = new String[] { "High", "Medium", "Low"}; List<double[]> x = new ArrayList<double[]>(); for(int i = 0; i < titles.length; i++) { double[] xDoubles = new double[alertMoments.size()]; for(int i2 = 0; i2 < alertMoments.size(); i2++){ xDoubles[i2] = i2 + 1; } x.add(xDoubles); } int[] colors = new int[] { Color.RED, Color.YELLOW, Color.GREEN}; PointStyle[] styles = new PointStyle[] {PointStyle.CIRCLE, PointStyle.DIAMOND, PointStyle.TRIANGLE}; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); List<double[]> values = new ArrayList<double[]>(); double[] highValueDoubles = new double[alertMoments.size()]; double[] mediumValueDoubles = new double[alertMoments.size()]; double[] lowValueDoubles = new double[alertMoments.size()]; ListIterator<AlertMoment> itr = alertMoments.listIterator(); while(itr.hasNext()){ int i = itr.nextIndex(); AlertMoment thisAlertMoment = (AlertMoment) itr.next(); highValueDoubles[i] = thisAlertMoment.mHigh; mediumValueDoubles[i] = thisAlertMoment.mMedium; lowValueDoubles[i] = thisAlertMoment.mLow; renderer.addTextLabel(i + 1, thisAlertMoment.mLabel); } values.add(highValueDoubles); values.add(mediumValueDoubles); values.add(lowValueDoubles); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true); } setChartSettings(renderer, mTitleString, mXAxisString, "Alerts", 0.5, alertMoments.size() + 0.5, 0, mHighPoint + (mHighPoint * .1), Color.LTGRAY, Color.GRAY); renderer.setYLabels(8); View view = ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer); return view; } }