/// <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); }