Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor to make more fields final #1060

Merged
merged 1 commit into from
Jun 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 39 additions & 9 deletions src/main/java/com/networknt/schema/BaseJsonValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.networknt.schema.annotation.JsonNodeAnnotation;
import com.networknt.schema.i18n.DefaultMessageSource;
import com.networknt.schema.i18n.MessageSource;

import org.slf4j.Logger;

Expand All @@ -29,12 +30,15 @@
import java.util.Set;
import java.util.function.Consumer;

/**
* Base {@link JsonValidator}.
*/
public abstract class BaseJsonValidator extends ValidationMessageHandler implements JsonValidator {
protected final boolean suppressSubSchemaRetrieval;

protected final JsonNode schemaNode;

protected ValidationContext validationContext;
protected final ValidationContext validationContext;

public BaseJsonValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode,
JsonSchema parentSchema, ValidatorTypeCode validatorType, ValidationContext validationContext) {
Expand All @@ -60,15 +64,41 @@ public BaseJsonValidator(SchemaLocation schemaLocation, JsonNodePath evaluationP
}

/**
* Copy constructor.
*
* @param copy to copy from
* Constructor to create a copy using fields.
*
* @param suppressSubSchemaRetrieval to suppress sub schema retrieval
* @param schemaNode the schema node
* @param validationContext the validation context
* @param errorMessageType the error message type
* @param customErrorMessagesEnabled whether custom error msessages are enabled
* @param messageSource the message source
* @param keyword the keyword
* @param parentSchema the parent schema
* @param schemaLocation the schema location
* @param evaluationPath the evaluation path
* @param evaluationParentSchema the evaluation parent schema
* @param errorMessage the error message
*/
protected BaseJsonValidator(BaseJsonValidator copy) {
super(copy);
this.suppressSubSchemaRetrieval = copy.suppressSubSchemaRetrieval;
this.schemaNode = copy.schemaNode;
this.validationContext = copy.validationContext;
protected BaseJsonValidator(
/* Below from BaseJsonValidator */
boolean suppressSubSchemaRetrieval,
JsonNode schemaNode,
ValidationContext validationContext,
/* Below from ValidationMessageHandler */
ErrorMessageType errorMessageType,
boolean customErrorMessagesEnabled,
MessageSource messageSource,
Keyword keyword,
JsonSchema parentSchema,
SchemaLocation schemaLocation,
JsonNodePath evaluationPath,
JsonSchema evaluationParentSchema,
Map<String, String> errorMessage) {
super(errorMessageType, customErrorMessagesEnabled, messageSource, keyword,
parentSchema, schemaLocation, evaluationPath, evaluationParentSchema, errorMessage);
this.suppressSubSchemaRetrieval = suppressSubSchemaRetrieval;
this.schemaNode = schemaNode;
this.validationContext = validationContext;
}

private static JsonSchema obtainSubSchemaNode(final JsonNode schemaNode, final ValidationContext validationContext) {
Expand Down
23 changes: 21 additions & 2 deletions src/main/java/com/networknt/schema/CollectorContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,35 @@ public class CollectorContext {
/**
* Map for holding the name and {@link Collector} or a simple Object.
*/
private Map<String, Object> collectorMap = new HashMap<>();
private final Map<String, Object> collectorMap;

/**
* Map for holding the name and {@link Collector} class collect method output.
*/
private Map<String, Object> collectorLoadMap = new HashMap<>();
private final Map<String, Object> collectorLoadMap;

/**
* Default constructor will use an unsynchronized HashMap to store data. This is
* suitable if the collector context is not shared with multiple threads.
*/
public CollectorContext() {
this(new HashMap<>(), new HashMap<>());
}

/**
* Constructor that creates the context using the specified instances to store
* data.
* <p>
* If for instance the collector context needs to be shared with multiple
* threads a ConcurrentHashMap can be used.
*
* @param collectorMap the collector map
* @param collectorLoadMap the collector load map
*/
public CollectorContext(Map<String, Object> collectorMap, Map<String, Object> collectorLoadMap) {
this.collectorMap = collectorMap;
this.collectorLoadMap = collectorLoadMap;
}

/**
* Adds a collector with give name. Preserving this method for backward
Expand Down
28 changes: 19 additions & 9 deletions src/main/java/com/networknt/schema/ContainsValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ public class ContainsValidator extends BaseJsonValidator {
private final JsonSchema schema;
private final boolean isMinV201909;

private Integer min = null;
private Integer max = null;
private final Integer min;
private final Integer max;

private Boolean hasUnevaluatedItemsValidator = null;

public ContainsValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) {
Expand All @@ -55,19 +55,29 @@ public ContainsValidator(SchemaLocation schemaLocation, JsonNodePath evaluationP
// slightly.
this.isMinV201909 = MinV201909.getVersions().contains(this.validationContext.getMetaSchema().getSpecification());

Integer currentMax = null;
Integer currentMin = null;
if (schemaNode.isObject() || schemaNode.isBoolean()) {
this.schema = validationContext.newSchema(schemaLocation, evaluationPath, schemaNode, parentSchema);
JsonNode parentSchemaNode = parentSchema.getSchemaNode();
Optional.ofNullable(parentSchemaNode.get(ValidatorTypeCode.MAX_CONTAINS.getValue()))
.filter(JsonNode::canConvertToExactIntegral)
.ifPresent(node -> this.max = node.intValue());
Optional<JsonNode> maxNode = Optional
.ofNullable(parentSchemaNode.get(ValidatorTypeCode.MAX_CONTAINS.getValue()))
.filter(JsonNode::canConvertToExactIntegral);
if (maxNode.isPresent()) {
currentMax = maxNode.get().intValue();
}

Optional.ofNullable(parentSchemaNode.get(ValidatorTypeCode.MIN_CONTAINS.getValue()))
.filter(JsonNode::canConvertToExactIntegral)
.ifPresent(node -> this.min = node.intValue());
Optional<JsonNode> minNode = Optional
.ofNullable(parentSchemaNode.get(ValidatorTypeCode.MIN_CONTAINS.getValue()))
.filter(JsonNode::canConvertToExactIntegral);
if (minNode.isPresent()) {
currentMin = minNode.get().intValue();
}
} else {
this.schema = null;
}
this.max = currentMax;
this.min = currentMin;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
*/
public class ContentEncodingValidator extends BaseJsonValidator {
private static final Logger logger = LoggerFactory.getLogger(ContentEncodingValidator.class);
private String contentEncoding;
private final String contentEncoding;

/**
* Constructor.
Expand Down
43 changes: 0 additions & 43 deletions src/main/java/com/networknt/schema/JsonNodeLocation.java

This file was deleted.

Loading