package fi.arcusys.koku.kv.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import fi.arcusys.koku.kv.requestservice.Answer;
import fi.arcusys.koku.kv.requestservice.Question;
import fi.arcusys.koku.kv.requestservice.ResponseDetail;
public class KokuResponseDetail extends KokuResponseSummary {
private static final Comparator<KokuQuestion> SORT_QUESTIONS_BY_QUESTION_NUMBER = new Comparator<KokuQuestion>() {
@Override
public int compare(KokuQuestion o1, KokuQuestion o2) {
if (o1.getNumber() > o2.getNumber()) {
return 1;
} else if (o1.getNumber() == o2.getNumber()) {
return 0;
} else {
return -1;
}
}
};
public static final Comparator<KokuAnswer> SORT_ANSWERS_BY_QUESTION_NUMBER = new Comparator<KokuAnswer>() {
@Override
public int compare(KokuAnswer o1, KokuAnswer o2) {
if (o1.getQuestionNumber() > o2.getQuestionNumber()) {
return 1;
} else if (o1.getQuestionNumber() == o2.getQuestionNumber()) {
return 0;
} else {
return -1;
}
}
};
private List<KokuAnswer> answers;
private List<KokuQuestion> questions;
private String comment;
public KokuResponseDetail(ResponseDetail req) {
super(req);
if (req != null) {
this.comment = req.getComment();
if (req.getQuestions() != null) {
questions = new ArrayList<KokuQuestion>();
for (Question question : req.getQuestions()) {
questions.add(new KokuQuestion(question));
}
}
if (req.getAnswers() != null) {
answers = new ArrayList<KokuAnswer>();
for (Answer answer : req.getAnswers()) {
answers.add(new KokuAnswer(answer));
}
}
Collections.sort(questions,SORT_QUESTIONS_BY_QUESTION_NUMBER);
Collections.sort(answers, SORT_ANSWERS_BY_QUESTION_NUMBER );
for (int i=0; i < questions.size(); i++) {
questions.get(i).setAnswer(answers.get(i));
}
}
}
public List<KokuAnswer> getAnswers() {
if (answers == null) {
answers = new ArrayList<KokuAnswer>();
}
return answers;
}
public void setAnswers(List<KokuAnswer> answers) {
this.answers = answers;
}
public List<KokuQuestion> getQuestions() {
if (questions == null) {
questions = new ArrayList<KokuQuestion>();
}
return questions;
}
public void setQuestions(List<KokuQuestion> questions) {
this.questions = questions;
}
public final String getComment() {
return comment;
}
public final void setComment(String comment) {
this.comment = comment;
}
@Override
public String toString() {
return "KokuResponseDetail [answers=" + answers + ", questions="
+ questions + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((answers == null) ? 0 : answers.hashCode());
result = prime * result
+ ((questions == null) ? 0 : questions.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
KokuResponseDetail other = (KokuResponseDetail) obj;
if (answers == null) {
if (other.answers != null) {
return false;
}
} else if (!answers.equals(other.answers)) {
return false;
}
if (questions == null) {
if (other.questions != null) {
return false;
}
} else if (!questions.equals(other.questions)) {
return false;
}
return true;
}
}