/*==========================================================================*\
| $Id: SubmissionCountChart.java,v 1.2 2011/03/07 18:57:09 stedwar2 Exp $
|*-------------------------------------------------------------------------*|
| Copyright (C) 2006-2011 Virginia Tech
|
| This file is part of Web-CAT.
|
| Web-CAT is free software; you can redistribute it and/or modify
| it under the terms of the GNU Affero General Public License as published
| by the Free Software Foundation; either version 3 of the License, or
| (at your option) any later version.
|
| Web-CAT is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| You should have received a copy of the GNU Affero General Public License
| along with Web-CAT; if not, see <http://www.gnu.org/licenses/>.
\*==========================================================================*/
package org.webcat.grader.graphs;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.data.xy.AbstractIntervalXYDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYDataset;
import org.webcat.grader.SubmissionResult;
import com.webobjects.appserver.WOContext;
import com.webobjects.foundation.NSArray;
import er.extensions.eof.ERXConstant;
//-------------------------------------------------------------------------
/**
* A histogram component, implemented using JFreeChart.
*
* @author Stephen Edwards
* @author Last changed by $Author: stedwar2 $
* @version $Revision: 1.2 $, $Date: 2011/03/07 18:57:09 $
*/
public class SubmissionCountChart extends HistogramChart
{
//~ Constructors ..........................................................
// ----------------------------------------------------------
/**
* Default constructor.
* @param context The page's context
*/
public SubmissionCountChart( WOContext context )
{
super( context );
}
//~ KVC Attributes (must be public) .......................................
public NSArray<SubmissionResult> submissionResults;
//~ Methods ...............................................................
// ----------------------------------------------------------
@Override
public boolean sizesToFit()
{
return true;
}
// ----------------------------------------------------------
@Override
public boolean shouldDisplay()
{
return true;
}
// ----------------------------------------------------------
@Override
public XYDataset dataset()
{
IntervalXYDataset dataset = (IntervalXYDataset) super.dataset();
if (dataset == null)
{
dataset = new Dataset();
super.setDataset(dataset);
}
return dataset;
}
// ----------------------------------------------------------
@Override
protected JFreeChart generateChart(WCChartTheme chartTheme)
{
JFreeChart chart = super.generateChart(chartTheme);
NumberAxis domainAxis = (NumberAxis) chart.getXYPlot().getDomainAxis();
domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return chart;
}
// ----------------------------------------------------------
@SuppressWarnings("unchecked")
private class Dataset extends AbstractIntervalXYDataset
{
public static final String SUBMISSION_COUNT_KEY = "No. of Submissions";
// ----------------------------------------------------------
public int getSeriesCount()
{
return 1;
}
// ----------------------------------------------------------
public Comparable getSeriesKey(int series)
{
return (series == 0)
? SUBMISSION_COUNT_KEY
: null;
}
// ----------------------------------------------------------
public int indexOf(Comparable seriesKey)
{
return SUBMISSION_COUNT_KEY.equals(seriesKey)
? 0
: -1;
}
// ----------------------------------------------------------
public int getItemCount(int series)
{
return submissionResults.count();
}
// ----------------------------------------------------------
public Number getX( int series, int item )
{
return ERXConstant.integerForInt(item + 1);
}
// ----------------------------------------------------------
public double getXValue(int series, int item)
{
return item + 1;
}
// ----------------------------------------------------------
public Number getY(int series, int item)
{
return ERXConstant.integerForInt(
submissionResult(item).submission().submitNumber());
}
// ----------------------------------------------------------
public double getYValue(int series, int item)
{
return submissionResult(item).submission().submitNumber();
}
// ----------------------------------------------------------
public Number getEndX(int series, int item)
{
return Double.valueOf(getEndXValue(series, item));
}
// ----------------------------------------------------------
public double getEndXValue(int series, int item)
{
return getXValue(series, item) + 0.5;
}
// ----------------------------------------------------------
public Number getEndY(int series, int item)
{
return getY(series, item);
}
// ----------------------------------------------------------
public double getEndYValue(int series, int item)
{
return getYValue(series, item);
}
// ----------------------------------------------------------
public Number getStartX(int series, int item)
{
return Double.valueOf(getStartXValue(series, item));
}
// ----------------------------------------------------------
public double getStartXValue(int series, int item)
{
return getXValue(series, item) - 0.5;
}
// ----------------------------------------------------------
public Number getStartY(int series, int item)
{
return getY(series, item);
}
// ----------------------------------------------------------
public double getStartYValue(int series, int item)
{
return getYValue(series, item);
}
// ----------------------------------------------------------
private SubmissionResult submissionResult(int item)
{
return submissionResults.objectAtIndex(item);
}
}
}