/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/AuthorAssessmentListener.java $
* $Id: AuthorAssessmentListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* 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.listener.author;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.event.cover.EventTrackingService;
import org.sakaiproject.tool.assessment.facade.AgentFacade;
import org.sakaiproject.tool.assessment.facade.AssessmentFacade;
import org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueries;
import org.sakaiproject.tool.assessment.facade.AssessmentTemplateFacade;
import org.sakaiproject.tool.assessment.services.assessment.AssessmentService;
import org.sakaiproject.tool.assessment.ui.bean.author.AssessmentBean;
import org.sakaiproject.tool.assessment.ui.bean.author.AssessmentSettingsBean;
import org.sakaiproject.tool.assessment.ui.bean.author.AuthorBean;
import org.sakaiproject.tool.assessment.ui.bean.author.ItemAuthorBean;
import org.sakaiproject.tool.assessment.ui.bean.authz.AuthorizationBean;
import org.sakaiproject.tool.assessment.ui.listener.samlite.NameListener;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
import org.sakaiproject.tool.assessment.util.TextFormat;
import org.sakaiproject.util.FormattedText;
/**
* <p>Title: Samigo</p>2
* <p>Description: Sakai Assessment Manager</p>
* @author Ed Smiley
* @version $Id: AuthorAssessmentListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
*/
public class AuthorAssessmentListener
implements ActionListener
{
private static Log log = LogFactory.getLog(AuthorAssessmentListener.class);
public AuthorAssessmentListener()
{
}
public void processAction(ActionEvent ae) throws AbortProcessingException
{
FacesContext context = FacesContext.getCurrentInstance();
AssessmentService assessmentService = new AssessmentService();
//#0 - permission checking before proceeding - daisyf
AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author");
if ("2".equals(author.getAssessCreationMode())) {
NameListener nameListener = new NameListener();
nameListener.processAction(null);
return;
}
AssessmentSettingsBean assessmentSettings = (AssessmentSettingsBean) ContextUtil.
lookupBean("assessmentSettings");
author.setOutcome("createAssessment");
author.setFirstFromPage("editAssessment");
if (!passAuthz(context)){
author.setOutcome("author");
return;
}
// pass authz test, move on
AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean(
"assessmentBean");
ItemAuthorBean itemauthorBean = (ItemAuthorBean) ContextUtil.lookupBean("itemauthor");
itemauthorBean.setTarget(ItemAuthorBean.FROM_ASSESSMENT); // save to assessment
// create an assessment based on the title entered and the assessment
// template selected
// #1 - read from form authorIndex.jsp
String assessmentTitle = TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, author.getAssessTitle());
//HUONG's EDIT
//check assessmentTitle and see if it is duplicated, if is not then proceed, else throw error
boolean isUnique = assessmentService.assessmentTitleIsUnique("0", assessmentTitle, false);
if (assessmentTitle!=null && (assessmentTitle.trim()).equals("")){
String err1=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","assessmentName_empty");
context.addMessage(null,new FacesMessage(err1));
author.setOutcome("author");
return;
}
if (!isUnique){
String err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AuthorMessages","duplicateName_error");
context.addMessage(null,new FacesMessage(err));
author.setOutcome("author");
return;
}
String description = author.getAssessmentDescription();
String typeId = author.getAssessmentTypeId();
String templateId = author.getAssessmentTemplateId();
if (templateId == null){
templateId = AssessmentTemplateFacade.DEFAULTTEMPLATE.toString();
}
// #2 - got all the info, create now
AssessmentFacade assessment = null;
try{
assessment = createAssessment(
assessmentTitle.trim(), description, typeId, templateId);
EventTrackingService.post(EventTrackingService.newEvent("sam.assessment.create", "siteId=" + AgentFacade.getCurrentSiteId() + ", assessmentId=" + assessment.getAssessmentId(), true));
}
catch(Exception e){
// can't create assesment because gradebookService is not ready
String err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AuthorMessages","gradebook_service_error");
context.addMessage(null,new FacesMessage(err));
author.setOutcome("author");
return;
}
assessmentSettings.setAssessment(assessment);
// #3a - goto editAssessment.jsp, so prepare assessmentBean
assessmentBean.setAssessment(assessment);
EditAssessmentListener.showPrintLink(assessmentBean);
// #3b - reset the following
author.setAssessTitle("");
author.setAssessmentDescription("");
author.setAssessmentTypeId("");
author.setAssessmentTemplateId(AssessmentTemplateFacade.DEFAULTTEMPLATE.toString());
author.setIsEditPendingAssessmentFlow(true);
// #3c - update core AssessmentList
ArrayList list = assessmentService.getBasicInfoOfAllActiveAssessments(AssessmentFacadeQueries.TITLE,true);
// get the managed bean, author and set the list
author.setAssessments(list);
author.setOutcome("createAssessment");
}
public AssessmentFacade createAssessment(
String assessmentTitle, String description, String typeId,
String templateId) throws Exception{
try{
AssessmentService assessmentService = new AssessmentService();
AssessmentFacade assessment = assessmentService.createAssessment(
assessmentTitle, description, typeId, templateId);
return assessment;
}
catch(Exception e){
throw new Exception(e);
}
}
public boolean passAuthz(FacesContext context){
AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean(
"authorization");
boolean hasPrivilege = authzBean.getCreateAssessment();
if (!hasPrivilege){
String err=(String)ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AuthorMessages",
"denied_create_assessment_error");
context.addMessage(null,new FacesMessage(err));
}
return hasPrivilege;
}
}