/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/questionpool/PoolSaveListener.java $
* $Id: PoolSaveListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2004, 2005, 2006, 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.questionpool;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Iterator;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
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.QuestionPoolFacade;
import org.sakaiproject.tool.assessment.services.QuestionPoolService;
import org.sakaiproject.tool.assessment.facade.ItemFacade;
import org.sakaiproject.tool.assessment.services.ItemService;
import org.sakaiproject.tool.assessment.ui.bean.questionpool.QuestionPoolBean;
import org.sakaiproject.tool.assessment.ui.bean.questionpool.QuestionPoolDataBean;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
import org.sakaiproject.tool.assessment.util.TextFormat;
/**
* <p>Title: Samigo</p>
* <p>Description: Sakai Assessment Manager</p>
* @version $Id: PoolSaveListener.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
*/
public class PoolSaveListener implements ActionListener
{
private static Log log = LogFactory.getLog(PoolSaveListener.class);
//private static ContextUtil cu;
/**
* Standard process action method.
* @param ae ActionEvent
* @throws AbortProcessingException
*/
public void processAction(ActionEvent ae) throws AbortProcessingException
{
//log.info("PoolSaveListener :");
QuestionPoolBean qpoolbean= (QuestionPoolBean) ContextUtil.lookupBean("questionpool");
String currentName= TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpoolbean.getCurrentPool().getDisplayName());
boolean isUnique=true;
QuestionPoolService service = new QuestionPoolService();
QuestionPoolDataBean bean = qpoolbean.getCurrentPool();
Long currentId = new Long ("0");
FacesContext context = FacesContext.getCurrentInstance();
if(bean.getId() != null)
{
currentId = bean.getId();
}
Long currentParentId = new Long("0");
if(bean.getParentPoolId() != null)
{
currentParentId = bean.getParentPoolId();
}
if(currentName!=null &&(currentName.trim()).equals("")){
String err1=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.QuestionPoolMessages","poolName_empty");
context.addMessage(null,new FacesMessage(err1));
qpoolbean.setOutcomeEdit("editPool");
qpoolbean.setOutcome("addPool");
return;
}
try {
if((qpoolbean.getAddOrEdit()).equals("add")){
isUnique=service.poolIsUnique("0",currentName,""+currentParentId, AgentFacade.getAgentString()) ;
}
else {
isUnique=service.poolIsUnique(""+currentId,currentName,""+currentParentId, AgentFacade.getAgentString());
}
if(!isUnique){
String error=ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.QuestionPoolMessages","duplicateName_error");
context.addMessage(null,new FacesMessage(error));
qpoolbean.setOutcomeEdit("editPool");
qpoolbean.setOutcome("addPool");
return;
}
if (!savePool(qpoolbean)){
throw new RuntimeException("failed to populateItemBean.");
}
if((qpoolbean.getAddOrEdit()).equals("edit")){
if (!startRemoveItems(qpoolbean)){
throw new RuntimeException("failed to populateItemBean.");
}
}
qpoolbean.setAddOrEdit("edit");
}
catch(Exception e){
throw new RuntimeException(e);
} //if error=false then save, if not then create error message
}
public boolean savePool(QuestionPoolBean qpbean) {
QuestionPoolDataBean bean = qpbean.getCurrentPool();
Long beanid = new Long ("0");
if(bean.getId() != null)
{
beanid = bean.getId();
}
Long parentid = new Long("0");
if(bean.getParentPoolId() != null)
{
parentid = bean.getParentPoolId();
}
QuestionPoolFacade questionpool =
new QuestionPoolFacade (beanid, parentid);
questionpool.updateDisplayName(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, bean.getDisplayName()));
questionpool.updateDescription(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, bean.getDescription()));
questionpool.setOrganizationName(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, bean.getOrganizationName()));
questionpool.setObjectives(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, bean.getObjectives()));
questionpool.setKeywords(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, bean.getKeywords()));
// need to set owner and accesstype
questionpool.setAccessTypeId(QuestionPoolFacade.ACCESS_DENIED); // set as default
QuestionPoolService service = new QuestionPoolService();
// add pool
if (beanid.toString().equals("0")) {
questionpool.setOwnerId(AgentFacade.getAgentString());
questionpool.setDateCreated(new Date());
}
// edit pool
else {
questionpool.setOwnerId(service.getPool(beanid, AgentFacade.getAgentString()).getOwnerId());
questionpool.setDateCreated(bean.getDateCreated());
}
QuestionPoolService delegate = new QuestionPoolService();
//log.info("Saving pool");
delegate.savePool(questionpool);
// Rebuild the tree with the new pool
qpbean.buildTree();
// System.out.println( "SAVE - POOLSOURCE= "+qpbean.getAddPoolSource());
//where do you get value from addPoolSource? It always return null though.
if ("editpool".equals(qpbean.getAddPoolSource())) {
// so reset subpools tree
// QuestionPoolFacade thepool= delegate.getPool(parentid, AgentFacade.getAgentString());
// qpbean.getCurrentPool().setNumberOfSubpools(thepool.getSubPoolSize().toString());
qpbean.startEditPoolAgain(parentid.toString()); // return to edit poolwith the current pool set to the parentpoo
// Reset the properties for current pool to reflect the early changes (before click on "Add") in edit pool
QuestionPoolDataBean currentPool = qpbean.getCurrentPool();
currentPool.setDisplayName(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpbean.getParentPool().getDisplayName()));
currentPool.setOrganizationName(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpbean.getParentPool().getOrganizationName()));
currentPool.setDescription(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpbean.getParentPool().getDescription()));
currentPool.setObjectives(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpbean.getParentPool().getObjectives()));
currentPool.setKeywords(TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, qpbean.getParentPool().getKeywords()));
ArrayList addedPools = qpbean.getAddedPools();
if (addedPools == null) {
addedPools = new ArrayList();
}
addedPools.add(questionpool.getQuestionPoolId());
qpbean.setAddedPools(addedPools);
qpbean.setOutcome("editPool");
qpbean.setAddPoolSource("");
qpbean.setSubQpDataModelByLevel();
}
else {
qpbean.setOutcomeEdit("poolList");
qpbean.setOutcome("poolList");
qpbean.setQpDataModelByLevel();
}
// set outcome for action
return true;
}
public boolean startRemoveItems(QuestionPoolBean qpoolbean){
// used by the editPool.jsp, to remove one or more items
try {
String itemId= "";
ArrayList destItems= ContextUtil.paramArrayValueLike("removeCheckbox");
if (destItems.size() > 0) {
// only go to remove confirmatin page when at least one checkbox is checked
List items= new ArrayList();
Iterator iter = destItems.iterator();
while(iter.hasNext())
{
itemId = (String) iter.next();
ItemService delegate = new ItemService();
ItemFacade itemfacade= delegate.getItem(new Long(itemId), AgentFacade.getAgentString());
items.add(itemfacade);
}
qpoolbean.setItemsToDelete(items);
qpoolbean.setOutcomeEdit("removeQuestionFromPool");
qpoolbean.setOutcome("removeQuestionFromPool");
}
else {
// otherwise go to poollist
qpoolbean.setOutcome("poolList");
}
}
catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}