blob: f2cf5d828e4ecb4a08e0346b68b083d340e3ef6c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
from multimethods import multimethod
from gui.model.form import FormModel
from gui.model.question import QuestionModel
from ql.ast.nodes.expressions.binary_operators.and_operator import AndOperatorNode
from ql.ast.nodes.statements.form_statement import FormNode
from ql.ast.nodes.statements.if_statement import IfNode
from ql.ast.nodes.statements.question_statement import QuestionNode
from ql.types.boolean import QLBoolean
from ql.types.undefined import QLUndefined
class ModelGenerator:
def __init__(self):
self.form = None
self.condition = QLBoolean.get_literal_node(True)
@multimethod(FormNode)
def visit(self, node):
self.form = FormModel(node.identifier)
for child in node.block:
child.accept(self)
@multimethod(IfNode)
def visit(self, node):
previous_condition = self.condition
self.condition = AndOperatorNode(None, QLBoolean, self.condition, node.condition, QLUndefined())
for child in node.block:
child.accept(self)
self.condition = previous_condition
@multimethod(QuestionNode)
def visit(self, node):
question_model = QuestionModel(node.label, node.identifier, node.answer_type,
node.answer, node.computed, self.condition)
self.form.block.append(question_model)
|