org.eel.kitchen.jsonschema.schema.SchemaNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of json-schema-validator Show documentation
Show all versions of json-schema-validator Show documentation
A Java implementation of the JSON Schema specification
/*
* Copyright (c) 2012, Francis Galiegue
*
* 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 .
*/
package org.eel.kitchen.jsonschema.schema;
import com.fasterxml.jackson.databind.JsonNode;
import org.eel.kitchen.jsonschema.validator.JsonValidatorCache;
/**
* Representation of a schema node
*
* A schema node is the actual schema (as a {@link JsonNode} and the schema
* context (as a {@link SchemaContainer}).
*
* This class has a critical performance role, as it is used as keys to the
* validator cache. It is therefore important that it have very efficient
* implementations of {@link Object#equals(Object)} and {@link
* Object#hashCode()}.
*
* This class is thread safe and immutable.
*
* @see JsonValidatorCache
*/
public final class SchemaNode
{
private final SchemaContainer container;
private final JsonNode node;
private final int hashCode;
public SchemaNode(final SchemaContainer container, final JsonNode node)
{
this.container = container;
this.node = node;
hashCode = 31 * container.hashCode() + node.hashCode();
}
public SchemaContainer getContainer()
{
return container;
}
public JsonNode getNode()
{
return node;
}
@Override
public String toString()
{
return "locator: " + container.getLocator() + "; schema: " + node;
}
@Override
public boolean equals(final Object obj)
{
if (obj == null)
return false;
if (this == obj)
return true;
if (getClass() != obj.getClass())
return false;
final SchemaNode other = (SchemaNode) obj;
return container.equals(other.container)
&& node.equals(other.node);
}
@Override
public int hashCode()
{
return hashCode;
}
}