summaryrefslogtreecommitdiffstats
path: root/pmdictionaryvalidation/src/main/java/org
diff options
context:
space:
mode:
authorPawel <pawel.kasperkiewicz@nokia.com>2020-11-25 12:53:49 +0100
committerPawel <pawel.kasperkiewicz@nokia.com>2020-11-26 13:26:01 +0100
commit3fed3de85164c56081075dece8695d7f84ae48af (patch)
treed2877a7583e78a749024ecc4a35a664d68e713db /pmdictionaryvalidation/src/main/java/org
parent513f2ef448b14f3880981c1bc95ab395b29de4e9 (diff)
Add possibility to validation pm-dictionary from byte array
Issue-ID: VNFSDK-713 Signed-off-by: Pawel <pawel.kasperkiewicz@nokia.com> Change-Id: I2d2de2cfe066e1cbbdea3bc8fac771914779e117
Diffstat (limited to 'pmdictionaryvalidation/src/main/java/org')
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlContentValidator.java (renamed from pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlFileValidator.java)35
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlLoader.java43
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/schema/node/YamlSchemaBranchNode.java8
3 files changed, 58 insertions, 28 deletions
diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlFileValidator.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlContentValidator.java
index 2de4f48..5e1238b 100644
--- a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlFileValidator.java
+++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlContentValidator.java
@@ -21,6 +21,7 @@ import org.onap.validation.yaml.error.SchemaValidationError;
import org.onap.validation.yaml.error.YamlDocumentValidationError;
import org.onap.validation.yaml.exception.YamlProcessingException;
import org.onap.validation.yaml.model.YamlDocument;
+import org.onap.validation.yaml.model.YamlDocumentFactory;
import org.onap.validation.yaml.schema.YamlSchema;
import org.onap.validation.yaml.schema.YamlSchemaFactory;
@@ -28,23 +29,33 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-public class YamlFileValidator {
+public class YamlContentValidator {
private static final int FIRST_DOCUMENT_INDEX = 1;
+ private static final YamlLoader YAML_LOADER = new YamlLoader(new YamlDocumentFactory());
- public List<YamlDocumentValidationError> validateYamlFileWithSchema(String pathToFile)
- throws YamlProcessingException {
+ public List<YamlDocumentValidationError> validate(String pathToFile)
+ throws YamlProcessingException {
+ List<YamlDocument> documents = YAML_LOADER.loadMultiDocumentYamlFile(pathToFile);
+ return getYamlDocumentValidationErrors(documents);
+ }
- List<YamlDocument> documents = new YamlLoader().loadMultiDocumentYamlFile(pathToFile);
- if(!documents.isEmpty()) {
- return validateDocuments(documents);
- } else {
+ public List<YamlDocumentValidationError> validate(byte[] yamlWithSchema)
+ throws YamlProcessingException {
+ List<YamlDocument> documents = YAML_LOADER.loadMultiDocumentYaml(yamlWithSchema);
+ return getYamlDocumentValidationErrors(documents);
+ }
+
+ private List<YamlDocumentValidationError> getYamlDocumentValidationErrors(List<YamlDocument> documents) throws YamlProcessingException {
+ if (documents.isEmpty()) {
throw new YamlProcessingException("PM_Dictionary YAML file is empty");
+ } else {
+ return validateDocuments(documents);
}
}
private List<YamlDocumentValidationError> validateDocuments(List<YamlDocument> documents)
- throws YamlProcessingException {
+ throws YamlProcessingException {
List<YamlDocumentValidationError> yamlFileValidationErrors = new ArrayList<>();
YamlSchema schema = extractSchema(documents);
@@ -52,7 +63,7 @@ public class YamlFileValidator {
for (int index = FIRST_DOCUMENT_INDEX; index < documents.size(); index++) {
List<SchemaValidationError> validationErrors = validator.validate(documents.get(index));
- yamlFileValidationErrors.addAll(transformErrors(index,validationErrors));
+ yamlFileValidationErrors.addAll(transformErrors(index, validationErrors));
}
return yamlFileValidationErrors;
@@ -60,9 +71,9 @@ public class YamlFileValidator {
private List<YamlDocumentValidationError> transformErrors(int index, List<SchemaValidationError> validationErrors) {
return validationErrors
- .stream()
- .map(error->new YamlDocumentValidationError(index, error.getPath(), error.getMessage()))
- .collect(Collectors.toList());
+ .stream()
+ .map(error -> new YamlDocumentValidationError(index, error.getPath(), error.getMessage()))
+ .collect(Collectors.toList());
}
private YamlSchema extractSchema(List<YamlDocument> documents) throws YamlProcessingException {
diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlLoader.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlLoader.java
index 1a5eef9..c23da0a 100644
--- a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlLoader.java
+++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/YamlLoader.java
@@ -24,6 +24,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -33,29 +34,49 @@ import java.util.List;
class YamlLoader {
- private static final Logger LOGGER = LoggerFactory.getLogger(YamlLoader.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(YamlLoader.class);
+ private final YamlDocumentFactory documentFactory;
+
+ YamlLoader(YamlDocumentFactory documentFactory) {
+ this.documentFactory = documentFactory;
+ }
+
+ List<YamlDocument> loadMultiDocumentYaml(byte[] yamlWithSchema)
+ throws YamlDocumentFactory.YamlDocumentParsingException {
+ List<YamlDocument> documents = new ArrayList<>();
+ try (InputStream yamlStream = new ByteArrayInputStream(yamlWithSchema)) {
+ documents.addAll(loadMultiDocumentYaml(yamlStream));
+ } catch (IOException e) {
+ LOGGER.error("Failed to load multi document YAML", e);
+ }
+ return documents;
+ }
List<YamlDocument> loadMultiDocumentYamlFile(URL path)
- throws YamlDocumentFactory.YamlDocumentParsingException {
- List<YamlDocument> documentsFromFile = new ArrayList<>();
+ throws YamlDocumentFactory.YamlDocumentParsingException {
+ List<YamlDocument> documents = new ArrayList<>();
try (InputStream yamlStream = path.openStream()) {
- for (Object yamlDocument : new Yaml().loadAll(yamlStream)) {
- documentsFromFile.add(
- new YamlDocumentFactory().createYamlDocument(yamlDocument)
- );
- }
+ documents.addAll(loadMultiDocumentYaml(yamlStream));
} catch (IOException e) {
- LOGGER.error("Failed to load multi document YAML file",e);
+ LOGGER.error("Failed to load multi document YAML file", e);
}
- return documentsFromFile;
+ return documents;
}
List<YamlDocument> loadMultiDocumentYamlFile(String path)
- throws YamlProcessingException {
+ throws YamlProcessingException {
try {
return loadMultiDocumentYamlFile(new URL("file://" + path));
} catch (MalformedURLException e) {
throw new YamlProcessingException("Fail to read file under given path.", e);
}
}
+
+ private List<YamlDocument> loadMultiDocumentYaml(InputStream yamlStream) throws YamlDocumentFactory.YamlDocumentParsingException {
+ List<YamlDocument> documents = new ArrayList<>();
+ for (Object yamlDocument : new Yaml().loadAll(yamlStream)) {
+ documents.add(documentFactory.createYamlDocument(yamlDocument));
+ }
+ return documents;
+ }
}
diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/schema/node/YamlSchemaBranchNode.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/schema/node/YamlSchemaBranchNode.java
index 0f5b480..a3e9636 100644
--- a/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/schema/node/YamlSchemaBranchNode.java
+++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/yaml/schema/node/YamlSchemaBranchNode.java
@@ -24,18 +24,16 @@ import org.onap.validation.yaml.model.YamlDocumentFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
public class YamlSchemaBranchNode extends YamlSchemaNode {
private final YamlDocument nextNodesInLazyForm;
- private Optional<List<YamlSchemaNode>> nextNodes;
+ private List<YamlSchemaNode> nextNodes = Collections.emptyList();
YamlSchemaBranchNode(String name, String path, boolean required, String comment,
YamlDocument nextNodesInLazyForm) {
super(name, path, required, comment);
this.nextNodesInLazyForm = nextNodesInLazyForm;
- this.nextNodes = Optional.empty();
}
@Override
@@ -51,7 +49,7 @@ public class YamlSchemaBranchNode extends YamlSchemaNode {
@Override
public synchronized List<YamlSchemaNode> getNextNodes() throws YamlSchemaProcessingException {
try {
- return nextNodes.orElseGet(this::loadNextNodes);
+ return nextNodes.isEmpty() ? this.loadNextNodes() : nextNodes;
} catch (YamlSchemaLazyLoadingException lazyLoadingException) {
throw new YamlSchemaProcessingException(lazyLoadingException);
}
@@ -65,7 +63,7 @@ public class YamlSchemaBranchNode extends YamlSchemaNode {
.createYamlDocument(nextNodesInLazyForm.getYaml().get(key));
loadedNextNodes.add(new YamlSchemaNodeFactory().createNode(key, getPath() + getName() + "/", substructure));
}
- nextNodes = Optional.of(loadedNextNodes);
+ nextNodes = loadedNextNodes;
return loadedNextNodes;
} catch (YamlProcessingException e) {
throw new YamlSchemaLazyLoadingException("Lazy loading failed, due to yaml parsing exception.",e);