/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/author/AuthorBean.java $
* $Id: AuthorBean.java 130512 2013-10-15 23:46:40Z ktsao@stanford.edu $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 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.util.ArrayList;
import java.util.Date;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.tool.assessment.facade.AssessmentFacade;
import org.sakaiproject.tool.assessment.facade.AssessmentTemplateFacade;
import org.sakaiproject.tool.assessment.ui.bean.authz.AuthorizationBean;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
import org.sakaiproject.util.ResourceLoader;
import org.sakaiproject.component.cover.ServerConfigurationService;
/**
* General authoring information.
* @author Ed Smiley
*
* @version $Id: AuthorBean.java 130512 2013-10-15 23:46:40Z ktsao@stanford.edu $
*/
public class AuthorBean implements Serializable
{
private static Log log = LogFactory.getLog(AuthorBean.class);
/** Use serialVersionUID for interoperability. */
private final static long serialVersionUID = 4216587136245498157L;
private String assessTitle;
private String assessmentTemplateId; // added by daisyf - 11/1/04
private String assessmentTypeId;
private String assessmentDescription;
private String assessmentID;
private AssessmentFacade assessment;
private ArrayList assessmentTemplateList;
private ArrayList assessments;
private ArrayList publishedAssessments;
private ArrayList inactivePublishedAssessments;
private SelectItem[] assessmentTemplates;
private boolean showCompleteAssessment;
private String totalPoints;
private String currentSection;
private ArrayList sections;
private String currentQuestionType;
private TemplateBean settings;
private String totalQuestions;
private String currentItem;
private String coreAssessmentOrderBy = "title";
private boolean coreAscending = true;
private String publishedAssessmentOrderBy ="title";
private boolean publishedAscending = true;
private String inactivePublishedAssessmentOrderBy = "title";
private boolean inactivePublishedAscending = true;
private String outcome;
private String selectActionOutcome;
private String importOutcome;
private boolean showTemplateList;
private boolean isEditPendingAssessmentFlow = true;
private String fromPage;
private String firstFromPage;
private boolean isRetractedForEdit = false;
private boolean editPubAssessmentRestricted;
private boolean isRepublishAndRegrade = false;
private boolean isErrorInSettings = false;
// currentFormTime is used to make sure the data we get back is from
// the current form
private long currentFormTime = 0;
// This parameter is used to indicate whether we should display the
// warning text next to assignment title retracted by edit in instructor/admin view.
// It is true if at least one of the assessment is currently "retract for edit".
private boolean isAnyAssessmentRetractForEdit = false;
private String assessCreationMode; // assessment build (1)or markup text (2)
private ArrayList<SelectItem> pendingActionList1;
private ArrayList<SelectItem> pendingActionList2;
private ArrayList<SelectItem> publishedActionList;
private boolean isGradeable;
private boolean isEditable;
private boolean justPublishedAnAssessment = false;
private String protocol;
/* properties used for editing published random pool items */
private boolean isEditPoolFlow = false;
private String editPoolName;
private String editPoolSectionName;
private String editPoolSectionId;
/* ------------------------------------ /*
/**
* @return the id
*/
public String getAssessmentID()
{
return assessmentID;
}
public AssessmentFacade getAssessment()
{
return assessment;
}
public void setAssessment(AssessmentFacade assessment)
{
this.assessment = assessment;
}
public String getAssessmentTypeId()
{
return assessmentTypeId;
}
public String getAssessmentDescription()
{
return assessmentDescription;
}
/**
* @return the title
*/
public String getAssessTitle()
{
return assessTitle;
}
public void setAssessmentTemplateId(String assessmentTemplateId)
{
this.assessmentTemplateId = assessmentTemplateId;
}
public String getAssessmentTemplateId()
{
return assessmentTemplateId;
}
public void setAssessmentTemplateList(ArrayList list){
this.assessmentTemplateList = new ArrayList();
try{
for (int i=0; i<list.size();i++){
AssessmentTemplateFacade f = (AssessmentTemplateFacade) 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.assessmentTemplateList.add(new SelectItem(
f.getAssessmentBaseId().toString(), f.getTitle()));
}
}
catch(Exception e){
log.warn(e.getMessage());
}
}
public ArrayList getAssessmentTemplateList(){
return assessmentTemplateList;
}
/*
public SelectItem[] getAssessmentTemplates(){
return assessmentTemplates;
}
*/
public void setAssessments(ArrayList assessments){
this.assessments = assessments;
}
public ArrayList getAssessments(){
return assessments;
}
public void setPublishedAssessments(ArrayList publishedAssessments){
this.publishedAssessments = publishedAssessments;
}
public ArrayList getPublishedAssessments(){
return publishedAssessments;
}
public void setInactivePublishedAssessments(ArrayList inactivePublishedAssessments){
this.inactivePublishedAssessments = inactivePublishedAssessments;
}
public ArrayList getInactivePublishedAssessments(){
return inactivePublishedAssessments;
}
/**
* do we show the complete asseassement?
* @return boolean
*/
public boolean isShowCompleteAssessment()
{
return showCompleteAssessment;
}
/**
* the total points
* @return the total points
*/
public String getTotalPoints()
{
return totalPoints;
}
/**
* If UI is on a specific question, get the type
* @return question type
*/
public String getCurrentQuestionType()
{
return currentQuestionType;
}
/**
* If UI is on a specific section, get the section id
* @return
*/
public String getCurrentSection()
{
return currentSection;
}
/**
* ArrayList of SectionBeans
* @return
*/
public ArrayList getSections()
{
return sections;
}
/**
* derived property
* @return true if there are questions
*/
public boolean isHasQuestions()
{
try
{
for (int i = 0; i < sections.size(); i++)
{
SectionBean s = (SectionBean) sections.get(i);
if (s.getItems().size() > 0)
{
return true;
}
}
}
catch (RuntimeException ex)
{
return false;
}
return false;
}
/**
* @param string the id
*/
public void setAssessmentId(String string)
{
assessmentID = string;
}
/**
* @param string the title
*/
public void setAssessTitle(String string)
{
assessTitle = string;
}
/**
* do we show the complete assessment
* @param showCompleteAssessment boolean
*/
public void setShowCompleteAssessment(boolean showCompleteAssessment)
{
this.showCompleteAssessment = showCompleteAssessment;
}
/**
* total points
* @param totalPoints total points for assessment
*/
public void setTotalPoints(String totalPoints)
{
this.totalPoints = totalPoints;
}
/**
* If UI is on a specific question, set the type
* @param currentQuestionType
*/
public void setCurrentQuestionType(String currentQuestionType)
{
this.currentQuestionType = currentQuestionType;
}
/**
* set the UI to a specific section id
* @param currentSection
*/
public void setCurrentSection(String currentSection)
{
this.currentSection = currentSection;
}
/**
* set a list of SectionBeans
* @param sections
*/
public void setSections(ArrayList sections)
{
this.sections = sections;
}
/**
* this allows us to store template information
* @return
*/
public TemplateBean getSettings()
{
return settings;
}
/**
* this allows us to store template information
* @param settings
*/
public void setSettings(TemplateBean settings)
{
this.settings = settings;
}
public String getTotalQuestions()
{
return totalQuestions;
}
public void setTotalQuestions(String totalQuestions)
{
this.totalQuestions = totalQuestions;
}
/**
* Derived property.
* @return ArrayList of model SelectItems
*/
public ArrayList getSectionSelectList()
{
ArrayList list = new ArrayList();
if (sections == null) return list;
for (int i = 0; i < sections.size(); i++) {
SelectItem selection = new SelectItem();
SectionBean sBean = (SectionBean) sections.get(i);
selection.setLabel(sBean.getSectionTitle());
selection.setValue(sBean.getSectionIdent());
list.add(selection);
}
return list;
}
/**
* If the UI is on a specific item
* @return the item id
*/
public String getCurrentItem()
{
return currentItem;
}
/**
* set UI on a specific item
* @param currentItem the item id
*/
public void setCurrentItem(String currentItem)
{
this.currentItem = currentItem;
}
public String editAssessmentSettings(){
//startEditAssessmentSettings();
return "editAccessmentSettings";
}
/*
public void startEditAssessmentSettings(){
String assessmentId = (String) FacesContext.getCurrentInstance().
getExternalContext().getRequestParameterMap().get("assessmentId");
}
*/
public String getCoreAssessmentOrderBy() {
return this.coreAssessmentOrderBy;
}
public void setCoreAssessmentOrderBy(String coreAssessmentOrderBy) {
this.coreAssessmentOrderBy = coreAssessmentOrderBy;
}
/**
* is core assessment table sorted in ascending order
* @return true if it is
*/
public boolean isCoreAscending()
{
return coreAscending;
}
/**
*
* @param coreAscending is core assessment table sorted in ascending order
*/
public void setCoreAscending(boolean coreAscending)
{
this.coreAscending = coreAscending;
}
public String getPublishedAssessmentOrderBy() {
return this.publishedAssessmentOrderBy;
}
public void setPublishedAssessmentOrderBy(String publishedAssessmentOrderBy) {
this.publishedAssessmentOrderBy = publishedAssessmentOrderBy;
}
/**
* is published assessment table sorted in ascending order
* @return true if it is
*/
public boolean isPublishedAscending()
{
return publishedAscending;
}
/**
*
* @param publishedAscending is published assessment table sorted in ascending order
*/
public void setPublishedAscending(boolean publishedAscending)
{
this.publishedAscending = publishedAscending;
}
public String getInactivePublishedAssessmentOrderBy() {
return this.inactivePublishedAssessmentOrderBy;
}
public void setInactivePublishedAssessmentOrderBy(String inactivePublishedAssessmentOrderBy) {
this.inactivePublishedAssessmentOrderBy = inactivePublishedAssessmentOrderBy;
}
/**
* is inactive published assessment table sorted in ascending order
* @return true if it is
*/
public boolean isInactivePublishedAscending()
{
return inactivePublishedAscending;
}
/**
*
* @param inactivePublishedAscending is inactive published assessment table sorted in ascending order
*/
public void setInactivePublishedAscending(boolean inactivePublishedAscending)
{
this.inactivePublishedAscending = inactivePublishedAscending;
}
public void setAssessmentTypeId(String typeId){
this.assessmentTypeId = typeId;
}
public void setAssessmentDescription(String description){
this.assessmentDescription = description;
}
public String getOutcome()
{
return outcome;
}
public void setOutcome(String outcome)
{
this.outcome = outcome;
}
public String getSelectActionOutcome()
{
return selectActionOutcome;
}
public void setSelectActionOutcome(String selectActionOutcome)
{
this.selectActionOutcome = selectActionOutcome;
}
public String getImportOutcome()
{
return importOutcome;
}
public void setImportOutcome(String importOutcome)
{
this.importOutcome = importOutcome;
}
public boolean getShowTemplateList()
{
return showTemplateList;
}
public void setShowTemplateList(boolean showTemplateList)
{
this.showTemplateList = showTemplateList;
}
public boolean getIsEditPendingAssessmentFlow()
{
return isEditPendingAssessmentFlow;
}
public void setIsEditPendingAssessmentFlow(boolean isEditPendingAssessmentFlow)
{
this.isEditPendingAssessmentFlow = isEditPendingAssessmentFlow;
}
public String getFromPage()
{
return fromPage;
}
public void setFromPage(String fromPage)
{
this.fromPage = fromPage;
}
public String getFirstFromPage()
{
return firstFromPage;
}
public void setFirstFromPage(String firstFromPage)
{
this.firstFromPage = firstFromPage;
}
public boolean getIsRetractedForEdit()
{
return isRetractedForEdit;
}
public void setIsRetractedForEdit(boolean isRetractedForEdit)
{
this.isRetractedForEdit = isRetractedForEdit;
}
public boolean getEditPubAssessmentRestricted()
{
return editPubAssessmentRestricted;
}
public void setEditPubAssessmentRestricted(boolean editPubAssessmentRestricted)
{
this.editPubAssessmentRestricted = editPubAssessmentRestricted;
}
public boolean getIsRepublishAndRegrade()
{
return isRepublishAndRegrade;
}
public void setIsRepublishAndRegrade(boolean isRepublishAndRegrade)
{
this.isRepublishAndRegrade = isRepublishAndRegrade;
}
public boolean getIsAnyAssessmentRetractForEdit(){
return isAnyAssessmentRetractForEdit;
}
public void setIsAnyAssessmentRetractForEdit(boolean isAnyAssessmentRetractForEdit){
this.isAnyAssessmentRetractForEdit = isAnyAssessmentRetractForEdit;
}
// the following three functions are intended to detect when the user is submitting
// a form that is no longer valid. This can happen with multiple windows.
// <h:outputText value="#{author.updateFormTime}" />
// <h:inputHidden value="#{author.currentFormTime}" />
// A separate update is needed because inputHidden and inputText call the getter
// twice, once when displaying the form and once when submitting it.
// If it was only called for display, we could do the update as part of the
// getter. getUpdateFormTime is called simply to set the timestamp. It returns
// a zero-length string so that it is safe to display it.
public String getUpdateFormTime() {
currentFormTime = (new Date()).getTime();
return "";
}
public long getCurrentFormTime(){
return currentFormTime;
}
public void setCurrentFormTime(long formTime) {
if (formTime != currentFormTime) {
try {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect("discrepancyInData");
} catch (Exception e) {};
}
}
public String getAssessCreationMode(){
if (assessCreationMode == null || assessCreationMode.trim().equals("")) {
return "1";
}
return assessCreationMode;
}
public void setAssessCreationMode(String assessCreationMode){
this.assessCreationMode = assessCreationMode;
}
public void setIsGradeable(boolean isGradeable)
{
this.isGradeable = isGradeable;
}
public boolean getIsGradeable()
{
return isGradeable;
}
public void setIsEditable(boolean isEditable)
{
this.isEditable = isEditable;
}
public boolean getIsEditable()
{
return isEditable;
}
// Split pendingActionList into pendingActionList1 and pendingActionList2 because of "Publish"
// "Publish" has to be show/hide depending on the question size. So we need to have two ActionList
public ArrayList<SelectItem> getPendingSelectActionList1()
{
if (pendingActionList1 != null) {
return pendingActionList1;
}
pendingActionList1 = new ArrayList<SelectItem>();
ResourceLoader com = new ResourceLoader("org.sakaiproject.tool.assessment.bundle.CommonMessages");
AuthorizationBean authorizationBean = (AuthorizationBean) ContextUtil.lookupBean("authorization");
boolean isEditAnyAssessment = authorizationBean.getEditAnyAssessment();
boolean isEditOwnAssessment = authorizationBean.getEditOwnAssessment();
boolean isDeleteAnyAssessment = authorizationBean.getDeleteAnyAssessment();
boolean isDeleteOwnAssessment = authorizationBean.getDeleteOwnAssessment();
pendingActionList1.add(new SelectItem("select", com.getString("action_select")));
if (isEditAnyAssessment || isEditOwnAssessment) {
pendingActionList1.add(new SelectItem("edit_pending", com.getString("edit_action")));
pendingActionList1.add(new SelectItem("preview_pending", com.getString("action_preview")));
if (Boolean.parseBoolean(ServerConfigurationService.getString("samigo.printAssessment"))) {
pendingActionList1.add(new SelectItem("print_pending", com.getString("action_print")));
}
pendingActionList1.add(new SelectItem("settings_pending", com.getString("settings_action")));
pendingActionList1.add(new SelectItem("publish", com.getString("publish_action")));
pendingActionList1.add(new SelectItem("duplicate", com.getString("action_duplicate")));
pendingActionList1.add(new SelectItem("export", com.getString("export_action")));
}
if (isDeleteAnyAssessment || isDeleteOwnAssessment) {
pendingActionList1.add(new SelectItem("remove_pending", com.getString("remove_action")));
}
return pendingActionList1;
}
public ArrayList<SelectItem> getPendingSelectActionList2()
{
if (pendingActionList2 != null) {
return pendingActionList2;
}
pendingActionList2 = new ArrayList<SelectItem>();
ResourceLoader com = new ResourceLoader("org.sakaiproject.tool.assessment.bundle.CommonMessages");
AuthorizationBean authorizationBean = (AuthorizationBean) ContextUtil.lookupBean("authorization");
boolean isEditAnyAssessment = authorizationBean.getEditAnyAssessment();
boolean isEditOwnAssessment = authorizationBean.getEditOwnAssessment();
boolean isDeleteAnyAssessment = authorizationBean.getDeleteAnyAssessment();
boolean isDeleteOwnAssessment = authorizationBean.getDeleteOwnAssessment();
pendingActionList2.add(new SelectItem("select", com.getString("action_select")));
if (isEditAnyAssessment || isEditOwnAssessment) {
pendingActionList2.add(new SelectItem("edit_pending", com.getString("edit_action")));
pendingActionList2.add(new SelectItem("preview_pending", com.getString("action_preview")));
if (Boolean.parseBoolean(ServerConfigurationService.getString("samigo.printAssessment"))) {
pendingActionList2.add(new SelectItem("print_pending", com.getString("action_print")));
}
pendingActionList2.add(new SelectItem("settings_pending", com.getString("settings_action")));
pendingActionList2.add(new SelectItem("duplicate", com.getString("action_duplicate")));
pendingActionList2.add(new SelectItem("export", com.getString("export_action")));
}
if (isDeleteAnyAssessment || isDeleteOwnAssessment) {
pendingActionList2.add(new SelectItem("remove_pending", com.getString("remove_action")));
}
return pendingActionList2;
}
public ArrayList<SelectItem> getPublishedSelectActionList()
{
if (publishedActionList != null) {
return publishedActionList;
}
ResourceLoader com = new ResourceLoader("org.sakaiproject.tool.assessment.bundle.CommonMessages");
AuthorizationBean authorizationBean = (AuthorizationBean) ContextUtil.lookupBean("authorization");
publishedActionList = new ArrayList<SelectItem>();
boolean isEditAnyAssessment = authorizationBean.getEditAnyAssessment();
boolean isEditOwnAssessment = authorizationBean.getEditOwnAssessment();
boolean isDeleteAnyAssessment = authorizationBean.getDeleteAnyAssessment();
boolean isDeleteOwnAssessment = authorizationBean.getDeleteOwnAssessment();
if (isEditAnyAssessment || isEditOwnAssessment) {
publishedActionList.add(new SelectItem("preview_published", com.getString("action_preview")));
if (Boolean.parseBoolean(ServerConfigurationService.getString("samigo.printAssessment"))) {
publishedActionList.add(new SelectItem("print_published", com.getString("action_print")));
}
publishedActionList.add(new SelectItem("settings_published", com.getString("settings_action")));
}
if (isDeleteAnyAssessment || isDeleteOwnAssessment) {
publishedActionList.add(new SelectItem("remove_published", com.getString("remove_action")));
}
return publishedActionList;
}
public boolean getCanRecordAverage() {
if (Boolean.parseBoolean(ServerConfigurationService.getString("samigo.canRecordAverage"))) {
return true;
}
return false;
}
public void setJustPublishedAnAssessment(boolean justPublishedAnAssessment) {
this.justPublishedAnAssessment = justPublishedAnAssessment;
}
public boolean getJustPublishedAnAssessment() {
return justPublishedAnAssessment;
}
public void setIsErrorInSettings(boolean isErrorInSettings)
{
this.isErrorInSettings = isErrorInSettings;
}
public boolean getIsErrorInSettings()
{
return isErrorInSettings;
}
public boolean getIsEditPoolFlow()
{
return isEditPoolFlow;
}
public void setIsEditPoolFlow(boolean isEditPoolFlow)
{
this.isEditPoolFlow = isEditPoolFlow;
}
public String getEditPoolName()
{
return editPoolName;
}
public void setEditPoolName(String editPoolName)
{
this.editPoolName = editPoolName;
}
public String getEditPoolSectionName()
{
return editPoolSectionName;
}
public void setEditPoolSectionName(String editPoolSectionName)
{
this.editPoolSectionName = editPoolSectionName;
}
public String getEditPoolSectionId()
{
return editPoolSectionId;
}
public void setEditPoolSectionId(String editPoolSectionId)
{
this.editPoolSectionId = editPoolSectionId;
}
public String getProtocol(){
return protocol;
}
public void setProtocol(String protocol){
this.protocol = protocol;
}
}