/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/questionpool/ImportQuestionsToAuthoring.java $
* $Id: ImportQuestionsToAuthoring.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 2007, 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.questionpool;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemData;
import org.sakaiproject.tool.assessment.data.dao.assessment.ItemMetaData;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AttachmentIfc;
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.SectionService;
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.bean.questionpool.QuestionPoolBean;
import org.sakaiproject.tool.assessment.ui.listener.author.ItemAddListener;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
/**
* <p>Title: Samigo</p>
* <p>Description: Sakai Assessment Manager</p>
* @version $Id: ImportQuestionsToAuthoring.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
*/
public class ImportQuestionsToAuthoring implements ActionListener
{
//private static Log log = LogFactory.getLog(ImportQuestionsToAuthoring.class);
//private static ContextUtil cu;
/**
* Standard process action method.
* @param ae ActionEvent
* @throws AbortProcessingException
*/
public void processAction(ActionEvent ae) throws AbortProcessingException
{
//log.info("ImportQuestionsToAuthoring:");
QuestionPoolBean qpoolbean= (QuestionPoolBean) ContextUtil.lookupBean("questionpool");
if (!importItems(qpoolbean))
{
throw new RuntimeException("failed to populateItemBean.");
}
qpoolbean.setImportToAuthoring(false);
}
public boolean importItems(QuestionPoolBean qpoolbean){
try {
AssessmentService assessdelegate = new AssessmentService();
ItemService delegate = new ItemService();
SectionService sectiondelegate = new SectionService();
AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean("assessmentBean");
ItemAuthorBean itemauthor = (ItemAuthorBean) ContextUtil.lookupBean("itemauthor");
int itempos= 0;
SectionFacade section = null;
ItemFacade itemfacade = null;
boolean newSectionCreated = false;
String itemId= "";
ArrayList destItems= ContextUtil.paramArrayValueLike("importCheckbox");
if (destItems.size() > 0) {
//List items= new ArrayList();
Iterator iter = destItems.iterator();
while(iter.hasNext())
{
itemId = (String) iter.next();
ItemFacade poolitemfacade= delegate.getItem(Long.valueOf(itemId), AgentFacade.getAgentString());
ItemData clonedItem = delegate.cloneItem(poolitemfacade.getData());
clonedItem.setItemId(Long.valueOf(0));
clonedItem.setItemIdString("0");
itemfacade = new ItemFacade(clonedItem);
// path instead. so we will fix it here
setRelativePathInAttachment(itemfacade.getItemAttachmentList());
//AssessmentFacade assessment = assessdelegate.getAssessment(assessmentBean.getAssessmentId());
if ("-1".equals(qpoolbean.getSelectedSection())) {
if (!newSectionCreated) {
// add a new section
section = assessdelegate.addSection(assessmentBean.getAssessmentId());
newSectionCreated = true;
}
}
else {
section = sectiondelegate.getSection(Long.valueOf(qpoolbean.getSelectedSection()), AgentFacade.getAgentString());
}
if (section!=null) {
itemfacade.setSection(section);
if ( (itemauthor.getInsertPosition() ==null) || ("".equals(itemauthor.getInsertPosition())) ) {
if (newSectionCreated) {
itemfacade.setSequence(Integer.valueOf(itempos + 1));
}
else {
// if adding to the end
if (section.getItemSet() != null) {
itemfacade.setSequence(Integer.valueOf(section.getItemSet().size() + 1));
}
else {
// this is a new part
itemfacade.setSequence(Integer.valueOf(1));
}
}
}
else {
// if inserting or a question
String insertPos = itemauthor.getInsertPosition();
ItemAddListener itemAddListener = new ItemAddListener();
int insertPosIntvalue = Integer.valueOf(insertPos).intValue() + itempos;
itemAddListener.shiftSequences(delegate, section, Integer.valueOf(insertPosIntvalue));
int insertPosInt= insertPosIntvalue + 1 ;
itemfacade.setSequence(Integer.valueOf(insertPosInt));
}
delegate.saveItem(itemfacade);
// remove POOLID metadata if any,
delegate.deleteItemMetaData(itemfacade.getItemId(), ItemMetaData.POOLID, AgentFacade.getAgentString());
delegate.deleteItemMetaData(itemfacade.getItemId(), ItemMetaData.PARTID, AgentFacade.getAgentString());
delegate.addItemMetaData(itemfacade.getItemId(), ItemMetaData.PARTID,section.getSectionId().toString(), AgentFacade.getAgentString());
}
itempos= itempos+1; // for next item in the destItem.
}
// reset InsertPosition
itemauthor.setInsertPosition("");
itemauthor.setItemTypeString("");
// reset checkbox, otherwise if the last question is checked, it stays checked.
String[] emptyArr= {};
qpoolbean.setDestItems(emptyArr);
//TODO need to reset assessments.
AssessmentFacade assessment = assessdelegate.getAssessment(assessmentBean.getAssessmentId());
assessmentBean.setAssessment(assessment);
qpoolbean.setOutcome("editAssessment");
}
else {
// nothing is checked
qpoolbean.setOutcome("editPool");
}
}
catch (RuntimeException e) {
e.printStackTrace();
return false;
}
return true;
}
private void setRelativePathInAttachment(List attachmentList){
for (int i=0; i<attachmentList.size();i++){
AttachmentIfc attach = (AttachmentIfc) attachmentList.get(i);
String url = ContextUtil.getRelativePath(attach.getLocation());
attach.setLocation(url);
}
}
}