package net.sf.gazpachoquest.questionnaires.components.question.type; import javax.inject.Inject; import net.sf.gazpachoquest.dto.answers.Answer; import net.sf.gazpachoquest.dto.answers.NoAnswer; import net.sf.gazpachoquest.dto.answers.TextAnswer; import net.sf.gazpachoquest.questionnaires.components.question.AbstractQuestionComponent; import net.sf.gazpachoquest.questionnaires.events.AnswerSavedEvent; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.vaadin.addon.cdiproperties.annotation.LabelProperties; import org.vaadin.addon.cdiproperties.annotation.TextFieldProperties; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; public class ShortFreeTextQuestion extends AbstractQuestionComponent implements TextChangeListener { private static final long serialVersionUID = 4485291720274483361L; private static Logger logger = LoggerFactory.getLogger(ShortFreeTextQuestion.class); @Inject @TextFieldProperties(maxLength = 50, immediate = true) private TextField answerField; @Inject @LabelProperties(contentMode = ContentMode.HTML) private Label questionTitle; public ShortFreeTextQuestion() { super(); } @Override public void init() { questionTitle.setValue(String.format("<b>%d</b>. %s", questionDTO.getNumber(), questionDTO .getLanguageSettings().getTitle())); content.addComponent(questionTitle); answerField.addTextChangeListener(this); if (questionDTO.getAnswer() instanceof TextAnswer) { answerField.setValue(((TextAnswer) questionDTO.getAnswer()).getValue()); } content.addComponent(answerField); } @Override public void textChange(TextChangeEvent event) { String text = event.getText(); logger.debug("Text Change Event fired in ShortFreeTextQuestion with text = {}", text); String questionCode = questionDTO.getCode(); Answer answer = null; if (StringUtils.isBlank(text)) { answer = NoAnswer.create(); } else { answer = TextAnswer.fromValue(text); } answerSavedEvent.fire(AnswerSavedEvent.with().questionCode(questionCode).answer(answer).build()); } }