diff options
Diffstat (limited to 'src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java')
-rw-r--r-- | src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java b/src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java new file mode 100644 index 0000000..376a41c --- /dev/null +++ b/src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java @@ -0,0 +1,255 @@ +/** + * ============LICENSE_START=================================================== + * Copyright (c) 2018-2019 European Software Marketing Ltd. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + */ +package org.onap.aai.validation.result; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.annotations.Expose; +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.onap.aai.validation.exception.ValidationServiceException; +import org.onap.aai.validation.reader.data.Entity; +import org.onap.aai.validation.reader.data.EntityId; +import org.onap.aai.validation.util.JsonUtil; + +/** + * The result of an instance validation. This can include zero or more {@link Violation} objects. + */ +public class ValidationResultImpl implements ValidationResult { + + @Expose + private String validationId; + + @Expose + private String validationTimestamp; + + @Expose + private JsonElement entityId; + + @Expose + private String entityType; + + @Expose + private String entityLink; + + @Expose + private String resourceVersion; + + @Expose + private JsonElement entity; + + + @Expose + private List<Violation> violations = new ArrayList<>(); + + /** + * Create the validation payload initialised with an event identifier and a timestamp. + * + * @param entity + * @throws ValidationServiceException + */ + public ValidationResultImpl(Entity entity) throws ValidationServiceException { + this.validationId = UUID.randomUUID().toString(); + this.validationTimestamp = + DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssX").withZone(ZoneOffset.UTC).format(Instant.now()); + this.entityId = new JsonObject(); + for (EntityId id : entity.getIds()) { + this.entityId.getAsJsonObject().addProperty(id.getPrimaryKey(), id.getValue()); + } + this.entityType = entity.getType(); + this.entityLink = entity.getEntityLink(); + this.resourceVersion = entity.getResourceVersion().orElse(null); + this.entity = entity.getJson() != null ? new JsonParser().parse(entity.getJson()) : new JsonObject(); + } + + /** + * Add a validation violation. + * + * @param violation a single {@link Violation} to add to the validation result + */ + @Override + public void addViolation(Violation violation) { + this.violations.add(violation); + } + + /** + * Add a list of validation violations. + * + * @param violations a List of {@link Violation} objects to add to the validation result + */ + @Override + public void addViolations(List<Violation> violations) { + this.violations.addAll(violations); + } + + @Override + public String getValidationId() { + return validationId; + } + + public void setValidationId(String eventId) { + this.validationId = eventId; + } + + @Override + public String getValidationTimestamp() { + return validationTimestamp; + } + + public void setValidationTimestamp(String timestamp) { + this.validationTimestamp = timestamp; + } + + @Override + public JsonElement getEntityId() { + return entityId; + } + + @Override + public void setEntityId(JsonElement entityId) { + this.entityId = entityId; + } + + @Override + public String getEntityType() { + return entityType; + } + + @Override + public void setEntityType(String entityType) { + this.entityType = entityType; + } + + @Override + public String getEntityLink() { + return entityLink; + } + + public void setEntityLink(String uri) { + this.entityLink = uri; + } + + @Override + public String getResourceVersion() { + return resourceVersion; + } + + public void setResourceVersion(String resourceVersion) { + this.resourceVersion = resourceVersion; + } + + public JsonElement getEntity() { + return entity; + } + + public void setEntity(JsonElement entity) { + this.entity = entity; + } + + @Override + public List<Violation> getViolations() { + return violations; + } + + public void setViolations(List<Violation> violations) { + this.violations = violations; + } + + @Override + public int hashCode() { + return Objects.hash(this.entityId, this.entityLink, this.entityType, this.resourceVersion, this.validationId, + this.validationTimestamp, this.violations, this.entity); + } + + /* + * validationId is checked first, as this is meant to be unique + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (!(obj instanceof ValidationResultImpl)) { + return false; + } else if (obj == this) { + return true; + } + ValidationResultImpl rhs = (ValidationResultImpl) obj; + // @formatter:off + return new EqualsBuilder() + .append(entityId, rhs.entityId) + .append(entityLink, rhs.entityLink) + .append(entityType, rhs.entityType) + .append(resourceVersion, rhs.resourceVersion) + .append(validationId, rhs.validationId) + .append(validationTimestamp, rhs.validationTimestamp) + .append(violations, rhs.violations) + .append(entity, rhs.entity) + .isEquals(); + // @formatter:on + } + + @Override + public String toString() { + return JsonUtil.toJson(this); + } + + /** + * Create a JSON representation of the object, with each violation's validationRule omitted when it has a null value + * + * @return this object formatted as a JSON string ready for publishing + */ + @Override + public String toJson() { + return toString(); + } + + /** + * Create a new object from the JSON representation + * + * @param json representation of the Validation Result + * @return a ValidationResult object + */ + public static ValidationResultImpl fromJson(String json) { + ValidationResultImpl validationResult = JsonUtil.toAnnotatedClassfromJson(json, ValidationResultImpl.class); + if (validationResult != null) { + validationResult.initialiseValues(); + } + return validationResult; + } + + /** + * Ensure that any unset fields are properly initialised. This is particularly useful when the object has been + * deserialised from a JSON string, as any missing/undefined values will not be read by the deserialiser and thus + * the corresponding fields will not be set. + */ + private void initialiseValues() { + List<Violation> violationList = getViolations(); + if (violationList != null) { + for (Violation violation : violationList) { + violation.initialiseValues(); + } + } + } +} |