cl.uai.client.data.SubmissionGradeData.java Source code

Java tutorial

Introduction

Here is the source code for cl.uai.client.data.SubmissionGradeData.java

Source

// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle 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 General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * @package   eMarking
 * @copyright 2013 Jorge Villaln <villalon@gmail.com>
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
package cl.uai.client.data;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.logging.Logger;

import cl.uai.client.EMarkingConfiguration;

import com.google.gwt.core.client.JsonUtils;
import com.google.gwt.json.client.JSONObject;

/**
 * This class contains all data pertaining to a draft, including its grade and marker
 * 
 * @author Jorge Villaln
 *
 */
public class SubmissionGradeData {

    private static Logger logger = Logger.getLogger(SubmissionGradeData.class.getName());

    public static String getRegradeMotiveText(int motiveid) {
        if (EMarkingConfiguration.getRegradeMotives().get(motiveid) == null) {
            logger.fine("Empty " + motiveid);
        }
        return EMarkingConfiguration.getRegradeMotives().get(motiveid);
    }

    private int id;
    private float finalgrade;
    private float grademin;
    private float grademax;
    private String coursename;
    private String courseshort;
    private int courseid;
    private int markerid;
    private String markerfirstname;
    private String markerlastname;
    private String markeremail;
    private String activityname;
    private int coursemoduleid;
    private String feedback;
    private String changelog;

    private String rubricname;

    private String custommarks;
    private boolean qualitycontrol;
    private Date datecreated;

    private Date datemodified;

    private boolean regraderestrictdates;
    private Date regradeopendate;
    private Date regradeclosedate;
    private boolean answerkey;
    private SortedMap<Integer, Submission> answerKeys;

    /** A list of drafts related to the one being marked, usually parallels within a markers training **/
    private List<Integer> drafts = null;

    /** Rubric definition **/
    private SortedMap<Integer, Criterion> rubricdefinition = null;

    public String getActivityname() {
        return activityname;
    }

    public int getCourseid() {
        return courseid;
    }

    public int getCoursemoduleid() {
        return coursemoduleid;
    }

    public String getCoursename() {
        return coursename;
    }

    public String getCourseshort() {
        return courseshort;
    }

    public String getCustommarks() {
        return custommarks;
    }

    public Date getDatecreated() {
        return datecreated;
    }

    public Date getDatemodified() {
        return datemodified;
    }

    /**
     * @return the feedback
     */
    public String getFeedback() {
        return feedback;
    }

    public float getFinalgrade() {
        return finalgrade;
    }

    public float getGrademax() {
        return grademax;
    }

    public float getGrademin() {
        return grademin;
    }

    public int getId() {
        return id;
    }

    public Level getLevelById(int lvlid) {
        for (Criterion criterion : rubricdefinition.values()) {
            for (Level lvl : criterion.getLevels().values()) {
                if (lvl.getId() == lvlid)
                    return lvl;
            }
        }
        return null;
    }

    public String getMarkeremail() {
        return markeremail;
    }

    public String getMarkerfirstname() {
        return markerfirstname;
    }

    public int getMarkerid() {
        return markerid;
    }

    public String getMarkerlastname() {
        return markerlastname;
    }

    /**
     * @return the regradeclosedate
     */
    public Date getRegradeclosedate() {
        return regradeclosedate;
    }

    /**
     * @return the regradeopendate
     */
    public Date getRegradeopendate() {
        return regradeopendate;
    }

    public Map<Integer, Criterion> getRubricfillings() {
        return rubricdefinition;
    }

    /**
     * @return the rubricname
     */
    public String getRubricname() {
        return rubricname;
    }

    public Map<Integer, Criterion> getSortedRubricfillings() {
        SortedMap<Integer, Criterion> map = new TreeMap<Integer, Criterion>();
        for (int cid : rubricdefinition.keySet()) {
            Criterion c = rubricdefinition.get(cid);
            map.put(c.getSortorder(), c);
        }
        return map;
    }

    /**
     * @return the qualitycontrol
     */
    public boolean isQualitycontrol() {
        return qualitycontrol;
    }

    /**
     * @return the regraderestrictdates
     */
    public boolean isRegraderestrictdates() {
        return regraderestrictdates;
    }

    public boolean isRegradingAllowed() {
        if (!regraderestrictdates)
            return true;

        Date now = new Date();
        if (regradeopendate.before(now) && regradeclosedate.after(now))
            return true;

        return false;
    }

