package net.sf.gazpachoquest.questionnaires.components.question;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.resource.NotSupportedException;
import net.sf.gazpachoquest.api.QuestionnaireResource;
import net.sf.gazpachoquest.dto.QuestionDTO;
import net.sf.gazpachoquest.questionnaires.components.question.type.CheckboxListQuestion;
import net.sf.gazpachoquest.questionnaires.components.question.type.ListRadioQuestion;
import net.sf.gazpachoquest.questionnaires.components.question.type.NumericQuestion;
import net.sf.gazpachoquest.questionnaires.components.question.type.ShortFreeTextQuestion;
import net.sf.gazpachoquest.questionnaires.resource.GazpachoResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class QuestionFactory implements Serializable {
private static final long serialVersionUID = -6134111942730296445L;
private static final Logger logger = LoggerFactory.getLogger(QuestionFactory.class);
@Inject
private Instance<AbstractQuestionComponent> question;
@GazpachoResource
@Inject
private QuestionnaireResource questionnaireResource;
@PostConstruct
public void init() {
logger.debug("Question Factory instance created");
}
public QuestionComponent build(Integer questionnaireId, QuestionDTO questionDTO) throws NotSupportedException {
AbstractQuestionComponent questionComponent = null;
switch (questionDTO.getType()) {
case S:
questionComponent = question.select(ShortFreeTextQuestion.class).get();
break;
case F:
throw new NotSupportedException("Question Type " + questionDTO.getType() + " not supported");
case L:
questionComponent = question.select(ListRadioQuestion.class).get();
break;
case M:
questionComponent = question.select(CheckboxListQuestion.class).get();
break;
case N:
questionComponent = question.select(NumericQuestion.class).get();
break;
case T:
throw new NotSupportedException("Question Type " + questionDTO.getType() + " not supported");
default:
throw new NotSupportedException("Question Type " + questionDTO.getType() + " not supported");
}
questionComponent.setQuestionDTO(questionDTO);
questionComponent.init();
return questionComponent;
}
}