/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SaveAssessmentSettingsListener.java $ * $Id: SaveAssessmentSettingsListener.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 java.util.Date; import java.util.Iterator; 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.tool.assessment.api.SamigoApiFactory; import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAccessControlIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.EvaluationModelIfc; import org.sakaiproject.tool.assessment.facade.AssessmentFacade; import org.sakaiproject.tool.assessment.services.assessment.AssessmentService; import org.sakaiproject.tool.assessment.shared.api.assessment.SecureDeliveryServiceAPI; import org.sakaiproject.tool.assessment.ui.bean.author.AssessmentSettingsBean; import org.sakaiproject.tool.assessment.ui.bean.author.AuthorBean; 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: SaveAssessmentSettingsListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $ */ public class SaveAssessmentSettingsListener implements ActionListener { private static Log log = LogFactory.getLog(SaveAssessmentSettingsListener.class); //private static final GradebookServiceHelper gbsHelper = IntegrationContextFactory.getInstance().getGradebookServiceHelper(); //private static final boolean integrated = IntegrationContextFactory.getInstance().isIntegrated(); public SaveAssessmentSettingsListener() { } public void processAction(ActionEvent ae) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); AssessmentSettingsBean assessmentSettings = (AssessmentSettingsBean) ContextUtil. lookupBean("assessmentSettings"); boolean error=false; String assessmentId=String.valueOf(assessmentSettings.getAssessmentId()); AssessmentService assessmentService = new AssessmentService(); SaveAssessmentSettings s = new SaveAssessmentSettings(); String assessmentName = TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, assessmentSettings.getTitle()); // check if name is empty if(assessmentName!=null &&(assessmentName.trim()).equals("")){ String nameEmpty_err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","assessmentName_empty"); context.addMessage(null,new FacesMessage(nameEmpty_err)); error=true; } // check if name is unique if(!assessmentService.assessmentTitleIsUnique(assessmentId,assessmentName,false)){ String nameUnique_err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","assessmentName_error"); context.addMessage(null,new FacesMessage(nameUnique_err)); error=true; } // check if start date is valid if(!assessmentSettings.getIsValidStartDate()){ String startDateErr = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.GeneralMessages","invalid_start_date"); context.addMessage(null,new FacesMessage(startDateErr)); error=true; } // check if due date is valid if(!assessmentSettings.getIsValidDueDate()){ String dueDateErr = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.GeneralMessages","invalid_due_date"); context.addMessage(null,new FacesMessage(dueDateErr)); error=true; } // check if retract date is valid if(!assessmentSettings.getIsValidRetractDate()){ String retractDateErr = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.GeneralMessages","invalid_retrack_date"); context.addMessage(null,new FacesMessage(retractDateErr)); error=true; } if (assessmentSettings.getReleaseTo().equals(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)) { String[] groupsAuthorized = assessmentSettings.getGroupsAuthorizedToSave(); //getGroupsAuthorized(); if (groupsAuthorized == null || groupsAuthorized.length == 0) { String releaseGroupError = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.GeneralMessages","choose_one_group"); context.addMessage(null,new FacesMessage(releaseGroupError)); error=true; assessmentSettings.setNoGroupSelectedError(true); } else { assessmentSettings.setNoGroupSelectedError(false); } } // if timed assessment, does it has value for time Object time=assessmentSettings.getValueMap().get("hasTimeAssessment"); boolean isTime=false; try { if (time != null) { isTime = ( (Boolean) time).booleanValue(); } } catch (Exception ex) { // keep default log.warn("Expecting Boolean hasTimeAssessment, got: " + time); } if((isTime) &&((assessmentSettings.getTimeLimit().intValue())==0)){ String time_err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","timeSelect_error"); context.addMessage(null,new FacesMessage(time_err)); error=true; } String ipString = assessmentSettings.getIpAddresses().trim(); String[]arraysIp=(ipString.split("\n")); boolean ipErr=false; for(int a=0;a<arraysIp.length;a++){ String currentString=arraysIp[a]; if(!currentString.trim().equals("")){ if(a<(arraysIp.length-1)) currentString=currentString.substring(0,currentString.length()-1); if(!s.isIpValid(currentString)){ ipErr=true; break; } } } if(ipErr){ error=true; String ip_err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","ip_error"); context.addMessage(null,new FacesMessage(ip_err)); } String unlimitedSubmissions = assessmentSettings.getUnlimitedSubmissions(); if (unlimitedSubmissions != null && unlimitedSubmissions.equals(AssessmentAccessControlIfc.LIMITED_SUBMISSIONS.toString())) { try { String submissionsAllowed = assessmentSettings.getSubmissionsAllowed().trim(); int submissionAllowed = Integer.parseInt(submissionsAllowed); if (submissionAllowed < 1) { throw new RuntimeException(); } } catch (RuntimeException e){ error=true; String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","submissions_allowed_error"); context.addMessage(null,new FacesMessage(submission_err)); } } //String unlimitedSubmissions = assessmentSettings.getUnlimitedSubmissions(); String scoringType=assessmentSettings.getScoringType(); if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE.toString()) && "0".equals(assessmentSettings.getUnlimitedSubmissions())) { try { String submissionsAllowed = assessmentSettings.getSubmissionsAllowed().trim(); int submissionAllowed = Integer.parseInt(submissionsAllowed); if (submissionAllowed < 2) { throw new RuntimeException(); } } catch (RuntimeException e){ error=true; String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","averag_grading_single_submission"); context.addMessage(null,new FacesMessage(submission_err)); } } //check feedback - if at specific time then time should be defined. if((assessmentSettings.getFeedbackDelivery()).equals("2")) { if (assessmentSettings.getFeedbackDateString()==null || assessmentSettings.getFeedbackDateString().equals("")) { error=true; String date_err=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","date_error"); context.addMessage(null,new FacesMessage(date_err)); } else if(!assessmentSettings.getIsValidFeedbackDate()){ String feedbackDateErr = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.GeneralMessages","invalid_feedback_date"); context.addMessage(null,new FacesMessage(feedbackDateErr)); error=true; } } // check secure delivery exit password SecureDeliveryServiceAPI secureDeliveryService = SamigoApiFactory.getInstance().getSecureDeliveryServiceAPI(); if ( secureDeliveryService.isSecureDeliveryAvaliable() ) { String moduleId = assessmentSettings.getSecureDeliveryModule(); if ( ! SecureDeliveryServiceAPI.NONE_ID.equals( moduleId ) ) { String exitPassword = assessmentSettings.getSecureDeliveryModuleExitPassword(); if ( exitPassword != null && exitPassword.length() > 0 ) { for ( int i = 0; i < exitPassword.length(); i++ ) { char c = exitPassword.charAt(i); if ( ! (( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || ( c >= '0' && c <= '9' )) ) { error = true; String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","exit_password_error"); context.addMessage(null,new FacesMessage(submission_err)); break; } } } } } if (error){ String blockDivs = ContextUtil.lookupParam("assessmentSettingsAction:blockDivs"); assessmentSettings.setBlockDivs(blockDivs); assessmentSettings.setOutcomeSave("editAssessmentSettings"); return; } // Set the outcome once Save button is clicked AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author"); assessmentSettings.setOutcomeSave(author.getFromPage()); s.save(assessmentSettings, false); // reset the core listing in case assessment title changes ArrayList assessmentList = assessmentService.getBasicInfoOfAllActiveAssessments( author.getCoreAssessmentOrderBy(),author.isCoreAscending()); Iterator iter = assessmentList.iterator(); while (iter.hasNext()) { AssessmentFacade assessmentFacade= (AssessmentFacade) iter.next(); assessmentFacade.setTitle(FormattedText.convertFormattedTextToPlaintext(assessmentFacade.getTitle())); } // get the managed bean, author and set the list author.setAssessments(assessmentList); // goto Question Authoring page EditAssessmentListener editA= new EditAssessmentListener(); editA.setPropertiesForAssessment(author); } }