Пример #1
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Array)
            {
                return(results);
            }
            if (!context.Misc.TryGetValue("containsCount", out var value))
            {
                return(results);
            }

            var containsCount = (int)value;

            if (containsCount > Value)
            {
                results.IsValid = false;
                results.AdditionalInfo["actual"]     = containsCount;
                results.AdditionalInfo["upperBound"] = Value;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #2
0
        /// <summary>
        /// Provides the validation logic for this dependency.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(PropertyName, context)
            {
                Keyword = $"{context.Misc["dependencyParent"]}/{PropertyName}"
            };

            if (context.Instance.Type != JsonValueType.Object)
            {
                Log.Schema("Instance not an object; not applicable");
                return(results);
            }

            if (!context.Instance.Object.ContainsKey(PropertyName))
            {
                Log.Schema($"Property {PropertyName} not found; not applicable");
                return(results);
            }

            var missingProperties = _dependencies.Except(context.Instance.Object.Keys).ToList();

            if (missingProperties.Any())
            {
                Log.Schema($"Properties {missingProperties} not found but required by property {PropertyName}");
                results.IsValid = false;
                results.AdditionalInfo["required"]   = missingProperties.ToJson();
                results.AdditionalInfo["dependency"] = PropertyName;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #3
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context)
            {
                AnnotationValue = Value.Key
            };


            if (!JsonSchemaOptions.ValidateFormatKeyword)
            {
                return(results);
            }
            if (context.Instance.Type != JsonValueType.String)
            {
                return(results);
            }

            var format = Value;

            if (!format.Validate(context.Instance.String))
            {
                results.IsValid = false;
                results.AdditionalInfo["actual"]        = context.Instance;
                results.AdditionalInfo["format"]        = format.Key;
                results.AdditionalInfo["isKnownFormat"] = format.IsKnown;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }
            ;

            return(results);
        }
