Class JsonSchema

  • All Implemented Interfaces:
    JsonValidator

    public class JsonSchema
    extends BaseJsonValidator
    This is the core of json constraint implementation. It parses json constraint file and generates JsonValidators. The class is thread safe, once it is constructed, it can be used to validate multiple json data concurrently.
    • Field Detail

      • validators

        protected java.util.Map<java.lang.String,​JsonValidator> validators
      • IGNITION_SCHEMA_URN

        public static final java.lang.String IGNITION_SCHEMA_URN
        See Also:
        Constant Field Values
      • IGNITION_SCHEMA_PATTERN

        public static final java.util.regex.Pattern IGNITION_SCHEMA_PATTERN
    • Constructor Detail

      • JsonSchema

        public JsonSchema​(com.inductiveautomation.ignition.common.gson.JsonElement schemaNode)
      • JsonSchema

        public JsonSchema​(com.inductiveautomation.ignition.common.gson.JsonElement schemaNode,
                          JsonSchema subSchema)
    • Method Detail

      • parse

        public static JsonSchema parse​(java.io.InputStream stream)
      • findSchemaForPath

        public java.util.Optional<JsonSchema> findSchemaForPath​(JsonPath path)
        Attempts to find a sub-schema for a specific json path into a hypothetical document that this schema might validate. Only supports finding sub-schemas inside "properties" and "items" keywords.
      • getRefSchemaNode

        public com.inductiveautomation.ignition.common.gson.JsonElement getRefSchemaNode​(java.lang.String ref)
        Find the schema node for $ref attribute.
        Parameters:
        ref - String
        Returns:
        JsonElement
      • findAncestorMatchingPath

        public java.util.Optional<JsonSchema> findAncestorMatchingPath​(java.lang.String matchingPath)
      • validate

        public java.util.Set<ValidationMessage> validate​(com.inductiveautomation.ignition.common.gson.JsonElement jsonElement,
                                                         com.inductiveautomation.ignition.common.gson.JsonElement rootNode,
                                                         java.lang.String at)
        Description copied from interface: JsonValidator
        Validate the given JsonElement, the given node is the child node of the root node at given data path.
        Parameters:
        jsonElement - JsonElement
        rootNode - JsonElement
        at - String
        Returns:
        A list of ValidationMessage if there is any validation error, or an empty list if there is no error.
      • getTitle

        @Nullable
        public java.lang.String getTitle()
      • getDescription

        @Nullable
        public java.lang.String getDescription()
      • getDefaultValue

        @Nullable
        public com.inductiveautomation.ignition.common.gson.JsonElement getDefaultValue()
        If the schema specified a default value, it will be returned here. Otherwise, a default value may be derived based on the sub-properties specified.
      • getDefaultValue

        @Nullable
        public com.inductiveautomation.ignition.common.gson.JsonElement getDefaultValue​(boolean includeExamples)
        If the schema specified a default value, it will be returned here. Otherwise, a default value may be derived based on the sub-properties specified.
      • getChildDefaultValue

        public java.util.Optional<com.inductiveautomation.ignition.common.gson.JsonElement> getChildDefaultValue​(JsonType type)
      • getExamples

        @Nonnull
        public java.util.List<com.inductiveautomation.ignition.common.gson.JsonElement> getExamples()
      • isDeprecated

        public boolean isDeprecated()
      • getExampleValue

        @Nonnull
        public java.util.Optional<com.inductiveautomation.ignition.common.gson.JsonElement> getExampleValue()
        Returns an optional containing an example value if one exists.
      • getFormat

        @Nullable
        public java.lang.String getFormat()
        Returns:
        The format specifier for this schema, if there is one, null otherwise. There will also be a format validator added to the schema.
      • getTypeValidator

        @Nullable
        public TypeValidator getTypeValidator()
        Finds the TypeValidator associated with this schema, if there is one. This can be useful if you want to know the accepted types for this schema.
      • getItemsValidator

        @Nullable
        public ItemsValidator getItemsValidator()
        Finds the ItemsValidator associated with this schema, if there is one. The items validator defines an expected shape for each element in a (potentially) arbitrary length sequence.
      • isType

        public boolean isType​(JsonType type)
        Returns true if this schema accepts this type and only this type
      • acceptsType

        public boolean acceptsType​(JsonType type)
        Returns true if this schema accepts this type
      • getEnumChoices

        public java.util.Map<java.lang.String,​com.inductiveautomation.ignition.common.gson.JsonElement> getEnumChoices()
        Returns:
        The map of possible choices for this schema if an `enum` validator is present. Otherwise, empty map.
      • getSuggestions

        public java.util.Map<java.lang.String,​com.inductiveautomation.ignition.common.gson.JsonElement> getSuggestions()
        Returns:
        the map of suggested values if a 'suggestions' validator is present, otherwise returns empty map.
      • getDynamicSuggestionPath

        @Nullable
        public java.lang.String getDynamicSuggestionPath()
      • getVisibleWhenCondition

        public java.util.Optional<org.apache.commons.lang3.tuple.Pair<java.lang.String,​java.util.List<com.inductiveautomation.ignition.common.gson.JsonElement>>> getVisibleWhenCondition()
        Returns:
        pair key: driving property name. pair value: acceptable values that make this node visible
      • getDeclaredProperties

        public java.util.List<java.lang.String> getDeclaredProperties()
        Returns:
        a list of declared property names declared in a "properties" validator in this schema, or empty list if none.
      • getSchemasForProperties

        public java.util.Map<java.lang.String,​JsonSchema> getSchemasForProperties()
        Returns:
        a map of declared property names and their individual schemas, or an empty map if this schema does not define properties.
      • getSchemasForItems

        public java.util.List<JsonSchema> getSchemasForItems()
        Returns:
        an ordered list of item validators. If a singleton list, pull the getItemsValidator(), and then check ItemsValidator via ItemsValidator.isBoundedSchema() to see whether this schema applies to each element in an arbitrarily-long sequence, or only allows a finite list.
      • hasChildren

        public boolean hasChildren()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object