    /**
     * Loads the configuration for a submission 
     * @param values
     * @throws Exception
     */
    public static SubmissionGradeData createFromConfiguration(Map<String, String> values) {

        SubmissionGradeData submissionData = new SubmissionGradeData();

        try {
            submissionData.setId(Integer.parseInt(values.get("id")));
            submissionData.setGrademin(Float.parseFloat(values.get("grademin")));
            submissionData.setGrademax(Float.parseFloat(values.get("grademax")));
            submissionData.setCourseid(Integer.parseInt(values.get("courseid")));
            submissionData.setCoursename(values.get("coursename"));
            submissionData.setCourseshort(values.get("courseshort"));
            submissionData.setMarkeremail(values.get("markeremail"));
            submissionData.setMarkerfirstname(values.get("markerfirstname"));
            submissionData.setMarkerlastname(values.get("markerlastname"));
            submissionData.setMarkerid(Integer.parseInt(values.get("markerid")));
            submissionData.setActivityname(values.get("activityname"));
            submissionData.setFeedback(values.get("feedback"));
            submissionData.setChangelog(values.get("changelog"));
            submissionData.setCustommarks(values.get("custommarks"));
            submissionData.setQualitycontrol(values.get("qualitycontrol").equals("1"));
            submissionData.setCoursemoduleid(Integer.parseInt(values.get("coursemodule")));
            submissionData.setDatecreated(Long.parseLong(values.get("timecreated")));
            submissionData.setRegraderestrictdates(values.get("regraderestrictdates").equals("1"));
            submissionData.setRegradeopendate(new Date(Long.parseLong(values.get("regradesopendate")) * 1000));
            submissionData.setRegradeclosedate(new Date(Long.parseLong(values.get("regradesclosedate")) * 1000));
            submissionData.setFinalgrade(Float.parseFloat(values.get("finalgrade")));
            submissionData.setDatemodified(Long.parseLong(values.get("timemodified")));

            String drafts = values.get("drafts");
            if (drafts != null) {
                List<Integer> draftIds = new ArrayList<Integer>();
                for (String did : drafts.split(",")) {
                    int id = Integer.parseInt(did);
                    draftIds.add(id);
                }
                submissionData.setDrafts(draftIds);
            }

            JSONObject rubricobj = new JSONObject(JsonUtils.safeEval(values.get("rubric")));
            List<Map<String, String>> rubric = AjaxRequest.getValuesFromResult(rubricobj);

            SortedMap<Integer, Criterion> definition = new TreeMap<Integer, Criterion>();

            for (Map<String, String> criterion : rubric) {
                int criterionId = Integer.parseInt(criterion.get("id"));
                int criterionSortOrder = Integer.parseInt(criterion.get("sortorder"));
                float maxscore = Float.parseFloat(criterion.get("maxscore"));
                String criterionDescription = criterion.get("description").toString();
                submissionData.setRubricname(criterion.get("rubricname").toString());
                int regradeid = Integer.parseInt(criterion.get("regradeid"));
                int regradeaccepted = Integer.parseInt(criterion.get("regradeaccepted"));
                int regrademotive = Integer.parseInt(criterion.get("motive"));
                boolean markerIsAssigned = Integer.parseInt(criterion.get("markerassigned")) == 1;
                String regradecomment = criterion.get("regradecomment").toString();
                String regrademarkercomment = criterion.get("regrademarkercomment").toString();

                JSONObject obj = new JSONObject(JsonUtils.safeEval(criterion.get("levels")));
                List<Map<String, String>> levels = AjaxRequest.getValuesFromResult(obj);

                SortedMap<Integer, Level> levelsdata = new TreeMap<Integer, Level>();
                Criterion criteriondata = new Criterion(criterionId, criterionDescription, maxscore, regradeid,
                        regradeaccepted, levelsdata, criterionSortOrder);
                criteriondata.setMarkerIsAssigned(markerIsAssigned);
                criteriondata.setRegradeComment(regradecomment);
                criteriondata.setRegradeMarkerComment(regrademarkercomment);
                criteriondata.setRegrademotive(regrademotive);
                for (Map<String, String> level : levels) {
                    Level levelData = new Level(criteriondata, Integer.parseInt(level.get("id").toString()),
                            level.get("description").toString(),
                            // SafeHtmlUtils.htmlEscape(level.get("description").toString()),
                            Float.parseFloat(level.get("score").toString()));
                    float bonus = Float.parseFloat(criterion.get("bonus").toString());
                    int commentpage = Integer.parseInt(level.get("commentpage").toString());
                    int markid = Integer.parseInt(level.get("commentid").toString());
                    levelData.setBonus(bonus);
                    levelData.setPage(commentpage);
                    levelData.setMarkId(markid);
                    levelsdata.put(levelData.getId(), levelData);

                    if (markid > 0) {
                        criteriondata.setSelectedLevel(levelData.getId());
                    }
                }

                criteriondata.setHueColor(definition.size());
                definition.put(criteriondata.getId(), criteriondata);
            }

            submissionData.setRubricDefinition(definition);

            JSONObject answerkeysjson = new JSONObject(JsonUtils.safeEval(values.get("answerkeys")));
            List<Map<String, String>> answerkeyslist = AjaxRequest.getValuesFromResult(answerkeysjson);

            SortedMap<Integer, Submission> answerkeys = new TreeMap<Integer, Submission>();

            boolean thisIsAnswerKey = false;
            for (Map<String, String> answerkey : answerkeyslist) {
                Submission sub = new Submission(answerkey);
                answerkeys.put(sub.getId(), sub);
                if (sub.getId() == submissionData.getId()) {
                    thisIsAnswerKey = true;
                }
            }

            submissionData.answerKeys = answerkeys;
            submissionData.answerkey = thisIsAnswerKey;

        } catch (Exception e) {
            logger.severe(e.getLocalizedMessage());
            return null;
        }

        return submissionData;
    }

