package com.sun.portal.app.collab.survey.faces;
import com.sun.portal.app.collab.survey.model.SurveyException;
import java.beans.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.text.DecimalFormat;
import java.util.List;
import java.util.ArrayList;
import com.sun.web.ui.model.Option;
import com.sun.data.provider.impl.ObjectArrayDataProvider;
import com.sun.portal.app.collab.survey.model.QuestionModel;
import com.sun.portal.app.collab.survey.model.AnswerModel;
import com.sun.portal.app.collab.survey.util.SurveyUtil;
import com.sun.portal.app.collab.survey.util.Resources;
/**
* @author bshankar@sun.com
*/
public class Results {
private QuestionModel m = null;
private boolean getCustomAnswers = false;
private String questionText = null;
private String questionOrder = null;
private String responseCount = null;
private String respondantCount = null;
private Answer answers[] = null;
boolean isOpen = false;
boolean hasAnswers = true;
private int openAnswerCount;
private float openAnswerPct;
DecimalFormat formatter = new DecimalFormat("0.00");
public Results(QuestionModel m) {
this.m = m;
}
public Results(QuestionModel m, boolean getCustomAnswers) {
this.m = m;
this.getCustomAnswers = getCustomAnswers;
}
public void init() throws SurveyException {
if (m == null) {
return;
}
if(getCustomAnswers) {
getCustomAnswers();
} else {
getPredefinedAnswers();
}
}
/**
* Set questionText and create an array of Answer[] with predefined options.
*/
private void getPredefinedAnswers() throws SurveyException {
questionOrder = String.valueOf(m.getQuestionOrder());
questionText = m.getQuestionText();
responseCount = String.valueOf(m.getResponseCount());
respondantCount = String.valueOf(m.getRespondantCount());
AnswerModel amodel[] = m.getAnswers();
isOpen = m.isOpen();
if (amodel == null || amodel.length == 0) {
hasAnswers = false;
isOpen = true;
Answer ans = new Answer(null);
ans.init();
ans.setAnswerText(new Resources().getString("answer-all"));
answers = new Answer[]{ans};
} else {
if(isOpen && m.getCustomAnswerCount() > 0) {
answers = new Answer[amodel.length + 1];
Answer ans = new Answer(null);
ans.init();
ans.setAnswerText(new Resources().getString("Other"));
answers[amodel.length] = ans;
} else {
answers = new Answer[amodel.length];
}
}
for(int i=0; hasAnswers && i<amodel.length;i++) {
answers[i] = new Answer(amodel[i]);
answers[i].init();
}
if(isOpen) {
openAnswerCount = m.getCustomAnswerCount();
openAnswerPct = m.getCustomAnswerPct();
}
}
/**
* Set questionText and create an array of Answer[] with predefined options.
*/
private void getCustomAnswers() throws SurveyException {
questionOrder = String.valueOf(m.getQuestionOrder());
questionText = m.getQuestionText();
isOpen = m.isOpen();
if (isOpen && m.getCustomAnswerCount() > 0) {
answers = new Answer[m.getCustomAnswerCount()];
String[] customAnswers = m.getCustomAnswers();
for(int i=0; i<customAnswers.length; i++) {
answers[i] = new Answer(null);
answers[i].init();
answers[i].setAnswerOrder(i+1);
answers[i].setAnswerText(customAnswers[i]);
}
}
}
public String getQuestionOrder() {
return questionOrder;
}
public String getQuestionText() {
if(new SurveyUtil().isSurvey()) {
return questionOrder + ". " + questionText;
}
return questionText;
}
public String getRespondantCount() {
return respondantCount;
}
public String getResponseCount() {
return responseCount;
}
public ObjectArrayDataProvider getAnswers() {
return new ObjectArrayDataProvider(answers);
}
public List getAnswerList() {
List l = new ArrayList();
for(int i=0; i<answers.length; i++) {
l.add(answers[i]);
}
return l;
}
public class Answer {
private AnswerModel am = null;
private String answerText;
private String answerOrder;
private String respPct;
private String respCount;
private boolean isOpen = false;
public Answer(AnswerModel m) {
this.am = m;
}
public void init() throws SurveyException {
if (am != null) {
answerText = am.getAnswerText();
respPct = formatter.format(am.getResponsePct()).toString();
respCount = String.valueOf(am.getResponseCount());
isOpen = false;
} else {
isOpen = true;
}
}
public String getAnswerText() {
return answerText;
}
public void setAnswerText(String answerText) {
this.answerText = answerText;
}
public String getAnswerOrder() {
return answerOrder;
}
public void setAnswerOrder(int ansOrder) {
answerOrder = String.valueOf(ansOrder);
}
public String getResponsePct() {
if (isOpen && hasAnswers) {
return formatter.format(openAnswerPct).toString();
}
return respPct;
}
public String getResponseCount() {
if (isOpen) {
return String.valueOf(openAnswerCount);
}
return respCount;
}
public boolean getShowAnswerAsLink() {
return isOpen;
}
public boolean getShowAnswerAsText() {
return !getShowAnswerAsLink();
}
}
}
|