/********************************************************************************** * * $Id: GradebookArchive.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $ * *********************************************************************************** * * Copyright (c) 2005, 2006, 2008 The Sakai Foundation, The MIT Corporation * * 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.tool.gradebook; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Models a gradebook and all of its dependent objects, which can all be * serialized as xml for archiving. * * @author <a href="mailto:jholtzman@berkeley.edu">Josh Holtzman</a> */ public class GradebookArchive { private static Log log = LogFactory.getLog(GradebookArchive.class); private Gradebook gradebook; private GradeMapping selectedGradeMapping; private Collection gradeMappings; private CourseGrade courseGrade; private Collection assignments; public GradebookArchive() { // Allows for creating the archive, then populating it via readArchive() } /** * @param gradebook * @param selectedGradeMapping * @param gradeMappings * @param courseGrade * @param assignments */ public GradebookArchive(Gradebook gradebook, GradeMapping selectedGradeMapping, Collection gradeMappings, CourseGrade courseGrade, Collection assignments) { super(); this.gradebook = gradebook; this.selectedGradeMapping = selectedGradeMapping; this.gradeMappings = gradeMappings; this.courseGrade = courseGrade; this.assignments = assignments; } /** * Serializes this gradebook archive into an xml document */ public String archive() { if(log.isDebugEnabled()) log.debug("GradebookArchive.archive() called"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(baos)); encoder.writeObject(this); encoder.flush(); String xml = baos.toString(); if(log.isDebugEnabled()) log.debug("GradebookArchive.archive() finished"); return xml; } /** * Read a gradebook archive from an xml input stream. * * @param xml The input stream containing the serialized gradebook archive * @return A gradebook archive object modeling the data in the xml stream */ public void readArchive(String xml) { ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes()); XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(in)); GradebookArchive archive = (GradebookArchive)decoder.readObject(); decoder.close(); this.gradebook = archive.getGradebook(); this.courseGrade = archive.getCourseGrade(); this.assignments = archive.getAssignments(); } public Collection getAssignments() { return assignments; } public void setAssignments(Collection assignments) { this.assignments = assignments; } public CourseGrade getCourseGrade() { return courseGrade; } public void setCourseGrade(CourseGrade courseGrade) { this.courseGrade = courseGrade; } public Gradebook getGradebook() { return gradebook; } public void setGradebook(Gradebook gradebook) { this.gradebook = gradebook; } public Collection getGradeMappings() { return gradeMappings; } public void setGradeMappings(Collection gradeMappings) { this.gradeMappings = gradeMappings; } public GradeMapping getSelectedGradeMapping() { return selectedGradeMapping; } public void setSelectedGradeMapping(GradeMapping selectedGradeMapping) { this.selectedGradeMapping = selectedGradeMapping; } }