Пример #4
0
 protected override void RunCore()
 {
     if (LoadConfiguration())
     {
         List <Exception> exs = new List <Exception>();
         try
         {
             foreach (var item in _Configuration.DomainObjectClasses)
             {
                 ClassTemplate template = new ClassTemplate();
                 template.Class       = item;
                 template.Output.File = String.Format(@"{0}.cs", item.Name);
                 template.Render();
             }
         }
         catch (Exception ex)
         {
             exs.Add(ex);
         }
         if (exs.Count > 0)
         {
             ErrorTemplate errortemplate = new ErrorTemplate();
             ErrorTemplate.Exceptions = exs;
             errortemplate.Render();
             throw new Exception("See generated output for errors.");
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Number)
            {
                Log.Schema("Instance not a number; not applicable");
                return(results);
            }

            var keyword = context.Local.Get <MaximumKeyword>();

            if (keyword == null)
            {
                Log.Schema("`maximum` keyword not defined; not applicable");
                return(results);
            }

            if (!Value)
            {
                Log.Schema("Not exclusive; see `maximum` results");
                return(results);
            }

            if (context.Instance.Number >= keyword.Value)
            {
                Log.Schema($"Bounds check failed: {context.Instance.Number} >= {keyword.Value}");
                results.IsValid = false;
                results.AdditionalInfo["upperBound"] = keyword.Value;
                results.AdditionalInfo["actual"]     = context.Instance;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #6
0
 protected override void RunCore()
 {
     if (LoadConfiguration())
     {
         List <Exception> exs = new List <Exception>();
         try
         {
             foreach (ContractServiceDefinition Interface in _Configuration.ContractServiceInterfaces)
             {
                 ClassTemplate template = new ClassTemplate();
                 template.Class       = (ContractServiceClassDefinition)Interface;
                 template.Output.File = String.Format(@"{0}.cs", template.Class.Name);
                 template.Render();
             }
         }
         catch (Exception ex)
         {
             exs.Add(ex);
         }
         if (exs.Count > 0)
         {
             ErrorTemplate errortemplate = new ErrorTemplate();
             ErrorTemplate.Exceptions  = exs;
             errortemplate.Output.File = "Error.log";
             errortemplate.Render();
             throw new Exception("See generated output for errors.");
         }
     }
 }
Пример #7
0
 public ToastSettings()
 {
     GetInfoView    = (m, t) => InfoTemplate?.GetToastView(m, t);
     GetWarningView = (m, t) => WarningTemplate?.GetToastView(m, t);
     GetSuccessView = (m, t) => SuccessTemplate?.GetToastView(m, t);
     GetErrorView   = (m, t) => ErrorTemplate?.GetToastView(m, t);
 }
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Array)
            {
                Log.Schema(() => "Instance not an array; not applicable");
                return(results);
            }

            if (!context.Misc.TryGetValue("containsCount", out var value))
            {
                Log.Schema(() => "`contains` keyword not present; not applicable");
                return(results);
            }

            var containsCount = (int)value;

            if (containsCount > Value)
            {
                Log.Schema(() => $"Required no more than {Value} matching items, but {containsCount} found");
                results.IsValid = false;
                results.AdditionalInfo["actual"]     = containsCount;
                results.AdditionalInfo["upperBound"] = Value;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Object)
            {
                Log.Schema(() => "Instance not an object; not applicable");
                return(results);
            }

            var baseRelativeLocation = context.BaseRelativeLocation?.CloneAndAppend(Name);
            var relativeLocation     = context.RelativeLocation.CloneAndAppend(Name);
            var valid                = true;
            var reportChildErrors    = context.Options.ShouldReportChildErrors(this, context);
            var nestedResults        = new List <SchemaValidationResults>();
            var invalidPropertyNames = new JsonArray();

            foreach (var propertyName in context.Instance.Object.Keys)
            {
                var newContext = new SchemaValidationContext(context)
                {
                    Instance             = propertyName,
                    BaseRelativeLocation = baseRelativeLocation,
                    RelativeLocation     = relativeLocation,
                    InstanceLocation     = context.InstanceLocation.CloneAndAppend(propertyName),
                };
                var localResults = Value.Validate(newContext);
                valid &= localResults.IsValid;
                if (!valid)
                {
                    invalidPropertyNames.Add(propertyName);
                }

                if (context.Options.OutputFormat == SchemaValidationOutputFormat.Flag)
                {
                    if (!valid)
                    {
                        Log.Schema(() => "Subschema failed; halting validation early");
                        break;
                    }
                }
                else if (reportChildErrors)
                {
                    nestedResults.Add(localResults);
                }
            }

            results.IsValid       = valid;
            results.NestedResults = nestedResults;

            if (!results.IsValid)
            {
                Log.Schema(() => $"Property names {invalidPropertyNames.ToJson()} failed");
                results.AdditionalInfo["properties"] = invalidPropertyNames;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #10
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var valid             = false;
            var reportChildErrors = context.Options.ShouldReportChildErrors(this, context);
            var i             = 0;
            var nestedResults = new List <SchemaValidationResults>();

            var baseContext = new SchemaValidationContext(context);

            baseContext.EvaluatedPropertyNames.Clear();
            baseContext.LocallyEvaluatedPropertyNames.Clear();
            baseContext.LastEvaluatedIndex          = -1;
            baseContext.LocalTierLastEvaluatedIndex = -1;
            foreach (var s in this)
            {
                var newContext = new SchemaValidationContext(baseContext)
                {
                    BaseRelativeLocation = context.BaseRelativeLocation?.CloneAndAppend(Name, i.ToString()),
                    RelativeLocation     = context.RelativeLocation.CloneAndAppend(Name, i.ToString()),
                };
                var localResults = s.Validate(newContext);
                valid |= localResults.IsValid;
                Log.Schema(() => $"`{Name}` {(valid ? "valid" : "invalid")} so far");
                if (localResults.IsValid)
                {
                    context.UpdateEvaluatedPropertiesAndItemsFromSubschemaValidation(newContext);
                }

                if (context.Options.OutputFormat == SchemaValidationOutputFormat.Flag)
                {
                    if (valid)
                    {
                        Log.Schema(() => "Subschema passed; halting validation early");
                        break;
                    }
                }
                else if (reportChildErrors)
                {
                    nestedResults.Add(localResults);
                }

                i++;
            }

            var resultsList = nestedResults.ToList();
            var results     = new SchemaValidationResults(Name, context)
            {
                NestedResults = resultsList,
                IsValid       = valid
            };

            if (!results.IsValid)
            {
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #11
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var valid             = true;
            var reportChildErrors = context.Options.ShouldReportChildErrors(this, context);
            var i             = 0;
            var nestedResults = new List <SchemaValidationResults>();
            var failedCount   = 0;

            foreach (var s in this)
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = context.BaseRelativeLocation?.CloneAndAppend(Name, i.ToString()),
                    RelativeLocation     = context.RelativeLocation.CloneAndAppend(Name, i.ToString()),
                };
                var localResults = s.Validate(newContext);
                valid &= localResults.IsValid;
                Log.Schema(() => $"`{Name}` {(valid ? "valid" : "invalid")} so far");
                if (!localResults.IsValid)
                {
                    failedCount++;
                }
                else
                {
                    context.UpdateEvaluatedPropertiesAndItemsFromSubschemaValidation(newContext);
                }

                if (context.Options.OutputFormat == SchemaValidationOutputFormat.Flag)
                {
                    if (!valid)
                    {
                        Log.Schema(() => "Subschema failed; halting validation early");
                        break;
                    }
                }
                else if (reportChildErrors)
                {
                    nestedResults.Add(localResults);
                }

                i++;
            }

            var results = new SchemaValidationResults(Name, context)
            {
                NestedResults = nestedResults,
                IsValid       = valid
            };

            if (!results.IsValid)
            {
                results.AdditionalInfo["failed"] = failedCount;
                results.AdditionalInfo["total"]  = Count;
                results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #12
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var baseRelativeLocation = context.BaseRelativeLocation?.CloneAndAppend(Name);
            var relativeLocation     = context.RelativeLocation.CloneAndAppend(Name);

            var valid             = true;
            var reportChildErrors = JsonSchemaOptions.ShouldReportChildErrors(this, context);
            var nestedResults     = new List <SchemaValidationResults>();
            var failedCount       = 0;

            foreach (var d in this)
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = baseRelativeLocation,
                    RelativeLocation     = relativeLocation,
                    Misc = { ["dependencyParent"] = Name }
                };
                var localResults = d.Validate(newContext);
                valid &= localResults.IsValid;
                if (!valid)
                {
                    failedCount++;
                }

                if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
                {
                    if (!valid)
                    {
                        Log.Schema("Dependency failed; halting validation early");
                        break;
                    }
                }
                else if (reportChildErrors)
                {
                    nestedResults.Add(localResults);
                }
            }

            var results = new SchemaValidationResults(Name, context)
            {
                IsValid = valid
            };

            if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
            {
                results.NestedResults = nestedResults;
            }
            else if (!results.IsValid)
            {
                results.AdditionalInfo["failed"] = failedCount;
                results.AdditionalInfo["total"]  = Count;
                results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #13
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var reportChildErrors = context.Options.ShouldReportChildErrors(this, context);
            var i             = 0;
            var nestedResults = new List <SchemaValidationResults>();
            var validCount    = 0;

            var contextCopy = new SchemaValidationContext(context);

            foreach (var s in this)
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = context.BaseRelativeLocation?.CloneAndAppend(Name, i.ToString()),
                    RelativeLocation     = context.RelativeLocation.CloneAndAppend(Name, i.ToString()),
                };
                var localResults = s.Validate(newContext);
                if (localResults.IsValid)
                {
                    validCount++;
                    contextCopy.UpdateEvaluatedPropertiesAndItemsFromSubschemaValidation(newContext);
                }
                Log.Schema(() => $"`{Name}` {validCount} items valid so far");

                if (context.Options.OutputFormat == SchemaValidationOutputFormat.Flag)
                {
                    if (validCount > 1)
                    {
                        Log.Schema(() => "More than one subschema succeeded; halting validation early");
                        break;
                    }
                }
                else if (reportChildErrors)
                {
                    nestedResults.Add(localResults);
                }
            }

            var results = new SchemaValidationResults(Name, context)
            {
                IsValid       = validCount == 1,
                NestedResults = nestedResults
            };

            if (!results.IsValid)
            {
                Log.Schema(() => $"{validCount} subschemas passed validation; expected only one");
                results.AdditionalInfo["passed"] = validCount;
                results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }
            else
            {
                context.UpdateEvaluatedPropertiesAndItemsFromSubschemaValidation(contextCopy);
            }

            return(results);
        }
