/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/assignment/trunk/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/conversion/impl/AssignmentSubmissionAccess.java $ * $Id: AssignmentSubmissionAccess.java 120595 2013-03-01 20:33:37Z azeckoski@unicon.net $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.assignment.impl.conversion.impl; import java.io.Reader; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.assignment.impl.conversion.api.SerializableSubmissionAccess; import org.sakaiproject.assignment.impl.conversion.impl.SAXSerializablePropertiesAccess; import org.sakaiproject.entity.api.serialize.EntityParseException; import org.sakaiproject.entity.api.serialize.SerializableEntity; import org.sakaiproject.util.Xml; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * */ public class AssignmentSubmissionAccess implements SerializableSubmissionAccess, SerializableEntity { protected static final Log log = LogFactory .getLog(AssignmentSubmissionAccess.class); private SAXParserFactory parserFactory; protected SAXSerializablePropertiesAccess saxSerializableProperties = new SAXSerializablePropertiesAccess(); protected String id = null; protected String submitTime = null; protected List<String> submitterIds = new ArrayList<String>(); protected String grade = null; protected String assignment = null; protected String context = null; protected String datereturned = null; protected String feedbackcomment = null; protected String feedbackcomment_html = null; protected String feedbacktext = null; protected String feedbacktext_html = null; protected String graded = null; protected String gradereleased = null; protected String lastmod = null; protected String pledgeflag = null; protected String returned = null; protected String reviewReport = null; protected String reviewScore = null; protected String reviewStatus = null; protected String submitted = null; protected List<String> submittedattachments = new ArrayList<String>(); protected List<String> feedbackattachments = new ArrayList<String>(); protected List<String> submissionLog = new ArrayList<String>(); protected List<String> grades = new ArrayList<String>(); protected String datesubmitted = null; protected String submittedtext; protected String submittedtext_html; protected String submitterid = null; protected List<String> submitters = new ArrayList<String>(); public AssignmentSubmissionAccess() { } public String toXml() { Document doc = Xml.createDocument(); Element submission = doc.createElement("submission"); doc.appendChild(submission); String numItemsString = null; String attributeString = null; String itemString = null; submission.setAttribute("reviewScore",this.reviewScore); submission.setAttribute("reviewReport",this.reviewReport); submission.setAttribute("reviewStatus",this.reviewStatus); submission.setAttribute("id", this.id); submission.setAttribute("context", this.context); submission.setAttribute("scaled_grade", this.grade); submission.setAttribute("assignment", this.assignment); submission.setAttribute("datesubmitted", this.datesubmitted); submission.setAttribute("datereturned", this.datereturned); submission.setAttribute("lastmod", this.lastmod); submission.setAttribute("submitted", this.submitted); submission.setAttribute("submitterid", this.submitterid); submission.setAttribute("returned",this.returned); submission.setAttribute("graded", this.graded); submission.setAttribute("gradereleased", this.gradereleased); submission.setAttribute("pledgeflag", this.pledgeflag); // SAVE THE SUBMITTERS numItemsString = "" + this.submitters.size(); submission.setAttribute("numberofsubmitters", numItemsString); for (int x = 0; x < this.submitters.size(); x++) { attributeString = "submitter" + x; itemString = (String) this.submitters.get(x); if (itemString != null) { submission.setAttribute(attributeString, itemString); } } // SAVE THE SUBMISSION LOGS numItemsString = "" + this.submissionLog.size(); submission.setAttribute("numberoflogs", numItemsString); for (int x = 0; x < this.submissionLog.size(); x++) { attributeString = "log" + x; itemString = (String) this.submissionLog.get(x); if (itemString != null) { submission.setAttribute(attributeString, itemString); } } // SAVE GRADE OVERRIDES numItemsString = "" + this.grades.size(); submission.setAttribute("numberofgrades", numItemsString); for (int x = 0; x < this.grades.size(); x++) { attributeString = "grade" + x; itemString = (String) this.grades.get(x); if (itemString != null) { submission.setAttribute(attributeString, itemString); } } // SAVE THE FEEDBACK ATTACHMENTS numItemsString = "" + this.feedbackattachments.size(); submission.setAttribute("numberoffeedbackattachments", numItemsString); for (int x = 0; x < this.feedbackattachments.size(); x++) { attributeString = "feedbackattachment" + x; itemString = this.feedbackattachments.get(x); if(itemString != null) { submission.setAttribute(attributeString, itemString); } } // SAVE THE SUBMITTED ATTACHMENTS numItemsString = "" + this.submittedattachments.size(); submission.setAttribute("numberofsubmittedattachments", numItemsString); for (int x = 0; x < this.submittedattachments.size(); x++) { attributeString = "submittedattachment" + x; itemString = this.submittedattachments.get(x); if (itemString != null) { submission.setAttribute(attributeString, itemString); } } submission.setAttribute("submittedtext", this.submittedtext); submission.setAttribute("submittedtext-html", this.submittedtext_html); submission.setAttribute("feedbackcomment", this.feedbackcomment); submission.setAttribute("feedbackcomment-html", this.feedbackcomment_html); submission.setAttribute("feedbacktext", this.feedbacktext); submission.setAttribute("feedbacktext-html", this.feedbacktext_html); // SAVE THE PROPERTIES Element properties = doc.createElement("properties"); submission.appendChild(properties); Map<String, Object> props = this.saxSerializableProperties.getSerializableProperties(); for(Map.Entry<String, Object> entry : props.entrySet()) { String key = entry.getKey(); Object value = props.get(key); if (value instanceof String) { Element propElement = doc.createElement("property"); properties.appendChild(propElement); propElement.setAttribute("name", key); // encode to allow special characters in the value Xml.encodeAttribute(propElement, "value", (String) value); propElement.setAttribute("enc", "BASE64"); } else if (value instanceof List) { for (Object val : (List) value) { if(val == null) { continue; } if (val instanceof String) { Element propElement = doc.createElement("property"); properties.appendChild(propElement); propElement.setAttribute("name", key); Xml.encodeAttribute(propElement, "value", (String) val); propElement.setAttribute("enc", "BASE64"); propElement.setAttribute("list", "list"); } else { log.warn(".toXml: in list not string: " + key); } } } else { log.warn(".toXml: not a string, not a value: " + key); } } return Xml.writeDocumentToString(doc); } /** * @param xml * @throws EntityParseException */ public void parse(String xml) throws Exception { Reader r = new StringReader(xml); InputSource ss = new InputSource(r); SAXParser p = null; if (parserFactory == null) { parserFactory = SAXParserFactory.newInstance(); parserFactory.setNamespaceAware(false); parserFactory.setValidating(false); } try { p = parserFactory.newSAXParser(); } catch (ParserConfigurationException e) { log.warn(this + ":parse " + e.getMessage()); throw new SAXException("Failed to get a parser ", e); } final Map<String, Object> props = new HashMap<String, Object>(); saxSerializableProperties.setSerializableProperties(props); p.parse(ss, new DefaultHandler() { /* * (non-Javadoc) * * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, * java.lang.String, java.lang.String, org.xml.sax.Attributes) */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("property".equals(qName)) { String name = attributes.getValue("name"); String enc = StringUtils.trimToNull(attributes.getValue("enc")); String value = null; if ("BASE64".equalsIgnoreCase(enc)) { String charset = StringUtils.trimToNull(attributes .getValue("charset")); if (charset == null) charset = "UTF-8"; value = Xml.decode(charset, attributes.getValue("value")); } else { value = attributes.getValue("value"); } // deal with multiple valued lists if ("list".equals(attributes.getValue("list"))) { // accumulate multiple values in a list Object current = props.get(name); // if we don't have a value yet, make a list to // hold // this one if (current == null) { List values = new ArrayList(); props.put(name, values); values.add(value); } // if we do and it's a list, add this one else if (current instanceof List) { ((List) current).add(value); } // if it's not a list, it's wrong! else { log.warn("construct(el): value set not a list: " + name); } } else { props.put(name, value); } } else if ("submission".equals(qName)) { setId( attributes.getValue("id") ); setAssignment(StringUtils.trimToNull(attributes.getValue("assignment"))); setContext(StringUtils.trimToNull(attributes.getValue("context"))); setDatereturned(StringUtils.trimToNull(attributes.getValue("datereturned"))); setDatesubmitted(StringUtils.trimToNull(attributes.getValue("datesubmitted"))); setFeedbackcomment(StringUtils.trimToNull(attributes.getValue("feedbackcomment"))); if (StringUtils.trimToNull(attributes.getValue("feedbackcomment-html")) != null) { setFeedbackcomment_html(StringUtils.trimToNull(attributes.getValue("feedbackcomment-html"))); } else if (StringUtils.trimToNull(attributes.getValue("feedbackcomment-formatted")) != null) { setFeedbackcomment_html(StringUtils.trimToNull(attributes.getValue("feedbackcomment-formatted"))); } setFeedbacktext(StringUtils.trimToNull(attributes.getValue("feedbacktext"))); if (StringUtils.trimToNull(attributes.getValue("feedbacktext-html")) != null) { setFeedbacktext_html(StringUtils.trimToNull(attributes.getValue("feedbacktext-html"))); } else if (StringUtils.trimToNull(attributes.getValue("feedbacktext-formatted")) != null) { setFeedbacktext_html(StringUtils.trimToNull(attributes.getValue("feedbacktext-formatted"))); } // get grade String grade = StringUtils.trimToNull(attributes.getValue("scaled_grade")); if (grade == null) { grade = StringUtils.trimToNull(attributes.getValue("grade")); if (grade != null) { try { Integer.parseInt(grade); // for the grades in points, multiple those by 10 grade = grade + "0"; } catch (Exception e) { log.warn(this + ":parse grade " + e.getMessage()); } } } setGrade(grade); setGraded(StringUtils.trimToNull(attributes.getValue("graded"))); setGradereleased(StringUtils.trimToNull(attributes.getValue("gradereleased"))); setLastmod(StringUtils.trimToNull(attributes.getValue("lastmod"))); String numberoffeedbackattachments = StringUtils.trimToNull(attributes.getValue("numberoffeedbackattachments")); int feedbackAttachmentCount = 0; try { feedbackAttachmentCount = Integer.parseInt(numberoffeedbackattachments); } catch (Exception e) { // use 0 for feedbackAttachmentCount log.warn(this + ":parse feedbackAttachmentCount " + e.getMessage()); } for(int i = 0; i < feedbackAttachmentCount; i++) { String feedbackattachment = StringUtils.trimToNull(attributes.getValue("feedbackattachment" + i)); if(feedbackattachment != null) { feedbackattachments.add(feedbackattachment); } } String numberofsubmittedattachments = StringUtils.trimToNull(attributes.getValue("numberofsubmittedattachments")); int submittedAttachmentCount = 0; try { submittedAttachmentCount = Integer.parseInt(numberofsubmittedattachments); } catch (Exception e) { // use 0 for submittedAttachmentCount log.warn(this + ":parse submittedAttachmentCount " + e.getMessage()); } for(int i = 0; i < submittedAttachmentCount; i++) { String submittedattachment = StringUtils.trimToNull(attributes.getValue("submittedattachment" + i)); if(submittedattachment != null) { submittedattachments.add(submittedattachment); } } setPledgeflag(StringUtils.trimToNull(attributes.getValue("pledgeflag"))); setReturned(StringUtils.trimToNull(attributes.getValue("returned"))); setReviewReport(StringUtils.trimToNull(attributes.getValue("reviewReport"))); setReviewScore(StringUtils.trimToNull(attributes.getValue("reviewScore"))); setReviewStatus(StringUtils.trimToNull(attributes.getValue("reviewStatus"))); setSubmitted(StringUtils.trimToNull(attributes.getValue("submitted"))); // submittedtext and submittedtext_html are base-64 setSubmittedtext(StringUtils.trimToNull(attributes.getValue("submittedtext"))); setSubmittedtext_html(StringUtils.trimToNull(attributes.getValue("submittedtext-html"))); setSubmitterId(StringUtils.trimToNull(attributes.getValue("submitterid"))); String numberofsubmitters = StringUtils.trimToNull(attributes.getValue("numberofsubmitters")); int submitterCount = 0; try { submitterCount = Integer.parseInt(numberofsubmitters); } catch (Exception e) { // use 0 for submittedAttachmentCount log.warn(this + ":Parse " + e.getMessage()); } for(int i = 0; i < submitterCount; i++) { String submitter = StringUtils.trimToNull(attributes.getValue("submitter" + i)); if(submitter != null) { submitters.add(submitter); } } String numberoflogs = StringUtils.trimToNull(attributes.getValue("numberoflogs")); int logCount = 0; try { logCount = Integer.parseInt(numberoflogs); } catch (NumberFormatException e) { log.warn(this + ":Parse " + e.getMessage()); } for(int i = 0; i < logCount; i++) { String log = StringUtils.trimToNull(attributes.getValue("log" + i)); if(log != null) { submissionLog.add(log); } } String numberofgrades = StringUtils.trimToNull(attributes.getValue("numberofgrades")); int gradeCount = 0; try { gradeCount = Integer.parseInt(numberofgrades); } catch (NumberFormatException e) { log.warn(this + ":Parse " + e.getMessage()); } for(int i = 0; i < logCount; i++) { String gr = StringUtils.trimToNull(attributes.getValue("grade" + i)); if( gr != null) { grades.add(gr); } } } } }); } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getId() */ public String getId() { return id; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setId(java.lang.String) */ public void setId(String id) { this.id = id; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getGrade() */ public String getGrade() { return grade; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setGrade(java.lang.String) */ public void setGrade(String grade) { this.grade = grade; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getAssignment() */ public String getAssignment() { return assignment; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setAssignment(java.lang.String) */ public void setAssignment(String assignment) { this.assignment = assignment; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getContext() */ public String getContext() { return context; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setContext(java.lang.String) */ public void setContext(String context) { this.context = context; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getDatereturned() */ public String getDatereturned() { return datereturned; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setDatereturned(java.lang.String) */ public void setDatereturned(String datereturned) { this.datereturned = datereturned; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getFeedbackcomment() */ public String getFeedbackcomment() { return feedbackcomment; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setFeedbackcomment(java.lang.String) */ public void setFeedbackcomment(String feedbackcomment) { this.feedbackcomment = feedbackcomment; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getFeedbackcomment_html() */ public String getFeedbackcomment_html() { return feedbackcomment_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setFeedbackcomment_html(java.lang.String) */ public void setFeedbackcomment_html(String feedbackcomment_html) { this.feedbackcomment_html = feedbackcomment_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getFeedbacktext() */ public String getFeedbacktext() { return feedbacktext; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setFeedbacktext(java.lang.String) */ public void setFeedbacktext(String feedbacktext) { this.feedbacktext = feedbacktext; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getFeedbacktext_html() */ public String getFeedbacktext_html() { return feedbacktext_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setFeedbacktext_html(java.lang.String) */ public void setFeedbacktext_html(String feedbacktext_html) { this.feedbacktext_html = feedbacktext_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getGraded() */ public String getGraded() { return graded; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setGraded(java.lang.String) */ public void setGraded(String graded) { this.graded = graded; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getGradereleased() */ public String getGradereleased() { return gradereleased; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setGradereleased(java.lang.String) */ public void setGradereleased(String gradereleased) { this.gradereleased = gradereleased; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getLastmod() */ public String getLastmod() { return lastmod; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setLastmod(java.lang.String) */ public void setLastmod(String lastmod) { this.lastmod = lastmod; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getPledgeflag() */ public String getPledgeflag() { return pledgeflag; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setPledgeflag(java.lang.String) */ public void setPledgeflag(String pledgeflag) { this.pledgeflag = pledgeflag; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getReturned() */ public String getReturned() { return returned; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setReturned(java.lang.String) */ public void setReturned(String returned) { this.returned = returned; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getReviewReport() */ public String getReviewReport() { return reviewReport; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setReviewReport(java.lang.String) */ public void setReviewReport(String reviewReport) { this.reviewReport = reviewReport; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getReviewScore() */ public String getReviewScore() { return reviewScore; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setReviewScore(java.lang.String) */ public void setReviewScore(String reviewScore) { this.reviewScore = reviewScore; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getReviewStatus() */ public String getReviewStatus() { return reviewStatus; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setReviewStatus(java.lang.String) */ public void setReviewStatus(String reviewStatus) { this.reviewStatus = reviewStatus; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getSubmitted() */ public String getSubmitted() { return submitted; } public String getSubmitterId() { return submitterid; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setSubmitted(java.lang.String) */ public void setSubmitted(String submitted) { this.submitted = submitted; } public void setSubmitterId(String id) { this.submitterid = id; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getSubmittedattachments() */ public List<String> getSubmittedattachments() { return submittedattachments; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setSubmittedattachments(java.util.List) */ public void setSubmittedattachments(List<String> submittedattachments) { this.submittedattachments = submittedattachments; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getFeedbackattachments() */ public List<String> getFeedbackattachments() { return feedbackattachments; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setFeedbackattachments(java.util.List) */ public void setFeedbackattachments(List<String> feedbackattachments) { this.feedbackattachments = feedbackattachments; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getDatesubmitted() */ public String getDatesubmitted() { return datesubmitted; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setDatesubmitted(java.lang.String) */ public void setDatesubmitted(String datesubmitted) { this.datesubmitted = datesubmitted; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getSubmittedtext() */ public String getSubmittedtext() { return submittedtext; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setSubmittedtext(java.lang.String) */ public void setSubmittedtext(String submittedtext) { this.submittedtext = submittedtext; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getSubmittedtext_html() */ public String getSubmittedtext_html() { return submittedtext_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setSubmittedtext_html(java.lang.String) */ public void setSubmittedtext_html(String submittedtext_html) { this.submittedtext_html = submittedtext_html; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#getSubmitters() */ public List<String> getSubmitters() { return submitters; } public List<String>getSubmissionLog() { return submissionLog; } public void setSubmissionLog(List<String> log) { this.submissionLog = log; } public List<String>getGrades() { return grades; } public void setGrades(List<String> gr) { this.grades = gr; } /* (non-Javadoc) * @see org.sakaiproject.assignment.impl.conversion.impl.SerializableSubmissionAccess#setSubmitters(java.util.List) */ public void setSubmitters(List<String> submitters) { this.submitters = submitters; } public SerializableEntity getSerializableProperties() { return saxSerializableProperties; } }