Ejemplo n.º 1
0
        /// <summary>
        /// Parses (AST)Node recursively
        /// </summary>
        /// <param name="node">Node to parse</param>
        /// <param name="condition">Base condition, optional</param>
        /// <returns>Collection of widgets</returns>
        public static ElementManager ParseChildNode(Node node, ElementManagerController elementManagerController, ElementManagerCollection parent, ExpressionBool condition = null)
        {
            switch (node.Type)
            {
            case NodeType.CONDITIONAL:
                ExpressionFactory expressionFactory = new ExpressionFactory(elementManagerController);
                // Parse condition
                ExpressionBool newCondition = expressionFactory.GetCondition(node as ConditionalNode);

                newCondition = (condition == null) ? newCondition : condition.Combine(newCondition, ExpressionOperator.And) as ExpressionBool;

                // Add children with new condition
                parent.AddChildren(node.Children.Select(o => ParseChildNode(o, elementManagerController, parent, newCondition)).Where(o => o != null));

                // return parent
                return(null);

            case NodeType.FORM:
                throw new InvalidOperationException("Cannot stack form nodes");

            case NodeType.QUESTION:
                return(CreateElementManager(node as QuestionNode, condition, parent, elementManagerController));

            case NodeType.COMPUTED:
                return(CreateComputedWidget(node as ComputedNode, condition, parent, elementManagerController));
            }

            throw new NotImplementedException();
        }
        /// <summary>
        /// Parses Node recursively
        /// </summary>
        /// <param name="node">Node to parse</param>
        /// <param name="condition">Base condition, optional</param>
        /// <returns>Collection of widgets</returns>
        public static ElementManager ParseChildNode(QLNode node, ElementManagerController elementManagerController, ElementManagerCollection parent, ExpressionBool condition = null)
        {
            ExpressionFactory expressionFactory = new ExpressionFactory(elementManagerController);

            switch (node)
            {
            case ConditionalNode conditionalNode:
                // Parse condition
                ExpressionBool newCondition = expressionFactory.GetCondition(conditionalNode);

                newCondition = (condition == null) ? newCondition : condition.Combine(newCondition, ExpressionOperator.And) as ExpressionBool;

                // Add children with new condition
                parent.AddChildren(conditionalNode.Children.Select(o => ParseChildNode(o, elementManagerController, parent, newCondition)).Where(o => o != null));
                return(null);

            case QuestionNode questionNode:
                return(CreateElementManager(questionNode, condition, parent, elementManagerController, null));

            case ComputedNode computedNode:
                ExpressionValue expression = expressionFactory.ParseExpressionNode(computedNode.Expression);
                return(CreateElementManager(computedNode, condition, parent, elementManagerController, expression));
            }

            throw new NotImplementedException();
        }
Ejemplo n.º 3
0
        public ElementManager(string identifier, string text, string xmlName, ElementManagerController controller, ExpressionBool activationExpression = null)
        {
            Text                      = text;
            Identifier                = identifier;
            XMLElementName            = xmlName;
            _elementManagerController = controller;

            _activationExpression = activationExpression;
            Active = activationExpression == null;
        }
Ejemplo n.º 4
0
        public void OrTest()
        {
            // true || true
            ExpressionBool expression = _expression1.Combine(_expression2, ExpressionOperator.Or) as ExpressionBool;

            Assert.IsTrue(expression.Result);

            // true || true || false
            expression = expression.Combine(_expression3, ExpressionOperator.Or) as ExpressionBool;
            Assert.IsTrue(expression.Result);
        }
Ejemplo n.º 5
0
        public void AndTest()
        {
            // true && true
            ExpressionBool expression = _expression1.Combine(_expression2, ExpressionOperator.And) as ExpressionBool;

            Assert.IsTrue(expression.Result);

            // true && true && false
            expression = expression.Combine(_expression3, ExpressionOperator.And) as ExpressionBool;
            Assert.IsFalse(expression.Result);
        }
Ejemplo n.º 6
0
        public void AlterationTest()
        {
            // Create inital combination
            ExpressionBool expression = _expression1.Combine(_expression2, ExpressionOperator.And) as ExpressionBool;

            Assert.IsTrue(expression.Result);

            // Alter combined object
            _expression2 = _expression2.Combine(_expression3, ExpressionOperator.And) as ExpressionBool;
            Assert.IsTrue(expression.Result);
        }