Пример #14
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var nestedResults = this.Select((s, i) =>
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = context.BaseRelativeLocation.CloneAndAppend(Name, i.ToString()),
                    RelativeLocation     = context.RelativeLocation.CloneAndAppend(Name, i.ToString()),
                };
                var result = s.Validate(newContext);
                context.EvaluatedPropertyNames.AddRange(newContext.EvaluatedPropertyNames);
                context.EvaluatedPropertyNames.AddRange(newContext.LocallyEvaluatedPropertyNames);
                return(result);
            });

            SchemaValidationResults results;
            var validCount = 0;

            if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
            {
                results = new SchemaValidationResults(Name, context);
                foreach (var result in nestedResults)
                {
                    if (result.IsValid)
                    {
                        if (validCount != 0)
                        {
                            results.IsValid = false;
                            return(results);
                        }

                        validCount++;
                    }
                }

                results.IsValid = validCount == 1;
            }
            else
            {
                var resultsList = nestedResults.ToList();
                validCount = resultsList.Count(r => r.IsValid);
                results    = new SchemaValidationResults(Name, context)
                {
                    NestedResults = resultsList,
                    IsValid       = validCount == 1
                };
            }

            if (!results.IsValid)
            {
                results.AdditionalInfo["passed"] = validCount;
                results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #15
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context)
            {
                IsValid = Contains(context.Instance)
            };

            if (!results.IsValid)
            {
                results.AdditionalInfo["value"] = context.Instance;
                results.ErrorMessage            = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #16
0
        public void Recover(IMessage message, Exception exception)
        {
            var headers = RabbitHeaderAccessor.GetMutableAccessor(message);

            var exceptionMessage          = exception.InnerException != null ? exception.InnerException.Message : exception.Message;
            var processed                 = ProcessStackTrace(exception, exceptionMessage);
            var stackTraceAsString        = processed[0];
            var truncatedExceptionMessage = processed[1];

            if (truncatedExceptionMessage != null)
            {
                exceptionMessage = truncatedExceptionMessage;
            }

            headers.SetHeader(X_EXCEPTION_STACKTRACE, stackTraceAsString);
            headers.SetHeader(X_EXCEPTION_MESSAGE, exceptionMessage);
            headers.SetHeader(X_ORIGINAL_EXCHANGE, headers.ReceivedExchange);
            headers.SetHeader(X_ORIGINAL_ROUTING_KEY, headers.ReceivedRoutingKey);
            var additionalHeaders = AddAdditionalHeaders(message, exception);

            if (additionalHeaders != null)
            {
                foreach (var h in additionalHeaders)
                {
                    headers.SetHeader(h.Key, h.Value);
                }
            }

            if (headers.DeliveryMode == null)
            {
                headers.DeliveryMode = DeliveryMode;
            }

            if (ErrorExchangeName != null)
            {
                var routingKey = ErrorRoutingKey ?? PrefixedOriginalRoutingKey(message);
                ErrorTemplate.Send(ErrorExchangeName, routingKey, message);

                _logger?.LogWarning("Republishing failed message to exchange '{exchange}' with routing key '{routingKey}'", ErrorExchangeName, routingKey);
            }
            else
            {
                var routingKey = PrefixedOriginalRoutingKey(message);
                ErrorTemplate.Send(routingKey, message);

                _logger?.LogWarning("Republishing failed message to the template's default exchange with routing key {key}", routingKey);
            }
        }
Пример #17
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            Log.Schema("Checking defined values for instance");
            var results = new SchemaValidationResults(Name, context)
            {
                IsValid = Contains(context.Instance)
            };

            if (!results.IsValid)
            {
                Log.Schema("Instance does not match any of the defined values");
                results.AdditionalInfo["value"] = context.Instance;
                results.ErrorMessage            = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #18
0
        public void Error(string form, int line, ErrorTemplate errorTemplate)
        {
            MessageDisplay messageDisplay = MessageDisplay.GetFrom(form);

            if (messageDisplay == null)
            {
                return;
            }

            MessageDisplay.MessageItem first = messageDisplay.GetFirstError(line);

            if (first == null)
            {
                return;
            }

            errorTemplate(first.Message, new ErrorTemplateParams(first.Message, messageDisplay, line));
        }
Пример #19
0
        public void UnnamedError(string form, ErrorTemplate errorTemplate)
        {
            MessageDisplay messageDisplay = MessageDisplay.GetFrom(form);

            if (messageDisplay == null)
            {
                return;
            }

            MessageDisplay.MessageItem first = messageDisplay.GetFirstUnnamedError();

            if (first == null)
            {
                return;
            }

            errorTemplate(first.Message, new ErrorTemplateParams(first.Message, messageDisplay));
        }
Пример #20
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var nestedResults = this.Select((s, i) =>
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = context.BaseRelativeLocation.CloneAndAppend(Name, i.ToString()),
                    RelativeLocation     = context.RelativeLocation.CloneAndAppend(Name, i.ToString()),
                };
                var result = s.Validate(newContext);
                context.EvaluatedPropertyNames.AddRange(newContext.EvaluatedPropertyNames);
                context.EvaluatedPropertyNames.AddRange(newContext.LocallyEvaluatedPropertyNames);
                context.LastEvaluatedIndex = Math.Max(context.LastEvaluatedIndex, newContext.LastEvaluatedIndex);
                return(result);
            });

            SchemaValidationResults results;

            if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
            {
                results = new SchemaValidationResults(Name, context)
                {
                    IsValid = nestedResults.All(r => r.IsValid)
                }
            }
            ;
            else
            {
                var resultsList = nestedResults.ToList();
                results = new SchemaValidationResults(Name, context)
                {
                    NestedResults = resultsList,
                    IsValid       = resultsList.All(r => r.IsValid)
                };
                if (!results.IsValid)
                {
                    results.AdditionalInfo["failed"] = resultsList.Count(r => !r.IsValid);
                    results.AdditionalInfo["total"]  = Count;
                    results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
                }
            }

            return(results);
        }
