summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authormark.j.leonard <mark.j.leonard@gmail.com>2019-01-15 14:35:55 +0000
committermark.j.leonard <mark.j.leonard@gmail.com>2019-01-16 13:42:36 +0000
commit3ec58a16f80426968919fe5da42732bf693909e0 (patch)
tree292f966636e48eeec9cd1f0b0f018cec76973997 /src/main
parent715e009fa1b0b148fc64f8cf1bc2f536e4e2cb23 (diff)
Refactor - create a ValidationResult Builder class
In anticipation of the Validation Result output adopting the common event payload, add an interface to provide a greater level of abstraction between the current implementation and the classes that create validation results. Change-Id: Ie81228dff19a124011e77097768b44be5a3844b6 Issue-ID: AAI-2057 Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/onap/aai/validation/controller/ValidationController.java9
-rw-r--r--src/main/java/org/onap/aai/validation/modeldriven/validator/ModelDrivenValidator.java11
-rw-r--r--src/main/java/org/onap/aai/validation/result/ValidationResult.java220
-rw-r--r--src/main/java/org/onap/aai/validation/result/ValidationResultBuilder.java55
-rw-r--r--src/main/java/org/onap/aai/validation/result/ValidationResultImpl.java255
-rw-r--r--src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java38
-rw-r--r--src/main/java/org/onap/aai/validation/ruledriven/RuleManager.java13
7 files changed, 369 insertions, 232 deletions
diff --git a/src/main/java/org/onap/aai/validation/controller/ValidationController.java b/src/main/java/org/onap/aai/validation/controller/ValidationController.java
index 15e35b1..bd7c850 100644
--- a/src/main/java/org/onap/aai/validation/controller/ValidationController.java
+++ b/src/main/java/org/onap/aai/validation/controller/ValidationController.java
@@ -1,12 +1,12 @@
-/*
+/**
* ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
+ * 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
+ * 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,
@@ -42,6 +42,7 @@ import org.onap.aai.validation.publisher.MessagePublisher;
import org.onap.aai.validation.reader.EventReader;
import org.onap.aai.validation.reader.data.Entity;
import org.onap.aai.validation.result.ValidationResult;
+import org.onap.aai.validation.result.ValidationResultBuilder;
import org.onap.aai.validation.result.Violation;
import org.onap.aai.validation.util.JsonUtil;
@@ -105,7 +106,7 @@ public class ValidationController {
Entity entity = eventReader.getEntity(event);
if (!entity.getIds().isEmpty() && eventReader.getEntityType(event).isPresent()
&& entity.getResourceVersion().isPresent()) {
- ValidationResult validationResult = new ValidationResult(entity);
+ ValidationResult validationResult = new ValidationResultBuilder(eventReader, event).build();
// @formatter:off
validationResult.addViolation(new Violation.Builder(entity)
.category(VALIDATION_ERROR_CATEGORY)
diff --git a/src/main/java/org/onap/aai/validation/modeldriven/validator/ModelDrivenValidator.java b/src/main/java/org/onap/aai/validation/modeldriven/validator/ModelDrivenValidator.java
index 1b8ab00..ef27f40 100644
--- a/src/main/java/org/onap/aai/validation/modeldriven/validator/ModelDrivenValidator.java
+++ b/src/main/java/org/onap/aai/validation/modeldriven/validator/ModelDrivenValidator.java
@@ -1,12 +1,12 @@
-/*
+/**
* ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
+ * 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
+ * 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,
@@ -36,14 +36,15 @@ import org.onap.aai.validation.exception.ValidationServiceException;
import org.onap.aai.validation.modeldriven.ModelCacheManager;
import org.onap.aai.validation.modeldriven.ModelId;
import org.onap.aai.validation.modeldriven.configuration.mapping.ModelInstanceMapper;
-import org.onap.aai.validation.modeldriven.configuration.mapping.ModelInstanceMappingReader;
import org.onap.aai.validation.modeldriven.configuration.mapping.ModelInstanceMapper.MappingType;
+import org.onap.aai.validation.modeldriven.configuration.mapping.ModelInstanceMappingReader;
import org.onap.aai.validation.reader.EntityReader;
import org.onap.aai.validation.reader.EventReader;
import org.onap.aai.validation.reader.InstanceEntityReader;
import org.onap.aai.validation.reader.data.Entity;
import org.onap.aai.validation.reader.data.EntityId;
import org.onap.aai.validation.result.ValidationResult;
+import org.onap.aai.validation.result.ValidationResultBuilder;
import org.onap.aai.validation.result.Violation;
import org.onap.aai.validation.result.Violation.Builder;
import org.onap.aai.validation.result.Violation.ViolationType;
@@ -148,7 +149,7 @@ public class ModelDrivenValidator implements Validator {
}
}
- ValidationResult validationResult = new ValidationResult(instanceEntity);
+ ValidationResult validationResult = new ValidationResultBuilder(instanceEntity).build();
// This is a shortcut to passing the parent model name all the way down.
populateViolationModelNames(violations, instanceEntity);
diff --git a/src/main/java/org/onap/aai/validation/result/ValidationResult.java b/src/main/java/org/onap/aai/validation/result/ValidationResult.java
index b632a0f..9526c03 100644
--- a/src/main/java/org/onap/aai/validation/result/ValidationResult.java
+++ b/src/main/java/org/onap/aai/validation/result/ValidationResult.java
@@ -1,12 +1,12 @@
-/*
+/**
* ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
+ * 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
+ * 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,
@@ -18,227 +18,47 @@
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 ValidationResult {
-
- @Expose
- private String validationId;
- @Expose
- private String validationTimestamp;
+public interface ValidationResult {
- @Expose
- private JsonElement entityId;
+ List<Violation> getViolations();
- @Expose
- private String entityType;
+ JsonElement getEntityId();
- @Expose
- private String entityLink;
+ String getEntityLink();
- @Expose
- private String resourceVersion;
-
- @Expose
- private JsonElement entity;
+ String getEntityType();
-
- @Expose
- private List<Violation> violations = new ArrayList<>();
-
- /**
- * Create the validation payload initialised with an event identifier and a timestamp.
- *
- * @param entity
- * @throws ValidationServiceException
- */
- public ValidationResult(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();
- }
-
+ String getResourceVersion();
/**
- * Add a validation violation.
+ * Add a single validation violation.
*
* @param violation a single {@link Violation} to add to the validation result
*/
- public void addViolation(Violation violation) {
- this.violations.add(violation);
- }
+ void addViolation(Violation violation);
/**
* Add a list of validation violations.
*
* @param violations a List of {@link Violation} objects to add to the validation result
*/
- public void addViolations(List<Violation> violations) {
- this.violations.addAll(violations);
- }
-
- public String getValidationId() {
- return validationId;
- }
-
- public void setValidationId(String eventId) {
- this.validationId = eventId;
- }
-
- public String getValidationTimestamp() {
- return validationTimestamp;
- }
-
- public void setValidationTimestamp(String timestamp) {
- this.validationTimestamp = timestamp;
- }
-
- public JsonElement getEntityId() {
- return entityId;
- }
-
- public void setEntityId(JsonElement entityId) {
- this.entityId = entityId;
- }
-
- public String getEntityType() {
- return entityType;
- }
-
- public void setEntityType(String entityType) {
- this.entityType = entityType;
- }
-
- public String getEntityLink() {
- return entityLink;
- }
-
- public void setEntityLink(String uri) {
- this.entityLink = uri;
- }
-
- 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;
- }
-
- 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 ValidationResult)) {
- return false;
- } else if (obj == this) {
- return true;
- }
- ValidationResult rhs = (ValidationResult) 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);
- }
+ void addViolations(List<Violation> violations);
/**
* 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
*/
- public String toJson() {
- return toString();
- }
+ String toJson();
- /**
- * Create a new object from the JSON representation
- *
- * @param json representation of the Validation Result
- * @return a ValidationResult object
- */
- public static ValidationResult fromJson(String json) {
- ValidationResult validationResult = JsonUtil.toAnnotatedClassfromJson(json, ValidationResult.class);
- if (validationResult != null) {
- validationResult.initialiseValues();
- }
- return validationResult;
- }
+ String getValidationId();
+
+ String getValidationTimestamp();
+
+ void setEntityId(JsonElement entityId);
+
+ void setEntityType(String entityType);
- /**
- * 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();
- }
- }
- }
}
diff --git a/src/main/java/org/onap/aai/validation/result/ValidationResultBuilder.java b/src/main/java/org/onap/aai/validation/result/ValidationResultBuilder.java
new file mode 100644
index 0000000..743e08d
--- /dev/null
+++ b/src/main/java/org/onap/aai/validation/result/ValidationResultBuilder.java
@@ -0,0 +1,55 @@
+/**
+ * ============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 org.onap.aai.validation.exception.ValidationServiceException;
+import org.onap.aai.validation.reader.EventReader;
+import org.onap.aai.validation.reader.data.Entity;
+
+public class ValidationResultBuilder {
+
+ private final EventReader eventReader;
+ private final String event;
+ private Entity entity;
+
+ public ValidationResultBuilder(EventReader eventReader, String event) {
+ this.eventReader = eventReader;
+ this.event = event;
+ }
+
+ public ValidationResultBuilder(Entity entity) {
+ this.eventReader = null;
+ this.event = null;
+ this.entity = entity;
+ }
+
+ public static ValidationResult fromJson(String json) {
+ return ValidationResultImpl.fromJson(json);
+ }
+
+ public ValidationResult build() throws ValidationServiceException {
+ return new ValidationResultImpl(getEntity());
+ }
+
+ private Entity getEntity() throws ValidationServiceException {
+ if (entity == null) {
+ entity = eventReader.getEntity(event);
+ }
+ return entity;
+ }
+}
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();
+ }
+ }
+ }
+}
diff --git a/src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java b/src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java
index 49b251e..cee29f7 100644
--- a/src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java
+++ b/src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
+ * 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.
@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Stream;
+import org.apache.commons.lang.StringUtils;
import org.onap.aai.validation.Validator;
import org.onap.aai.validation.config.RuleIndexingConfig;
import org.onap.aai.validation.exception.ValidationServiceError;
@@ -44,6 +45,7 @@ import org.onap.aai.validation.reader.OxmReader;
import org.onap.aai.validation.reader.data.AttributeValues;
import org.onap.aai.validation.reader.data.Entity;
import org.onap.aai.validation.result.ValidationResult;
+import org.onap.aai.validation.result.ValidationResultBuilder;
import org.onap.aai.validation.result.Violation;
import org.onap.aai.validation.result.Violation.ViolationType;
import org.onap.aai.validation.ruledriven.configuration.EntitySection;
@@ -136,9 +138,9 @@ public class RuleDrivenValidator implements Validator {
*
* @param entityType
* @param eventType
- * @return the rules defined for this entityType
+ * @return the Optional rules defined for this entityType
*/
- public List<Rule> getRulesForEntity(String entityType, String eventType) {
+ public Optional<List<Rule>> getRulesForEntity(String entityType, String eventType) {
return ruleManagers.get(eventType.toLowerCase(Locale.getDefault())).getRulesForEntity(entityType);
}
@@ -152,11 +154,10 @@ public class RuleDrivenValidator implements Validator {
Entity entity = getEventReader().getEntity(event);
Optional<String> eventType = eventReader.getEventType(event);
- List<Rule> rules = getRulesToApply(entity, eventType).orElse(null);
- if (rules == null) {
- throw new ValidationServiceException(ValidationServiceError.RULES_NOT_DEFINED, eventType.orElse(null));
- }
- ValidationResult validationResult = new ValidationResult(entity);
+ List<Rule> rules = getRulesToApply(entity, eventType).orElseThrow(
+ () -> new ValidationServiceException(ValidationServiceError.RULES_NOT_DEFINED, eventType.orElse(null)));
+
+ ValidationResult validationResult = new ValidationResultBuilder(eventReader, event).build();
Violation.Builder builder = new Violation.Builder(entity);
for (Rule rule : rules) {
@@ -207,7 +208,7 @@ public class RuleDrivenValidator implements Validator {
&& ruleIndexingConfig.get().getIndexedEvents().contains(eventType.get())) {
rules = getRulesByIndex(entity, eventType.get(), ruleManager.get());
} else {
- rules = Optional.of(ruleManager.get().getRulesForEntity(entity.getType()));
+ rules = ruleManager.get().getRulesForEntity(entity.getType());
}
}
}
@@ -217,18 +218,21 @@ public class RuleDrivenValidator implements Validator {
private Optional<List<Rule>> getRulesByIndex(Entity entity, String eventType, RuleManager ruleManager) {
String rulesKey = generateKey(entity, eventType);
applicationLogger.debug(String.format("Retrieving indexed rules for key '%s'", rulesKey));
- Optional<List<Rule>> rules = Optional.of(ruleManager.getRulesForEntity(rulesKey));
- if (rules.get().isEmpty() && ruleIndexingConfig.isPresent()) {
- if (ruleIndexingConfig.get().getDefaultIndexKey() == null
- || ruleIndexingConfig.get().getDefaultIndexKey().isEmpty()) {
+
+ final Optional<List<Rule>> entityRules = ruleManager.getRulesForEntity(rulesKey);
+ final boolean rulesDefined = entityRules.filter(l -> !l.isEmpty()).isPresent();
+
+ if (!rulesDefined && ruleIndexingConfig.isPresent()) {
+ final String defaultIndexKey = ruleIndexingConfig.get().getDefaultIndexKey();
+ if (StringUtils.isEmpty(defaultIndexKey)) {
+ return ruleManager.getRulesForEntity(RuleManager.generateKey(new String[] { defaultIndexKey }));
+ } else {
applicationLogger.debug("Default index value not configured, unable to get rules");
applicationLogger.error(ApplicationMsgs.CANNOT_VALIDATE_ERROR, eventType);
- return rules;
}
- String defaultKey = RuleManager.generateKey(new String[] { ruleIndexingConfig.get().getDefaultIndexKey() });
- rules = Optional.of(ruleManager.getRulesForEntity(defaultKey));
}
- return rules;
+
+ return entityRules;
}
private String generateKey(Entity entity, String eventType) {
diff --git a/src/main/java/org/onap/aai/validation/ruledriven/RuleManager.java b/src/main/java/org/onap/aai/validation/ruledriven/RuleManager.java
index c21ce24..380c99a 100644
--- a/src/main/java/org/onap/aai/validation/ruledriven/RuleManager.java
+++ b/src/main/java/org/onap/aai/validation/ruledriven/RuleManager.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
+ * 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.
@@ -24,6 +24,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.SortedSet;
import java.util.TreeSet;
import org.onap.aai.validation.ruledriven.configuration.EntitySection;
@@ -45,7 +46,8 @@ public class RuleManager {
/**
* Create the rules for each type of entity based on the supplied configuration
*
- * @param entities configuration (all entities)
+ * @param entities
+ * configuration (all entities)
* @throws InstantiationException
* @throws IllegalAccessException
* @throws GroovyConfigurationException
@@ -69,11 +71,10 @@ public class RuleManager {
/**
* @param entityType
- * @return the rules configured for this entity type
+ * @return the Optional rules configured for this entity type
*/
- public List<Rule> getRulesForEntity(String entityType) {
- List<Rule> rules = rulesMap.get(entityType);
- return rules == null ? Collections.emptyList() : rules;
+ public Optional<List<Rule>> getRulesForEntity(String entityType) {
+ return Optional.ofNullable(rulesMap.get(entityType));
}
public static String generateKey(String[] indices) {