/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/ReorderQuestionsListener.java $
* $Id: ReorderQuestionsListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 2008, 2009 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.Iterator;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.tool.assessment.facade.AgentFacade;
import org.sakaiproject.tool.assessment.facade.AssessmentFacade;
import org.sakaiproject.tool.assessment.facade.ItemFacade;
import org.sakaiproject.tool.assessment.facade.SectionFacade;
import org.sakaiproject.tool.assessment.services.ItemService;
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.ItemAuthorBean;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
/**
* <p>Title: Samigo</p>
* <p>Description: Sakai Assessment Manager</p>
* @version $Id: ReorderQuestionsListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
*/
public class ReorderQuestionsListener implements ValueChangeListener
{
private static Log log = LogFactory.getLog(ReorderQuestionsListener.class);
/**
* Standard process action method.
* @param ae ValueChangeEvent
* @throws AbortProcessingException
*/
public void processValueChange(ValueChangeEvent ae) throws AbortProcessingException
{
log.info("ReorderQuestionsListener valueChangeLISTENER.");
ItemAuthorBean itemauthorbean = (ItemAuthorBean) ContextUtil.lookupBean("itemauthor");
FacesContext context = FacesContext.getCurrentInstance();
String oldPos= ae.getOldValue().toString();
String newPos= ae.getNewValue().toString();
// String itemParam = String.valueOf( ((Integer)ae.getOldValue()).intValue()-1) + ":currItemId";
String pulldownId = ae.getComponent().getClientId(context);
String itemParam = pulldownId.replaceFirst("number","currItemId");
String itemId= ContextUtil.lookupParam(itemParam);
if (itemId !=null) {
// somehow ae.getOldValue() keeps the old value, thus we get itemId==null
ItemService delegate = new ItemService();
ItemFacade itemf = delegate.getItem(Long.valueOf(itemId), AgentFacade.getAgentString());
SectionFacade sectFacade = (SectionFacade) itemf.getSection();
reorderSequences(sectFacade, Integer.valueOf(oldPos), Integer.valueOf(newPos));
// goto editAssessment.jsp, so reset assessmentBean
AssessmentService assessdelegate = new AssessmentService();
AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean("assessmentBean");
AssessmentFacade assessment = assessdelegate.getAssessment(assessmentBean.getAssessmentId());
assessmentBean.setAssessment(assessment);
itemauthorbean.setOutcome("editAssessment");
}
}
/**
** shift sequence number down when inserting or reordering
**/
private void reorderSequences(SectionFacade sectfacade, Integer oldPos, Integer newPos){
ItemService delegate = new ItemService();
Set itemset = sectfacade.getItemFacadeSet();
Iterator iter = itemset.iterator();
while (iter.hasNext()) {
ItemFacade itemfacade = (ItemFacade) iter.next();
Integer itemfacadeseq = itemfacade.getSequence();
if ( (oldPos.compareTo(newPos) < 0) && (itemfacadeseq.compareTo(oldPos) > 0) && (itemfacadeseq.compareTo(newPos) <= 0) ){
itemfacade.setSequence(Integer.valueOf(itemfacadeseq.intValue()-1) );
delegate.saveItem(itemfacade);
}
if ( (oldPos.compareTo(newPos) > 0) && (itemfacadeseq.compareTo(newPos) >= 0) && (itemfacadeseq.compareTo(oldPos) < 0) ){
itemfacade.setSequence(Integer.valueOf(itemfacadeseq.intValue()+1) );
delegate.saveItem(itemfacade);
}
if ( itemfacadeseq.compareTo(oldPos) == 0) {
itemfacade.setSequence(newPos);
delegate.saveItem(itemfacade);
}
}
}
}