    private void setRubricDefinition(SortedMap<Integer, Criterion> definition) {
        this.rubricdefinition = definition;
    }

    public void setActivityname(String activityname) {
        this.activityname = activityname;
    }

    public void setCourseid(int courseid) {
        this.courseid = courseid;
    }

    public void setCoursemoduleid(int coursemoduleid) {
        this.coursemoduleid = coursemoduleid;
    }

    public void setCoursename(String coursename) {
        this.coursename = coursename;
    }

    public void setCourseshort(String courseshort) {
        this.courseshort = courseshort;
    }

    public void setCustommarks(String custommarks) {
        this.custommarks = custommarks;
    }

    public void setDatecreated(long datecreated) {
        this.datecreated = new Date(datecreated * 1000);
    }

    public void setDatemodified(long datemodified) {
        this.datemodified = new Date(datemodified * 1000);
    }

    /**
     * @param feedback the feedback to set
     */
    public void setFeedback(String feedback) {
        this.feedback = feedback;
    }

    public void setFinalgrade(float finalgrade) {
        this.finalgrade = finalgrade;
    }

    public void setGrademax(float grademax) {
        this.grademax = grademax;
    }

    public void setGrademin(float grademin) {
        this.grademin = grademin;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setMarkeremail(String markeremail) {
        this.markeremail = markeremail;
    }

    public void setMarkerfirstname(String markerfirstname) {
        this.markerfirstname = markerfirstname;
    }

    public void setMarkerid(int markerid) {
        this.markerid = markerid;
    }

    public void setMarkerlastname(String markerlastname) {
        this.markerlastname = markerlastname;
    }

    /**
     * @param qualitycontrol the qualitycontrol to set
     */
    public void setQualitycontrol(boolean qualitycontrol) {
        this.qualitycontrol = qualitycontrol;
    }

    /**
     * @param regradeclosedate the regradeclosedate to set
     */
    public void setRegradeclosedate(Date regradeclosedate) {
        this.regradeclosedate = regradeclosedate;
    }

    /**
     * @param regradeopendate the regradeopendate to set
     */
    public void setRegradeopendate(Date regradeopendate) {
        this.regradeopendate = regradeopendate;
    }

    /**
     * @param regraderestrictdates the regraderestrictdates to set
     */
    public void setRegraderestrictdates(boolean regraderestrictdates) {
        this.regraderestrictdates = regraderestrictdates;
    }

    /**
     * @param rubricname the rubricname to set
     */
    public void setRubricname(String rubricname) {
        this.rubricname = rubricname;
    }

    /**
     * @return the drafts
     */
    public List<Integer> getDrafts() {
        return drafts;
    }

    /**
     * @param drafts the drafts to set
     */
    public void setDrafts(List<Integer> drafts) {
        this.drafts = drafts;
    }

    /**
     * Returns the list of submissions that are marked as answer keys
     * @return
     */
    public SortedMap<Integer, Submission> getAnswerKeys() {
        return this.answerKeys;
    }

    public boolean isAnswerkey() {
        return answerkey;
    }

    public void setAnswerkey(boolean answerkey) {
        this.answerkey = answerkey;
    }

    public String getChangelog() {
        return changelog;
    }

    public void setChangelog(String changelog) {
        this.changelog = changelog;
    }
}