org.webcat.grader.graphs.SubmissionCountChart.java Source code

Java tutorial

Introduction

Here is the source code for org.webcat.grader.graphs.SubmissionCountChart.java

Source

/*==========================================================================*\
 |  $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);
        }
    }
}