public MultipleChoiceQuestionReport getMultipleChoiceQuestionTotalRateOnRecord( VoteReportFilter voteReportFilter, MultipleChoicePollingQuestion question) { MultipleChoiceQuestionReport multipleChoiceQuestionReport = new MultipleChoiceQuestionReport(voteDao.findOptions(question)); multipleChoiceQuestionReport.setQuestion(question); List<AbstractQuestionAnswer> questionAnswers = voteDao.findVoteQuestionAnswers(voteReportFilter, question); multipleChoiceQuestionReport.setCount(questionAnswers.size()); float questionTotalWeight = calculateOptionsTotalRate(question); float sumOfTotalRates = questionAnswers.size() * questionTotalWeight; float sumOfRates = 0; for (int i = 0; i < questionAnswers.size(); i++) { MultipleChoiceQuestionAnswer multipleChoiceQuestionAnswer = (MultipleChoiceQuestionAnswer) questionAnswers.get(i); List<PollingAnswerOption> optionList = multipleChoiceQuestionAnswer.getOptionList(); for (int j = 0; j < optionList.size(); j++) { PollingAnswerOption pollingAnswerOption = optionList.get(j); MultipleChoiceQuestionReport.OptionInfo optionInfo = findOptionCount( multipleChoiceQuestionReport.getOptionCounts(), pollingAnswerOption.getPollingOption()); optionInfo.setCount(optionInfo.getCount() + 1); float percent = (new Float(optionInfo.getCount()) / new Float(multipleChoiceQuestionReport.getCount())); optionInfo.setPercent(Math.round(percent * 10000) / 100); sumOfRates += pollingAnswerOption.getPollingOption().getWeight(); } } // multipleChoiceQuestionReport.setOp tionCounts(optionCounts); if (sumOfTotalRates != 0) { multipleChoiceQuestionReport.setTotalRate(sumOfRates / sumOfTotalRates); } return multipleChoiceQuestionReport; }
private int calculateVoteTotalRate(Vote vote) { BibliographicPollingTemplate template = (BibliographicPollingTemplate) vote.getPollingTemplate(); template = (BibliographicPollingTemplate) voteDao.getById(AbstractPollingTemplate.class, template.getId()); List<AbstractTemplateQuestion> templateQuestions = template.getQuestionList(); int totalWeight = 0; for (int i = 0; i < templateQuestions.size(); i++) { totalWeight += templateQuestions.get(i).getWeight(); } float totalRate = 0; List<AbstractQuestionAnswer> questionAnswers = vote.getQuestionAnswer(); for (int i = 0; i < questionAnswers.size(); i++) { int questionWeight = 0; int questionTotalRate = 0; int answerTotalRate = 0; AbstractQuestionAnswer questionAnswer = questionAnswers.get(i); questionWeight = questionAnswer.getQuestion().getWeight(); if (questionAnswer instanceof MultipleChoiceQuestionAnswer) { questionTotalRate = calculateOptionsTotalRate( (MultipleChoicePollingQuestion) questionAnswer.getQuestion().getQuestion()); answerTotalRate = 0; List<PollingAnswerOption> optionList = ((MultipleChoiceQuestionAnswer) questionAnswers.get(i)).getOptionList(); for (int j = 0; j < optionList.size(); j++) { PollingAnswerOption pollingAnswerOption = optionList.get(j); answerTotalRate += pollingAnswerOption.getPollingOption().getWeight(); } } else if (questionAnswer instanceof RatingQuestionAnswer) { questionTotalRate = ((RatingTemplateQuestion) ((RatingQuestionAnswer) questionAnswer).getQuestion()) .getMaxValue(); answerTotalRate = ((RatingQuestionAnswer) questionAnswer).getValue(); } totalRate += ((new Integer(answerTotalRate)).floatValue() / (new Integer(questionTotalRate)).floatValue()) * questionWeight; } return Math.round(((totalRate / totalWeight) * 100)); }