/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/postem/trunk/postem-impl/src/java/org/sakaiproject/component/app/postem/GradebookManagerImpl.java $ * $Id: GradebookManagerImpl.java 125618 2013-06-11 16:41:26Z matthew@longsight.com $ *********************************************************************************** * * 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.component.app.postem; import java.io.Serializable; import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import java.util.Comparator; import org.hibernate.Criteria; import org.hibernate.FetchMode; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.Expression; import org.sakaiproject.api.app.postem.data.Gradebook; import org.sakaiproject.api.app.postem.data.GradebookManager; import org.sakaiproject.api.app.postem.data.StudentGrades; import org.sakaiproject.api.app.postem.data.Template; import org.sakaiproject.component.app.postem.data.GradebookImpl; import org.sakaiproject.component.app.postem.data.StudentGradesImpl; import org.sakaiproject.component.app.postem.data.TemplateImpl; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class GradebookManagerImpl extends HibernateDaoSupport implements GradebookManager, Serializable { public static final String TITLE = "title"; public static final String CONTEXT = "context"; public static final String STUDENTS = "students"; public static final String ID = "id"; public static final String RELEASED = "released"; public Gradebook createGradebook(String title, String creator, String context, List headings, SortedSet students, Template template, String fileReference) { if (title == null || creator == null || context == null || headings == null || students == null) { throw new IllegalArgumentException("Null Argument"); } else { Gradebook grades = new GradebookImpl(title, creator, context, headings, students, template); grades.setFileReference(fileReference); Iterator si = students.iterator(); while (si.hasNext()) { ((StudentGradesImpl) si.next()).setGradebook(grades); } saveGradebook(grades); return grades; } } public Gradebook createEmptyGradebook(String creator, String context) { if (creator == null || context == null) { throw new IllegalArgumentException("Null Argument"); } else { Gradebook grades = new GradebookImpl("", creator, context, null, null, null); // saveGradebook(grades); return grades; } } public StudentGrades createStudentGradesInGradebook(String username, List grades, Gradebook gradebook) { if (username == null || grades == null || gradebook == null) { throw new IllegalArgumentException("Null Argument"); } else { StudentGrades student = new StudentGradesImpl(username, grades); student.setGradebook(gradebook); gradebook.getStudents().add(student); return student; } } public StudentGrades createStudentGrades(String username, List grades) { return (StudentGrades) new StudentGradesImpl(username, grades); } public Template createTemplate(String template) { Template temp = new TemplateImpl(); temp.setTemplateCode(template); return temp; } public void deleteGradebook(final Gradebook gradebook) { if (gradebook != null) { Iterator si = gradebook.getStudents().iterator(); while (si.hasNext()) { deleteStudentGrades((StudentGrades) si.next()); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { session.delete(gradebook); return null; } }; getHibernateTemplate().execute(hcb); } } public void deleteStudentGrades(final StudentGrades student) { if (student != null) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { session.delete(student); return null; } }; getHibernateTemplate().execute(hcb); } } public Gradebook getGradebookByTitleAndContext(final String title, final String context) { if (title == null || context == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria crit = session.createCriteria(GradebookImpl.class).add( Expression.eq(TITLE, title)).add(Expression.eq(CONTEXT, context)) .setFetchMode(STUDENTS, FetchMode.EAGER); Gradebook gradebook = (Gradebook) crit.uniqueResult(); return gradebook; } }; return (Gradebook) getHibernateTemplate().execute(hcb); } } public SortedSet getGradebooksByContext(final String context, final String sortBy, final boolean ascending) { if (context == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria crit = session.createCriteria(GradebookImpl.class).add( Expression.eq(CONTEXT, context)); List gbs = crit.list(); Comparator gbComparator = determineComparator(sortBy, ascending); SortedSet gradebooks = new TreeSet(gbComparator); Iterator gbIterator = gbs.iterator(); while (gbIterator.hasNext()) { gradebooks.add((Gradebook) gbIterator.next()); } return gradebooks; } }; return (SortedSet) getHibernateTemplate().execute(hcb); } } public SortedSet getReleasedGradebooksByContext(final String context, final String sortBy, final boolean ascending) { if (context == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria crit = session.createCriteria(GradebookImpl.class).add( Expression.eq(CONTEXT, context)).add( Expression.eq(RELEASED, new Boolean(true))); List gbs = crit.list(); Comparator gbComparator = determineComparator(sortBy, ascending); SortedSet gradebooks = new TreeSet(gbComparator); Iterator gbIterator = gbs.iterator(); while (gbIterator.hasNext()) { gradebooks.add((Gradebook) gbIterator.next()); } return gradebooks; } }; return (SortedSet) getHibernateTemplate().execute(hcb); } } public SortedSet getStudentGradesForGradebook(final Gradebook gradebook) throws IllegalArgumentException { if (gradebook == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { // get syllabi in an eager fetch mode Criteria crit = session.createCriteria(Gradebook.class).add( Expression.eq(ID, gradebook.getId())).setFetchMode(STUDENTS, FetchMode.EAGER); Gradebook grades = (Gradebook) crit.uniqueResult(); if (grades != null) { return grades.getStudents(); } return new TreeSet(); } }; return (SortedSet) getHibernateTemplate().execute(hcb); } } public void saveGradebook(Gradebook gradebook) throws IllegalArgumentException { if (gradebook == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateTemplate temp = getHibernateTemplate(); temp.saveOrUpdate(gradebook); /* * Iterator iter = gradebook.getStudents().iterator(); while * (iter.hasNext()) { temp.saveOrUpdate((StudentGradesImpl) iter.next()); } */ } } public void updateGrades(Gradebook gradebook, List headings, SortedSet students) { gradebook.setHeadings(headings); gradebook.setStudents(students); getHibernateTemplate().saveOrUpdate(gradebook); } public void updateTemplate(Gradebook gradebook, String template, String fileReference) { gradebook.setFileReference(fileReference); gradebook.setTemplate(createTemplate(template)); getHibernateTemplate().saveOrUpdate(gradebook); } private Comparator determineComparator(String sortBy, boolean ascending) { if (ascending) { if (sortBy.equals(Gradebook.SORT_BY_CREATOR)) { return GradebookImpl.CreatorAscComparator; } else if (sortBy.equals(Gradebook.SORT_BY_MOD_BY)) { return GradebookImpl.ModByAscComparator; } else if (sortBy.equals(Gradebook.SORT_BY_MOD_DATE)) { return GradebookImpl.ModDateAscComparator; } else if (sortBy.equals(Gradebook.SORT_BY_RELEASED)) { return GradebookImpl.ReleasedAscComparator; } else { return GradebookImpl.TitleAscComparator; } } else { if (sortBy.equals(Gradebook.SORT_BY_CREATOR)) { return GradebookImpl.CreatorDescComparator; } else if (sortBy.equals(Gradebook.SORT_BY_MOD_BY)) { return GradebookImpl.ModByDescComparator; } else if (sortBy.equals(Gradebook.SORT_BY_MOD_DATE)) { return GradebookImpl.ModDateDescComparator; } else if (sortBy.equals(Gradebook.SORT_BY_RELEASED)) { return GradebookImpl.ReleasedDescComparator; } else { return GradebookImpl.TitleDescComparator; } } } public Gradebook getGradebookByIdWithHeadingsAndStudents(final Long gradebookId) { if (gradebookId == null) { throw new IllegalArgumentException("Null gradebookId passed to getGradebookByIdWithStudents"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria crit = session.createCriteria(GradebookImpl.class).add( Expression.eq(ID, gradebookId)); Gradebook gradebook = (Gradebook)crit.uniqueResult(); getHibernateTemplate().initialize(gradebook.getHeadings()); getHibernateTemplate().initialize(gradebook.getStudents()); return gradebook; } }; return (Gradebook) getHibernateTemplate().execute(hcb); } public Gradebook getGradebookByIdWithHeadings(final Long gradebookId) { if (gradebookId == null) { throw new IllegalArgumentException("Null gradebookId passed to getGradebookByIdWithHeadings"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria crit = session.createCriteria(GradebookImpl.class).add( Expression.eq(ID, gradebookId)); Gradebook gradebook = (Gradebook)crit.uniqueResult(); getHibernateTemplate().initialize(gradebook.getHeadings()); return gradebook; } }; return (Gradebook) getHibernateTemplate().execute(hcb); } public StudentGrades getStudentByGBAndUsername(final Gradebook gradebook, final String username) { if (gradebook == null || username == null) { throw new IllegalArgumentException("Null gradebookId or username passed to getStudentByGBIdAndUsername"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { gradebook.setStudents(null); Criteria crit = session.createCriteria(StudentGradesImpl.class).add( Expression.eq("gradebook", gradebook)).add(Expression.eq("username", username).ignoreCase()); StudentGrades student = (StudentGrades)crit.uniqueResult(); return student; } }; return (StudentGrades) getHibernateTemplate().execute(hcb); } public void updateStudent(StudentGrades student) throws IllegalArgumentException { if (student == null) { throw new IllegalArgumentException("Null Argument"); } else { HibernateTemplate temp = getHibernateTemplate(); temp.saveOrUpdate(student); } } public List getUsernamesInGradebook(final Gradebook gradebook) { if (gradebook == null) { throw new IllegalArgumentException("Null gradebook passed to getUsernamesInGradebook"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery("findUsernamesInGradebook"); q.setParameter("gradebook", gradebook); return q.list(); } }; return (List) getHibernateTemplate().execute(hcb); } }