Ejemplo n.º 7
0
        public void EqualsTest()
        {
            // true == true
            ExpressionBool expression = _expression1.Combine(_expression2, ExpressionOperator.Equals) as ExpressionBool;

            Assert.IsTrue(expression.Result);

            // (true == true) == false
            expression = expression.Combine(_expression3, ExpressionOperator.Equals) as ExpressionBool;
            Assert.IsFalse(expression.Result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates widget with computed value
        /// </summary>
        /// <param name="node">Node</param>
        /// <param name="condition">Condition of widget</param>
        /// <param name="elementManagerController">Widget controller</param>
        /// <returns></returns>
        private static ElementManagerLeaf CreateComputedWidget(ComputedNode node, ExpressionBool condition, ElementManager parent, ElementManagerController elementManagerController)
        {
            ExpressionFactory expressionFactory = new ExpressionFactory(elementManagerController);
            ExpressionValue   expression        = expressionFactory.ParseExpressionNode(node.Expression);

            switch (node.Expression.GetQValueType())
            {
            case QValueType.BOOLEAN:
                return(new BoolQuestionManager(node.ID, node.Text, parent, elementManagerController, condition, expression as ExpressionBool));

            case QValueType.INTEGER:
                return(new IntQuestionManager(node.ID, node.Text, parent, elementManagerController, condition, expression as ExpressionInt));

            case QValueType.MONEY:
                return(new MoneyQuestionManager(node.ID, node.Text, parent, elementManagerController, condition, expression as ExpressionDouble));
            }
            throw new NotImplementedException();
        }
Ejemplo n.º 9
0
 public void Initialize()
 {
     _expression1 = new ExpressionBool(new string[0], () => true);
     _expression2 = new ExpressionBool(new string[0], () => true);
     _expression3 = new ExpressionBool(new string[0], () => false);
 }
Ejemplo n.º 10
0
        private static ElementManagerLeaf CreateElementManager(IQuestionable identifiedNode, ExpressionBool condition, ElementManagerCollection parent, ElementManagerController elementManagerController, ExpressionValue activationExpression)
        {
            switch (identifiedNode.ValueType)
            {
            case QValueType.Boolean:
                return(new BoolQuestionManager(identifiedNode.ID, identifiedNode.Text, parent, elementManagerController, condition, activationExpression as ExpressionBool));

            case QValueType.Integer:
                return(new IntQuestionManager(identifiedNode.ID, identifiedNode.Text, parent, elementManagerController, condition, activationExpression as ExpressionInt));

            case QValueType.Text:
                return(new StringQuestionManager(identifiedNode.ID, identifiedNode.Text, parent, elementManagerController, condition, activationExpression as ExpressionText));

            case QValueType.Money:
                return(new MoneyQuestionManager(identifiedNode.ID, identifiedNode.Text, parent, elementManagerController, condition, activationExpression as ExpressionDouble));

            case QValueType.Hex:
                return(new HexQuestionManager(identifiedNode.ID, identifiedNode.Text, parent, elementManagerController, condition, activationExpression as ExpressionHex));
            }
            throw new InvalidOperationException("Unsupported type: " + identifiedNode.ValueType);
        }
Ejemplo n.º 11
0
 public SectionManager(string identifier, string text, ElementManagerCollection parent, ElementManagerController controller, ExpressionBool activationExpression = null) :
     base(identifier, text, "section", parent, controller, activationExpression)
 {
 }
Ejemplo n.º 12
0
 public ElementManagerLeaf(string identifier, string text, string xmlName, ElementManagerCollection parent, ElementManagerController controller, ExpressionBool activationExpression = null) :
     base(identifier, text, xmlName, controller, activationExpression)
 {
     Parent = parent;
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Creates widget from QuestionNode
        /// </summary>
        /// <param name="questionNode">Node to parse</param>
        /// <returns>Parsed widget</returns>
        private static ElementManagerLeaf CreateElementManager(QuestionNode questionNode, ExpressionBool condition, ElementManager parent, ElementManagerController elementManagerController)
        {
            switch (questionNode.ValueType)
            {
            case QValueType.BOOLEAN:
                return(new BoolQuestionManager(questionNode.ID, questionNode.Text, parent, elementManagerController, condition));

            case QValueType.INTEGER:
                return(new IntQuestionManager(questionNode.ID, questionNode.Text, parent, elementManagerController, condition));

            case QValueType.TEXT:
                return(new StringQuestionManager(questionNode.ID, questionNode.Text, parent, elementManagerController, condition));

            case QValueType.MONEY:
                return(new MoneyQuestionManager(questionNode.ID, questionNode.Text, parent, elementManagerController, condition));
            }
            throw new InvalidOperationException("Unsupported type: " + questionNode.ValueType);
        }
Ejemplo n.º 14
0
 public FormManager(string identifier, string text, ElementManagerController controller, ExpressionBool activationExpression = null) :
     base(identifier, text, "form", controller, activationExpression)
 {
 }
Ejemplo n.º 15
0
 public PageManager(string identifyer, string text, ElementManager parent, ElementManagerController controller, ExpressionBool activationExpression = null) :
     base(identifyer, text, "page", parent, controller, activationExpression)
 {
 }
Ejemplo n.º 16
0
 public ElementManagerCollection(string identifyer, string text, string xmlName, ElementManagerController controller, ExpressionBool activationExpression = null) :
     base(identifyer, text, xmlName, controller, activationExpression)
 {
     _children = new List <ElementManager>();
 }
Ejemplo n.º 17
0
 public StringQuestionManager(string identifyer, string text, ElementManager parent, ElementManagerController controller, ExpressionBool activationExpression = null, TypedExpressionValue <string> answerExpression = null) :
     base(identifyer, text, parent, controller, activationExpression, answerExpression)
 {
 }
Ejemplo n.º 18
0
 public HexQuestionManager(string identifier, string text, ElementManagerCollection parent, ElementManagerController controller, ExpressionBool activationExpression = null, TypedExpressionValue <Hexadecimal> answerExpression = null)
     : base(identifier, text, parent, controller, activationExpression, answerExpression)
 {
 }
Ejemplo n.º 19
0
 public QuestionElementManager(string identifyer, string text, ElementManager parent, ElementManagerController controller, ExpressionBool activationExpression = null, TypedExpressionValue <T> answerExpression = null) :
     base(identifyer, text, "question", parent, controller, activationExpression)
 {
     Answer            = new QuestionElementValue <T>(default(T), false);
     IsAnswered        = false;
     _answerExpression = answerExpression;
 }