diff --git a/src/main/java/com/github/fge/jsonschema/processors/data/FullData.java b/src/main/java/com/github/fge/jsonschema/processors/data/FullData.java index 09ecd12c0..6018b1874 100644 --- a/src/main/java/com/github/fge/jsonschema/processors/data/FullData.java +++ b/src/main/java/com/github/fge/jsonschema/processors/data/FullData.java @@ -20,12 +20,18 @@ package com.github.fge.jsonschema.processors.data; +import com.github.fge.jsonschema.core.ref.JsonRef; import com.github.fge.jsonschema.core.report.MessageProvider; import com.github.fge.jsonschema.core.report.ProcessingMessage; import com.github.fge.jsonschema.core.tree.JsonTree; import com.github.fge.jsonschema.core.tree.SchemaTree; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.Iterables; +import com.google.common.collect.Queues; -import javax.annotation.concurrent.Immutable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.Deque; /** * Validation data for a validation processor @@ -41,19 +47,27 @@ *

The {@link ProcessingMessage} template generated contains information * about both the schema and instance.

*/ -@Immutable +// TODO: rework, rename; nulls are badly handled, etc +@ParametersAreNonnullByDefault public final class FullData implements MessageProvider { - private final SchemaTree schema; - private final JsonTree instance; + private SchemaTree schema; + private JsonTree instance; private final boolean deepCheck; + /* + * Deque of SchemaTrees we had to go through during validation of a + * particular instance/pointer pair; when the latter changes,the deque is + * emptied. + */ + private final Deque schemaPath = Queues.newArrayDeque(); + public FullData(final SchemaTree schema, final JsonTree instance, final boolean deepCheck) { - this.schema = schema; - this.instance = instance; + this.schema = Preconditions.checkNotNull(schema); + this.instance = Preconditions.checkNotNull(instance); this.deepCheck = deepCheck; } @@ -62,6 +76,11 @@ public FullData(final SchemaTree schema, final JsonTree instance) this(schema, instance, false); } + /** + * UNUSED + * + * @param schema the schema + */ @Deprecated public FullData(final SchemaTree schema) { @@ -83,6 +102,16 @@ public boolean isDeepCheck() return deepCheck; } + public void setSchema(final SchemaTree schema) + { + this.schema = Preconditions.checkNotNull(schema); + } + + public void setInstance(final JsonTree instance) + { + this.instance = Preconditions.checkNotNull(instance); + } + /** * Return a new full data with another schema * @@ -115,4 +144,18 @@ public ProcessingMessage newMessage() ret.put("instance", instance); return ret; } + + public Iterable getSchemaPath() + { + final Iterable iterable = Iterables.transform(schemaPath, + new Function() + { + @Override + public JsonRef apply(final SchemaTree input) + { + return input.getContext(); + } + }); + return Iterables.unmodifiableIterable(iterable); + } }