/** * $Id: QuestionEditAction.java 4026 2011-03-22 14:58:42Z orangeforjava $ */ package org.openuap.cms.survey.action.admin.question; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.openuap.base.util.ControllerHelper; import org.openuap.base.util.resource.DirectoryListDataLoader; import org.openuap.cms.core.action.UserAwareFormAction; import org.openuap.cms.survey.manager.QuestionManager; import org.openuap.cms.survey.manager.SurveyManager; import org.openuap.cms.survey.model.Question; import org.openuap.cms.survey.model.QuestionItem; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; /** * <p> * Title:QuestionEditAction * </p> * * <p> * Description:问题编辑控制器. * </p> * * <p> * Copyright: Copyright (c) 2006 * </p> * * <p> * Company: http://www.openuap.org * </p> * * @author Weiping Ju * @version 1.0 */ public class QuestionEditAction extends UserAwareFormAction { private String defaultScreensPath; private String resultViewName; // private QuestionManager questionManager; private SurveyManager surveyManager; // public QuestionEditAction() { initDefaultProperty(); } protected void initDefaultProperty() { defaultScreensPath = "/plugin/cms/survey/screens/question/"; resultViewName = defaultScreensPath + "question_result.html"; this.setFormView(defaultScreensPath + "question_edit.html"); this.setSuccessView(this.getFormView()); this.setSessionForm(true); this.setBindOnNewForm(false); this.setCommandClass(Question.class); this.setCommandName("question"); } /** * * @param request * * @param response * * @param command * * @param errors * * @param helper * * @param model * * @return * @throws */ protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors, ControllerHelper helper, Map model) throws Exception { // ModelAndView mv = new ModelAndView(resultViewName, model); model.put("op", "edit"); try { Question question = (Question) command; if (question.getQuestionId() == null) { question.setCreationUserId(getUser().getUserId()); question.setCreationUserName(getUser().getName()); question.setQuestionCreationDate(new Long(System .currentTimeMillis())); question.setQuestionStatus(new Integer(0)); Long id = questionManager.addQuestion(question); // model.put("id", id); // } else { questionManager.saveQuestion(question); model.put("id", question.getQuestionId()); } model.put("rs", "success"); } catch (Exception ex) { ex.printStackTrace(); model.put("rs", "failed"); model.put("msgs", ex); } return mv; } protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) { } protected Object formBackingObject(HttpServletRequest request) { String id = request.getParameter("questionId"); String sid = request.getParameter("sid"); Question question = null; if (id != null) { Long iid = new Long(id); question = questionManager.getQuestionById(iid); } else { question = new Question(); if (sid != null) { Long lsid = new Long(sid); int count = questionManager.getQuestionCountBySurvey(lsid); question.setSurveyId(lsid); question.setQuestionPos(new Long(count + 1)); question.setGroupId(new Long(count + 1)); } } return question; } protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception { Map model = new HashMap(); Question question = (Question) command; if (question.getQuestionId() == null) { model.put("mode", "add"); } else { model.put("mode", "edit"); List items = questionManager.getQuestionItems(question .getQuestionId()); model.put("items", items); } // List questionTypes = getQuestionTypeConstants(); model.put("questionTypes", questionTypes); List questionFilters = getQuestionFilterConstants(); model.put("questionFilters", questionFilters); return model; } public ModelAndView doAddQuestion(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String id = request.getParameter("questionId"); String sid = request.getParameter("sid"); if (id != null) { Long iid = new Long(id); Question question = questionManager.getQuestionById(iid); if (sid != null && question != null) { Long lsid = new Long(sid); int count = questionManager.getQuestionCountBySurvey(lsid); Question q = new Question(); q.setCreationUserId(this.getUser().getUserId()); q.setCreationUserName(this.getUser().getName()); q.setGroupId(question.getGroupId()); q.setGroupTitle(question.getGroupTitle()); q.setPageId(question.getPageId()); q.setQuestionCreationDate(new Long(System.currentTimeMillis())); q.setQuestionPos(new Long(count + 1)); q.setQuestionStatus(new Integer(0)); q.setQuestionTitle("[复制]" + question.getQuestionTitle()); q.setQuestionType(question.getQuestionType()); q.setSurveyId(lsid); Long qid = questionManager.addQuestion(q); q.setQuestionId(qid); // 添加选项 Set items = question.getQuestionItems(); if (items != null) { Iterator it = items.iterator(); while (it.hasNext()) { QuestionItem qi = (QuestionItem) it.next(); QuestionItem qi2 = new QuestionItem(); qi2.setQuestion(q); qi2.setQuestionItemPolledTimes(new Integer(0)); qi2.setQuestionItemSort(qi.getQuestionItemSort()); qi2.setQuestionItemText(qi.getQuestionItemText()); qi2.setQuestionItemType(qi.getQuestionItemType()); questionManager.addQuestionItem(qi2); } } // helper.sendRedirect(helper.getBaseURL() + "plugin/survey/questionEdit.jhtml?sid=" + sid + "&questionId=" + qid); } } return null; } /** * * @param request * HttpServletRequest * @param response * HttpServletResponse * @param helper * ControllerHelper * @param model * Map * @return ModelAndView * @throws Exception */ public ModelAndView doAddItem(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String questionId = request.getParameter("questionId"); if (questionId != null) { Long qid = new Long(questionId); Question q = questionManager.getQuestionById(qid); if (q != null) { QuestionItem item = new QuestionItem(); int i = questionManager.getItemsCount(qid); item.setQuestion(q); item.setQuestionItemPolledTimes(new Integer(0)); item.setQuestionItemText("请输入选项内容"); item.setQuestionItemType(new Integer(0)); item.setQuestionItemSort(new Integer(i + 1)); questionManager.addQuestionItem(item); } } return this.showNewForm(request, response, helper, model); } public ModelAndView doSaveItem(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String questionItemId = request.getParameter("questionItemId"); String questionItemText = request.getParameter("questionItemText"); String questionItemType = request.getParameter("questionItemType"); String image=helper.getString("image",""); String url=helper.getString("url",""); // if (questionItemId != null) { Long qid = new Long(questionItemId); QuestionItem qi = questionManager.getQuestionItemById(qid); if (qi != null) { qi.setQuestionItemText(questionItemText); qi.setQuestionItemType(new Integer(questionItemType)); qi.setImage(image); qi.setUrl(url); // questionManager.saveQuestionItem(qi); } } return this.showNewForm(request, response, helper, model); } public ModelAndView doDelItem(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String questionItemId = request.getParameter("questionItemId"); String questionId = request.getParameter("questionId"); if (questionItemId != null) { Long qid = new Long(questionItemId); Long id = new Long(questionId); QuestionItem qi = questionManager.getQuestionItemById(qid); if (qi != null) { Integer pos = qi.getQuestionItemSort(); updateItemPos("del", id, qid, pos.intValue()); questionManager.deleteQuestionItem(qi); } } return this.showNewForm(request, response, helper, model); } public ModelAndView doUpItem(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String questionItemId = request.getParameter("questionItemId"); String questionId = request.getParameter("questionId"); if (questionItemId != null) { Long qid = new Long(questionItemId); Long id = new Long(questionId); QuestionItem qi = questionManager.getQuestionItemById(qid); if (qi != null) { Integer pos = qi.getQuestionItemSort(); updateItemPos("up", id, qid, pos.intValue()); } } return this.showNewForm(request, response, helper, model); } public ModelAndView doDownItem(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String questionItemId = request.getParameter("questionItemId"); String questionId = request.getParameter("questionId"); if (questionItemId != null) { Long qid = new Long(questionItemId); Long id = new Long(questionId); QuestionItem qi = questionManager.getQuestionItemById(qid); if (qi != null) { Integer pos = qi.getQuestionItemSort(); updateItemPos("down", id, qid, pos.intValue()); } } return this.showNewForm(request, response, helper, model); } private void updateItemPos(String action, Long questionId, Long questionItemId, int pos) { if (action == null) { return; } if (action.equals("del")) { int totalCount = questionManager.getItemsCount(questionId); if (pos >= 0 && pos < totalCount) { questionManager .executeHql( "update QuestionItem qi set qi.questionItemSort=qi.questionItemSort-1 where qi.question.questionId=" + questionId + " and qi.questionItemSort>" + pos, null); } } else if (action.equals("up")) { int totalCount = questionManager.getItemsCount(questionId); if (pos > 1 && pos <= totalCount) { questionManager .executeHql( "update QuestionItem qi set qi.questionItemSort=qi.questionItemSort+1 where qi.questionItemSort=" + (pos - 1) + " and qi.question.questionId=" + questionId, null); questionManager .executeHql( "update QuestionItem qi set qi.questionItemSort=qi.questionItemSort-1 where qi.questionItemId=" + questionItemId, null); } } else if (action.equals("down")) { int totalCount = questionManager.getItemsCount(questionId); if (pos >= 1 && pos < totalCount) { questionManager .executeHql( "update QuestionItem qi set qi.questionItemSort=qi.questionItemSort-1 where qi.questionItemSort=" + (pos + 1) + " and qi.question.questionId=" + questionId, null); questionManager .executeHql( "update QuestionItem qi set qi.questionItemSort=qi.questionItemSort+1 where qi.questionItemId=" + questionItemId, null); } } } public List getQuestionTypeConstants() { List dd = DirectoryListDataLoader .load("/plugin/survey/questiontype_constant.xml"); return dd; } public List getQuestionFilterConstants() { List dd = DirectoryListDataLoader .load("/plugin/survey/questionfilter_constant.xml"); return dd; } public void setResultViewName(String resultViewName) { this.resultViewName = resultViewName; } public void setQuestionManager(QuestionManager questionManager) { this.questionManager = questionManager; } public void setDefaultScreensPath(String defaultScreensPath) { this.defaultScreensPath = defaultScreensPath; } }