PollView.java 3.9 KB
package fi.insomnia.bortal.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;

import fi.insomnia.bortal.beans.PollBeanLocal;
import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PollQuestion;
import fi.insomnia.bortal.model.PossibleAnswer;

@ManagedBean(name = "pollView")
@SessionScoped
public class PollView extends GenericView {

    @EJB
    private PollBeanLocal pollBean;

    private ListDataModel<Poll> polls;
    private HashMap<Integer, List<QuestionWrapper>> pages;

    private Integer thisPage = 1;

    public void initPollList() {
        setPolls(new ListDataModel<Poll>(pollBean.findPolls()));
    }

    public String nextPage() {
        ++thisPage;
        return null;
    }

    public List<QuestionWrapper> getCurrentPage() {
        return pages.get(thisPage);
    }

    public String beginPoll() {
        thisPage = 1;
        Poll poll = polls.getRowData();
        pages = new HashMap<Integer, List<QuestionWrapper>>();
        for (PollQuestion q : poll.getQuestions()) {
            if (!pages.containsKey(q.getPage())) {
                pages.put(q.getPage(), new LinkedList<QuestionWrapper>());
            }
            pages.get(q.getPage()).add(new QuestionWrapper(q));
        }
        return "/poll/answerToPoll";
    }

    public String savePoll() {
        if (validate(this)) {
            pollBean.createAnswers(createAnswers());
        }
        return "thankYou";
    }

    public void setPolls(ListDataModel<Poll> polls) {
        this.polls = polls;
    }

    public ListDataModel<Poll> getPolls() {
        return polls;
    }

    private List<PollAnswer> createAnswers() {
        ArrayList<PollAnswer> ret = new ArrayList<PollAnswer>();
        for (List<QuestionWrapper> qw : pages.values()) {
            for (QuestionWrapper wrapper : qw) {
                ret.addAll(wrapper.getAnswers());
            }
        }
        return ret;
    }

    public boolean validate(PollView pollView) {

        boolean ret = true;

        return ret;

    }

    public class QuestionWrapper {

        private PollQuestion question;
        private ArrayList<PollAnswer> answers;

        public QuestionWrapper(PollQuestion q) {
            question = q;
            answers = new ArrayList<PollAnswer>();
            for (PossibleAnswer possible : q.getAnswers()) {
                answers.add(new PollAnswer(possible));
            }

        }

        public boolean isFreeText() {
            return question.isFreeText();
        }

        public PollAnswer getTextAnswer() {
            if (!isFreeText()) {
                throw new RuntimeException("IS not freetext!! !!BUG!!BUG!!");
            }
            return answers.get(0);
        }

        
        public void setOneSelected(PollAnswer ans) {
            for (PollAnswer possibleAns : answers) {
                if (possibleAns.getChoice().equals(ans.getChoice())) {
                    possibleAns.setAnswerBoolean(true);
                } else {
                    possibleAns.setAnswerBoolean(false);
                }
            }
        }

        public PollAnswer getOneSelected() {
            for (PollAnswer possibleAns : answers) {
                if (possibleAns.getAnswerBoolean()) {
                    return possibleAns;
                }
            }
            return null;
        }

        public PollQuestion getQuestion() {
            return question;
        }

        public void setQuestion(PollQuestion question) {
            this.question = question;
        }

        public void setAnswers(ArrayList<PollAnswer> answers) {
            this.answers = answers;
        }

        public ArrayList<PollAnswer> getAnswers() {
            return answers;
        }

    }

}