Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2013, Francis Galiegue <fgaliegue@gmail.com>
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the Lesser GNU General Public License as
   * published by the Free Software Foundation, either version 3 of the
   * License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * Lesser GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.github.fge.jsonschema.processors.validation;
 
 
 import java.util.List;

Main validation processor
 
 public final class ValidationProcessor
     implements Processor<FullDataFullData>
 {
     private final Processor<SchemaContextValidatorListprocessor;
     private final LoadingCache<JsonNodeArraySchemaSelectorarrayCache;
 
     public ValidationProcessor(
         final Processor<SchemaContextValidatorListprocessor)
     {
         this. = new CachingProcessor<SchemaContextValidatorList>(
             processor, SchemaContextEquivalence.getInstance()
         );
          = CacheBuilder.newBuilder().build(arrayLoader());
          = CacheBuilder.newBuilder().build(objectLoader());
     }
 
     @Override
     public FullData process(final ProcessingReport report,
         final FullData input)
         throws ProcessingException
     {
         /*
          * Build a validation context, attach a report to it
          */
         final SchemaContext context = new SchemaContext(input);
 
         /*
          * Get the full context from the cache. Inject the messages into the
          * main report.
          */
         final ValidatorList fullContext = .process(reportcontext);
 
         if (fullContext == null)
             throw new InvalidSchemaException(new ProcessingMessage()
                 .message(.));
 
         /*
          * Get the calculated context. Build the data.
          */
         final SchemaContext newContext = fullContext.getContext();
         final FullData data = new FullData(newContext.getSchema(),
             input.getInstance());
 
         /*
          * Validate against all keywords.
          */
         for (final KeywordValidator validatorfullContext)
             validator.validate(thisreportdata);
 
         /*
          * At that point, if the report is a failure, we quit: there is no
          * reason to go any further.
          */
        if (!report.isSuccess())
            return input;
        /*
         * Now check whether this is a container node with a size greater than
         * 0. If not, no need to go see the children.
         */
        final JsonNode node = data.getInstance().getNode();
        if (node.size() == 0)
            return input;
        if (node.isArray())
            processArray(reportdata);
        else
            processObject(reportdata);
        return input;
    }
    private void processArray(final ProcessingReport report,
        final FullData input)
        throws ProcessingException
    {
        final SchemaTree tree = input.getSchema();
        final JsonTree instance = input.getInstance();
        final JsonNode schema = tree.getNode();
        final JsonNode node = instance.getNode();
        final JsonNode digest = ArraySchemaDigester.getInstance().digest(schema);
        final ArraySchemaSelector selector = .getUnchecked(digest);
        final int size = node.size();
        FullData data;
        JsonTree newInstance;
        for (int index = 0; index < sizeindex++) {
            newInstance = instance.append(JsonPointer.of(index));
            data = input.withInstance(newInstance);
            for (final JsonPointer ptrselector.selectSchemas(index)) {
                data = data.withSchema(tree.append(ptr));
                process(reportdata);
            }
        }
    }
    private void processObject(final ProcessingReport report,
        final FullData input)
        throws ProcessingException
    {
        final SchemaTree tree = input.getSchema();
        final JsonTree instance = input.getInstance();
        final JsonNode schema = tree.getNode();
        final JsonNode node = instance.getNode();
        final JsonNode digest = ObjectSchemaDigester.getInstance()
            .digest(schema);
        final ObjectSchemaSelector selector = .getUnchecked(digest);
        final List<Stringfields = Lists.newArrayList(node.fieldNames());
        Collections.sort(fields);
        FullData data;
        JsonTree newInstance;
        for (final String fieldfields) {
            newInstance = instance.append(JsonPointer.of(field));
            data = input.withInstance(newInstance);
            for (final JsonPointer ptrselector.selectSchemas(field)) {
                data = data.withSchema(tree.append(ptr));
                process(reportdata);
            }
        }
    }
    {
        return new CacheLoader<JsonNodeArraySchemaSelector>()
        {
            @Override
            public ArraySchemaSelector load(final JsonNode key)
            {
                return new ArraySchemaSelector(key);
            }
        };
    }
    {
        return new CacheLoader<JsonNodeObjectSchemaSelector>()
        {
            @Override
            public ObjectSchemaSelector load(final JsonNode key)
            {
                return new ObjectSchemaSelector(key);
            }
        };
    }
    @Override
    public String toString()
    {
        return "validation processor";
    }
New to GrepCode? Check out our FAQ X