package qls.ast.visitor;
import ql.ast.visitor.TypeVisitor;
import qls.ast.Statement;
import qls.ast.statement.DefaultStyle;
import qls.ast.statement.DefaultWidget;
import qls.ast.statement.Page;
import qls.ast.statement.Block;
import qls.ast.statement.Question;
import qls.ast.statement.Section;
import qls.ast.statement.Stylesheet;
import qls.ast.statement.widget.Widget;
import qls.ast.statement.widget.styling.Property;
import qls.ast.statement.widget.styling.StyleProperties;
import qls.ast.statement.widget.styling.property.Color;
import qls.ast.statement.widget.styling.property.Font;
import qls.ast.statement.widget.styling.property.FontSize;
import qls.ast.statement.widget.styling.property.Height;
import qls.ast.statement.widget.styling.property.Width;
import qls.ast.statement.widget.type.Checkbox;
import qls.ast.statement.widget.type.Default;
import qls.ast.statement.widget.type.Spinbox;
import qls.ast.statement.widget.type.TextField;
import qls.ast.statement.widget.type.parameterised.Dropdown;
import qls.ast.statement.widget.type.parameterised.RadioButton;
import qls.ast.statement.widget.type.parameterised.Slider;
/**
* @author Rene
*/
public abstract class StatementVisitor<T> extends ql.ast.visitor.StatementVisitor<T> {
private ExpressionVisitor<?> expressionVisitor;
private TypeVisitor<?> typeVisitor;
public void setExpressionVisitor(ExpressionVisitor<?> expressionVisitor) {
this.expressionVisitor = expressionVisitor;
}
public void setTypeVisitor(TypeVisitor<?> typeVisitor) {
this.typeVisitor = typeVisitor;
}
public T visit(Page pageNode) {
pageNode.getIdentifier().accept(expressionVisitor);
pageNode.getStatements().accept(this);
return null;
}
public T visit(Block blockNode) {
for(Statement statement : blockNode.getStatements()) {
statement.accept(this);
}
return null;
}
public T visit(Question questionNode) {
questionNode.getIdentifier().accept(expressionVisitor);
questionNode.getWidget().accept(this);
return null;
}
public T visit(Section sectionNode) {
sectionNode.getHeader().accept(expressionVisitor);
sectionNode.getStatements().accept(this);
return null;
}
public T visit(Stylesheet stylesheetNode) {
stylesheetNode.getIdentifier().accept(expressionVisitor);
stylesheetNode.getPages().accept(this);
return null;
}
public T visit(Checkbox checkboxNode) {
return null;
}
public T visit(Default defaultType) {
return null;
}
public T visit(Dropdown dropdownNode) {
return null;
}
public T visit(RadioButton radioButtonNode) {
return null;
}
public T visit(TextField textFieldNode) {
return null;
}
public T visit(Spinbox spinnerNode) {
return null;
}
public T visit(Slider sliderNode) {
return null;
}
public T visit(StyleProperties styleNode) {
for(Property rule : styleNode.getProperties().values()) {
rule.accept(this);
}
return null;
}
public T visit(DefaultStyle defaultNode) {
defaultNode.getType().accept(typeVisitor);
defaultNode.getStyleProperties().accept(this);
return null;
}
public T visit(DefaultWidget defaultNode) {
defaultNode.getType().accept(typeVisitor);
defaultNode.getWidget().accept(this);
return null;
}
public T visit(Widget widgetNode) {
widgetNode.getStyleRules().accept(this);
widgetNode.getWidgetType().accept(this);
return null;
}
public T visit(Color color) {
color.getLiteral().accept(expressionVisitor);
return null;
}
public T visit(Width width) {
width.getLiteral().accept(expressionVisitor);
return null;
}
public T visit(Height height) {
height.getLiteral().accept(expressionVisitor);
return null;
}
public T visit(Font font) {
font.getLiteral().accept(expressionVisitor);
return null;
}
public T visit(FontSize fontSize) {
fontSize.getLiteral().accept(expressionVisitor);
return null;
}
}