Exemplo n.º 1
0
        /// <summary>
        /// Validate config
        /// </summary>
        /// <param name="filePath">Path to file</param>
        /// <returns>Result of validation, has state and messages <see cref="ValidationResult"/></returns>
        public ValidationResult Validate(string filePath)
        {
            var fileName = filePath.Split('\\').Last();

            CrozzleLogger.InitLog(fileName, false);
            Reset();
            var result = new ValidationResult();

            try
            {
                LoadFile(filePath);
            }
            catch (Exception ex)
            {
                CrozzleLogger.Log(ex.Message);
                result.AddCriticalError(ex.Message);
                return(result);
            }

            foreach (var @string in file)
            {
                if (!_groupsLimitSet)
                {
                    var regEx       = new Regex(Patterns.GROUPS_LIMIT_PATTERN);
                    var resultMatch = regEx.Match(@string);
                    if (!resultMatch.Success)
                    {
                        CrozzleLogger.Log(GROUPS_LIMIT_ERROR_MSG);
                        result.AddConfigError(GROUPS_LIMIT_ERROR_MSG);
                    }
                    _groupsLimitSet = true;
                    continue;
                }

                if (!_pointPerWordSet)
                {
                    var regEx       = new Regex(Patterns.POINTS_PER_WORD_PATTERN);
                    var resultMatch = regEx.Match(@string);
                    if (!resultMatch.Success)
                    {
                        CrozzleLogger.Log(POINT_PER_WORD_ERROR_MSG);
                        result.AddConfigError(POINT_PER_WORD_ERROR_MSG);
                    }
                    _pointPerWordSet = true;
                    continue;
                }

                if (!_intersectingSet)
                {
                    var regEx       = new Regex(Patterns.INTERSECTING_POINT_PATTERN);
                    var resultMatch = regEx.Match(@string);
                    if (!resultMatch.Success)
                    {
                        _letterIndex++;
                        var message =
                            $"ERROR on configuration file validation: INTERSECTING is not match to pattern INTERSECTING:[A-Z]=x where x is positive number, row index is {_letterIndex}";
                        CrozzleLogger.Log(message);
                        result.AddConfigError(message);
                    }
                    else
                    {
                        _letterIndex++;
                    }
                    if (_letterIndex == _letters.Count)
                    {
                        _intersectingSet = true;
                        _letterIndex     = 0;
                        continue;
                    }
                }

                if (!_nonintersectingSet && _intersectingSet)
                {
                    var regEx       = new Regex(Patterns.NONINTERSECTING_POINT_PATTERN);
                    var resultMatch = regEx.Match(@string);
                    if (!resultMatch.Success)
                    {
                        _letterIndex++;
                        var message =
                            $"ERROR on configuration file validation: NONINTERSECTING is not match to pattern NONINTERSECTING:[A-Z]=x where x is positive number, row index is {_letterIndex}";
                        CrozzleLogger.Log(message);
                        result.AddConfigError(message);
                    }
                    else
                    {
                        _letterIndex++;
                    }
                    if (_letterIndex == _letters.Count)
                    {
                        _nonintersectingSet = true;
                        _letterIndex        = 0;
                    }
                }
            }
            CrozzleLogger.EndLog(fileName, false, result.IsValid);
            return(result);
        }