/**
* $Id: QuestionManagerImpl.java 3951 2010-11-02 10:13:17Z orangeforjava $
*/
package org.openuap.cms.survey.manager.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.openuap.base.util.QueryInfo;
import org.openuap.base.util.context.PageBuilder;
import org.openuap.cms.survey.dao.QuestionDao;
import org.openuap.cms.survey.dao.QuestionItemDao;
import org.openuap.cms.survey.dao.VoterDao;
import org.openuap.cms.survey.manager.QuestionManager;
import org.openuap.cms.survey.model.Answer;
import org.openuap.cms.survey.model.AnswerItem;
import org.openuap.cms.survey.model.Question;
import org.openuap.cms.survey.model.QuestionGroup;
import org.openuap.cms.survey.model.QuestionItem;
import org.openuap.cms.survey.model.QuestionPage;
import org.openuap.cms.survey.model.SurveyAnswer;
import org.openuap.cms.survey.model.Voter;
/**
* <p>
* Title:VoteManagerImpl
* </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 QuestionManagerImpl implements QuestionManager {
private QuestionDao questionDao;
private QuestionItemDao questionItemDao;
private VoterDao voterDao;
public QuestionManagerImpl() {
}
public List getQuestions(QueryInfo qi, PageBuilder pb) {
return questionDao.getQuestions(qi, pb);
}
public Question getQuestionById(Long id) {
return questionDao.getQuestionById(id);
}
public List getAllQuestions() {
return questionDao.getAllQuestions();
}
public List searchQuestions(String key, QueryInfo qi, PageBuilder pb) {
return questionDao.searchQuestions(key, qi, pb);
}
public Long addQuestion(Question question) {
return questionDao.addQuestion(question);
}
public void saveQuestion(Question question) {
questionDao.saveQuestion(question);
}
public void deleteQuestion(Question question) {
questionDao.deleteQuestion(question);
}
public int getQuestionCount() {
return questionDao.getQuestionCount();
}
public int getQuestionCount(Integer questionStatus) {
return questionDao.getQuestionCount(questionStatus);
}
public List getQuestionList(String questionsId) {
return questionDao.getQuestionList(questionsId);
}
public List getQuestionList(Integer questionStatus, QueryInfo qi,
PageBuilder pb) {
return questionDao.getQuestionList(questionStatus, qi, pb);
}
public List getQuestionItems(Long questionId) {
return questionItemDao.getQuestionItems(questionId);
}
public QuestionItem getQuestionItemById(Long itemId) {
return questionItemDao.getQuestionItemById(itemId);
}
public Long addQuestionItem(QuestionItem questionItem) {
return questionItemDao.addQuestionItem(questionItem);
}
public void saveQuestionItem(QuestionItem questionItem) {
questionItemDao.saveQuestionItem(questionItem);
}
public void deleteQuestionItem(QuestionItem questionItem) {
questionItemDao.deleteQuestionItem(questionItem);
}
public void deleteQuestionItems(Long questionId) {
questionItemDao.deleteQuestionItems(questionId);
}
public void deleteQuestionItemById(Long questionId) {
questionItemDao.deleteQuestionItemById(questionId);
}
public int getQuestionItemsTotalCount(Long questionId) {
return questionItemDao.getQuestionItemsTotalCount(questionId);
}
public Long addVoter(Voter voter) {
return voterDao.addVoter(voter);
}
public Voter getVoterByName(String name) {
return voterDao.getVoterByName(name);
}
public void saveVoter(Voter voter) {
voterDao.saveVoter(voter);
}
public void deleteVoter(Voter voter) {
voterDao.deleteVoter(voter);
}
public Voter searchVoter(String ipAddress, Long groupId) {
return voterDao.searchVoter(ipAddress, groupId);
}
public void setVoterDao(VoterDao voterDao) {
this.voterDao = voterDao;
}
public void setQuestionItemDao(QuestionItemDao questionItemDao) {
this.questionItemDao = questionItemDao;
}
public void setQuestionDao(QuestionDao questionDao) {
this.questionDao = questionDao;
}
public void updateQuestionItems(String voteItemsId) {
questionItemDao.updateQuestionItems(voteItemsId);
}
public void updateQuestionItems2(String questionItemsId) {
questionItemDao.updateQuestionItems2(questionItemsId);
}
public List getQuestionList(Long surveyId, QueryInfo qi, PageBuilder pb) {
return questionDao.getQuestionList(surveyId, qi, pb);
}
public List getQuestionList(String hql, String hql_count, QueryInfo qi,
PageBuilder pb) {
return questionDao.getQuestionList(hql, hql_count, qi, pb);
}
public int getItemsCount(Long questionId) {
return questionItemDao.getItemsCount(questionId);
}
public void executeHql(String hql, Object args[]) {
questionDao.executeHql(hql, args);
}
public int getQuestionCountBySurvey(Long surveyId) {
return questionDao.getQuestionCountBySurvey(surveyId);
}
public List getQuestionListByGroup(Long surveyId, Long groupId) {
return questionDao.getQuestionListByGroup(surveyId, groupId);
}
public QuestionPage getQuestionPage(Long surveyId, Long pageId) {
List questions = getQuestionListByPage(surveyId, pageId);
String qids = "";
if (questions != null && questions.size() > 0) {
Question fq = (Question) questions.get(0);
QuestionPage questionPage = new QuestionPage();
questionPage.setPageId(pageId);
// qids += fq.getQuestionId() + ",";
//
List groups = new ArrayList();
//
Long groupId = fq.getGroupId();
int start = 0;
int end = 0;
for (int i = 0; i < questions.size(); i++) {
Question q = (Question) questions.get(i);
qids += q.getQuestionId() + ",";
if (q.getGroupId().equals(groupId)) {
end++;
} else {
if (end - start > 1) {
// 一道题以上是1个组
QuestionGroup tmpGroup = new QuestionGroup();
List qs = new ArrayList();
Question q_first = (Question) questions.get(start);
for (int j = start; j < end; j++) {
Question tmp_q = (Question) questions.get(j);
qs.add(tmp_q);
}
tmpGroup.setGroupTitle(q_first.getGroupTitle());
tmpGroup.setGroupType(new Integer(1));
tmpGroup.setGroupId(q_first.getGroupId());
tmpGroup.setQuestions(qs);
groups.add(tmpGroup);
} else {
// 一道题是1个组
Question q_prev = (Question) questions.get(start);
QuestionGroup tmpGroup = new QuestionGroup();
tmpGroup.setGroupTitle(q_prev.getQuestionTitle());
tmpGroup.setGroupType(new Integer(0));
tmpGroup.setGroupId(q_prev.getGroupId());
List qs = new ArrayList();
qs.add(q_prev);
tmpGroup.setQuestions(qs);
groups.add(tmpGroup);
}
start = end;
end++;
groupId = q.getGroupId();
}
}
// Question eq = (Question) questions.get(questions.size() - 1);
if (end - start > 1) {
// 一道题以上是1个组
QuestionGroup tmpGroup = new QuestionGroup();
List qs = new ArrayList();
Question q_first = (Question) questions.get(start);
for (int j = start; j < end; j++) {
Question tmp_q = (Question) questions.get(j);
qs.add(tmp_q);
}
tmpGroup.setGroupTitle(q_first.getGroupTitle());
tmpGroup.setGroupType(new Integer(1));
tmpGroup.setGroupId(q_first.getGroupId());
tmpGroup.setQuestions(qs);
groups.add(tmpGroup);
} else {
// 一道题是1个组
Question q_prev = (Question) questions.get(start);
QuestionGroup tmpGroup = new QuestionGroup();
tmpGroup.setGroupTitle(q_prev.getQuestionTitle());
tmpGroup.setGroupType(new Integer(0));
tmpGroup.setGroupId(q_prev.getGroupId());
List qs = new ArrayList();
qs.add(q_prev);
tmpGroup.setQuestions(qs);
groups.add(tmpGroup);
}
//
questionPage.setGroups(groups);
qids = qids.substring(0, qids.length() - 1);
questionPage.setQuestionIds(qids);
return questionPage;
}
return null;
}
public List getQuestionListByPage(Long surveyId, Long pageId) {
return questionDao.getQuestionListByPage(surveyId, pageId);
}
public QuestionGroup getQuestionGroup(Long surveyId, Long groupId) {
List questions = getQuestionListByGroup(surveyId, groupId);
String qids = "";
if (questions != null && questions.size() > 0) {
Question fq = (Question) questions.get(0);
QuestionGroup group = new QuestionGroup();
group.setGroupId(fq.getGroupId());
if (questions.size() > 1) {
group.setGroupType(new Integer(1));
group.setGroupTitle(fq.getGroupTitle());
} else {
group.setGroupType(new Integer(0));
group.setGroupTitle(fq.getQuestionTitle());
}
qids = fq.getQuestionId() + ",";
for (int i = 1; i < questions.size(); i++) {
Question q = (Question) questions.get(i);
qids += q.getQuestionId() + ",";
}
qids = qids.substring(0, qids.length() - 1);
group.setQuestionIds(qids);
group.setQuestions(questions);
return group;
}
return null;
}
public List getPages(Long id) {
return questionDao.getPages(id);
}
public Voter getVoterById(Long voterId) {
return voterDao.getVoterById(voterId);
}
public void addAnswer(Answer Answer) {
voterDao.addAnswer(Answer);
}
public void saveAnswer(Answer Answer) {
voterDao.saveAnswer(Answer);
}
public void deleteAnswer(Answer Answer) {
voterDao.deleteAnswer(Answer);
}
public void deleteAnswerByVoter(Long voterId) {
voterDao.deleteAnswerByVoter(voterId);
}
public void deleteAnswerBySurvey(Long surveyId) {
voterDao.deleteAnswerBySurvey(surveyId);
}
public List getAnswer(Long surveyId, QueryInfo qi, PageBuilder pb) {
return voterDao.getAnswer(surveyId, qi, pb);
}
public List getAnswerByVoter(Long voterId, QueryInfo qi, PageBuilder pb) {
return voterDao.getAnswerByVoter(voterId, qi, pb);
}
public List getAnswerByQuestion(Long questionId, QueryInfo qi,
PageBuilder pb) {
return voterDao.getAnswerByQuestion(questionId, qi, pb);
}
public Answer getAnswerById(Long surveyId, Long voterId, Long questionId) {
return voterDao.getAnswerById(surveyId, voterId, questionId);
}
public void addAnswerItem(AnswerItem AnswerItem) {
voterDao.addAnswerItem(AnswerItem);
}
public void saveAnswerItem(AnswerItem AnswerItem) {
voterDao.saveAnswerItem(AnswerItem);
}
public void deleteAnswerItem(Answer AnswerItem) {
voterDao.deleteAnswerItem(AnswerItem);
}
public void deleteAnswerItemByVoter(Long voterId) {
voterDao.deleteAnswerByVoter(voterId);
}
public void deleteAnswerItemBySurvey(Long surveyId) {
voterDao.deleteAnswerBySurvey(surveyId);
}
public List getAnswerItemBySurvey(Long surveyId, QueryInfo qi,
PageBuilder pb) {
return voterDao.getAnswerItemBySurvey(surveyId, qi, pb);
}
public List getAnswerItemByVoter(Long voterId, QueryInfo qi, PageBuilder pb) {
return voterDao.getAnswerByVoter(voterId, qi, pb);
}
public List getAnswerItemByItem(Long itemId, QueryInfo qi, PageBuilder pb) {
return voterDao.getAnswerItemByItem(itemId, qi, pb);
}
public AnswerItem getAnswerItemById(Long itemId, Long voterId, Long surveyId) {
return voterDao.getAnswerItemById(itemId, voterId, surveyId);
}
public List getVoters(Long surveyId, Long surveyRecordId, QueryInfo qi,
PageBuilder pb) {
return voterDao.getVoters(surveyId, surveyRecordId, qi, pb);
}
public SurveyAnswer getSurveyAnswer(Long voterId) {
Voter voter = voterDao.getVoterById(voterId);
if (voter != null) {
SurveyAnswer surveyAnswer = new SurveyAnswer();
List answers = voterDao.getAnswerByVoter(voterId, null, null);
Map answerMap = new HashMap();
Map answerItemMap = new HashMap();
if (answers != null) {
answerMap = new HashMap();
for (int i = 0; i < answers.size(); i++) {
Answer answer = (Answer) answers.get(i);
answerMap.put(answer.getQuestionId(), answer);
}
}
List answerItems = voterDao.getAnswerItemByVoter(voterId, null,
null);
if (answerItems != null) {
for (int i = 0; i < answerItems.size(); i++) {
AnswerItem answerItem = (AnswerItem) answerItems.get(i);
answerItemMap.put(answerItem.getQuestionItemId(),
answerItem);
}
}
//
surveyAnswer.setAnswerDate(voter.getVoterPollDate());
surveyAnswer.setSurveyId(voter.getVoterSurveyId());
surveyAnswer.setVoter(voter);
surveyAnswer.setQuestionAnswers(answerMap);
surveyAnswer.setQuestionItemAnswers(answerItemMap);
return surveyAnswer;
}
return null;
}
/**
*
*/
public List getAnswer(Long surveyId, Long surveyRecordId, QueryInfo qi,
PageBuilder pb) {
return voterDao.getAnswer(surveyId, surveyRecordId, qi, pb);
}
/**
*
*/
public List getAnswerByQuestion(Long questionId, Long surveyRecordId,
QueryInfo qi, PageBuilder pb) {
return voterDao.getAnswerByQuestion(questionId, surveyRecordId, qi, pb);
}
}