/**
* $Id: QuestionAction.java 4026 2011-03-22 14:58:42Z orangeforjava $
*/
package org.openuap.cms.survey.action.admin.question;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openuap.base.util.ControllerHelper;
import org.openuap.base.util.QueryInfo;
import org.openuap.base.util.context.PageBuilder;
import org.openuap.cms.core.action.UserAwareAction;
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.QuestionGroup;
import org.openuap.cms.survey.model.QuestionPage;
import org.openuap.cms.survey.model.Survey;
import org.springframework.web.servlet.ModelAndView;
/**
* <p>
* Title: QuestionAction
* </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 QuestionAction extends UserAwareAction {
private QuestionManager questionManager;
private SurveyManager surveyManager;
private String defaultScreensPath;
private String framesetViewName;
private String headerViewName;
private String listViewName;
private String sortListViewName;
private String viewQuestionViewName;
private String viewGroupViewName;
private String viewPageViewName;
/**
*
*/
public QuestionAction() {
initDefaultViewName();
}
protected void initDefaultViewName() {
defaultScreensPath = "/plugin/cms/survey/screens/question/";
framesetViewName = defaultScreensPath + "question_frameset.html";
headerViewName = defaultScreensPath + "question_header.html";
listViewName = defaultScreensPath + "question_list.html";
sortListViewName = defaultScreensPath + "question_sort.html";
viewQuestionViewName = defaultScreensPath + "question_view.html";
viewGroupViewName = defaultScreensPath + "group_view.html";
viewPageViewName = defaultScreensPath + "page_view.html";
}
public ModelAndView perform(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
ModelAndView mv = new ModelAndView(framesetViewName, model);
String sid = request.getParameter("sid");
model.put("sid", sid);
return mv;
}
public ModelAndView doHeader(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
ModelAndView mv = new ModelAndView(headerViewName, model);
String sid = request.getParameter("sid");
if (sid != null) {
Long id = new Long(sid);
Survey survey = surveyManager.getSurveyById(id);
model.put("survey", survey);
}
return mv;
}
/**
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @param helper
* ControllerHelper
* @param model
* Map
* @return ModelAndView
* @throws Exception
*/
public ModelAndView doList(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
ModelAndView mv = new ModelAndView(listViewName, model);
//
String sid = request.getParameter("sid");
if (sid != null) {
Long id = new Long(sid);
Survey survey = surveyManager.getSurveyById(id);
model.put("survey", survey);
}
//
//
String column_condition = "";
//
String where = request.getParameter("where");
String page = request.getParameter("page");
String pageNum = request.getParameter("pageNum");
String order = request.getParameter("order");
String order_mode = request.getParameter("order_mode");
String order_name = request.getParameter("order_name");
//
String audit = request.getParameter("audit");
//
String creationDate = request.getParameter("creationDate");
String creationDate2 = request.getParameter("creationDate2");
// get the keyword
String tmp = request.getParameter("keyword");
if (tmp == null) {
tmp = "";
}
//
//
String keyword = tmp;
//
String fields = helper.getString("fields", "");
//
Integer start = new Integer(0);
Integer limit = new Integer(20);
if (where == null) {
where = "";
}
if (order == null) {
order = "";
}
if (order_mode == null) {
order_mode = "";
}
if (order_name == null) {
order_name = "";
}
order_name = order_name.replaceAll("\\^", "");
//
String final_order = "";
if (!order.equals("") && !order_mode.equals("")) {
final_order = order + " " + order_mode;
}
if (pageNum != null) {
limit = new Integer(pageNum);
} else {
pageNum = "20";
}
if (page != null) {
start = new Integer((Integer.parseInt(page) - 1) * limit.intValue());
} else {
page = "1";
}
//
if (fields != null && !fields.equals("")) {
String columns[] = fields.split(",");
if (columns != null) {
for (int i = 0; i < columns.length; i++) {
column_condition += " or e." + columns[i] + " like '%"
+ keyword + "%'";
}
if (!column_condition.equals("")) {
column_condition = column_condition.substring(4);
column_condition = " (" + column_condition + ")";
}
}
}
//
where += column_condition;
// other where condition
// audit
if (audit != null) {
if (!audit.equals("-1")) {
where += " and e.audit=" + audit;
}
} else {
audit = "-1";
}
// creationDate
if (creationDate != null && !creationDate.equals("")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dd = sdf.parse(creationDate);
where += " and e.questionCreationDate>=" + dd.getTime() + "";
} else {
creationDate = "";
}
// creationDate2
if (creationDate2 != null && !creationDate2.equals("")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dd = sdf.parse(creationDate2);
where += " and e.questionCreationDate<=" + dd.getTime() + "";
} else {
creationDate2 = "";
}
//
//
PageBuilder pb = new PageBuilder(limit.intValue());
QueryInfo qi = new QueryInfo(where, final_order, limit, start);
//
List questions = null;
if (sid != null) {
questions = questionManager.getQuestionList(new Long(sid), qi, pb);
} else {
questions = questionManager.getQuestions(qi, pb);
}
pb.page(Integer.parseInt(page));
model.put("questions", questions);
model.put("pb", pb);
model.put("page", page);
model.put("pageNum", pageNum);
model.put("order", order);
model.put("order_mode", order_mode);
model.put("order_name", order_name);
model.put("where", where);
model.put("action", this);
// add some search parameter
model.put("keyword", keyword);
model.put("audit", audit);
//
model.put("creationDate", creationDate);
model.put("creationDate2", creationDate2);
//
return mv;
}
public ModelAndView doSortList(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
ModelAndView mv = new ModelAndView(sortListViewName, model);
//
String sid = request.getParameter("sid");
if (sid != null) {
Long id = new Long(sid);
Survey survey = surveyManager.getSurveyById(id);
model.put("survey", survey);
}
//
//
String column_condition = "";
//
String where = request.getParameter("where");
String page = request.getParameter("page");
String pageNum = request.getParameter("pageNum");
String order = request.getParameter("order");
String order_mode = request.getParameter("order_mode");
String order_name = request.getParameter("order_name");
//
String audit = request.getParameter("audit");
//
String creationDate = request.getParameter("creationDate");
String creationDate2 = request.getParameter("creationDate2");
// get the keyword
String tmp = request.getParameter("keyword");
if (tmp == null) {
tmp = "";
}
//
//
String keyword = tmp;
//
String fields = helper.getString("fields", "");
//
Integer start = new Integer(0);
Integer limit = new Integer(10);
if (where == null) {
where = "";
}
if (order == null) {
order = "";
}
if (order_mode == null) {
order_mode = "";
}
if (order_name == null) {
order_name = "";
}
order_name = order_name.replaceAll("\\^", "");
//
String final_order = "";
if (!order.equals("") && !order_mode.equals("")) {
final_order = order + " " + order_mode;
}
if (pageNum != null) {
limit = new Integer(pageNum);
} else {
pageNum = "20";
}
if (page != null) {
start = new Integer((Integer.parseInt(page) - 1) * limit.intValue());
} else {
page = "1";
}
//
if (fields != null && !fields.equals("")) {
String columns[] = fields.split(",");
if (columns != null) {
for (int i = 0; i < columns.length; i++) {
column_condition += " or e." + columns[i] + " like '%"
+ keyword + "%'";
}
if (!column_condition.equals("")) {
column_condition = column_condition.substring(4);
column_condition = " (" + column_condition + ")";
}
}
}
//
where += column_condition;
// other where condition
// audit
if (audit != null) {
if (!audit.equals("-1")) {
where += " and e.audit=" + audit;
}
} else {
audit = "-1";
}
// creationDate
if (creationDate != null && !creationDate.equals("")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dd = sdf.parse(creationDate);
where += " and e.questionCreationDate>=" + dd.getTime() + "";
} else {
creationDate = "";
}
// creationDate2
if (creationDate2 != null && !creationDate2.equals("")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dd = sdf.parse(creationDate2);
where += " and e.questionCreationDate<=" + dd.getTime() + "";
} else {
creationDate2 = "";
}
//
//
PageBuilder pb = new PageBuilder(limit.intValue());
QueryInfo qi = new QueryInfo(where, final_order, null, null);
//
List questions = null;
if (sid != null) {
questions = questionManager.getQuestionList(new Long(sid), qi, pb);
} else {
questions = questionManager.getQuestions(qi, pb);
}
pb.page(Integer.parseInt(page));
model.put("questions", questions);
model.put("pb", pb);
model.put("page", page);
model.put("pageNum", pageNum);
model.put("order", order);
model.put("order_mode", order_mode);
model.put("order_name", order_name);
model.put("where", where);
model.put("action", this);
// add some search parameter
model.put("keyword", keyword);
model.put("audit", audit);
//
model.put("creationDate", creationDate);
model.put("creationDate2", creationDate2);
//
return mv;
}
public ModelAndView doUp(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String sid = request.getParameter("sid");
String questionId = request.getParameter("questionId");
if (sid != null && questionId != null) {
Long surveyId = new Long(sid);
Long qid = new Long(questionId);
Question q = questionManager.getQuestionById(qid);
if (q != null) {
updateQuestionPos("up", surveyId, qid, q.getQuestionPos()
.intValue());
}
}
return doSortList(request, response, helper, model);
}
public ModelAndView doDown(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String sid = request.getParameter("sid");
String questionId = request.getParameter("questionId");
if (sid != null && questionId != null) {
Long surveyId = new Long(sid);
Long qid = new Long(questionId);
Question q = questionManager.getQuestionById(qid);
if (q != null) {
updateQuestionPos("up", surveyId, qid, q.getQuestionPos()
.intValue());
}
}
return doSortList(request, response, helper, model);
}
public ModelAndView doDel(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String sid = request.getParameter("sid");
String questionId = request.getParameter("questionId");
if (sid != null && questionId != null) {
Long surveyId = new Long(sid);
Long qid = new Long(questionId);
Question q = questionManager.getQuestionById(qid);
if (q != null) {
updateQuestionPos("del", surveyId, qid, q.getQuestionPos()
.intValue());
questionManager.deleteQuestion(q);
}
}
return doList(request, response, helper, model);
}
public ModelAndView doSaveQuestion(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String groupId = request.getParameter("groupId");
String pageId = request.getParameter("pageId");
String questionId = request.getParameter("questionId");
if (groupId != null && questionId != null && pageId != null
&& !pageId.equals("")) {
Long gid = new Long(groupId);
Long qid = new Long(questionId);
Long pid = new Long(pageId);
Question q = questionManager.getQuestionById(qid);
if (q != null) {
q.setGroupId(gid);
q.setPageId(pid);
questionManager.saveQuestion(q);
}
}
return doSortList(request, response, helper, model);
}
/**
* 预览问题
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @param helper
* ControllerHelper
* @param model
* Map
* @return ModelAndView
* @throws Exception
*/
public ModelAndView doPreviewQuestion(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
//
String questionId = request.getParameter("questionId");
if (questionId != null && !questionId.equals("")) {
Long qid = new Long(questionId);
Question q = questionManager.getQuestionById(qid);
if (q != null) {
ModelAndView mv = new ModelAndView(viewQuestionViewName, model);
model.put("question", q);
return mv;
}
}
return null;
}
/**
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @param helper
* ControllerHelper
* @param model
* Map
* @return ModelAndView
* @throws Exception
*/
public ModelAndView doPreviewGroup(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
//
String groupId = request.getParameter("groupId");
String sid = request.getParameter("sid");
//
if (groupId != null && !groupId.equals("") && sid != null
& !sid.equals("")) {
Long gid = new Long(groupId);
Long siid = new Long(sid);
//
QuestionGroup group = questionManager.getQuestionGroup(siid, gid);
if (group != null) {
ModelAndView mv = new ModelAndView(viewGroupViewName, model);
model.put("questionGroup", group);
return mv;
}
}
return null;
}
/**
* 以页为单位预览
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @param helper
* ControllerHelper
* @param model
* Map
* @return ModelAndView
* @throws Exception
*/
public ModelAndView doPreviewPage(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String pageId = request.getParameter("pageId");
String sid = request.getParameter("sid");
if (pageId != null && sid != null) {
//
ModelAndView mv = new ModelAndView(viewPageViewName, model);
Long pid = new Long(pageId);
Long surveyId = new Long(sid);
QuestionPage qp = questionManager.getQuestionPage(surveyId, pid);
model.put("questionPage", qp);
return mv;
}
return null;
}
public ModelAndView doViewQuestionResult(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String questionId = request.getParameter("questionId");
if (questionId != null && !questionId.equals("")) {
Long qid = new Long(questionId);
QueryInfo qi = new QueryInfo("", "", null, null);
PageBuilder pb = new PageBuilder();
// questionManager.getVoterById(new Long(1));
List v = questionManager.getAnswerByQuestion(qid, qi, pb);
}
return null;
}
/**
*
* @param action
* String
* @param surveyId
* Long
* @param questionId
* Long
* @param pos
* int
*/
private void updateQuestionPos(String action, Long surveyId,
Long questionId, int pos) {
if (action == null) {
return;
}
if (action.equals("del")) {
int totalCount = questionManager.getQuestionCountBySurvey(surveyId);
if (pos >= 0 && pos < totalCount) {
questionManager.executeHql(
"update Question q set q.questionPos=q.questionPos-1 where q.questionPos>"
+ pos + " and q.surveyId=" + surveyId, null);
}
} else if (action.equals("up")) {
int totalCount = questionManager.getQuestionCountBySurvey(surveyId);
if (pos > 1 && pos <= totalCount) {
questionManager.executeHql(
"update Question q set q.questionPos=q.questionPos+1 where q.questionPos="
+ (pos - 1) + " and q.surveyId=" + surveyId,
null);
questionManager.executeHql(
"update Question q set q.questionPos=q.questionPos-1 where q.questionId="
+ questionId, null);
}
} else if (action.equals("down")) {
int totalCount = questionManager.getItemsCount(questionId);
if (pos >= 1 && pos < totalCount) {
questionManager.executeHql(
"update Question q set q.questionPos=q.questionPos-1 where q.questionPos="
+ (pos + 1) + " and q.surveyId=" + surveyId,
null);
questionManager.executeHql(
"update Question q set q.questionPos=q.questionPos+1 where q.questionId="
+ questionId, null);
}
}
}
public void setDefaultScreensPath(String defaultScreensPath) {
this.defaultScreensPath = defaultScreensPath;
}
public void setFramesetViewName(String framesetViewName) {
this.framesetViewName = framesetViewName;
}
public void setHeaderViewName(String headerViewName) {
this.headerViewName = headerViewName;
}
public void setListViewName(String listViewName) {
this.listViewName = listViewName;
}
public void setQuestionManager(QuestionManager questionManager) {
this.questionManager = questionManager;
}
public void setSurveyManager(SurveyManager surveyManager) {
this.surveyManager = surveyManager;
}
}