コード例 #1
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IStyleSheetRootNode> rootNode)
        {
            var styleSheet = m_domainItemLocator
                             .GetAll <IStyleSheetRootNode>()
                             .FirstOrDefault();

            if (!AllWidgetsValid(styleSheet))
            {
                yield return new CorrectWidgetValidationMetaData
                       {
                           Source  = m_domainItemLocator.GetRef <IStyleSheetRootNode>(styleSheet.Id),
                           Message = $@"The stylesheet '{styleSheet.Name}' has an invalid widget"
                       }
            }
            ;

            var pages = m_domainItemLocator
                        .GetAll <IPageNode>()
                        .ToList();

            foreach (var page in pages)
            {
                if (AllWidgetsValid(page))
                {
                    continue;
                }

                yield return(new CorrectWidgetValidationMetaData
                {
                    Source = m_domainItemLocator.GetRef <IPageNode>(page.Id),
                    Message = $@"The page '{page.Name}' has an invalid widget"
                });
            }

            var sections = m_domainItemLocator
                           .GetAll <ISectionNode>()
                           .ToList();

            foreach (var section in sections)
            {
                if (AllWidgetsValid(section))
                {
                    continue;
                }

                yield return(new CorrectWidgetValidationMetaData
                {
                    Source = m_domainItemLocator.GetRef <ISectionNode>(section.Id),
                    Message = $@"The section '{section.Name}' has an invalid widget"
                });
            }
        }
コード例 #2
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IQuestionnaireRootNode> rootNode)
        {
            var questionNodes = m_domainItemLocator
                                .GetAll <IQuestionNode>()
                                .ToList();

            var questionNameAndTypes = questionNodes
                                       .Select(x => new { x.QuestionName, x.QuestionType })
                                       .ToList();

            foreach (var questionNode in questionNodes)
            {
                var mismatchCount = questionNameAndTypes
                                    .Count(x =>
                                           x.QuestionName == questionNode.QuestionName &&
                                           x.QuestionType.GetType() != questionNode.QuestionType.GetType());

                if (mismatchCount > 1)
                {
                    var validationData = new DuplicateVariableValidationMetaData
                    {
                        Source  = m_domainItemLocator.GetRef <IQuestionNode>(questionNode.Id),
                        Message =
                            $@"The Question identifier '{
                                    questionNode.QuestionName
                                }' is used multiple times with different types"
                    };

                    yield return(validationData);
                }
            }
        }
コード例 #3
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IStyleSheetRootNode> rootNode)
        {
            var qlsQuestionNodes = m_domainItemLocator
                                   .GetAll <IQlsQuestionNode>()
                                   .ToList();

            var questionNames = m_domainItemLocator
                                .GetAll <IQuestionOutputItem>()
                                .Select(x => x.QuestionName)
                                .ToList();

            foreach (var qlsQuestionNode in qlsQuestionNodes)
            {
                if (questionNames.Contains(qlsQuestionNode.Name))
                {
                    continue;
                }

                var validationData = new UnknownQuestionValidationMetaData
                {
                    Source  = m_domainItemLocator.GetRef <IQlsQuestionNode>(qlsQuestionNode.Id),
                    Message = $@"The stylesheet question '{qlsQuestionNode.Name}' is not a valid question"
                };

                yield return(validationData);
            }
        }
コード例 #4
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IQuestionnaireRootNode> rootNode)
        {
            var variableNodes = m_domainItemLocator
                                .GetAll <IVariableNode>();

            var questionNodes = m_domainItemLocator
                                .GetAll <IQuestionNode>()
                                .ToList();

            foreach (var variableNode in variableNodes)
            {
                var nameIsDefined = questionNodes
                                    .Any(x => x.QuestionName == variableNode.VariableName);

                if (!nameIsDefined)
                {
                    yield return new UndefinedVariableValidationMetaData
                           {
                               Message = $"The variable '{variableNode.VariableName}' has not been defined",
                               Source  = m_domainItemLocator.GetRef <IVariableNode>(variableNode.Id)
                           }
                }
                ;
            }
        }
    }
コード例 #5
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IStyleSheetRootNode> rootNode)
        {
            var qlsQuestionNames = m_domainItemLocator
                                   .GetAll <IQlsQuestionNode>()
                                   .Select(x => x.Name)
                                   .ToList();

            var questionNodes = m_domainItemLocator
                                .GetAll <IQuestionOutputItem>()
                                .ToList();

            foreach (var questionNode in questionNodes)
            {
                if (qlsQuestionNames.Contains(questionNode.QuestionName))
                {
                    continue;
                }

                if (TypeHasDefault(questionNode))
                {
                    continue;
                }

                var validationData = new UncoveredQuestionValidationMetaData
                {
                    Source  = m_domainItemLocator.GetRef <IQuestionOutputItem>(questionNode.Id),
                    Message = $@"The question '{questionNode.QuestionName}' does not have a style"
                };

                yield return(validationData);
            }
        }
