/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java $
* $Id: PublishedAssessmentFacadeQueries.java 121508 2013-03-20 22:29:31Z ktsao@stanford.edu $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 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.tool.assessment.facade;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Vector;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.sakaiproject.authz.cover.SecurityService;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.content.api.ContentResource;
import org.sakaiproject.entity.api.ResourceProperties;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.exception.TypeException;
import org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.cover.SiteService;
import org.sakaiproject.spring.SpringBeanLocator;
import org.sakaiproject.tool.assessment.data.dao.assessment.Answer;
import org.sakaiproject.tool.assessment.data.dao.assessment.AnswerFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl;
import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentData;
import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.EvaluationModel;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemData;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemText;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAccessControl;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAnswer;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAnswerFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAssessmentData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAttachmentData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedEvaluationModel;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemFeedback;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemText;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSectionMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedSecuredIPAddress;
import org.sakaiproject.tool.assessment.data.dao.assessment.SectionAttachment;
import org.sakaiproject.tool.assessment.data.dao.assessment.SectionData;
import org.sakaiproject.tool.assessment.data.dao.assessment.SectionMetaData;
import org.sakaiproject.tool.assessment.data.dao.assessment.SecuredIPAddress;
import org.sakaiproject.tool.assessment.data.dao.authz.AuthorizationData;
import org.sakaiproject.tool.assessment.data.dao.grading.AssessmentGradingData;
import org.sakaiproject.tool.assessment.data.dao.shared.TypeD;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAccessControlIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAttachmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.EvaluationModelIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemMetaDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.SectionAttachmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.SectionDataIfc;
import org.sakaiproject.tool.assessment.facade.util.PagingUtilQueriesAPI;
import org.sakaiproject.tool.assessment.integration.context.IntegrationContextFactory;
import org.sakaiproject.tool.assessment.integration.helper.ifc.GradebookServiceHelper;
import org.sakaiproject.tool.assessment.integration.helper.ifc.PublishingTargetHelper;
import org.sakaiproject.tool.assessment.osid.shared.impl.IdImpl;
import org.sakaiproject.tool.assessment.services.PersistenceService;
import org.sakaiproject.tool.assessment.services.assessment.AssessmentService;
import org.sakaiproject.tool.cover.ToolManager;
import org.sakaiproject.user.cover.UserDirectoryService;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class PublishedAssessmentFacadeQueries extends HibernateDaoSupport
implements PublishedAssessmentFacadeQueriesAPI {
private static Log log = LogFactory
.getLog(PublishedAssessmentFacadeQueries.class);
public static final String STARTDATE = "assessmentAccessControl.startDate";
public static final String DUEDATE = "assessmentAccessControl.dueDate";
public static final String RETRACTDATE = "assessmentAccessControl.retractDate";
public static final String RELEASETO = "assessmentAccessControl.releaseTo";
public static final String PUB_RELEASETO = "releaseTo";
public static final String PUB_STARTDATE = "startDate";
public static final String PUB_DUEDATE = "dueDate";
public static final String TITLE = "title";
public static final String GRADE = "finalScore";
public static final String DUE = "dueDate";
public static final String RAW = "totalAutoScore";
public static final String TIME = "timeElapsed";
public static final String SUBMITTED = "submittedDate";
public PublishedAssessmentFacadeQueries() {
}
public IdImpl getId(String id) {
return new IdImpl(id);
}
public IdImpl getId(Long id) {
return new IdImpl(id);
}
public IdImpl getId(long id) {
return new IdImpl(id);
}
public IdImpl getAssessmentId(String id) {
return new IdImpl(id);
}
public IdImpl getAssessmentId(Long id) {
return new IdImpl(id);
}
public IdImpl getAssessmentId(long id) {
return new IdImpl(id);
}
public IdImpl getAssessmentTemplateId(String id) {
return new IdImpl(id);
}
public IdImpl getAssessmentTemplateId(Long id) {
return new IdImpl(id);
}
public IdImpl getAssessmentTemplateId(long id) {
return new IdImpl(id);
}
public PublishedAssessmentData preparePublishedAssessment(AssessmentData a){
String protocol = ServerConfigurationService.getServerUrl();
PublishedAssessmentData publishedAssessment = new PublishedAssessmentData(
a.getTitle(), a.getDescription(), a.getComments(),
TypeFacade.HOMEWORK, a.getInstructorNotification(), a
.getTesteeNotification(), a.getMultipartAllowed(), a
.getStatus(), AgentFacade.getAgentString(), new Date(),
AgentFacade.getAgentString(), new Date());
// publishedAssessment.setAssessment(a);
publishedAssessment.setAssessmentId(a.getAssessmentBaseId());
// section set
Set publishedSectionSet = preparePublishedSectionSet(
publishedAssessment, a.getSectionSet(), protocol);
publishedAssessment.setSectionSet(publishedSectionSet);
// access control
PublishedAccessControl publishedAccessControl = preparePublishedAccessControl(
publishedAssessment, (AssessmentAccessControl) a
.getAssessmentAccessControl());
publishedAssessment.setAssessmentAccessControl(publishedAccessControl);
// evaluation model
PublishedEvaluationModel publishedEvaluationModel = preparePublishedEvaluationModel(
publishedAssessment, (EvaluationModel) a.getEvaluationModel());
publishedAssessment.setEvaluationModel(publishedEvaluationModel);
// feedback
PublishedFeedback publishedFeedback = preparePublishedFeedback(
publishedAssessment, (AssessmentFeedback) a
.getAssessmentFeedback());
publishedAssessment.setAssessmentFeedback(publishedFeedback);
// metadata
Set publishedMetaDataSet = preparePublishedMetaDataSet(
publishedAssessment, a.getAssessmentMetaDataSet());
log.debug("******* metadata set" + a.getAssessmentMetaDataSet());
log.debug("******* published metadata set" + publishedMetaDataSet);
publishedAssessment.setAssessmentMetaDataSet(publishedMetaDataSet);
// IPAddress
Set publishedIPSet = preparePublishedSecuredIPSet(publishedAssessment,
a.getSecuredIPAddressSet());
publishedAssessment.setSecuredIPAddressSet(publishedIPSet);
// attachmentSet
Set publishedAssessmentAttachmentSet = preparePublishedAssessmentAttachmentSet(
publishedAssessment, a.getAssessmentAttachmentSet(), protocol);
publishedAssessment
.setAssessmentAttachmentSet(publishedAssessmentAttachmentSet);
return publishedAssessment;
}
public PublishedFeedback preparePublishedFeedback(
PublishedAssessmentData p, AssessmentFeedback a) {
if (a == null) {
return null;
}
PublishedFeedback publishedFeedback = new PublishedFeedback(a
.getFeedbackDelivery(), a.getFeedbackComponentOption(),a.getFeedbackAuthoring(), a
.getEditComponents(), a.getShowQuestionText(), a
.getShowStudentResponse(), a.getShowCorrectResponse(), a
.getShowStudentScore(), a.getShowStudentQuestionScore(), a
.getShowQuestionLevelFeedback(), a
.getShowSelectionLevelFeedback(), a.getShowGraderComments(), a
.getShowStatistics());
publishedFeedback.setAssessmentBase(p);
return publishedFeedback;
}
public PublishedAccessControl preparePublishedAccessControl(
PublishedAssessmentData p, AssessmentAccessControl a) {
if (a == null) {
return new PublishedAccessControl();
}
PublishedAccessControl publishedAccessControl = new PublishedAccessControl(
a.getSubmissionsAllowed(), a.getSubmissionsSaved(), a
.getAssessmentFormat(), a.getBookMarkingItem(), a
.getTimeLimit(), a.getTimedAssessment(), a
.getRetryAllowed(), a.getLateHandling(), a
.getStartDate(), a.getDueDate(), a.getScoreDate(), a
.getFeedbackDate());
publishedAccessControl.setRetractDate(a.getRetractDate());
publishedAccessControl.setAutoSubmit(a.getAutoSubmit());
publishedAccessControl.setItemNavigation(a.getItemNavigation());
publishedAccessControl.setItemNumbering(a.getItemNumbering());
publishedAccessControl.setSubmissionMessage(a.getSubmissionMessage());
publishedAccessControl.setReleaseTo(a.getReleaseTo());
publishedAccessControl.setUsername(a.getUsername());
publishedAccessControl.setPassword(a.getPassword());
publishedAccessControl.setFinalPageUrl(a.getFinalPageUrl());
publishedAccessControl.setUnlimitedSubmissions(a
.getUnlimitedSubmissions());
publishedAccessControl.setMarkForReview(a.getMarkForReview());
publishedAccessControl.setAssessmentBase(p);
return publishedAccessControl;
}
public PublishedEvaluationModel preparePublishedEvaluationModel(
PublishedAssessmentData p, EvaluationModel e) {
if (e == null) {
return null;
}
PublishedEvaluationModel publishedEvaluationModel = new PublishedEvaluationModel(
e.getEvaluationComponents(), e.getScoringType(), e
.getNumericModelId(), e.getFixedTotalScore(), e
.getGradeAvailable(), e.getIsStudentIdPublic(), e
.getAnonymousGrading(), e.getAutoScoring(), e
.getToGradeBook());
publishedEvaluationModel.setAssessmentBase(p);
return publishedEvaluationModel;
}
public Set preparePublishedMetaDataSet(PublishedAssessmentData p,
Set metaDataSet) {
HashSet h = new HashSet();
Iterator i = metaDataSet.iterator();
while (i.hasNext()) {
AssessmentMetaData metaData = (AssessmentMetaData) i.next();
PublishedMetaData publishedMetaData = new PublishedMetaData(p,
metaData.getLabel(), metaData.getEntry());
h.add(publishedMetaData);
}
return h;
}
public Set preparePublishedSecuredIPSet(PublishedAssessmentData p, Set ipSet) {
HashSet h = new HashSet();
Iterator i = ipSet.iterator();
while (i.hasNext()) {
SecuredIPAddress ip = (SecuredIPAddress) i.next();
PublishedSecuredIPAddress publishedIP = new PublishedSecuredIPAddress(
p, ip.getHostname(), ip.getIpAddress());
h.add(publishedIP);
}
return h;
}
public Set preparePublishedSectionSet(
PublishedAssessmentData publishedAssessment, Set sectionSet,
String protocol) {
log.debug("**published section size = " + sectionSet.size());
HashSet h = new HashSet();
Iterator i = sectionSet.iterator();
while (i.hasNext()) {
SectionData section = (SectionData) i.next();
// TODO note: 4/28 need to check if a part is random draw , if it is
// then need to add questions from pool to this section, at this
// point,
PublishedSectionData publishedSection = new PublishedSectionData(
section.getDuration(), section.getSequence(), section
.getTitle(), section.getDescription(), section
.getTypeId(), section.getStatus(), section
.getCreatedBy(), section.getCreatedDate(), section
.getLastModifiedBy(), section.getLastModifiedDate());
Set publishedSectionAttachmentSet = preparePublishedSectionAttachmentSet(
publishedSection, section.getSectionAttachmentSet(),
protocol);
publishedSection
.setSectionAttachmentSet(publishedSectionAttachmentSet);
Set publishedItemSet = preparePublishedItemSet(publishedSection,
section.getItemSet(), protocol);
publishedSection.setItemSet(publishedItemSet);
Set publishedMetaDataSet = preparePublishedSectionMetaDataSet(
publishedSection, section.getSectionMetaDataSet());
publishedSection.setSectionMetaDataSet(publishedMetaDataSet);
publishedSection.setAssessment(publishedAssessment);
h.add(publishedSection);
}
return h;
}
public Set preparePublishedSectionMetaDataSet(
PublishedSectionData publishedSection, Set metaDataSet) {
HashSet h = new HashSet();
Iterator n = metaDataSet.iterator();
while (n.hasNext()) {
SectionMetaData sectionMetaData = (SectionMetaData) n.next();
PublishedSectionMetaData publishedSectionMetaData = new PublishedSectionMetaData(
publishedSection, sectionMetaData.getLabel(),
sectionMetaData.getEntry());
h.add(publishedSectionMetaData);
}
return h;
}
public Set preparePublishedItemSet(PublishedSectionData publishedSection,
Set itemSet, String protocol) {
log.debug("**published item size = " + itemSet.size());
HashSet h = new HashSet();
Iterator j = itemSet.iterator();
while (j.hasNext()) {
ItemData item = (ItemData) j.next();
PublishedItemData publishedItem = new PublishedItemData(
publishedSection, item.getSequence(), item.getDuration(),
item.getInstruction(), item.getDescription(), item
.getTypeId(), item.getGrade(), item.getScore(), item.getDiscount(),
item.getHint(), item.getHasRationale(), item.getStatus(),
item.getCreatedBy(), item.getCreatedDate(), item
.getLastModifiedBy(), item.getLastModifiedDate(),
null, null, null, // set ItemTextSet, itemMetaDataSet and
// itemFeedbackSet later
item.getTriesAllowed(), item.getPartialCreditFlag());
Set publishedItemTextSet = preparePublishedItemTextSet(
publishedItem, item.getItemTextSet());
Set publishedItemMetaDataSet = preparePublishedItemMetaDataSet(
publishedItem, item.getItemMetaDataSet());
Set publishedItemFeedbackSet = preparePublishedItemFeedbackSet(
publishedItem, item.getItemFeedbackSet());
Set publishedItemAttachmentSet = preparePublishedItemAttachmentSet(
publishedItem, item.getItemAttachmentSet(), protocol);
publishedItem.setItemTextSet(publishedItemTextSet);
publishedItem.setItemMetaDataSet(publishedItemMetaDataSet);
publishedItem.setItemFeedbackSet(publishedItemFeedbackSet);
publishedItem.setItemAttachmentSet(publishedItemAttachmentSet);
h.add(publishedItem);
}
return h;
}
public Set preparePublishedItemTextSet(PublishedItemData publishedItem,
Set itemTextSet) {
log.debug("**published item text size = " + itemTextSet.size());
HashSet h = new HashSet();
Iterator k = itemTextSet.iterator();
while (k.hasNext()) {
ItemText itemText = (ItemText) k.next();
log.debug("**item text id =" + itemText.getId());
PublishedItemText publishedItemText = new PublishedItemText(
publishedItem, itemText.getSequence(), itemText.getText(),
null);
Set publishedAnswerSet = preparePublishedAnswerSet(
publishedItemText, itemText.getAnswerSet());
publishedItemText.setAnswerSet(publishedAnswerSet);
h.add(publishedItemText);
}
return h;
}
public Set preparePublishedItemMetaDataSet(PublishedItemData publishedItem,
Set itemMetaDataSet) {
HashSet h = new HashSet();
Iterator n = itemMetaDataSet.iterator();
while (n.hasNext()) {
ItemMetaData itemMetaData = (ItemMetaData) n.next();
// The itemMetaData.getEntry() is actually the pending/core part id.
// What should be used is the published part id.
// However, the published part id has not been created at this point.
// Therefore, we have to update it later.
// I really don't think this is good. I would like to remove PARTID
// from the ItemMetaData. However, there are lots of changes involved and
// I don't have time for this now. Will do it in later release.
PublishedItemMetaData publishedItemMetaData = new PublishedItemMetaData(
publishedItem, itemMetaData.getLabel(), itemMetaData
.getEntry());
h.add(publishedItemMetaData);
}
return h;
}
public Set preparePublishedItemFeedbackSet(PublishedItemData publishedItem,
Set itemFeedbackSet) {
HashSet h = new HashSet();
Iterator o = itemFeedbackSet.iterator();
while (o.hasNext()) {
ItemFeedback itemFeedback = (ItemFeedback) o.next();
PublishedItemFeedback publishedItemFeedback = new PublishedItemFeedback(
publishedItem, itemFeedback.getTypeId(), itemFeedback
.getText());
h.add(publishedItemFeedback);
}
return h;
}
public Set preparePublishedItemAttachmentSet(
PublishedItemData publishedItem, Set itemAttachmentSet,
String protocol) {
HashSet h = new HashSet();
Iterator o = itemAttachmentSet.iterator();
while (o.hasNext()) {
ItemAttachment itemAttachment = (ItemAttachment) o.next();
try {
// create a copy of the resource
AssessmentService service = new AssessmentService();
ContentResource cr_copy = service.createCopyOfContentResource(
itemAttachment.getResourceId(), itemAttachment
.getFilename());
// get relative path
String url = getRelativePath(cr_copy.getUrl(), protocol);
PublishedItemAttachment publishedItemAttachment = new PublishedItemAttachment(
null, publishedItem, cr_copy.getId(), itemAttachment
.getFilename(), itemAttachment.getMimeType(),
itemAttachment.getFileSize(), itemAttachment
.getDescription(), url, itemAttachment
.getIsLink(), itemAttachment.getStatus(),
itemAttachment.getCreatedBy(), itemAttachment
.getCreatedDate(), itemAttachment
.getLastModifiedBy(), itemAttachment
.getLastModifiedDate());
h.add(publishedItemAttachment);
} catch (Exception e) {
log.warn(e.getMessage());
}
}
return h;
}
public String getRelativePath(String url, String protocol) {
// replace whitespace with %20
url = replaceSpace(url);
String location = url;
int index = url.lastIndexOf(protocol);
if (index == 0) {
location = url.substring(protocol.length());
}
return location;
}
public Set preparePublishedSectionAttachmentSet(
PublishedSectionData publishedSection, Set sectionAttachmentSet,
String protocol) {
HashSet h = new HashSet();
Iterator o = sectionAttachmentSet.iterator();
while (o.hasNext()) {
SectionAttachment sectionAttachment = (SectionAttachment) o.next();
try {
// create a copy of the resource
AssessmentService service = new AssessmentService();
ContentResource cr_copy = service.createCopyOfContentResource(
sectionAttachment.getResourceId(), sectionAttachment
.getFilename());
// get relative path
String url = getRelativePath(cr_copy.getUrl(), protocol);
PublishedSectionAttachment publishedSectionAttachment = new PublishedSectionAttachment(
null, publishedSection, cr_copy.getId(),
sectionAttachment.getFilename(), sectionAttachment
.getMimeType(),
sectionAttachment.getFileSize(), sectionAttachment
.getDescription(), url, sectionAttachment
.getIsLink(), sectionAttachment.getStatus(),
sectionAttachment.getCreatedBy(), sectionAttachment
.getCreatedDate(), sectionAttachment
.getLastModifiedBy(), sectionAttachment
.getLastModifiedDate());
h.add(publishedSectionAttachment);
} catch (Exception e) {
log.warn(e.getMessage());
}
}
return h;
}
public Set preparePublishedAssessmentAttachmentSet(
PublishedAssessmentData publishedAssessment,
Set assessmentAttachmentSet, String protocol) {
HashSet h = new HashSet();
Iterator o = assessmentAttachmentSet.iterator();
while (o.hasNext()) {
AssessmentAttachment assessmentAttachment = (AssessmentAttachment) o
.next();
try {
// create a copy of the resource
AssessmentService service = new AssessmentService();
ContentResource cr_copy = service.createCopyOfContentResource(
assessmentAttachment.getResourceId(),
assessmentAttachment.getFilename());
// get relative path
String url = getRelativePath(cr_copy.getUrl(), protocol);
PublishedAssessmentAttachment publishedAssessmentAttachment = new PublishedAssessmentAttachment(
null, publishedAssessment, cr_copy.getId(),
assessmentAttachment.getFilename(),
assessmentAttachment.getMimeType(),
assessmentAttachment.getFileSize(),
assessmentAttachment.getDescription(), url,
assessmentAttachment.getIsLink(), assessmentAttachment
.getStatus(), assessmentAttachment
.getCreatedBy(), assessmentAttachment
.getCreatedDate(), assessmentAttachment
.getLastModifiedBy(), assessmentAttachment
.getLastModifiedDate());
h.add(publishedAssessmentAttachment);
} catch (Exception e) {
log.warn(e.getMessage());
}
}
return h;
}
public Set preparePublishedAnswerSet(PublishedItemText publishedItemText,
Set answerSet) {
log.debug("**published answer size = " + answerSet.size());
HashSet h = new HashSet();
Iterator l = answerSet.iterator();
while (l.hasNext()) {
Answer answer = (Answer) l.next();
PublishedAnswer publishedAnswer = new PublishedAnswer(
publishedItemText, answer.getText(), answer.getSequence(),
answer.getLabel(), answer.getIsCorrect(),
answer.getGrade(), answer.getScore(), answer.getPartialCredit(), answer.getDiscount(), null);
Set publishedAnswerFeedbackSet = preparePublishedAnswerFeedbackSet(
publishedAnswer, answer.getAnswerFeedbackSet());
publishedAnswer.setAnswerFeedbackSet(publishedAnswerFeedbackSet);
h.add(publishedAnswer);
}
return h;
}
public Set preparePublishedAnswerFeedbackSet(
PublishedAnswer publishedAnswer, Set answerFeedbackSet) {
HashSet h = new HashSet();
Iterator m = answerFeedbackSet.iterator();
while (m.hasNext()) {
AnswerFeedback answerFeedback = (AnswerFeedback) m.next();
PublishedAnswerFeedback publishedAnswerFeedback = new PublishedAnswerFeedback(
publishedAnswer, answerFeedback.getTypeId(), answerFeedback
.getText());
h.add(publishedAnswerFeedback);
}
return h;
}
public PublishedAssessmentFacade getPublishedAssessment(Long assessmentId) {
return getPublishedAssessment(assessmentId, true);
}
public PublishedAssessmentFacade getPublishedAssessment(Long assessmentId, boolean withGroupsInfo) {
PublishedAssessmentData a = loadPublishedAssessment(assessmentId);
a.setSectionSet(getSectionSetForAssessment(a));
String releaseToGroups = "";
if (withGroupsInfo) {
//TreeMap groupsForSite = getGroupsForSite();
// SAM-799
String siteId = getPublishedAssessmentSiteId(assessmentId.toString());
TreeMap groupsForSite = getGroupsForSite(siteId);
releaseToGroups = getReleaseToGroupsAsString(groupsForSite, assessmentId);
}
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a, releaseToGroups);
return f;
}
public Long getPublishedAssessmentId(Long assessmentId) {
List list = getHibernateTemplate()
.find(
"from PublishedAssessmentData as p where p.assessmentId=? order by p.createdDate desc",
assessmentId);
Long publishedId = Long.valueOf(0);
if (!list.isEmpty()) {
PublishedAssessmentData f = (PublishedAssessmentData) list.get(0);
publishedId = f.getPublishedAssessmentId();
}
return publishedId;
}
public PublishedAssessmentFacade publishAssessment(
AssessmentFacade assessment) throws Exception {
PublishedAssessmentData publishedAssessment = preparePublishedAssessment(
(AssessmentData) assessment.getData());
try {
saveOrUpdate(publishedAssessment);
} catch (Exception e) {
throw e;
}
// reset PARTID in ItemMetaData to the section of the newly created section
// I really don't think PARTID should be in ItemMetaData. However, there will
// be lots of changes invloved if I remove PARTID from ItemMetaData. I need
// to spend time to evaulate and make the changes - not able to do this at
// this point.
Set sectionSet = publishedAssessment.getSectionSet();
Iterator sectionIter = sectionSet.iterator();
while (sectionIter.hasNext()) {
PublishedSectionData section = (PublishedSectionData) sectionIter.next();
Set itemSet = section.getItemSet();
Iterator itemIter = itemSet.iterator();
while (itemIter.hasNext()) {
PublishedItemData item = (PublishedItemData) itemIter.next();
Set itemMetaDataSet = item.getItemMetaDataSet();
Iterator itemMetaDataIter = itemMetaDataSet.iterator();
while (itemMetaDataIter.hasNext()) {
PublishedItemMetaData itemMetaData = (PublishedItemMetaData) itemMetaDataIter.next();
if (itemMetaData.getLabel() != null && itemMetaData.getLabel().equals(ItemMetaDataIfc.PARTID)) {
log.debug("sectionId = " + section.getSectionId());
itemMetaData.setEntry(section.getSectionId().toString());
}
}
}
}
// add to gradebook
if (publishedAssessment.getEvaluationModel() != null) {
String toGradebook = publishedAssessment.getEvaluationModel()
.getToGradeBook();
boolean integrated = IntegrationContextFactory.getInstance()
.isIntegrated();
GradebookExternalAssessmentService g = null;
if (integrated) {
g = (GradebookExternalAssessmentService) SpringBeanLocator.getInstance().getBean(
"org.sakaiproject.service.gradebook.GradebookExternalAssessmentService");
}
GradebookServiceHelper gbsHelper = IntegrationContextFactory
.getInstance().getGradebookServiceHelper();
if (gbsHelper.gradebookExists(GradebookFacade.getGradebookUId(), g)
&& toGradebook != null
&& toGradebook
.equals(EvaluationModelIfc.TO_DEFAULT_GRADEBOOK
.toString())) {
try {
gbsHelper.addToGradebook(publishedAssessment, g);
} catch (Exception e) {
log.error("Removing published assessment: " + e);
delete(publishedAssessment);
throw e;
}
}
}
// write authorization
createAuthorization(publishedAssessment);
return new PublishedAssessmentFacade(publishedAssessment);
}
// This method is specific for publish an assessment for preview assessment,
// because it will be deleted after preview is done, and shouldn't talk to
// gradebook.
public PublishedAssessmentFacade publishPreviewAssessment(
AssessmentFacade assessment) {
// boolean addedToGradebook = false;
PublishedAssessmentData publishedAssessment = preparePublishedAssessment(
(AssessmentData) assessment.getData());
publishedAssessment.setStatus(PublishedAssessmentIfc.DEAD_STATUS);
try {
saveOrUpdate(publishedAssessment);
} catch (Exception e) {
log.warn(e.getMessage());
}
// write authorization
createAuthorization(publishedAssessment);
return new PublishedAssessmentFacade(publishedAssessment);
}
public void createAuthorization(PublishedAssessmentData p) {
// conditional processing added by gopalrc Nov 2007
if (p.getAssessmentAccessControl().getReleaseTo()!= null
&& p.getAssessmentAccessControl().getReleaseTo()
.equals(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)) {
createAuthorizationForSelectedGroups(p);
return;
}
String qualifierIdString = p.getPublishedAssessmentId().toString();
Vector v = new Vector();
// 1. get all possible publishing targets (agentKey, agentId)
PublishingTargetHelper ptHelper = IntegrationContextFactory
.getInstance().getPublishingTargetHelper();
HashMap targets = ptHelper.getTargets();
// Fixed for SAK-7251
HashMap trimedTargets = new HashMap();
for (Iterator it = targets.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String key = (String)entry.getKey();
String value = (String)entry.getValue();
trimedTargets.put(key.trim(), value);
}
// 2. get the key of the target selected, it is stored in
// accessControl.releaseTo
AssessmentAccessControlIfc control = p.getAssessmentAccessControl();
String releaseTo = control.getReleaseTo();
if (releaseTo != null) {
String [] targetSelected = new String[1];
targetSelected[0] = releaseTo;
for (int i = 0; i < targetSelected.length; i++) {
String agentKey = targetSelected[i].trim();
// add agentId into v
if (trimedTargets.get(agentKey) != null) {
v.add((String) trimedTargets.get(agentKey));
}
}
}
// 3. give selected site right to view Published Assessment
PersistenceService.getInstance().getAuthzQueriesFacade()
.createAuthorization(AgentFacade.getCurrentSiteId(),
"OWN_PUBLISHED_ASSESSMENT", qualifierIdString);
// 4. create authorization for all the agentId in v
for (int i = 0; i < v.size(); i++) {
String agentId = (String) v.get(i);
log.debug("** agentId=" + agentId);
PersistenceService.getInstance().getAuthzQueriesFacade()
.createAuthorization(agentId, "TAKE_PUBLISHED_ASSESSMENT",
qualifierIdString);
PersistenceService.getInstance().getAuthzQueriesFacade()
.createAuthorization(agentId,
"VIEW_PUBLISHED_ASSESSMENT_FEEDBACK",
qualifierIdString);
PersistenceService.getInstance().getAuthzQueriesFacade()
.createAuthorization(agentId, "GRADE_PUBLISHED_ASSESSMENT",
qualifierIdString);
PersistenceService.getInstance().getAuthzQueriesFacade()
.createAuthorization(agentId, "VIEW_PUBLISHED_ASSESSMENT",
qualifierIdString);
}
}
/**
* added by gopalrc Nov 2007
* Creates Authorizations for Selected Groups
* @param p
*/
public void createAuthorizationForSelectedGroups(PublishedAssessmentData publishedAssessment) {
AuthzQueriesFacadeAPI authz = PersistenceService.getInstance().getAuthzQueriesFacade();
String qualifierIdString = publishedAssessment.getPublishedAssessmentId().toString();
authz.createAuthorization(AgentFacade.getCurrentSiteId(), "OWN_PUBLISHED_ASSESSMENT", qualifierIdString);
authz.createAuthorization(AgentFacade.getCurrentSiteId(), "VIEW_PUBLISHED_ASSESSMENT", qualifierIdString);
List authorizationsToCopy = authz.getAuthorizationByFunctionAndQualifier("TAKE_ASSESSMENT", publishedAssessment.getAssessmentId().toString());
if (authorizationsToCopy != null && authorizationsToCopy.size()>0) {
Iterator authsIter = authorizationsToCopy.iterator();
while (authsIter.hasNext()) {
AuthorizationData adToCopy = (AuthorizationData) authsIter.next();
authz.createAuthorization(adToCopy.getAgentIdString(), "TAKE_PUBLISHED_ASSESSMENT", publishedAssessment.getPublishedAssessmentId().toString());
}
}
}
public AssessmentData loadAssessment(Long assessmentId) {
return (AssessmentData) getHibernateTemplate().load(
AssessmentData.class, assessmentId);
}
public PublishedAssessmentData loadPublishedAssessment(Long assessmentId) {
PublishedAssessmentData ret = null;
try {
ret = (PublishedAssessmentData) getHibernateTemplate().load(
PublishedAssessmentData.class, assessmentId);
} catch (DataAccessException e) {
log.warn("Error accessing Published Assesment: " + assessmentId + " storage returned: " + e);
}
return ret;
}
public ArrayList getAllTakeableAssessments(String orderBy,
boolean ascending, final Integer status) {
String query = "from PublishedAssessmentData as p where p.status=? order by p."
+ orderBy;
if (ascending) {
query += " asc";
} else {
query += " desc";
}
log.debug("Order by " + orderBy);
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setInteger(0, status.intValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(query, new Object[] {status}
// ,
// new org.hibernate.type.Type[] {
// Hibernate.
// INTEGER});
ArrayList assessmentList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData a = (PublishedAssessmentData) list.get(i);
log.debug("Title: " + a.getTitle());
// Don't need sections for list of assessments
// a.setSectionSet(getSectionSetForAssessment(a));
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a);
assessmentList.add(f);
}
return assessmentList;
}
public Integer getNumberOfSubmissions(final String publishedAssessmentId,
final String agentId) {
final String query = "select count(a) from AssessmentGradingData a where a.publishedAssessmentId=? and a.agentId=? and a.forGrade=?";
// Object[] objects = new Object[3];
// objects[0] = new Long(publishedAssessmentId);
// objects[1] = agentId;
// objects[2] = new Boolean(true);
// Type[] types = new Type[3];
// types[0] = Hibernate.LONG;
// types[1] = Hibernate.STRING;
// types[2] = Hibernate.BOOLEAN;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setLong(0, Long.parseLong(publishedAssessmentId));
q.setString(1, agentId);
q.setBoolean(2, true);
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(query, objects, types);
return (Integer) list.get(0);
}
public List getNumberOfSubmissionsOfAllAssessmentsByAgent(
final String agentId) {
final String query = "select new AssessmentGradingData("
+ " a.publishedAssessmentId, count(a)) "
+ " from AssessmentGradingData as a where a.agentId=? and a.forGrade=?"
+ " group by a.publishedAssessmentId";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString(0, agentId);
q.setBoolean(1, true);
return q.list();
};
};
return getHibernateTemplate().executeFind(hcb);
}
public List getNumberOfSubmissionsOfAllAssessmentsByAgent(
final String agentId, final String siteId) {
// modified by gopalrc to take account of group release
final ArrayList groupIds = getSiteGroupIdsForSubmittingAgent(agentId, siteId);
if (groupIds.size() > 0) {
final String query = "select new AssessmentGradingData("
+ " a.publishedAssessmentId, count(a)) "
+ " from AssessmentGradingData as a, AuthorizationData as az "
+ " where a.agentId=:agentId and a.forGrade=:forGrade "
+ " and (az.agentIdString=:siteId or az.agentIdString in (:groupIds)) "
+ " and az.functionId=:functionId and az.qualifierId=a.publishedAssessmentId"
+ " group by a.publishedAssessmentId";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString("agentId", agentId);
q.setBoolean("forGrade", true);
q.setString("siteId", siteId);
q.setParameterList("groupIds", groupIds);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
return getHibernateTemplate().executeFind(hcb);
}
else {
final String query = "select new AssessmentGradingData("
+ " a.publishedAssessmentId, count(a)) "
+ " from AssessmentGradingData as a, AuthorizationData as az "
+ " where a.agentId=:agentId and a.forGrade=:forGrade "
+ " and az.agentIdString=:siteId "
+ " and az.functionId=:functionId and az.qualifierId=a.publishedAssessmentId"
+ " group by a.publishedAssessmentId";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString("agentId", agentId);
q.setBoolean("forGrade", true);
q.setString("siteId", siteId);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
return getHibernateTemplate().executeFind(hcb);
}
}
public ArrayList getAllPublishedAssessments(String sortString) {
String orderBy = getOrderBy(sortString);
List list = getHibernateTemplate().find(
"from PublishedAssessmentData p order by p." + orderBy);
ArrayList assessmentList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData a = (PublishedAssessmentData) list.get(i);
a.setSectionSet(getSectionSetForAssessment(a));
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a);
assessmentList.add(f);
}
return assessmentList;
}
public ArrayList getAllPublishedAssessments(String sortString,
final Integer status) {
final String orderBy = getOrderBy(sortString);
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("from PublishedAssessmentData as p where p.status=? order by p."
+ orderBy);
q.setInteger(0, status.intValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(
// "from PublishedAssessmentData as p where p.status=? order by p." +
// orderBy,
// new Object[] {status}
// , new org.hibernate.type.Type[] {Hibernate.INTEGER});
ArrayList assessmentList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData a = (PublishedAssessmentData) list.get(i);
a.setSectionSet(getSectionSetForAssessment(a));
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a);
assessmentList.add(f);
}
return assessmentList;
}
public ArrayList getAllPublishedAssessments(int pageSize, int pageNumber,
String sortString, Integer status) {
String orderBy = getOrderBy(sortString);
String queryString = "from PublishedAssessmentData p order by p."
+ orderBy;
if (!status.equals(PublishedAssessmentFacade.ANY_STATUS)) {
queryString = "from PublishedAssessmentData p where p.status = ? "
+ " order by p." + orderBy;
}
PagingUtilQueriesAPI pagingUtilQueries = PersistenceService
.getInstance().getPagingUtilQueries();
List pageList = pagingUtilQueries.getAll(pageSize, pageNumber,
queryString, status);
log.debug("**** pageList=" + pageList);
ArrayList assessmentList = new ArrayList();
for (int i = 0; i < pageList.size(); i++) {
PublishedAssessmentData a = (PublishedAssessmentData) pageList
.get(i);
a.setSectionSet(getSectionSetForAssessment(a));
log.debug("**** published assessment=" + a.getTitle());
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a);
log.debug("**** published assessment title=" + f.getTitle());
assessmentList.add(f);
}
return assessmentList;
}
public void removeAssessment(Long assessmentId, String action) {
PublishedAssessmentData assessment = (PublishedAssessmentData) getHibernateTemplate()
.load(PublishedAssessmentData.class, assessmentId);
// for preview, delete assessment
// for others, simply set pub assessment to inactive
if (action == null || action.equals("preview")) {
delete(assessment);
// remove authorization
PersistenceService.getInstance().getAuthzQueriesFacade()
.removeAuthorizationByQualifier(
assessment.getPublishedAssessmentId().toString(),
true);
}
else {
assessment.setStatus(PublishedAssessmentIfc.DEAD_STATUS);
try {
saveOrUpdate(assessment);
} catch (Exception e) {
log.warn(e.getMessage());
}
}
}
private String getOrderBy(String sortString) {
String startDate = (PublishedAssessmentFacadeQueries.STARTDATE)
.substring((PublishedAssessmentFacadeQueries.STARTDATE)
.lastIndexOf(".") + 1);
String dueDate = (PublishedAssessmentFacadeQueries.DUEDATE)
.substring((PublishedAssessmentFacadeQueries.DUEDATE)
.lastIndexOf(".") + 1);
String releaseTo = (PublishedAssessmentFacadeQueries.RELEASETO)
.substring((PublishedAssessmentFacadeQueries.RELEASETO)
.lastIndexOf(".") + 1);
if ((sortString).equals(startDate)) {
return PublishedAssessmentFacadeQueries.STARTDATE;
} else if ((sortString).equals(dueDate)) {
return PublishedAssessmentFacadeQueries.DUEDATE;
} else if ((sortString).equals(releaseTo)) {
return PublishedAssessmentFacadeQueries.RELEASETO;
} else {
return PublishedAssessmentFacadeQueries.TITLE;
}
}
public void deleteAllSecuredIP(PublishedAssessmentIfc assessment) {
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
Long assessmentId = assessment.getPublishedAssessmentId();
List ip = getHibernateTemplate()
.find(
"from PublishedSecuredIPAddress s where s.assessment.publishedAssessmentId=?",
assessmentId);
if (ip.size() > 0) {
PublishedSecuredIPAddress s = (PublishedSecuredIPAddress) ip.get(0);
PublishedAssessmentData a = (PublishedAssessmentData) s.getAssessment();
a.setSecuredIPAddressSet(new HashSet());
getHibernateTemplate().deleteAll(ip);
retryCount = 0;
} else
retryCount = 0;
} catch (Exception e) {
log.warn("problem deleting ip address: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public void saveOrUpdate(PublishedAssessmentIfc assessment)
throws Exception {
PublishedAssessmentData data;
if (assessment instanceof PublishedAssessmentFacade)
data = (PublishedAssessmentData) ((PublishedAssessmentFacade) assessment)
.getData();
else
data = (PublishedAssessmentData) assessment;
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(data);
retryCount = 0;
} catch (Exception e) {
log
.warn("problem save or update assessment: "
+ e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
if (retryCount == 0)
throw e;
}
}
}
public ArrayList getBasicInfoOfAllActivePublishedAssessments(
String sortString, final String siteAgentId, boolean ascending) {
Date currentDate = new Date();
String orderBy = getOrderBy(sortString);
String query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, p.lastModifiedDate, p.lastModifiedBy) "
+ " from PublishedAssessmentData p, PublishedAccessControl c, AuthorizationData z "
+ " where c.assessment.publishedAssessmentId = p.publishedAssessmentId and p.status=:status and "
+ " p.publishedAssessmentId=z.qualifierId and z.functionId=:functionId "
//+ " and (z.agentIdString=:siteId or z.agentIdString in (:groupIds)) "
+ " and z.agentIdString=:siteId "
+ " order by p." + orderBy;
if (ascending == true)
query += " asc";
else
query += " desc";
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setInteger("status", 1);
q.setString("functionId", "OWN_PUBLISHED_ASSESSMENT");
q.setString("siteId", siteAgentId);
//q.setParameterList("groupIds", groupIds);
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
// List l = getHibernateTemplate().find(query,
// new Object[] {siteAgentId},
// new org.hibernate.type.Type[] {Hibernate.STRING});
// we will filter the one that is past duedate & retract date
ArrayList list = new ArrayList();
for (int j = 0; j < l.size(); j++) {
PublishedAssessmentData p = (PublishedAssessmentData) l.get(j);
if ((p.getDueDate() == null || (p.getDueDate()).after(currentDate))
&& (p.getRetractDate() == null || (p.getRetractDate())
.after(currentDate))) {
list.add(p);
}
}
ArrayList pubList = new ArrayList();
TreeMap groupsForSite = null;
String releaseToGroups;
String lastModifiedBy = "";
AgentFacade agent = null;
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) list.get(i);
releaseToGroups = null;
if (p.getReleaseTo().equals(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)) {
if (groupsForSite == null) {
groupsForSite = getGroupsForSite(siteAgentId);
}
Long assessmentId = p.getPublishedAssessmentId();
releaseToGroups = getReleaseToGroupsAsString(groupsForSite, assessmentId);
}
agent = new AgentFacade(p.getLastModifiedBy());
if (agent != null) {
lastModifiedBy = agent.getDisplayName();
}
PublishedAssessmentFacade f = new PublishedAssessmentFacade(p
.getPublishedAssessmentId(), p.getTitle(),
p.getReleaseTo(), p.getStartDate(), p.getDueDate(), releaseToGroups, p.getLastModifiedDate(), lastModifiedBy);
pubList.add(f);
}
return pubList;
}
/**
* According to Marc inactive means either the dueDate or the retractDate
* has passed for 1.5 release (IM on 12/17/04)
*
* @param sortString
* @return
*/
public ArrayList getBasicInfoOfAllInActivePublishedAssessments(
String sortString, final String siteAgentId, boolean ascending) {
String orderBy = getOrderBy(sortString);
String query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title,"
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, p.status, p.lastModifiedDate, p.lastModifiedBy) from PublishedAssessmentData p,"
+ " PublishedAccessControl c, AuthorizationData z "
+ " where c.assessment.publishedAssessmentId=p.publishedAssessmentId "
+ " and ((p.status=:activeStatus and (c.dueDate<=:today or c.retractDate<=:today)) or p.status=:editStatus)"
+ " and p.publishedAssessmentId=z.qualifierId and z.functionId=:functionId "
//+ " and (z.agentIdString=:siteId or z.agentIdString in (:groupIds)) "
+ " and z.agentIdString=:siteId "
+ " order by p." + orderBy;
if (ascending)
query += " asc";
else
query += " desc";
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setInteger("activeStatus", 1);
q.setTimestamp("today", new Date());
q.setInteger("editStatus", 3);
q.setString("functionId", "OWN_PUBLISHED_ASSESSMENT");
q.setString("siteId", siteAgentId);
//q.setParameterList("groupIds", groupIds);
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(query,
// new Object[] {new Date(), new Date(),siteAgentId} ,
// new org.hibernate.type.Type[] {Hibernate.TIMESTAMP,
// Hibernate.TIMESTAMP,
// Hibernate.STRING});
ArrayList pubList = new ArrayList();
TreeMap groupsForSite = null;
String releaseToGroups;
String lastModifiedBy = "";
AgentFacade agent = null;
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) list.get(i);
releaseToGroups = null;
if (p.getReleaseTo().equals(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)) {
if (groupsForSite == null) {
groupsForSite = getGroupsForSite(siteAgentId);
}
Long assessmentId = p.getPublishedAssessmentId();
releaseToGroups = getReleaseToGroupsAsString(groupsForSite, assessmentId);
}
agent = new AgentFacade(p.getLastModifiedBy());
if (agent != null) {
lastModifiedBy = agent.getDisplayName();
}
PublishedAssessmentFacade f = new PublishedAssessmentFacade(p
.getPublishedAssessmentId(), p.getTitle(),
p.getReleaseTo(), p.getStartDate(), p.getDueDate(), p.getStatus(), releaseToGroups, p.getLastModifiedDate(), lastModifiedBy);
pubList.add(f);
}
return pubList;
}
/**
* return a set of PublishedSectionData IMPORTANT: 1. we have declared
* SectionData as lazy loading, so we need to initialize it using
* getHibernateTemplate().initialize(java.lang.Object). Unfortunately, we
* are using Spring 1.0.2 which does not support this Hibernate feature. I
* tried upgrading Spring to 1.1.3. Then it failed to load all the OR maps
* correctly. So for now, I am just going to initialize it myself. I will
* take a look at it again next year. - daisyf (12/13/04)
*/
public HashSet getSectionSetForAssessment(PublishedAssessmentIfc assessment) {
List sectionList = getHibernateTemplate().find(
"from PublishedSectionData s where s.assessment.publishedAssessmentId=? ",
assessment.getPublishedAssessmentId());
HashSet set = new HashSet();
for (int j = 0; j < sectionList.size(); j++) {
set.add((PublishedSectionData) sectionList.get(j));
}
return set;
}
// IMPORTANT:
// 1. we do not want any Section info, so set loadSection to false
// 2. We have also declared SectionData as lazy loading. If loadSection is
// set
// to true, we will see null pointer
public PublishedAssessmentFacade getSettingsOfPublishedAssessment(
Long assessmentId) {
PublishedAssessmentData a = loadPublishedAssessment(assessmentId);
Boolean loadSection = Boolean.FALSE;
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a,
loadSection);
return f;
}
public PublishedItemData loadPublishedItem(Long itemId) {
return (PublishedItemData) getHibernateTemplate().load(
PublishedItemData.class, itemId);
}
public PublishedItemText loadPublishedItemText(Long itemTextId) {
return (PublishedItemText) getHibernateTemplate().load(
PublishedItemText.class, itemTextId);
}
// added by daisy - please check the logic - I based this on the
// getBasicInfoOfAllActiveAssessment
// modified by gopalrc - Nov 2007
// to include release to selected groups
/**
*
* @param orderBy
* @param ascending
* @param status
* @param siteId
* @return
*/
public ArrayList getBasicInfoOfAllPublishedAssessments(String orderBy,
boolean ascending, final String siteId) {
final ArrayList groupIds = getSiteGroupIdsForCurrentUser(siteId);
String query = "";
if (groupIds.size() > 0) {
query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, "
+ " c.feedbackDate, f.feedbackDelivery, f.feedbackComponentOption, f.feedbackAuthoring, c.lateHandling, "
+ " c.unlimitedSubmissions, c.submissionsAllowed, em.scoringType, p.status, p.lastModifiedDate, c.timeLimit) "
+ " from PublishedAssessmentData as p, PublishedAccessControl as c,"
+ " PublishedFeedback as f, AuthorizationData as az, PublishedEvaluationModel as em"
+ " where c.assessment.publishedAssessmentId=p.publishedAssessmentId "
+ " and p.publishedAssessmentId = f.assessment.publishedAssessmentId "
+ " and p.publishedAssessmentId = em.assessment.publishedAssessmentId "
+ " and (p.status=:activeStatus or p.status=:editStatus) and (az.agentIdString=:siteId or az.agentIdString in (:groupIds)) "
+ " and az.functionId=:functionId and az.qualifierId=p.publishedAssessmentId"
+ " order by ";
}
else {
query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, "
+ " c.feedbackDate, f.feedbackDelivery, f.feedbackComponentOption, f.feedbackAuthoring, c.lateHandling, "
+ " c.unlimitedSubmissions, c.submissionsAllowed, em.scoringType, p.status, p.lastModifiedDate, c.timeLimit) "
+ " from PublishedAssessmentData as p, PublishedAccessControl as c,"
+ " PublishedFeedback as f, AuthorizationData as az, PublishedEvaluationModel as em"
+ " where c.assessment.publishedAssessmentId=p.publishedAssessmentId "
+ " and p.publishedAssessmentId = f.assessment.publishedAssessmentId "
+ " and p.publishedAssessmentId = em.assessment.publishedAssessmentId "
+ " and (p.status=:activeStatus or p.status=:editStatus) and az.agentIdString=:siteId "
+ " and az.functionId=:functionId and az.qualifierId=p.publishedAssessmentId"
+ " order by ";
}
if (ascending == false) {
if (orderBy.equals(DUE)) {
query += " c." + orderBy + " desc";
} else {
query += " p." + orderBy + " desc";
}
} else {
if (orderBy.equals(DUE)) {
query += " c." + orderBy + " asc";
} else {
query += " p." + orderBy + " asc";
}
}
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setInteger("activeStatus", 1);
q.setInteger("editStatus", 3);
q.setString("siteId", siteId);
if (groupIds.size() > 0) {
q.setParameterList("groupIds", groupIds);
}
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
ArrayList pubList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) list.get(i);
PublishedAssessmentFacade f = new PublishedAssessmentFacade(p
.getPublishedAssessmentId(), p.getTitle(),
p.getReleaseTo(), p.getStartDate(), p.getDueDate(), p
.getRetractDate(), p.getFeedbackDate(), p
.getFeedbackDelivery(), p.getFeedbackComponentOption(), p.getFeedbackAuthoring(), p
.getLateHandling(), p.getUnlimitedSubmissions(), p
.getSubmissionsAllowed(), p.getScoringType(), p.getStatus(), p.getLastModifiedDate(), p.getTimeLimit());
pubList.add(f);
}
return pubList;
}
// This is for instructors view (author index page)
public ArrayList getBasicInfoOfAllPublishedAssessments2(
String sortString, boolean ascending, final String siteAgentId) {
String orderBy = getOrderBy(sortString);
String query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, p.status, p.lastModifiedDate, p.lastModifiedBy, "
+ "c.lateHandling, c.unlimitedSubmissions, c.submissionsAllowed) "
+ " from PublishedAssessmentData p, PublishedAccessControl c, AuthorizationData z "
+ " where c.assessment.publishedAssessmentId = p.publishedAssessmentId "
+ " and p.publishedAssessmentId=z.qualifierId and z.functionId=:functionId "
+ " and z.agentIdString=:siteId and (p.status=:activeStatus or p.status=:editStatus) "
+ " order by p." + orderBy;
if (ascending == true)
query += " asc";
else
query += " desc";
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setString("functionId", "OWN_PUBLISHED_ASSESSMENT");
q.setString("siteId", siteAgentId);
q.setInteger("activeStatus", 1);
q.setInteger("editStatus", 3);
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
ArrayList pubList = new ArrayList();
TreeMap groupsForSite = null;
String releaseToGroups;
String lastModifiedBy = "";
AgentFacade agent = null;
for (int i = 0; i < list.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) list.get(i);
releaseToGroups = null;
if (p.getReleaseTo().equals(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)) {
if (groupsForSite == null) {
groupsForSite = getGroupsForSite(siteAgentId);
}
Long assessmentId = p.getPublishedAssessmentId();
releaseToGroups = getReleaseToGroupsAsString(groupsForSite, assessmentId);
}
agent = new AgentFacade(p.getLastModifiedBy());
if (agent != null) {
lastModifiedBy = agent.getDisplayName();
}
PublishedAssessmentFacade f = new PublishedAssessmentFacade(p
.getPublishedAssessmentId(), p.getTitle(),
p.getReleaseTo(), p.getStartDate(), p.getDueDate(), p.getRetractDate(), p.getStatus(), releaseToGroups,
p.getLastModifiedDate(), lastModifiedBy, p.getLateHandling(), p.getUnlimitedSubmissions(), p.getSubmissionsAllowed());
pubList.add(f);
}
return pubList;
}
/**
* return an array list of the last AssessmentGradingFacade per assessment
* that a user has submitted for grade.
*
* @param agentId
* @param orderBy
* @param ascending
* @return
*/
public ArrayList getBasicInfoOfLastSubmittedAssessments(
final String agentId, String orderBy, boolean ascending) {
// 1. get total no. of submission per assessment by the given agent
// HashMap h = getTotalSubmissionPerAssessment(agentId);
final String query = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p"
+ " where a.publishedAssessmentId = p.publishedAssessmentId and a.forGrade=? and a.agentId=?"
+ " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
/*
* The sorting for each type will be done in the action listener. if
* (orderBy.equals(TITLE)) { query += ", p." + orderBy; } else if
* (!orderBy.equals(SUBMITTED)) { query += ", a." + orderBy; } if
* (!orderBy.equals(SUBMITTED)) { if (ascending == false) { query += "
* desc"; } else { query += " asc"; } }
*/
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setBoolean(0, true);
q.setString(1, agentId);
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// ArrayList list = (ArrayList) getHibernateTemplate().find(query,
// new Object[] {agentId}
// ,
// new org.hibernate.type.Type[] {Hibernate.STRING});
ArrayList assessmentList = new ArrayList();
Long current = new Long("0");
// Date currentDate = new Date();
for (int i = 0; i < list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) list.get(i);
// criteria: only want the most recently submitted assessment from a
// given user.
if (!a.getPublishedAssessmentId().equals(current)) {
current = a.getPublishedAssessmentId();
AssessmentGradingData f = a;
assessmentList.add(f);
}
}
return assessmentList;
}
/**
* total submitted for grade returns HashMap (Long publishedAssessmentId,
* Integer totalSubmittedForGrade);
*/
public HashMap getTotalSubmissionPerAssessment(String agentId) {
List l = getNumberOfSubmissionsOfAllAssessmentsByAgent(agentId);
HashMap h = new HashMap();
for (int i = 0; i < l.size(); i++) {
AssessmentGradingData d = (AssessmentGradingData) l.get(i);
h.put(d.getPublishedAssessmentId(), Integer.valueOf(d
.getTotalSubmitted()));
log.debug("pId=" + d.getPublishedAssessmentId() + " submitted="
+ d.getTotalSubmitted());
}
return h;
}
public HashMap getTotalSubmissionPerAssessment(String agentId, String siteId) {
List l = getNumberOfSubmissionsOfAllAssessmentsByAgent(agentId, siteId);
HashMap h = new HashMap();
for (int i = 0; i < l.size(); i++) {
AssessmentGradingData d = (AssessmentGradingData) l.get(i);
h.put(d.getPublishedAssessmentId(), Integer.valueOf(d
.getTotalSubmitted()));
log.debug("pId=" + d.getPublishedAssessmentId() + " submitted="
+ d.getTotalSubmitted());
}
return h;
}
public Integer getTotalSubmission(final String agentId,
final Long publishedAssessmentId) {
final String query = "select count(a) from AssessmentGradingData a where a.forGrade=? "
+ " and a.agentId=? and a.publishedAssessmentId=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setBoolean(0, true);
q.setString(1, agentId);
q.setLong(2, publishedAssessmentId.longValue());
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
// List l = getHibernateTemplate().find(query,
// new Object[] {agentId,
// publishedAssessmentId}
// ,
// new org.hibernate.type.Type[] {
// Hibernate.STRING, Hibernate.LONG});
return (Integer) l.get(0);
}
public PublishedAssessmentFacade getPublishedAssessmentIdByAlias(
String alias) {
return getPublishedAssessmentIdByMetaLabel("ALIAS", alias);
}
public PublishedAssessmentFacade getPublishedAssessmentIdByMetaLabel(
final String label, final String entry) {
final String query = "select p " + " from PublishedAssessmentData p, "
+ " PublishedMetaData m where p=m.assessment "
+ " and m.label=? and m.entry=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString(0, label);
q.setString(1, entry);
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
// List l = getHibernateTemplate().find(query,
// new Object[] {label, entry}
// ,
// new org.hibernate.type.Type[] {
// Hibernate.STRING, Hibernate.STRING});
if (l.size() > 0) {
PublishedAssessmentData p = (PublishedAssessmentData) l.get(0);
p.setSectionSet(getSectionSetForAssessment(p));
PublishedAssessmentFacade f = new PublishedAssessmentFacade(p);
f.setFeedbackComponentOption(p.getAssessmentFeedback().getFeedbackComponentOption());
return f;
} else {
return null;
}
}
public void saveOrUpdateMetaData(PublishedMetaData meta) {
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(meta);
retryCount = 0;
} catch (Exception e) {
log.warn("problem save or update meta data: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public HashMap getFeedbackHash() {
final List listAgentId = new ArrayList();
String siteId = AgentFacade.getCurrentSiteId();
listAgentId.add(siteId);
try {
Site site = SiteService.getSite(siteId);
Collection groups = site.getGroups();
if (groups != null && groups.size() > 0) {
Iterator groupIter = groups.iterator();
while (groupIter.hasNext()) {
Group group = (Group) groupIter.next();
listAgentId.add(group.getId());
}
}
}
catch (IdUnusedException ex) {
// No site available
}
HashMap h = new HashMap();
final String query = "select new PublishedFeedback("
+ " p.assessment.publishedAssessmentId,"
+ " p.feedbackDelivery,p.feedbackComponentOption, p.feedbackAuthoring, p.editComponents, p.showQuestionText,"
+ " p.showStudentResponse, p.showCorrectResponse,"
+ " p.showStudentScore," + " p.showStudentQuestionScore,"
+ " p.showQuestionLevelFeedback, p.showSelectionLevelFeedback,"
+ " p.showGraderComments, p.showStatistics)"
+ " from PublishedFeedback p, AuthorizationData az"
+ " where az.qualifierId = p.assessment.publishedAssessmentId "
+ " and (az.agentIdString in (:agentIdString)) "
+ " and az.functionId=:functionId ";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setParameterList("agentIdString", listAgentId);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
for (int i = 0; i < l.size(); i++) {
PublishedFeedback f = (PublishedFeedback) l.get(i);
h.put(f.getAssessmentId(), f);
}
return h;
}
/**
* this return a HashMap containing (Long publishedAssessmentId,
* PublishedAssessmentFacade publishedAssessment) Note that the
* publishedAssessment is a partial object used for display only. do not use
* it for persisting. It only contains title, releaseTo, startDate, dueDate &
* retractDate
*/
public HashMap getAllAssessmentsReleasedToAuthenticatedUsers() {
HashMap h = new HashMap();
String query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate) "
+ " from PublishedAssessmentData p, PublishedAccessControl c "
+ " where c.assessment = p and c.releaseTo like '%Authenticated Users%'";
List l = getHibernateTemplate().find(query);
for (int i = 0; i < l.size(); i++) {
PublishedAssessmentData p = (PublishedAssessmentData) l.get(i);
h.put(p.getPublishedAssessmentId(),
new PublishedAssessmentFacade(p));
}
return h;
}
public String getPublishedAssessmentOwner(String publishedAssessmentId) {
// HashMap h = new HashMap();
String query = "select a from AuthorizationData a where "
+ " a.functionId=? and a.qualifierId=? ";
Object [] values = {"OWN_PUBLISHED_ASSESSMENT", publishedAssessmentId};
List l = getHibernateTemplate().find(query, values);
if (l.size() > 0) {
AuthorizationData a = (AuthorizationData) l.get(0);
return a.getAgentIdString();
} else
return null;
}
public boolean publishedAssessmentTitleIsUnique(
final Long assessmentBaseId, final String title) {
final String currentSiteId = AgentFacade.getCurrentSiteId();
// String agentString = AgentFacade.getAgentString();
// List list;
boolean isUnique = true;
final String query = "select new PublishedAssessmentData(a.publishedAssessmentId, a.title, a.lastModifiedDate)"
+ " from PublishedAssessmentData a, AuthorizationData z where "
+ " a.title=? and a.publishedAssessmentId!=? and a.status!=? and "
+ " z.functionId=? and "
+ " a.publishedAssessmentId=z.qualifierId and z.agentIdString=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString(0, title);
q.setLong(1, assessmentBaseId.longValue());
q.setInteger(2, 2);
q.setString(3, "OWN_PUBLISHED_ASSESSMENT");
q.setString(4, currentSiteId);
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(query,
// new Object[]{title,assessmentBaseId,currentSiteId},
// new org.hibernate.type.Type[] {Hibernate.STRING, Hibernate.LONG,
// Hibernate.STRING});
if (list.size() > 0)
isUnique = false;
return isUnique;
}
public boolean hasRandomPart(final Long publishedAssessmentId) {
boolean hasRandomPart = false;
final String key = SectionDataIfc.AUTHOR_TYPE;
final String value = SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL
.toString();
final String query = "select s from PublishedSectionData s, PublishedSectionMetaData m where "
+ " s = m.section and s.assessment.publishedAssessmentId=? and "
+ " m.label=? and m.entry=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setLong(0, publishedAssessmentId.longValue());
q.setString(1, key);
q.setString(2, value);
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
// List l = getHibernateTemplate().find(query,
// new Object[]{ publishedAssessmentId, key, value},
// new org.hibernate.type.Type[] {Hibernate.LONG, Hibernate.STRING,
// Hibernate.STRING});
if (l.size() > 0)
hasRandomPart = true;
return hasRandomPart;
}
public List getContainRandomPartAssessmentIds(final Collection assessmentIds) {
if (assessmentIds == null || assessmentIds.size() < 1)
return new ArrayList<Long>();
final String key = SectionDataIfc.AUTHOR_TYPE;
final String value = SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL
.toString();
final String query = "select s.assessment.publishedAssessmentId "
+ "from PublishedSectionData s, PublishedSectionMetaData m "
+ "where s.assessment.publishedAssessmentId in (:ids) and s = m.section and m.label=:label and m.entry=:entry "
+ "group by s.assessment.publishedAssessmentId";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString("label", key);
q.setString("entry", value);
q.setParameterList("ids", assessmentIds);
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
return l;
}
public PublishedItemData getFirstPublishedItem(
final Long publishedAssessmentId) {
final String query = "select i from PublishedAssessmentData p, PublishedSectionData s, "
+ " PublishedItemData i where p.publishedAssessmentId=? and"
+ " p.publishedAssessmentId=s.assessment.publishedAssessmentId and "
+ " s=i.section";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
//final String key = SectionDataIfc.AUTHOR_TYPE;
//final String value = SectionDataIfc.QUESTIONS_AUTHORED_ONE_BY_ONE.toString();
final String query2 = "select s from PublishedAssessmentData p, PublishedSectionData s "
+ " where p.publishedAssessmentId=? and "
+ " p.publishedAssessmentId=s.assessment.publishedAssessmentId ";
final HibernateCallback hcb2 = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query2);
q.setLong(0, publishedAssessmentId.longValue());
//q.setString(1, key);
//q.setString(2, value);
return q.list();
};
};
List sec = getHibernateTemplate().executeFind(hcb2);
PublishedItemData returnItem = null;
if (sec.size() > 0 && l.size() > 0) {
Collections.sort(sec, new SecComparator());
for (int i = 0; i < sec.size(); i++) {
PublishedSectionData thisSec = (PublishedSectionData) sec
.get(i);
ArrayList itemList = new ArrayList();
for (int j = 0; j < l.size(); j++) {
PublishedItemData compItem = (PublishedItemData) l.get(j);
if (compItem.getSection().getSectionId().equals(
thisSec.getSectionId())) {
itemList.add(compItem);
}
}
if (itemList.size() > 0) {
Collections.sort(itemList, new ItemComparator());
returnItem = (PublishedItemData) itemList.get(0);
break;
}
}
}
return returnItem;
}
public List getPublishedItemIds(final Long publishedAssessmentId) {
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select i.itemId from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? and "
+ " p = s.assessment and i.section = s");
q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
return getHibernateTemplate().executeFind(hcb);
// return getHibernateTemplate().find(
// "select i.itemId from PublishedItemData i, PublishedSectionData s, "+
// " PublishedAssessmentData p where p.publishedAssessmentId=? and "+
// " p = s.assessment and i.section = s",
// new Object[] { publishedAssessmentId },
// new org.hibernate.type.Type[] { Hibernate.LONG });
}
public HashSet getPublishedItemSet(final Long publishedAssessmentId, final Long sectionId) {
HashSet itemSet = new HashSet();
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select i from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? "
+ " and i.section.id=? and p = s.assessment and i.section = s");
q.setLong(0, publishedAssessmentId.longValue());
q.setLong(1, sectionId.longValue());
return q.list();
};
};
List assessmentGradings = getHibernateTemplate().executeFind(hcb);
Iterator iter = assessmentGradings.iterator();
PublishedItemData publishedItemData;
while(iter.hasNext()) {
publishedItemData = (PublishedItemData) iter.next();
log.debug("itemId = " + publishedItemData.getItemId());
itemSet.add(publishedItemData);
}
return itemSet;
}
public Long getItemType(final Long publishedItemId) {
final String query = "select p.typeId " + " from PublishedItemData p "
+ " where p.itemId=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setLong(0, publishedItemId.longValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
// List list = getHibernateTemplate().find(query,
// new Object[] { publishedItemId },
// new org.hibernate.type.Type[] { Hibernate.LONG });
if (list.size() > 0)
return (Long) list.get(0);
else
return null;
}
class SecComparator implements Comparator {
public int compare(Object arg0, Object arg1) {
return ((PublishedSectionData) arg0).getSequence().compareTo(
((PublishedSectionData) arg1).getSequence());
}
}
class ItemComparator implements Comparator {
public int compare(Object arg0, Object arg1) {
return ((PublishedItemData) arg0).getSequence().compareTo(
((PublishedItemData) arg1).getSequence());
}
}
public void delete(PublishedAssessmentIfc assessment) {
PublishedAssessmentData data;
if (assessment instanceof PublishedAssessmentFacade)
data = (PublishedAssessmentData) ((PublishedAssessmentFacade) assessment)
.getData();
else
data = (PublishedAssessmentData) assessment;
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().delete(data);
retryCount = 0;
} catch (Exception e) {
log.warn("problem removing publishedAssessment: "
+ e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public HashSet getSectionSetForAssessment(Long publishedAssessmentId) {
List sectionList = getHibernateTemplate().find(
"from PublishedSectionData s where s.assessment.publishedAssessmentId=?",
publishedAssessmentId);
HashSet set = new HashSet();
for (int j = 0; j < sectionList.size(); j++) {
set.add((PublishedSectionData) sectionList.get(j));
}
return set;
}
private String replaceSpace(String tempString) {
String newString = "";
char[] oneChar = new char[1];
for (int i = 0; i < tempString.length(); i++) {
if (tempString.charAt(i) != ' ') {
oneChar[0] = tempString.charAt(i);
String concatString = new String(oneChar);
newString = newString.concat(concatString);
} else {
newString = newString.concat("%20");
}
}
return newString;
}
public boolean isRandomDrawPart(final Long publishedAssessmentId,
final Long sectionId) {
boolean isRandomDrawPart = false;
final String key = SectionDataIfc.AUTHOR_TYPE;
final String value = SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL
.toString();
final String query = "select s from PublishedSectionData s, PublishedSectionMetaData m where "
+ " s = m.section and s.assessment.publishedAssessmentId=? and "
+ " s.id=? and m.label=? and m.entry=?";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setLong(0, publishedAssessmentId.longValue());
q.setLong(1, sectionId.longValue());
q.setString(2, key);
q.setString(3, value);
return q.list();
};
};
List l = getHibernateTemplate().executeFind(hcb);
if (l.size() > 0)
isRandomDrawPart = true;
return isRandomDrawPart;
}
/**
* return an array list of the AssessmentGradingData that a user has
* submitted for grade. one per published assessment, when allAssessments is false,
* and all submissions per published assessment when allAssesments is true.
* If an assessment allows multiple submissions and its grading option is to send highest,
* then return only the submission with highest finalScore. If an assessment
* allows multiple submissions and its grading option is to send last, then
* return only the last submission.
*
* @param agentId
* @param siteId
* @param allAssessments
* @return
*/
public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(
final String agentId, final String siteId, boolean allAssessments) {
// modified by gopalrc to take account of group release
final ArrayList groupIds = getSiteGroupIdsForCurrentUser(siteId);
// sorted by submittedData DESC
final String order_last = " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
// sorted by finalScore DESC
final String order_highest = " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC";
List last_list;
List highest_list;
// Get total no. of submission per assessment by the given agent
if (groupIds.size() > 0) {
final String hql = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=:forGrade and a.agentId=:agentId"
+ " and (az.agentIdString=:siteId or az.agentIdString in (:groupIds)) "
+ " and az.functionId=:functionId and az.qualifierId=p.publishedAssessmentId"
+ " and (p.status=:activeStatus or p.status=:editStatus) ";
final HibernateCallback hcb_last = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql + order_last);
q.setBoolean("forGrade", true);
q.setString("agentId", agentId);
q.setString("siteId", siteId);
q.setParameterList("groupIds", groupIds);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
q.setInteger("activeStatus", 1);
q.setInteger("editStatus", 3);
return q.list();
};
};
// this list is sorted by submittedDate desc.
last_list = getHibernateTemplate().executeFind(hcb_last);
final HibernateCallback hcb_highest = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql + order_highest);
q.setBoolean("forGrade", true);
q.setString("agentId", agentId);
q.setString("siteId", siteId);
q.setParameterList("groupIds", groupIds);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
q.setInteger("activeStatus", 1);
q.setInteger("editStatus", 3);
return q.list();
};
};
// this list is sorted by finalScore desc.
highest_list = getHibernateTemplate().executeFind(hcb_highest);
}
else {
final String hql = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=:forGrade and a.agentId=:agentId"
+ " and az.agentIdString=:siteId "
+ " and az.functionId=:functionId and az.qualifierId=p.publishedAssessmentId"
+ " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
final HibernateCallback hcb_last = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql + order_last);
q.setBoolean("forGrade", true);
q.setString("agentId", agentId);
q.setString("siteId", siteId);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by submittedDate desc.
last_list = getHibernateTemplate().executeFind(hcb_last);
final HibernateCallback hcb_highest = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql + order_highest);
q.setBoolean("forGrade", true);
q.setString("agentId", agentId);
q.setString("siteId", siteId);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by finalScore desc.
highest_list = getHibernateTemplate().executeFind(hcb_highest);
}
//getEvaluationModel();
final String query = "select e.assessment.publishedAssessmentId, e.scoringType, ac.submissionsAllowed " +
"from PublishedEvaluationModel e, PublishedAccessControl ac, AuthorizationData az " +
"where e.assessment.publishedAssessmentId = ac.assessment.publishedAssessmentId " +
"and az.qualifierId = ac.assessment.publishedAssessmentId and az.agentIdString in (:agentIdString) and az.functionId=:functionId";
groupIds.add(siteId);
final HibernateCallback eval_model = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setParameterList("agentIdString", groupIds);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
List l = getHibernateTemplate().executeFind(eval_model);
HashMap scoringTypeMap = new HashMap();
HashMap subissionAllowedMap = new HashMap();
Iterator iter = l.iterator();
while (iter.hasNext()) {
Object o[] = (Object[]) iter.next();
scoringTypeMap.put(o[0], o[1]);
subissionAllowedMap.put(o[0], o[2]);
}
// The sorting for each column will be done in the action listener.
ArrayList assessmentList = new ArrayList();
Long currentid = new Long("0");
Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as
Integer submissionAllowed = null;
boolean multiSubmissionAllowed = false;
// now go through the last_list, and get the first entry in the list for
// each publishedAssessment, if
// not
for (int i = 0; i < last_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
}
else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
}
else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() == 1) {
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
}
if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption)) {
if (!a.getPublishedAssessmentId().equals(currentid) || allAssessments) {
AssessmentGradingData f = a;
if (!a.getPublishedAssessmentId().equals(currentid)) {
f.setIsRecorded(true);
}
assessmentList.add(f);
currentid = a.getPublishedAssessmentId();
}
}
}
// now go through the highest_list ,and get the first entry in the list
// for each publishedAssessment.
for (int i = 0; i < highest_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) highest_list
.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
}
else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
}
else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() > 1) {
multiSubmissionAllowed = true;
}
else {
multiSubmissionAllowed = false;
}
}
else {
multiSubmissionAllowed = true;
}
if (multiSubmissionAllowed && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption))) {
if (!a.getPublishedAssessmentId().equals(currentid) || allAssessments) {
AssessmentGradingData f = a;
if (!a.getPublishedAssessmentId().equals(currentid)) {
f.setIsRecorded(true);
}
assessmentList.add(f);
currentid = a.getPublishedAssessmentId();
}
}
if (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption)) {
AssessmentGradingData f = a;
assessmentList.add(f);
}
}
return assessmentList;
}
public PublishedAssessmentData getBasicInfoOfPublishedAssessment(
final Long publishedId) {
String query = "select new PublishedAssessmentData(p.publishedAssessmentId, p.title, "
+ " c.releaseTo, c.startDate, c.dueDate, c.retractDate, "
+ " c.feedbackDate, f.feedbackDelivery, f.feedbackComponentOption, f.feedbackAuthoring, c.lateHandling, "
+ " c.unlimitedSubmissions, c.submissionsAllowed) "
+ " from PublishedAssessmentData as p, PublishedAccessControl as c,"
+ " PublishedFeedback as f"
+ " where c.assessment.publishedAssessmentId=p.publishedAssessmentId "
+ " and p.publishedAssessmentId = f.assessment.publishedAssessmentId "
+ " and p.publishedAssessmentId=?";
final String hql = query;
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(hql);
q.setLong(0, publishedId.longValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
return (PublishedAssessmentData) list.get(0);
}
public String getPublishedAssessmentSiteId(String publishedAssessmentId) {
String query = "select a from AuthorizationData a " +
"where a.functionId = ? and "
+ "a.qualifierId = ? ";
Object [] values = {"TAKE_PUBLISHED_ASSESSMENT", publishedAssessmentId};
List l = getHibernateTemplate().find(query, values);
PublishedAssessmentData publishedAssessment =
loadPublishedAssessment(Long.valueOf(publishedAssessmentId));
boolean releaseToGroups = AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS.equals(publishedAssessment.getAssessmentAccessControl().getReleaseTo());
for (int i = 0; i < l.size(); i++) {
AuthorizationData a = (AuthorizationData) l.get(i);
if (releaseToGroups) {
String agentId = a.getAgentIdString();
if (siteService.findGroup(agentId) != null && siteService.findGroup(agentId).getContainingSite() != null) {
return siteService.findGroup(a.getAgentIdString()).getContainingSite().getId();
}
}
else {
return a.getAgentIdString();
}
}
return "";
}
/**
* Modified by gopalrc - Jan 2008
* to take account of difference in obtaining question count
* between randomized and non-randomized questions
*/
public Integer getPublishedItemCount(final Long publishedAssessmentId) {
return getPublishedItemCountForNonRandomSections(publishedAssessmentId) +
getPublishedItemCountForRandomSections(publishedAssessmentId);
/*
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select count(i) from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? and "
+ " p = s.assessment and i.section = s");
q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
return (Integer) list.get(0);
*/
}
/**
* gopalrc - Jan 2008
* @param publishedAssessmentId
* @return
*/
public Integer getPublishedItemCountForRandomSections(final Long publishedAssessmentId) {
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select m.entry from PublishedSectionData s, "
+ " PublishedAssessmentData p, PublishedSectionMetaData m "
+ " where p.publishedAssessmentId=:publishedAssessmentId and m.label=:metaDataLabel and "
+ " p = s.assessment and m.section = s ");
q.setLong("publishedAssessmentId", publishedAssessmentId.longValue());
q.setString("metaDataLabel", SectionDataIfc.NUM_QUESTIONS_DRAWN);
//q.setString("metaDataEntry", SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
int sum = 0;
for (int i=0; i<list.size(); i++) {
if (list.get(i) != null) {
sum += Integer.valueOf((String)list.get(i));
}
}
return sum;
}
/**
* gopalrc - Jan 2008
* @param publishedAssessmentId
* @return
*/
public Integer getPublishedItemCountForNonRandomSections(final Long publishedAssessmentId) {
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select count(i) from PublishedItemData i, PublishedSectionData s, "
+ " PublishedAssessmentData p, PublishedSectionMetaData m "
+ " where p.publishedAssessmentId=:publishedAssessmentId and m.label=:metaDataLabel and "
+ " p = s.assessment and i.section = s and m.section = s and m.entry=:metaDataEntry ");
q.setLong("publishedAssessmentId", publishedAssessmentId.longValue());
q.setString("metaDataLabel", SectionDataIfc.AUTHOR_TYPE);
q.setString("metaDataEntry", SectionDataIfc.QUESTIONS_AUTHORED_ONE_BY_ONE.toString());
//q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
return (Integer) list.get(0);
}
/**
* added by gopalrc - Nov 2007
* @param publishedAssessmentId
* @return
*/
public Integer getPublishedSectionCount(final Long publishedAssessmentId) {
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session
.createQuery("select count(s) from PublishedSectionData s, "
+ " PublishedAssessmentData p where p.publishedAssessmentId=? and "
+ " p = s.assessment");
q.setLong(0, publishedAssessmentId.longValue());
return q.list();
};
};
List list = getHibernateTemplate().executeFind(hcb);
return (Integer) list.get(0);
}
public PublishedAttachmentData getPublishedAttachmentData(Long attachmentId) {
String query = "select a from PublishedAttachmentData a where a.attachmentId = ?";
List l = getHibernateTemplate().find(query, attachmentId);
if (l.size() > 0) {
PublishedAttachmentData a = (PublishedAttachmentData) l.get(0);
return a;
} else
return null;
}
public void updateAssessmentLastModifiedInfo(
PublishedAssessmentFacade publishedAssessmentFacade) {
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
AssessmentBaseIfc data = publishedAssessmentFacade.getData();
data.setLastModifiedBy(AgentFacade.getAgentString());
data.setLastModifiedDate(new Date());
retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().update(data);
retryCount = 0;
} catch (Exception e) {
log.warn("problem update assessment: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public void saveOrUpdateSection(SectionFacade section) {
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(section.getData());
retryCount = 0;
} catch (Exception e) {
log.warn("problem save or update section: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public void removeItemAttachment(Long itemAttachmentId) {
PublishedItemAttachment itemAttachment = (PublishedItemAttachment) getHibernateTemplate()
.load(PublishedItemAttachment.class, itemAttachmentId);
ItemDataIfc item = itemAttachment.getItem();
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
if (item != null) { // need to dissociate with item before
// deleting in Hibernate 3
Set set = item.getItemAttachmentSet();
set.remove(itemAttachment);
getHibernateTemplate().delete(itemAttachment);
retryCount = 0;
}
} catch (Exception e) {
log.warn("problem delete itemAttachment: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public PublishedSectionFacade addSection(Long publishedAssessmentId) {
// #1 - get the assessment and attach teh new section to it
// we are working with Data instead of Facade in this method but should
// return
// SectionFacade at the end
PublishedAssessmentData assessment = loadPublishedAssessment(publishedAssessmentId);
// lazy loading on sectionSet, so need to initialize it
Set sectionSet = getSectionSetForAssessment(publishedAssessmentId);
assessment.setSectionSet(sectionSet);
// #2 - will called the section "Section d" here d is the total no. of
// section in this assessment
// #2 section has no default name - per Marc's new mockup
PublishedSectionData section = new PublishedSectionData(
null,
Integer.valueOf(sectionSet.size() + 1), // NEXT section
"", "", TypeD.DEFAULT_SECTION, SectionData.ACTIVE_STATUS,
AgentFacade.getAgentString(), new Date(), AgentFacade
.getAgentString(), new Date());
section.setAssessment(assessment);
section.setAssessmentId(assessment.getAssessmentId());
// add default part type, and question Ordering
section.addSectionMetaData(SectionDataIfc.AUTHOR_TYPE,
SectionDataIfc.QUESTIONS_AUTHORED_ONE_BY_ONE.toString());
section.addSectionMetaData(SectionDataIfc.QUESTIONS_ORDERING,
SectionDataIfc.AS_LISTED_ON_ASSESSMENT_PAGE.toString());
sectionSet.add(section);
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(section);
retryCount = 0;
} catch (Exception e) {
log
.warn("problem save or update assessment: "
+ e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
return new PublishedSectionFacade(section);
}
public PublishedSectionFacade getSection(Long sectionId) {
PublishedSectionData publishedSection = (PublishedSectionData) getHibernateTemplate()
.load(PublishedSectionData.class, sectionId);
return new PublishedSectionFacade(publishedSection);
}
public AssessmentAccessControlIfc loadPublishedAccessControl(
Long publishedAssessmentId) {
List list = getHibernateTemplate()
.find(
"select c from PublishedAssessmentData as p, PublishedAccessControl as c "
+ " where c.assessment.publishedAssessmentId=p.publishedAssessmentId "
+ " and p.publishedAssessmentId = ?",
publishedAssessmentId);
return (PublishedAccessControl) list.get(0);
}
public void saveOrUpdatePublishedAccessControl(
AssessmentAccessControlIfc publishedAccessControl) {
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
getHibernateTemplate().saveOrUpdate(publishedAccessControl);
retryCount = 0;
} catch (Exception e) {
log.warn("problem save or update publishedAccessControl data: "
+ e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
private SecurityService securityService;
private SiteService siteService;
public void setSecurityService(SecurityService securityService) {
this.securityService = securityService;
}
public void setSiteService(SiteService siteService) {
this.siteService = siteService;
}
/**
* added by gopalrc - Nov 2007
` * TODO: should perhaps bemoved to SiteService
* @param siteId
* @return
*/
private ArrayList getSiteGroupIdsForSubmittingAgent(String agentId, String siteId) {
final ArrayList<String> groupIds = new ArrayList<String>();
// To accomodate the problem with Hibernate and empty array parameters
// TODO: this should probably be handled in a more efficient way
groupIds.add("none");
if (siteId == null)
return groupIds;
Collection siteGroups = null;
try {
Site s = siteService.getSite(siteId);
if (s != null)
siteGroups = s.getGroupsWithMember(agentId);
}
catch (IdUnusedException ex) {
// no site found
log.debug("No site found for siteid: " + siteId + "agentid: " + agentId);
}
if (siteGroups != null) {
Iterator groupsIter = siteGroups.iterator();
while (groupsIter.hasNext()) {
Group group = (Group) groupsIter.next();
groupIds.add(group.getId());
}
}
return groupIds;
}
/**
* added by gopalrc - Nov 2007
` * TODO: should perhaps bemoved to SiteService
* @param siteId
* @return
*/
private ArrayList getSiteGroupIdsForCurrentUser(final String siteId) {
String currentUserId = UserDirectoryService.getCurrentUser().getId();
return getSiteGroupIdsForSubmittingAgent(currentUserId, siteId);
}
/**
* added by gopalrc November 2007
*
* @param assessmentId
* @return
*/
private String getReleaseToGroupsAsString(TreeMap groupsForSite, Long assessmentId) {
List releaseToGroups = new ArrayList();
String releaseToGroupsAsString = null;
AuthzQueriesFacadeAPI authz = PersistenceService.getInstance().getAuthzQueriesFacade();
List authorizations = authz.getAuthorizationByFunctionAndQualifier("TAKE_PUBLISHED_ASSESSMENT", assessmentId.toString());
if (authorizations != null && authorizations.size()>0) {
Iterator authsIter = authorizations.iterator();
while (authsIter.hasNext()) {
AuthorizationData ad = (AuthorizationData) authsIter.next();
Object group = groupsForSite.get(ad.getAgentIdString());
if (group != null) {
releaseToGroups.add(group);
}
}
Collections.sort(releaseToGroups);
StringBuilder releaseToGroupsAsStringbuf = new StringBuilder();
if (releaseToGroups != null && releaseToGroups.size()!=0 ) {
String lastGroup = (String) releaseToGroups.get(releaseToGroups.size()-1);
Iterator releaseToGroupsIter = releaseToGroups.iterator();
while (releaseToGroupsIter.hasNext()) {
String group = (String) releaseToGroupsIter.next();
//releaseToGroupsAsString += group;
releaseToGroupsAsStringbuf.append(group);
if (!group.equals(lastGroup) ) {
//releaseToGroupsAsString += ", ";
releaseToGroupsAsStringbuf.append(", ");
}
}
}
releaseToGroupsAsString = releaseToGroupsAsStringbuf.toString();
}
return releaseToGroupsAsString;
}
/**
* added by Sam Ottenhoff Feb 2010
* Returns all groups for site
* @param siteId
* @return
*/
private TreeMap getGroupsForSite(String siteId){
TreeMap sortedGroups = new TreeMap();
Site site = null;
try {
site = SiteService.getSite(siteId);
Collection groups = site.getGroups();
if (groups != null && groups.size() > 0) {
Iterator groupIter = groups.iterator();
while (groupIter.hasNext()) {
Group group = (Group) groupIter.next();
sortedGroups.put(group.getId(), group.getTitle());
}
}
}
catch (IdUnusedException ex) {
// No site available
}
return sortedGroups;
}
/**
* added by gopalrc Nov 2007
* Returns all groups for site
* @return
*/
public TreeMap getGroupsForSite(){
String siteId = ToolManager.getCurrentPlacement().getContext();
return getGroupsForSite(siteId);
}
/**
* added by gopalrc - Jan 2008
* @param publishedAssessmentId
* @return
*/
public List getReleaseToGroupIdsForPublishedAssessment(
final String publishedAssessmentId) {
final String query = "select agentIdString from AuthorizationData az where az.functionId=:functionId and az.qualifierId=:publishedAssessmentId";
final HibernateCallback hcb = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(query);
q.setString("publishedAssessmentId", publishedAssessmentId);
q.setString("functionId", "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
return getHibernateTemplate().executeFind(hcb);
}
public Integer getPublishedAssessmentStatus(Long publishedAssessmentId) {
String query = "select p.status from PublishedAssessmentData p where p.publishedAssessmentId = ?";
List l = getHibernateTemplate().find(query, publishedAssessmentId);
if (l.size() > 0) {
Integer status = (Integer) l.get(0);
return status;
} else {
// just set to AssessmentBaseIfc.DEAD_STATUS
return Integer.valueOf(2);
}
}
public AssessmentAttachmentIfc createAssessmentAttachment(
AssessmentIfc assessment, String resourceId, String filename,
String protocol) {
PublishedAssessmentAttachment attach = null;
Boolean isLink = Boolean.FALSE;
try {
ContentResource cr = AssessmentService.getContentHostingService().getResource(resourceId);
if (cr != null) {
ResourceProperties p = cr.getProperties();
attach = new PublishedAssessmentAttachment();
attach.setAssessment(assessment);
attach.setResourceId(resourceId);
attach.setFilename(filename);
attach.setMimeType(cr.getContentType());
// we want to display kb, so divide by 1000 and round the result
attach.setFileSize(fileSizeInKB(cr.getContentLength()));
if (cr.getContentType().lastIndexOf("url") > -1) {
isLink = Boolean.TRUE;
if (!filename.toLowerCase().startsWith("http")) {
String adjustedFilename = "http://" + filename;
attach.setFilename(adjustedFilename);
} else {
attach.setFilename(filename);
}
} else {
attach.setFilename(filename);
}
attach.setIsLink(isLink);
attach.setStatus(AssessmentAttachmentIfc.ACTIVE_STATUS);
attach.setCreatedBy(p.getProperty(p.getNamePropCreator()));
attach.setCreatedDate(new Date());
attach.setLastModifiedBy(p.getProperty(p
.getNamePropModifiedBy()));
attach.setLastModifiedDate(new Date());
attach.setLocation(getRelativePath(cr.getUrl(), protocol));
// getHibernateTemplate().save(attach);
}
} catch (PermissionException pe) {
pe.printStackTrace();
} catch (IdUnusedException ie) {
ie.printStackTrace();
} catch (TypeException te) {
te.printStackTrace();
}
return attach;
}
private long fileSizeInKB(long fileSize) {
return fileSize / 1024;
}
public void removeAssessmentAttachment(Long assessmentAttachmentId) {
PublishedAssessmentAttachment assessmentAttachment = (PublishedAssessmentAttachment) getHibernateTemplate()
.load(PublishedAssessmentAttachment.class, assessmentAttachmentId);
AssessmentIfc assessment = assessmentAttachment.getAssessment();
// String resourceId = assessmentAttachment.getResourceId();
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
if (assessment != null) { // need to dissociate with
// assessment before deleting in
// Hibernate 3
Set set = assessment.getAssessmentAttachmentSet();
set.remove(assessmentAttachment);
getHibernateTemplate().delete(assessmentAttachment);
retryCount = 0;
}
} catch (Exception e) {
log.warn("problem delete publishedAssessmentAttachment: "
+ e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public SectionAttachmentIfc createSectionAttachment(SectionDataIfc section,
String resourceId, String filename, String protocol) {
PublishedSectionAttachment attach = null;
Boolean isLink = Boolean.FALSE;
try {
ContentResource cr = AssessmentService.getContentHostingService().getResource(resourceId);
if (cr != null) {
ResourceProperties p = cr.getProperties();
attach = new PublishedSectionAttachment();
attach.setSection(section);
attach.setResourceId(resourceId);
attach.setMimeType(cr.getContentType());
// we want to display kb, so divide by 1000 and round the result
attach.setFileSize(fileSizeInKB(cr.getContentLength()));
if (cr.getContentType().lastIndexOf("url") > -1) {
isLink = Boolean.TRUE;
if (!filename.toLowerCase().startsWith("http")) {
String adjustedFilename = "http://" + filename;
attach.setFilename(adjustedFilename);
} else {
attach.setFilename(filename);
}
} else {
attach.setFilename(filename);
}
attach.setIsLink(isLink);
attach.setStatus(SectionAttachmentIfc.ACTIVE_STATUS);
attach.setCreatedBy(p.getProperty(p.getNamePropCreator()));
attach.setCreatedDate(new Date());
attach.setLastModifiedBy(p.getProperty(p
.getNamePropModifiedBy()));
attach.setLastModifiedDate(new Date());
attach.setLocation(getRelativePath(cr.getUrl(), protocol));
// getHibernateTemplate().save(attach);
}
} catch (PermissionException pe) {
pe.printStackTrace();
} catch (IdUnusedException ie) {
ie.printStackTrace();
} catch (TypeException te) {
te.printStackTrace();
}
return attach;
}
public void removeSectionAttachment(Long sectionAttachmentId) {
PublishedSectionAttachment sectionAttachment = (PublishedSectionAttachment) getHibernateTemplate()
.load(PublishedSectionAttachment.class, sectionAttachmentId);
SectionDataIfc section = sectionAttachment.getSection();
// String resourceId = sectionAttachment.getResourceId();
int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount()
.intValue();
while (retryCount > 0) {
try {
if (section != null) { // need to dissociate with section
// before deleting in Hibernate 3
Set set = section.getSectionAttachmentSet();
set.remove(sectionAttachment);
getHibernateTemplate().delete(sectionAttachment);
retryCount = 0;
}
} catch (Exception e) {
log.warn("problem delete sectionAttachment: " + e.getMessage());
retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e,
retryCount);
}
}
}
public void saveOrUpdateAttachments(List list) {
getHibernateTemplate().saveOrUpdateAll(list);
}
public PublishedAssessmentFacade getPublishedAssessmentInfoForRemove(Long publishedAssessmentId) {
PublishedAssessmentData a = (PublishedAssessmentData) getHibernateTemplate().load(
PublishedAssessmentData.class, publishedAssessmentId);
PublishedAssessmentFacade f = new PublishedAssessmentFacade(a.getAssessmentId(), a.getTitle(), a.getCreatedBy());
return f;
}
public HashMap getToGradebookPublishedAssessmentSiteIdMap() {
String query = "select em.assessment.publishedAssessmentId, a.agentIdString " +
"from PublishedEvaluationModel em, AuthorizationData a " +
"where a.functionId = 'OWN_PUBLISHED_ASSESSMENT' " +
"and em.assessment.publishedAssessmentId = a.qualifierId " +
"and em.toGradeBook = ?";
List l = getHibernateTemplate().find(query, "1");
HashMap toGradebookPublishedAssessmentSiteIdMap = new HashMap();
Iterator iter = l.iterator();
while (iter.hasNext()) {
Object o[] = (Object[]) iter.next();
toGradebookPublishedAssessmentSiteIdMap.put(o[0], o[1]);
}
return toGradebookPublishedAssessmentSiteIdMap;
}
/**
* return an array list of the AssessmentGradingData that a user has
* submitted for grade. one per published assessment. If an assessment
* allows multiple submissions and its grading option is to send highest,
* then return only the submission with highest finalScore. If an assessment
* allows multiple submissions and its grading option is to send last, then
* return only the last submission.
* @author Mustansar Mehmood mustansar@rice.edu
* @param agentId
* @param siteId
* @return
*/
/*
public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(
final String agentId, final String siteId) {
// Get total no. of submission per assessment by the given agent
// sorted by submittedData DESC
final String last_query = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
+ " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
+ " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
// Get total no. of submission per assessment by the given agent
// sorted by finalScore DESC
final String highest_query = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
+ " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
+ " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC";
final HibernateCallback hcb_last = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(last_query);
q.setBoolean(0, true);
q.setString(1, agentId);
q.setString(2, siteId);
q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by submittedDate desc.
List last_list = getHibernateTemplate().executeFind(hcb_last);
final HibernateCallback hcb_highest = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(highest_query);
q.setBoolean(0, true);
q.setString(1, agentId);
q.setString(2, siteId);
q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by finalScore desc.
List highest_list = getHibernateTemplate().executeFind(hcb_highest);
//getEvaluationModel();
String query = "select a.publishedAssessmentId, e.scoringType, ac.submissionsAllowed " +
"from PublishedEvaluationModel e, PublishedAccessControl ac, PublishedAssessmentData a " +
"where e.assessment.publishedAssessmentId = a.publishedAssessmentId " +
"and ac.assessment.publishedAssessmentId = a.publishedAssessmentId ";
List l = getHibernateTemplate().find(query);
HashMap scoringTypeMap = new HashMap();
HashMap subissionAllowedMap = new HashMap();
Iterator iter = l.iterator();
while (iter.hasNext()) {
Object o[] = (Object[]) iter.next();
scoringTypeMap.put(o[0], o[1]);
subissionAllowedMap.put(o[0], o[2]);
}
// The sorting for each column will be done in the action listener.
ArrayList assessmentList = new ArrayList();
Long currentid = new Long("0");
Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as
Integer submissionAllowed = null;
boolean multiSubmissionAllowed = false;
// now go through the last_list, and get the first entry in the list for
// each publishedAssessment, if
// not
for (int i = 0; i < last_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
}
else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
}
else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() == 1) {
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
}
if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption) && !a.getPublishedAssessmentId().equals(currentid)) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
// now go through the highest_list ,and get the first entry in the list
// for each publishedAssessment.
for (int i = 0; i < highest_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) highest_list
.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
}
else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
}
else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() > 1) {
multiSubmissionAllowed = true;
}
else {
multiSubmissionAllowed = false;
}
}
else {
multiSubmissionAllowed = true;
}
if ((multiSubmissionAllowed)
&& (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption))
&& (!a.getPublishedAssessmentId().equals(currentid))) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
//*assessments with average grades
for (int i = 0; i < highest_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
}
else {
// I use Last as default because it is what set above --mustansar
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
}
else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() > 1) {
multiSubmissionAllowed = true;
}
else {
multiSubmissionAllowed = false;
}
}
else {
multiSubmissionAllowed = true;
}
if ((multiSubmissionAllowed)
&& (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption))
&& (!a.getPublishedAssessmentId().equals(currentid))) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
//end of finding assessments with average grades
//return assessmentList;
return null;
}
*/
/**
* return an array list of the AssessmentGradingData that a user has
* submitted for grade. one per published assessment. If an assessment
* allows multiple submissions and its grading option is to send highest,
* then return only the submission with highest finalScore. If an assessment
* allows multiple submissions and its grading option is to send last, then
* return only the last submission.
* @author Mustansar Mehmood mustansar@rice.edu
* @param agentId
* @param siteId
* @param allAssessments
* @return
*/
/*
public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(
final String agentId, final String siteId, boolean allAssessments) {
// Get total no. of submission per assessment by the given agent
// sorted by submittedData DESC
final String last_query = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
+ " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
+ " order by p.publishedAssessmentId DESC, a.submittedDate DESC";
// Get total no. of submission per assessment by the given agent
// sorted by finalScore DESC
final String highest_query = "select new AssessmentGradingData("
+ " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId,"
+ " a.submittedDate, a.isLate,"
+ " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore,"
+ " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate,"
+ " a.timeElapsed) "
+ " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az"
+ " where a.publishedAssessmentId = p.publishedAssessmentId"
+ " and a.forGrade=? and a.agentId=? and az.agentIdString=? "
+ " and az.functionId=? and az.qualifierId=p.publishedAssessmentId"
+ " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC";
final HibernateCallback hcb_last = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(last_query);
q.setBoolean(0, true);
q.setString(1, agentId);
q.setString(2, siteId);
q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by submittedDate desc.
List last_list = getHibernateTemplate().executeFind(hcb_last);
final HibernateCallback hcb_highest = new HibernateCallback() {
public Object doInHibernate(Session session)throws HibernateException, SQLException {
Query q = session.createQuery(highest_query);
q.setBoolean(0, true);
q.setString(1, agentId);
q.setString(2, siteId);
q.setString(3, "TAKE_PUBLISHED_ASSESSMENT");
return q.list();
};
};
// this list is sorted by finalScore desc.
List highest_list = getHibernateTemplate().executeFind(hcb_highest);
String query = "select a.publishedAssessmentId, e.scoringType, ac.submissionsAllowed "
+ "from PublishedEvaluationModel e, PublishedAccessControl ac, PublishedAssessmentData a "
+ "where e.assessment.publishedAssessmentId = a.publishedAssessmentId "
+ "and ac.assessment.publishedAssessmentId = a.publishedAssessmentId ";
List l = getHibernateTemplate().find(query);
HashMap scoringTypeMap = new HashMap();
HashMap subissionAllowedMap = new HashMap();
Iterator iter = l.iterator();
while (iter.hasNext()) {
Object o[] = (Object[]) iter.next();
scoringTypeMap.put(o[0], o[1]);
subissionAllowedMap.put(o[0], o[2]);
}
// The sorting for each column will be done in the action listener.
ArrayList assessmentList = new ArrayList();
Long currentid = new Long("0");
Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as defaut
Integer submissionAllowed = null;
boolean multiSubmissionAllowed = false;
// now go through the last_list, and get the first entry in the list for
// each publishedAssessment, if not
for (int i = 0; i < last_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a
.getPublishedAssessmentId());
} else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a
.getPublishedAssessmentId());
} else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() == 1) {
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
}
if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption)
&& (!a.getPublishedAssessmentId().equals(currentid)
|| allAssessments)) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
// now go through the highest_list ,and get the first entry in the list
// for each publishedAssessment.
for (int i = 0; i < highest_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a
.getPublishedAssessmentId());
} else {
// I use Last as default because it is what set above
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a
.getPublishedAssessmentId());
} else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() > 1) {
multiSubmissionAllowed = true;
} else {
multiSubmissionAllowed = false;
}
} else {
multiSubmissionAllowed = true;
}
if ((multiSubmissionAllowed)
&& (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption))
&& ((!a.getPublishedAssessmentId().equals(currentid))
|| allAssessments)) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
// assessments with average grades
for (int i = 0; i < last_list.size(); i++) {
AssessmentGradingData a = (AssessmentGradingData) last_list.get(i);
// get the scoring option
if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) {
scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId());
} else {
// I use Last as default because it is what set above
// --mustansar
scoringOption = EvaluationModelIfc.LAST_SCORE;
}
if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) {
submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId());
} else {
submissionAllowed = null;
}
if (submissionAllowed != null) {
if (submissionAllowed.intValue() > 1) {
multiSubmissionAllowed = true;
} else {
multiSubmissionAllowed = false;
}
} else {
multiSubmissionAllowed = true;
}
if (
(multiSubmissionAllowed)
&& (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption))&& (!a.getPublishedAssessmentId().equals(currentid)|| allAssessments)) {
currentid = a.getPublishedAssessmentId();
AssessmentGradingData f = new AssessmentGradingData(a);
assessmentList.add(f);
}
}
// end of finding assessments with average grades
return assessmentList;
}
*/
}