/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/edu-services/trunk/cm-service/cm-impl/hibernate-impl/impl/src/test/org/sakaiproject/coursemanagement/test/HibernateTestDataLoader.java $
* $Id: HibernateTestDataLoader.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 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.coursemanagement.test;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.coursemanagement.api.AcademicSession;
import org.sakaiproject.coursemanagement.api.CourseManagementService;
import org.sakaiproject.coursemanagement.api.CourseOffering;
import org.sakaiproject.coursemanagement.api.EnrollmentSet;
import org.sakaiproject.coursemanagement.impl.DataLoader;
import org.sakaiproject.coursemanagement.impl.AcademicSessionCmImpl;
import org.sakaiproject.coursemanagement.impl.CanonicalCourseCmImpl;
import org.sakaiproject.coursemanagement.impl.CourseOfferingCmImpl;
import org.sakaiproject.coursemanagement.impl.CourseSetCmImpl;
import org.sakaiproject.coursemanagement.impl.CrossListingCmImpl;
import org.sakaiproject.coursemanagement.impl.EnrollmentCmImpl;
import org.sakaiproject.coursemanagement.impl.EnrollmentSetCmImpl;
import org.sakaiproject.coursemanagement.impl.MembershipCmImpl;
import org.sakaiproject.coursemanagement.impl.SectionCategoryCmImpl;
import org.sakaiproject.coursemanagement.impl.SectionCmImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* Loads data into the current transaction for use in a test case.
*
* @author <a href="mailto:jholtzman@berkeley.edu">Josh Holtzman</a>
*/
public class HibernateTestDataLoader extends HibernateDaoSupport implements DataLoader {
private static final Log log = LogFactory.getLog(HibernateTestDataLoader.class);
private CourseManagementService cm;
public void setCourseManagementService(CourseManagementService cm) {
this.cm = cm;
}
public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(new String[] {"spring-test.xml", "spring-config-test.xml"});
DataLoader loader = (DataLoader)ac.getBean(DataLoader.class.getName());
try {
loader.load();
} catch (Exception e) {
e.printStackTrace();
}
}
public void load() {
loadAcademicSessions();
loadCourseSetsAndMembers();
loadCanonicalCourses();
loadCourseOfferingsAndMembers();
loadSectionsAndMembers();
loadEnrollmentSets();
loadEnrollments();
getHibernateTemplate().flush();
getHibernateTemplate().clear();
}
void loadAcademicSessions() {
AcademicSessionCmImpl term = new AcademicSessionCmImpl();
term.setEid("F2006");
term.setTitle("Fall 2006");
term.setDescription("Fall 2006, starts Sept 1, 2006");
term.setCurrent(true);
getHibernateTemplate().save(term);
}
void loadCourseSetsAndMembers() {
CourseSetCmImpl cSet = new CourseSetCmImpl("BIO_DEPT", "Biology Department", "Department of Biology", "DEPT", null);
getHibernateTemplate().save(cSet);
MembershipCmImpl courseSetMember = new MembershipCmImpl();
courseSetMember.setRole("departmentAdmin");
courseSetMember.setUserId("user1");
courseSetMember.setMemberContainer(cSet);
courseSetMember.setStatus("active");
getHibernateTemplate().save(courseSetMember);
CourseSetCmImpl cSetChild = new CourseSetCmImpl("BIO_CHEM_GROUP", "Biochem Group", "Biochemistry group, Department of Biology", "DEPT_GROUP", cSet);
getHibernateTemplate().save(cSetChild);
CourseSetCmImpl cSetEmpty = new CourseSetCmImpl("EMPTY_COURSE_SET", "Empty CourseSet", "Empty CourseSet", null, null);
getHibernateTemplate().save(cSetEmpty);
}
void loadCanonicalCourses() {
// Cross-list bio and chem (but not English)
CrossListingCmImpl cl = new CrossListingCmImpl();
getHibernateTemplate().save(cl);
// Build and save the CanonicalCourses
CanonicalCourseCmImpl cc1 = new CanonicalCourseCmImpl();
cc1.setEid("BIO101");
cc1.setTitle("Biology 101");
cc1.setDescription("An intro to biology");
cc1.setCrossListing(cl);
getHibernateTemplate().save(cc1);
CanonicalCourseCmImpl cc2 = new CanonicalCourseCmImpl();
cc2.setEid("CHEM101");
cc2.setTitle("Chem 101");
cc2.setDescription("An intro to chemistry");
cc2.setCrossListing(cl);
getHibernateTemplate().save(cc2);
CanonicalCourseCmImpl cc3 = new CanonicalCourseCmImpl();
cc3.setEid("ENG101");
cc3.setTitle("English 101");
cc3.setDescription("An intro to English");
getHibernateTemplate().save(cc3);
// Add these canonical courses to course sets
CourseSetCmImpl bioCset = (CourseSetCmImpl)cm.getCourseSet("BIO_DEPT");
CourseSetCmImpl bioChemCset = (CourseSetCmImpl)cm.getCourseSet("BIO_CHEM_GROUP");
Set bioCourses = new HashSet();
bioCourses.add(cc1);
bioCset.setCanonicalCourses(bioCourses);
getHibernateTemplate().update(bioCset);
Set bioChemCourses = new HashSet();
bioChemCourses.add(cc1);
bioChemCourses.add(cc2);
bioChemCset.setCanonicalCourses(bioChemCourses);
getHibernateTemplate().update(bioChemCset);
}
void loadCourseOfferingsAndMembers() {
// Get the object dependencies
AcademicSession term = cm.getAcademicSession("F2006");
CanonicalCourseCmImpl cc1 = (CanonicalCourseCmImpl)cm.getCanonicalCourse("BIO101");
CanonicalCourseCmImpl cc2 = (CanonicalCourseCmImpl)cm.getCanonicalCourse("CHEM101");
CanonicalCourseCmImpl cc3 = (CanonicalCourseCmImpl)cm.getCanonicalCourse("ENG101");
// Cross list bio and chem, but not English
CrossListingCmImpl cl = new CrossListingCmImpl();
getHibernateTemplate().save(cl);
CourseOfferingCmImpl co1 = new CourseOfferingCmImpl();
co1.setAcademicSession(term);
co1.setCanonicalCourse(cc1);
co1.setCrossListing(cl);
co1.setEid("BIO101_F2006_01");
co1.setTitle("Bio 101: It's all about the gene");
co1.setDescription("Fall 2006 Bio 101 Offering");
// Make this almost always a "current" course offering (until 2020, that is)
co1.setStartDate(new Date(0));
co1.setEndDate(new Date(1577836800000L));
getHibernateTemplate().save(co1);
CourseOfferingCmImpl co2 = new CourseOfferingCmImpl();
co2.setAcademicSession(term);
co2.setCanonicalCourse(cc2);
co2.setCrossListing(cl);
co2.setEid("CHEM101_F2006_01");
co2.setTitle("Chem 101: It's all about the gene");
co2.setDescription("Fall 2006 Chem 101 Offering");
// Make this almost never a "current" course offering (until 2020, that is)
co2.setStartDate(new Date(1577836800000L));
co2.setEndDate(new Date(1577836800000L));
getHibernateTemplate().save(co2);
CourseOfferingCmImpl co3 = new CourseOfferingCmImpl();
co3.setAcademicSession(term);
co3.setCanonicalCourse(cc3);
co3.setEid("ENG101_F2006_01");
co3.setTitle("English 101: Intro to literature");
co3.setDescription("Fall 2006 Eng 101 Offering");
getHibernateTemplate().save(co3);
CourseOfferingCmImpl co4 = new CourseOfferingCmImpl();
co4.setAcademicSession(term);
co4.setCanonicalCourse(cc3);
co4.setEid("ENG101_F2006_02");
co4.setTitle("English 101: Intro to literature");
co4.setDescription("Fall 2006 Eng 101 Offering");
//we need this one to be active
Calendar cal = new GregorianCalendar();
cal.add(Calendar.MONTH, -1);
co4.setStartDate(cal.getTime());
cal.add(Calendar.MONTH, +7);
co4.setEndDate(cal.getTime());
getHibernateTemplate().save(co4);
// Add these course offerings to course sets
CourseSetCmImpl bioCset = (CourseSetCmImpl)cm.getCourseSet("BIO_DEPT");
CourseSetCmImpl bioChemCset = (CourseSetCmImpl)cm.getCourseSet("BIO_CHEM_GROUP");
Set bioCourses = new HashSet();
bioCourses.add(co1);
bioCset.setCourseOfferings(bioCourses);
getHibernateTemplate().update(bioCset);
Set bioChemCourses = new HashSet();
bioChemCourses.add(co1);
bioChemCourses.add(co2);
bioChemCset.setCourseOfferings(bioChemCourses);
getHibernateTemplate().update(bioChemCset);
// Add a member to some CourseOfferings
MembershipCmImpl member1 = new MembershipCmImpl("coUser", "coRole1", co1, "active");
getHibernateTemplate().save(member1);
MembershipCmImpl member2 = new MembershipCmImpl("coUser", "coRole2", co2, "active");
getHibernateTemplate().save(member2);
}
void loadSectionsAndMembers() {
CourseOffering co = cm.getCourseOffering("BIO101_F2006_01");
// Add the section categories
getHibernateTemplate().save(new SectionCategoryCmImpl("lct", "Lecture"));
getHibernateTemplate().save(new SectionCategoryCmImpl("lab", "Lab"));
getHibernateTemplate().save(new SectionCategoryCmImpl("dis", "Discussion"));
// Add a section
SectionCmImpl section = new SectionCmImpl();
section.setCategory("lct");
section.setCourseOffering(co);
section.setDescription("The lecture");
section.setEid("BIO101_F2006_01_SEC01");
section.setTitle("Main lecture");
section.setMaxSize(Integer.valueOf(100));
getHibernateTemplate().save(section);
// Add a membership to this section
MembershipCmImpl member = new MembershipCmImpl();
member.setRole("AN_ENTERPRISE_ROLE");
member.setUserId("AN_ENTERPRISE_USER");
member.setMemberContainer(section);
member.setStatus("active");
getHibernateTemplate().save(member);
// Add a child section
SectionCmImpl childSection = new SectionCmImpl();
childSection.setCategory("lab");
childSection.setCourseOffering(co);
childSection.setDescription("Joe's monday morning lab");
childSection.setEid("BIO101_F2006_01_SEC02");
childSection.setTitle("Joe's Monday Morning Biology Lab");
childSection.setParent(section);
childSection.setMaxSize(Integer.valueOf(100));
getHibernateTemplate().save(childSection);
// Add a section for the future course offering
CourseOffering futureCo = cm.getCourseOffering("CHEM101_F2006_01");
SectionCmImpl futureSection = new SectionCmImpl();
futureSection.setCategory("lab");
futureSection.setCourseOffering(futureCo);
futureSection.setDescription("Future lab");
futureSection.setEid("CHEM101_F2006_01_SEC01");
futureSection.setTitle("Future Lab");
futureSection.setMaxSize(Integer.valueOf(100));
getHibernateTemplate().save(futureSection);
// Add a member to this future section
MembershipCmImpl member2 = new MembershipCmImpl();
member2.setRole("student");
member2.setUserId("josh");
member2.setMemberContainer(futureSection);
member2.setStatus("active");
getHibernateTemplate().save(member2);
}
void loadEnrollmentSets() {
EnrollmentSetCmImpl enrollmentSet1 = new EnrollmentSetCmImpl();
enrollmentSet1.setCategory("lab");
enrollmentSet1.setCourseOffering(cm.getCourseOffering("BIO101_F2006_01"));
enrollmentSet1.setDefaultEnrollmentCredits("3");
enrollmentSet1.setDescription("An enrollment set description");
enrollmentSet1.setEid("BIO101_F2006_01_ES01");
enrollmentSet1.setTitle("The lab enrollment set");
Set officialInstructors = new HashSet();
officialInstructors.add("grader1");
officialInstructors.add("grader2");
enrollmentSet1.setOfficialInstructors(officialInstructors);
getHibernateTemplate().save(enrollmentSet1);
SectionCmImpl section1 = (SectionCmImpl)cm.getSection("BIO101_F2006_01_SEC01");
section1.setEnrollmentSet(enrollmentSet1);
getHibernateTemplate().update(section1);
EnrollmentSetCmImpl enrollmentSet2 = new EnrollmentSetCmImpl();
enrollmentSet2.setCategory("lab");
enrollmentSet2.setCourseOffering(cm.getCourseOffering("CHEM101_F2006_01"));
enrollmentSet2.setDefaultEnrollmentCredits("3");
enrollmentSet2.setDescription("Another enrollment set description");
enrollmentSet2.setEid("CHEM101_F2006_01_ES01");
enrollmentSet2.setTitle("The lab enrollment set");
getHibernateTemplate().save(enrollmentSet2);
SectionCmImpl section2 = (SectionCmImpl)cm.getSection("CHEM101_F2006_01_SEC01");
section2.setEnrollmentSet(enrollmentSet2);
getHibernateTemplate().update(section2);
}
void loadEnrollments() {
EnrollmentSet enrollmentSet = cm.getEnrollmentSet("BIO101_F2006_01_ES01");
EnrollmentCmImpl enrollment = new EnrollmentCmImpl();
enrollment.setCredits("3");
enrollment.setEnrollmentSet(enrollmentSet);
enrollment.setEnrollmentStatus("waitlisted");
enrollment.setGradingScheme("pass/fail");
enrollment.setUserId("josh");
getHibernateTemplate().save(enrollment);
EnrollmentSet enrollmentSet2 = cm.getEnrollmentSet("CHEM101_F2006_01_ES01");
EnrollmentCmImpl enrollment2 = new EnrollmentCmImpl();
enrollment2.setCredits("3");
enrollment2.setEnrollmentSet(enrollmentSet2);
enrollment2.setEnrollmentStatus("officially enrolled");
enrollment2.setGradingScheme("letter grade");
enrollment2.setUserId("josh");
enrollment2.setDropped(true);
getHibernateTemplate().save(enrollment2);
}
}