/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/author/AssessmentBean.java $
* $Id: AssessmentBean.java 121258 2013-03-15 15:03:36Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.tool.assessment.ui.bean.author;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.model.SelectItem;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentIfc;
import org.sakaiproject.tool.assessment.data.ifc.assessment.SectionDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.shared.TypeIfc;
import org.sakaiproject.tool.assessment.facade.AssessmentFacade;
import org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacade;
import org.sakaiproject.tool.assessment.facade.PublishedSectionFacade;
import org.sakaiproject.tool.assessment.services.assessment.AssessmentService;
import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService;
import org.sakaiproject.tool.assessment.services.shared.TypeService;
import org.sakaiproject.tool.assessment.ui.bean.delivery.ItemContentsBean;
import org.sakaiproject.tool.assessment.ui.bean.delivery.SectionContentsBean;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
/**
* @author rshastri
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*
* Used to be org.navigoproject.ui.web.asi.author.assessment.AssessmentActionForm.java
*/
public class AssessmentBean implements Serializable {
private static Log log = LogFactory.getLog(AssessmentBean.class);
/** Use serialVersionUID for interoperability. */
private final static long serialVersionUID = -630950053380808339L;
private AssessmentIfc assessment;
private String assessmentId;
private String title;
// ArrayList of SectionContentsBean
private ArrayList sections = new ArrayList(); // this contains list of SectionFacde
private ArrayList sectionList = new ArrayList(); // this contains list of javax.faces.model.SelectItem
private ArrayList otherSectionList = new ArrayList(); // contains SectionItem of section except the current section
private ArrayList partNumbers = new ArrayList();
private int questionSize=0;
private double totalScore=0;
private String newQuestionTypeId;
private String firstSectionId;
private boolean hasRandomDrawPart;
private boolean showPrintLink;
private boolean hasGradingData = false;
private boolean hasSubmission = false;
private boolean showPrintAssessment;
/*
* Creates a new AssessmentBean object.
*/
public AssessmentBean() {
}
public AssessmentIfc getAssessment() {
return assessment;
}
public void setAssessment(AssessmentIfc assessment) {
try {
this.assessment = assessment;
if (assessment instanceof AssessmentFacade) {
this.assessmentId = assessment.getAssessmentId().toString();
}
else if (assessment instanceof PublishedAssessmentFacade) {
this.assessmentId = ((PublishedAssessmentFacade) assessment).getPublishedAssessmentId().toString();
}
this.title = assessment.getTitle();
// work out the question side & total point
this.sections = new ArrayList();
ArrayList sectionArray = assessment.getSectionArraySorted();
for (int i=0; i<sectionArray.size(); i++){
SectionDataIfc section = (SectionDataIfc)sectionArray.get(i);
SectionContentsBean sectionBean = new SectionContentsBean(section);
this.sections.add(sectionBean);
}
setPartNumbers();
setQuestionSizeAndTotalScore();
setSectionList(sectionArray);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
// properties from Assessment
public String getAssessmentId() {
return this.assessmentId;
}
public void setAssessmentId(String assessmentId) {
this.assessmentId = assessmentId;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public ArrayList getSections() {
return sections;
}
public void setSections(ArrayList sections) {
this.sections = sections;
}
public ArrayList getPartNumbers() {
return partNumbers;
}
public void setPartNumbers() {
this.partNumbers = new ArrayList();
for (int i=1; i<=this.sections.size(); i++){
this.partNumbers.add(new SelectItem(i+""));
}
}
public int getQuestionSize() {
return this.questionSize;
}
public void setQuestionSizeAndTotalScore() {
this.questionSize = 0;
this.totalScore = 0;
int randomPartCount = 0;
AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author");
for(int i=0;i<this.sections.size();i++){
SectionContentsBean sectionBean = (SectionContentsBean) sections.get(i);
ArrayList items = sectionBean.getItemContents();
int itemsInThisSection =0;
if (sectionBean.getSectionAuthorType().equals(SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL)) {
// for random draw parts, add
randomPartCount++ ;
itemsInThisSection = sectionBean.getNumberToBeDrawn().intValue();
}
else {
itemsInThisSection = items.size();
}
this.questionSize += itemsInThisSection;
for (int j=0; j<itemsInThisSection; j++){
ItemContentsBean item = (ItemContentsBean)items.get(j);
if (item.getItemData().getScore()!=null){
this.totalScore += item.getItemData().getScore().doubleValue();
}
}
}
if (randomPartCount >0) {
setHasRandomDrawPart(true);
}
else {
setHasRandomDrawPart(false);
}
}
public int updateRandomPoolQuestions(String sectionId){
for(int i=0;i<this.sections.size();i++){
SectionContentsBean sectionBean = (SectionContentsBean) sections.get(i);
if(sectionBean.getSectionId().equals(sectionId)){
AssessmentService assessmentService = new AssessmentService();
int success = assessmentService.updateRandomPoolQuestions(assessmentService.getSection(sectionId));
if(success == AssessmentService.UPDATE_SUCCESS){
//need to update section since it has changed
sections.set(i, new SectionContentsBean(assessmentService.getSection(sectionBean.getSectionId())));
}else{
return success;
}
}
}
return AssessmentService.UPDATE_SUCCESS;
}
public double getTotalScore() {
return this.totalScore;
}
public void setTotalScore(double totalScore) {
this.totalScore = totalScore;
}
public String getNewQuestionTypeId() {
return this.newQuestionTypeId;
}
public void setNewQuestionTypeId(String newQuestionTypeId) {
this.newQuestionTypeId = newQuestionTypeId;
}
public SelectItem[] getItemTypes(){
// return list of TypeD
TypeService service = new TypeService();
List list = service.getFacadeItemTypes();
SelectItem[] itemTypes = new SelectItem[list.size()];
for (int i=0; i<list.size();i++){
TypeIfc t = (TypeIfc) list.get(i);
itemTypes[i] = new SelectItem(
t.getTypeId().toString(), t.getKeyword());
}
return itemTypes;
}
/**
* This set a list of SelectItem (sectionId, title) for selection box
* @param list
*/
public void setSectionList(ArrayList list){
//this.assessmentTemplateIter = new AssessmentTemplateIteratorFacade(list);
this.sectionList = new ArrayList();
try{
for (int i=0; i<list.size();i++){
SectionDataIfc f = (SectionDataIfc) list.get(i);
// sorry, cannot do f.getAssessmentTemplateId() 'cos such call requires
// "data" which we do not have in this case. The template list parsed
// to this method contains merely assesmentBaseId (in this case is the templateId)
// & title (see constructor AssessmentTemplateFacade(id, title))
this.sectionList.add(new SelectItem(
f.getSectionId().toString(), f.getTitle()));
if (i==0){
this.firstSectionId = f.getSectionId().toString();
}
}
}
catch(Exception e){
log.warn(e.getMessage());
}
}
public ArrayList getSectionList(){
return sectionList;
}
public String getFirstSectionId()
{
return firstSectionId;
}
/**
* @param string the title
*/
public void setFirstSectionId(String firstSectionId)
{
this.firstSectionId = firstSectionId;
}
public ArrayList getOtherSectionList(){
return otherSectionList;
}
public void setOtherSectionList(ArrayList list){
this.otherSectionList = list; // list contains javax.faces.model.SelectItem
}
public boolean getHasRandomDrawPart() {
return this.hasRandomDrawPart;
}
public void setHasRandomDrawPart(boolean param) {
this.hasRandomDrawPart= param;
}
public boolean getShowPrintLink() {
return this.showPrintLink;
}
public void setShowPrintLink(boolean showPrintLink) {
this.showPrintLink= showPrintLink;
}
public boolean getHasGradingData() {
return this.hasGradingData;
}
public void setHasGradingData(boolean hasGradingData) {
this.hasGradingData = hasGradingData;
}
public boolean getHasSubmission() {
return this.hasSubmission;
}
public void setHasSubmission(boolean hasSubmission) {
this.hasSubmission = hasSubmission;
}
public boolean getShowPrintAssessment() {
String printAssessment = ServerConfigurationService.getString("samigo.printAssessment");
return Boolean.parseBoolean(printAssessment);
}
public void setShowPrintAssessment(boolean showPrintAssessment) {
this.showPrintAssessment= showPrintAssessment;
}
}