Пример #21
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Number)
            {
                return(results);
            }

            if ((decimal)context.Instance.Number % (decimal?)Value != 0)
            {
                results.IsValid = false;
                results.AdditionalInfo["divisor"] = Value;
                results.AdditionalInfo["actual"]  = context.Instance.Number % Value;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Object)
            {
                return(results);
            }

            if (context.Instance.Object.Count < Value)
            {
                results.IsValid = false;
                results.AdditionalInfo["lowerBound"] = Value;
                results.AdditionalInfo["actual"]     = context.Instance.Object.Count;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #23
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.String)
            {
                return(results);
            }

            if (!Value.IsMatch(context.Instance.String))
            {
                results.IsValid = false;
                results.AdditionalInfo["actual"]  = context.Instance;
                results.AdditionalInfo["pattern"] = Value.ToString();
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #24
0
        public async Task <ErrorTemplate> Create(int applicationId, IErrorRestBase errorResponse)
        {
            try
            {
                var result = new ErrorTemplate {
                    ApplicationErrorCode = errorResponse.ApplicationErrorCode, ApplicationId = applicationId, ErrorDetail = errorResponse.SerializeJson()
                };

                _dbContext.ErrorTemplates.Add(result);
                await _dbContext.SaveChangesAsync();

                return(result);
            }
            catch (Exception e)
            {
                _logger.LogError($"[{System.Reflection.MethodBase.GetCurrentMethod().Name}] {e.Message ?? ""}", e);
                throw;
            }
        }
Пример #25
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Object)
            {
                return(results);
            }

            var baseRelativeLocation = context.BaseRelativeLocation.CloneAndAppend(Name);
            var relativeLocation     = context.RelativeLocation.CloneAndAppend(Name);
            var nestedResults        = context.Instance.Object.Keys.Select(propertyName =>
            {
                var newContext = new SchemaValidationContext(context)
                {
                    Instance             = propertyName,
                    BaseRelativeLocation = baseRelativeLocation,
                    RelativeLocation     = relativeLocation,
                    InstanceLocation     = context.InstanceLocation.CloneAndAppend(propertyName),
                };
                var result = Value.Validate(newContext);

                return(new { propertyName, result });
            }).ToList();

            if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
            {
                results.IsValid = nestedResults.All(r => r.result.IsValid);
            }
            else
            {
                results.NestedResults = nestedResults.Select(r => r.result).ToList();
                results.IsValid       = nestedResults.All(r => r.result.IsValid);
            }

            if (!results.IsValid)
            {
                results.AdditionalInfo["properties"] = nestedResults.Select(r => r.propertyName).ToJson();
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #26
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context)
            {
                AnnotationValue = Value
            };

            if (!context.Options.ValidateFormatKeyword)
            {
                Log.Schema(() => "Options indicate skipping format validation");
                return(results);
            }

            var validator = Formats.GetFormat(Value);

            if (validator == null)
            {
                results.AdditionalInfo["actual"]        = context.Instance;
                results.AdditionalInfo["format"]        = Value;
                results.AdditionalInfo["isKnownFormat"] = false;

                if (context.Options.AllowUnknownFormats)
                {
                    results.IsValid = true;
                }
                else
                {
                    results.IsValid      = false;
                    results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
                }
            }
            else if (!validator.Validate(context.Instance))
            {
                results.IsValid = false;
                results.AdditionalInfo["actual"]        = context.Instance;
                results.AdditionalInfo["format"]        = Value;
                results.AdditionalInfo["isKnownFormat"] = true;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #27
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var baseRelativeLocation = context.BaseRelativeLocation.CloneAndAppend(Name);
            var relativeLocation     = context.RelativeLocation.CloneAndAppend(Name);
            var nestedResults        = this.Select(d =>
            {
                var newContext = new SchemaValidationContext(context)
                {
                    BaseRelativeLocation = baseRelativeLocation,
                    RelativeLocation     = relativeLocation,
                };
                return(d.Validate(newContext));
            });

            SchemaValidationResults results;

            if (JsonSchemaOptions.OutputFormat == SchemaValidationOutputFormat.Flag)
            {
                results = new SchemaValidationResults(Name, context)
                {
                    IsValid = nestedResults.All(r => r.IsValid)
                };
            }
            else
            {
                var resultsList = nestedResults.ToList();
                results = new SchemaValidationResults(Name, context)
                {
                    NestedResults = resultsList,
                    IsValid       = resultsList.All(r => r.IsValid)
                };
            }

            if (!results.IsValid)
            {
                results.AdditionalInfo["failed"] = nestedResults.Count(r => !r.IsValid);
                results.AdditionalInfo["total"]  = Count;
                results.ErrorMessage             = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #28
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.String)
            {
                Log.Schema("Instance not a string; not applicable");
                return(results);
            }

            if (!Value.IsMatch(context.Instance.String))
            {
                Log.Schema("Value does not match regular expression");
                results.IsValid = false;
                results.AdditionalInfo["actual"]  = context.Instance;
                results.AdditionalInfo["pattern"] = Value.ToString();
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #29
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Array)
            {
                Log.Schema("Instance not an array; not applicable");
                return(results);
            }

            if (context.Instance.Array.Count > Value)
            {
                Log.Schema($"Bounds check failed: {context.Instance.Array.Count} > {Value}");
                results.IsValid = false;
                results.AdditionalInfo["upperBound"] = Value;
                results.AdditionalInfo["actual"]     = context.Instance.Array.Count;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #30
0
        /// <summary>
        /// Provides the validation logic for this keyword.
        /// </summary>
        /// <param name="context">The context object.</param>
        /// <returns>Results object containing a final result and any errors that may have been found.</returns>
        public SchemaValidationResults Validate(SchemaValidationContext context)
        {
            var results = new SchemaValidationResults(Name, context);

            if (context.Instance.Type != JsonValueType.Number)
            {
                Log.Schema(() => "Instance not a number; not applicable");
                return(results);
            }

            if (context.Instance.Number <= Value)
            {
                Log.Schema(() => $"Bounds check failed: {context.Instance.Number} <= {Value}");
                results.IsValid = false;
                results.AdditionalInfo["lowerBound"] = Value;
                results.AdditionalInfo["actual"]     = context.Instance;
                results.ErrorMessage = ErrorTemplate.ResolveTokens(results.AdditionalInfo);
            }

            return(results);
        }
Пример #31
0
 public void Error2(int line, ErrorTemplate errorTemplate)
 {
     Error(null, line, errorTemplate);
 }
Пример #32
0
 public void UnnamedError(ErrorTemplate errorTemplate)
 {
     UnnamedError(null, errorTemplate);
 }
Пример #33
0
        public void UnnamedError(string form, ErrorTemplate errorTemplate)
        {
            MessageDisplay messageDisplay = MessageDisplay.GetFrom(form);
            if (messageDisplay == null)
                return;

            MessageDisplay.MessageItem first = messageDisplay.GetFirstUnnamedError();

            if (first == null)
                return;

            errorTemplate(first.Message, new ErrorTemplateParams(first.Message, messageDisplay));
        }
Пример #34
0
        public void Error(string form, int line, ErrorTemplate errorTemplate)
        {
            MessageDisplay messageDisplay = MessageDisplay.GetFrom(form);
            if (messageDisplay == null)
                return;

            MessageDisplay.MessageItem first = messageDisplay.GetFirstError(line);

            if (first == null)
                return;

            errorTemplate(first.Message, new ErrorTemplateParams(first.Message, messageDisplay, line));
        }
Пример #35
0
 public void Error2(string name, ErrorTemplate errorTemplate)
 {
     Error(null, name, errorTemplate);
 }