/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/RemovePublishedAssessmentListener.java $
* $Id: RemovePublishedAssessmentListener.java 107319 2012-04-17 13:39:00Z 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.Iterator;
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.service.gradebook.shared.GradebookExternalAssessmentService;
import org.sakaiproject.service.gradebook.shared.GradebookService;
import org.sakaiproject.spring.SpringBeanLocator;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentMetaDataIfc;
import org.sakaiproject.tool.assessment.facade.AgentFacade;
import org.sakaiproject.tool.assessment.facade.GradebookFacade;
import org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacade;
import org.sakaiproject.tool.assessment.integration.context.IntegrationContextFactory;
import org.sakaiproject.tool.assessment.integration.helper.ifc.CalendarServiceHelper;
import org.sakaiproject.tool.assessment.integration.helper.ifc.GradebookServiceHelper;
import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService;
import org.sakaiproject.tool.assessment.ui.bean.author.AuthorBean;
import org.sakaiproject.tool.assessment.ui.bean.author.PublishedAssessmentBean;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
/**
* <p>Title: Samigo</p>
* <p>Description: Sakai Assessment Manager</p>
* @author Ed Smiley
* @version $Id: RemovePublishedAssessmentListener.java 107319 2012-04-17 13:39:00Z david.horwitz@uct.ac.za $
*/
public class RemovePublishedAssessmentListener
implements ActionListener
{
private static Log log = LogFactory.getLog(RemovePublishedAssessmentListener.class);
private static final GradebookServiceHelper gbsHelper =
IntegrationContextFactory.getInstance().getGradebookServiceHelper();
private static final boolean integrated =
IntegrationContextFactory.getInstance().isIntegrated();
private CalendarServiceHelper calendarService = IntegrationContextFactory.getInstance().getCalendarServiceHelper();
public RemovePublishedAssessmentListener()
{
}
public void processAction(ActionEvent ae) throws AbortProcessingException
{
PublishedAssessmentBean pulishedAssessment = (PublishedAssessmentBean) ContextUtil.lookupBean("publishedassessment");
String assessmentId = pulishedAssessment.getAssessmentId();
if (assessmentId != null)
{
log.debug("assessmentId = " + assessmentId);
PublishedAssessmentService assessmentService = new PublishedAssessmentService();
//get assessment to see if it has a calendar event
PublishedAssessmentFacade assessment = assessmentService.getPublishedAssessment(
assessmentId.toString());
assessmentService.removeAssessment(assessmentId, "remove");
removeFromGradebook(assessmentId);
String calendarDueDateEventId = assessment.getAssessmentMetaDataByLabel(AssessmentMetaDataIfc.CALENDAR_DUE_DATE_EVENT_ID);
if(calendarDueDateEventId != null){
calendarService.removeCalendarEvent(AgentFacade.getCurrentSiteId(), calendarDueDateEventId);
}
EventTrackingService.post(EventTrackingService.newEvent("sam.pubAssessment.remove", "siteId=" + AgentFacade.getCurrentSiteId() + ", publisedAssessmentId=" + assessmentId, true));
AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author");
ArrayList publishedAssessmentList = author.getPublishedAssessments();
ArrayList list = new ArrayList();
for (int i=0; i<publishedAssessmentList.size();i++){
PublishedAssessmentFacade pa = (PublishedAssessmentFacade) publishedAssessmentList.get(i);
if (!(assessmentId).equals(pa.getPublishedAssessmentId().toString())) {
list.add(pa);
}
}
author.setPublishedAssessments(list);
ArrayList inactivePublishedAssessmentList = author.getInactivePublishedAssessments();
ArrayList inactiveList = new ArrayList();
for (int i=0; i<inactivePublishedAssessmentList.size();i++){
PublishedAssessmentFacade pa = (PublishedAssessmentFacade) inactivePublishedAssessmentList.get(i);
if (!(assessmentId).equals(pa.getPublishedAssessmentId().toString())) {
inactiveList.add(pa);
}
}
author.setInactivePublishedAssessments(inactiveList);
boolean isAnyAssessmentRetractForEdit = false;
Iterator iter = inactiveList.iterator();
while (iter.hasNext()) {
PublishedAssessmentFacade publishedAssessmentFacade = (PublishedAssessmentFacade) iter.next();
if (Integer.valueOf(3).equals(publishedAssessmentFacade.getStatus())) {
isAnyAssessmentRetractForEdit = true;
break;
}
}
if (isAnyAssessmentRetractForEdit) {
author.setIsAnyAssessmentRetractForEdit(true);
}
else {
author.setIsAnyAssessmentRetractForEdit(false);
}
}
else {
log.warn("Could not remove published assessment - assessment id is null");
}
}
private void removeFromGradebook(String assessmentId) {
GradebookExternalAssessmentService g = null;
if (integrated)
{
g = (GradebookExternalAssessmentService) SpringBeanLocator.getInstance().
getBean("org.sakaiproject.service.gradebook.GradebookExternalAssessmentService");
}
try {
log.debug("before gbsHelper.removeGradebook()");
gbsHelper.removeExternalAssessment(GradebookFacade.getGradebookUId(), assessmentId, g);
} catch (Exception e1) {
// Should be the external assessment doesn't exist in GB. So we quiet swallow the exception. Please check the log for the actual error.
log.info("Exception thrown in updateGB():" + e1.getMessage());
}
}
}