package nl.uva.softwcons.ql.ui.widget.factory;
import nl.uva.softwcons.ql.ast.statement.Question;
import nl.uva.softwcons.ql.ast.type.BooleanType;
import nl.uva.softwcons.ql.ast.type.DateType;
import nl.uva.softwcons.ql.ast.type.NumberType;
import nl.uva.softwcons.ql.ast.type.StringType;
import nl.uva.softwcons.ql.ast.type.TypeVisitor;
import nl.uva.softwcons.ql.ast.type.UndefinedType;
import nl.uva.softwcons.ql.ui.converter.BooleanToBooleanValueConverter;
import nl.uva.softwcons.ql.ui.converter.StringToNumberValueConverter;
import nl.uva.softwcons.ql.ui.converter.StringToStringValueConverter;
import nl.uva.softwcons.ql.ui.widget.CheckboxWidget;
import nl.uva.softwcons.ql.ui.widget.TextFieldWidget;
import nl.uva.softwcons.ql.ui.widget.Widget;
public class DefaultWidgetFactory implements TypeVisitor<Widget>, WidgetFactory {
@Override
public Widget getWidget(final Question question) {
return question.getType().accept(this);
}
@Override
public Widget visit(final BooleanType type) {
return new CheckboxWidget("Yes", new BooleanToBooleanValueConverter());
}
@Override
public Widget visit(final StringType type) {
return new TextFieldWidget(new StringToStringValueConverter());
}
@Override
public Widget visit(final NumberType type) {
return new TextFieldWidget(new StringToNumberValueConverter());
}
@Override
public Widget visit(final DateType type) {
return new TextFieldWidget(new StringToStringValueConverter());
}
@Override
public Widget visit(final UndefinedType type) {
throw new UnsupportedOperationException("Should never visit the undefined type!");
}
}