package qlProject.gui.input_response_visitors;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JTextField;
import qlProject.ast.type.BooleanType;
import qlProject.ast.type.ITypeVisitor;
import qlProject.ast.type.IntType;
import qlProject.ast.type.StringType;
import qlProject.ast.value.BoolValue;
import qlProject.ast.value.IntValue;
import qlProject.ast.value.NullValue;
import qlProject.ast.value.StringValue;
import qlProject.ast.value.Value;
public class InputTypeVisitor implements ITypeVisitor {
private final JComponent component;
public InputTypeVisitor(JComponent component) {
this.component = component;
}
public Value visit (StringType type){
String input = ((JTextField)component).getText();
if (input.isEmpty()) return new NullValue();
return new StringValue(input);
}
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
return true;
} catch(NumberFormatException e) {
return false;
}
}
public Value visit(IntType type){
JFormattedTextField tf = (JFormattedTextField)component;
if (tf.getValue() == (null)){
return new NullValue();
}
String input = ((Number)tf.getValue()).toString();
if (input.isEmpty() || !isInteger(input))
return new NullValue();
return new IntValue(Integer.valueOf(input));
}
public Value visit(BooleanType type){
boolean selected = ((JCheckBox)component).isSelected();
return new BoolValue(selected);
}
}