package uva.qls.interpreter.gui.visitor; import java.util.ArrayList; import java.util.List; import uva.qls.ast.ASTNode; import uva.qls.ast.Page; import uva.qls.ast.Prog; import uva.qls.ast.StyleSheet; import uva.qls.ast.component.Checkbox; import uva.qls.ast.component.Dropdown; import uva.qls.ast.component.Radio; import uva.qls.ast.component.Slider; import uva.qls.ast.component.Spinbox; import uva.qls.ast.component.Textbox; import uva.qls.ast.literal.BooleanLiteral; import uva.qls.ast.literal.Identifier; import uva.qls.ast.literal.IntLiteral; import uva.qls.ast.literal.Literal; import uva.qls.ast.literal.MoneyLiteral; import uva.qls.ast.literal.StringLiteral; import uva.qls.ast.statements.DefaultValue; import uva.qls.ast.statements.Question; import uva.qls.ast.statements.Section; import uva.qls.ast.statements.Statement; import uva.qls.ast.statements.Subsection; import uva.qls.ast.statements.visitor.StatementVisitor; import uva.qls.ast.style.Color; import uva.qls.ast.style.Font; import uva.qls.ast.style.FontName; import uva.qls.ast.style.FontSize; import uva.qls.ast.style.Height; import uva.qls.ast.style.Style; import uva.qls.ast.style.Width; import uva.qls.ast.type.Type; import uva.qls.interpreter.gui.GUI; import uva.qls.interpreter.gui.table.DefaultTableValue; import uva.qls.interpreter.typecheck.TypeCheckQLS; public class QuestionValueVisitor implements StatementVisitor<Object> { private GUI gui; private Page page; public QuestionValueVisitor(GUI _gui){ this.gui = _gui; } @Override public Object visitASTNode(ASTNode node) { return null; } @Override public Prog visitProg(Prog prog) { prog.getStyleSheet().accept(this); return null; } @Override public Page visitPage(Page page) { this.page = page; this.defaultValues(page.getStatement()); this.visitStatements(page.getStatement()); this.gui.table.clearStacks(); return null; } @Override public Object visitStyleSheet(StyleSheet styleSheet) { for (Page p : styleSheet.getPage()){ p.accept(this); } return null; } @Override public List<String> visitSection(Section section) { List<String> pushedTypes = this.defaultValues(section.getStatement()); for(Statement s : section.getStatement()){ if (s.getClass().equals(Question.class)){ s.accept(this); } } if (pushedTypes.size() > 1){ for (String type : pushedTypes) this.gui.table.pop(type); } this.visitStatements(section.getStatement()); return pushedTypes; } @Override public Object visitQuestion(Question question) { TypeCheckQLS typeCheck = this.gui.getTypeCheck(); String identifier = question.getIdentifier().evaluatedValue(); String questionType = typeCheck.getTypeCheckQL().getSymbolTable().retrieveValue(identifier).getPrimitiveType().getName(); if (question.getComponent() == null){ this.gui.getQuestionValueTable().putValue(question, this.gui.table.retrieveValue(questionType).peek()); } else { DefaultTableValue value = new DefaultTableValue(question.getComponent().getStyle(), question.getComponent(), this.page); this.gui.getQuestionValueTable().putValue(question, value); } return null; } private void visitStatements(List<Statement> statements){ for (Statement statement : statements){ if (!statement.getClass().equals(Question.class)) statement.accept(this); } } @Override public Object visitStatement(Statement statement) { statement.accept(this); return null; } private List<String> defaultValues(List<Statement> statements){ List<String> typesPushed = new ArrayList<String>(); for (Statement s : statements){ if (s.getClass().equals(DefaultValue.class)){ DefaultValue value = (DefaultValue)s; this.gui.table.push(value.getType().getTypeName(), (DefaultTableValue)value.accept(this)); typesPushed.add(((DefaultValue)s).getType().getTypeName()); } } return typesPushed; } @Override public DefaultTableValue visitDefaultValueComponent(DefaultValue defaultValue) { return new DefaultTableValue(defaultValue.getComponent().getStyle(), defaultValue.getComponent(), this.page); } @Override public DefaultTableValue visitDefaultValueStatements(DefaultValue defaultValue) { return new DefaultTableValue(defaultValue.getStyle(), defaultValue.getComponent(), this.page); } @Override public Object visitSubsection(Subsection subsection) { // TODO Auto-generated method stub return null; } @Override public Object visitStyle(Style style) { // TODO Auto-generated method stub return null; } @Override public Object visitColor(Color color) { // TODO Auto-generated method stub return null; } @Override public Object visitFont(Font font) { // TODO Auto-generated method stub return null; } @Override public Object visitFontsize(FontSize fontSize) { // TODO Auto-generated method stub return null; } @Override public Object visitFontName(FontName fontName) { // TODO Auto-generated method stub return null; } @Override public Object visitHeight(Height height) { // TODO Auto-generated method stub return null; } @Override public Object visitWidth(Width width) { // TODO Auto-generated method stub return null; } @Override public Object visitCheckBox(Checkbox checkBox) { // TODO Auto-generated method stub return null; } @Override public Object visitDropDown(Dropdown dropDown) { // TODO Auto-generated method stub return null; } @Override public Object visitRadio(Radio radio) { // TODO Auto-generated method stub return null; } @Override public Object visitSlider(Slider slider) { // TODO Auto-generated method stub return null; } @Override public Object visitSpinbox(Spinbox spinbox) { // TODO Auto-generated method stub return null; } @Override public Object visitTextbox(Textbox textbox) { // TODO Auto-generated method stub return null; } @Override public Object visitBooleanLiteral(BooleanLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitIntLiteral(IntLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitIdentifier(Identifier identifier) { // TODO Auto-generated method stub return null; } @Override public Object visitLiteral(Literal literal) { // TODO Auto-generated method stub return null; } @Override public Object visitMoneyLiteral(MoneyLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitStringLiteral(StringLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitType(Type type) { // TODO Auto-generated method stub return null; } }