コード例 #6
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IQuestionnaireRootNode> rootNode)
        {
            var questionNodes = m_domainItemLocator
                                .GetAll <IQuestionNode>()
                                .ToList();

            var duplicateTexts = questionNodes
                                 .GroupBy(x => x.QuestionText)
                                 .Where(g => g.Count() > 1)
                                 .Select(y => y.Key)
                                 .ToList();

            foreach (var questionNode in questionNodes)
            {
                if (duplicateTexts.All(x => x != questionNode.QuestionText))
                {
                    continue;
                }

                var validationData = new DuplicateTextValidationMetaData
                {
                    Source  = m_domainItemLocator.GetRef <IQuestionNode>(questionNode.Id),
                    Message = $@"The text '{questionNode.QuestionText}' is used multiple times"
                };

                yield return(validationData);
            }
        }
コード例 #7
0
        private ValidationMetaData IncompatibleTypeError(string leftName, string rightName,
                                                         IRelationalLogicNode untypedOperator)
        {
            var leftType  = m_variableService.GetQuestionType(leftName);
            var rightType = m_variableService.GetQuestionType(rightName);

            var leftTypeText  = leftType.GetTypeDisplay();
            var rightTypeText = rightType.GetTypeDisplay();

            return(new UnkownTypeExpressionValidationMetaData
            {
                Message =
                    $@"The expression '{untypedOperator.Definition}' contains the {leftTypeText} variable " +
                    $@"'{leftName}' and {rightTypeText} variable '{rightName}'. The types {leftTypeText} " +
                    $@"and {rightTypeText} cannot be compared.",

                Source = m_domainItemLocator.GetRef <IRelationalLogicNode>(untypedOperator.Id)
            });
        }
コード例 #8
0
        public IEnumerable <ValidationMetaData> Validate(
            DomainId <IQuestionnaireRootNode> rootNode)
        {
            var questionNodes = m_domainItemLocator
                                .GetAll <ICalculatedQuestionNode>()
                                .ToList();

            foreach (var questionNode in questionNodes)
            {
                var noUsedVariables = new List <string>();
                if (IsCyclic(noUsedVariables, questionNode))
                {
                    yield return new CyclicDependencyValidationMetaData
                           {
                               Message = $"a cirular dependency was found",
                               Source  = m_domainItemLocator.GetRef <IQuestionNode>(questionNode.Id)
                           }
                }
                ;
            }
        }
コード例 #9
0
        public Reference <IQuestionnaireOutputItem> Visit(
            Reference <IQuestionnaireRootNode> questionnaireNode)
        {
            var node = questionnaireNode
                       .ToDomainItem(m_domainItemLocator);

            var questions = new List <Reference <IQuestionOutputItem> >();

            foreach (var statement in node.Statements)
            {
                if (m_domainItemLocator.Exists <IUserInputQuestionNode>(statement.Id))
                {
                    var domainItem = m_domainItemLocator
                                     .GetRef <IUserInputQuestionNode>(statement.Id);
                    var questionRef = Visit(domainItem);
                    questions.Add(questionRef);
                }
            }

            return(m_outputItemFactory.CreateQuestionnaireOutputItem(
                       node.QuestionnaireName,
                       questions));
        }
コード例 #10
0
        protected IEnumerable <ValidationMetaData> Validate <TNode, TData>(
            DomainId <IQuestionnaireRootNode> questionnaireRootNode,
            Func <IQuestionType, bool> correctTypePredicate,
            string comparisonType,
            string expectedType)
            where TNode : IVariableNode
            where TData : ValidationMetaData, new()
        {
            var booleanVariableNodes = m_domainItemLocator
                                       .GetAll <TNode>();

            var questionNodes = m_domainItemLocator
                                .GetAll <IQuestionNode>()
                                .ToList();

            foreach (var variableNode in booleanVariableNodes)
            {
                var type = questionNodes
                           .FirstOrDefault(x => x.QuestionName == variableNode.VariableName)
                           ?.QuestionType;

                if (type == null || correctTypePredicate(type))
                {
                    yield return new TData
                           {
                               Message =
                                   $@"The variable '{variableNode.VariableName}' is in a {comparisonType} but is not a {
                                    expectedType
                                }, it is '{type}'",
                               Source = m_domainItemLocator.GetRef <TNode>(variableNode.Id)
                           }
                }
                ;
            }
        }
    }