/* * Copyright 2019 Nokia *

* 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. * */ package org.onap.cvc.csar.parser.vnf; import org.apache.commons.lang3.tuple.Pair; import org.onap.cvc.csar.CSARArchive; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * Code extracted from CSARArchive class. */ public class DefinitionMetadataParser { private static final String[] ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSIONS = { CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION_SIMPLE_1_0, CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION_SIMPLE_1_1, CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION_SIMPLE_1_2 }; private Map yaml; private String definitionYamlFileName; private CSARArchive.Mode mode; public DefinitionMetadataParser(Map yaml, String definitionYamlFileName, CSARArchive.Mode mode) { this.yaml = yaml; this.definitionYamlFileName = definitionYamlFileName; this.mode = mode; } public Pair> parse(){ List errors = new ArrayList<>(); CSARArchive.Definition definition = new CSARArchive.Definition(); //yaml is empty or version string missing if (yaml == null || !yaml.containsKey(CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION)) { errors.add( new CSARArchive.CSARErrorEntryMissingToscaDefinitionVersion( this.definitionYamlFileName)); } else { convertYamlIntoDefinitionModel(yaml, definition, errors); } return Pair.of(definition,errors); } private void convertYamlIntoDefinitionModel(Map yaml, CSARArchive.Definition definition, List errors) { String version = (String) yaml.get(CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION); if (!Arrays.asList(ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSIONS).contains(version)) { errors.add(new CSARArchive.CSARErrorInvalidEntry(CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION, this.definitionYamlFileName, -1, "Should be " + CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION_SIMPLE_1_1)); } else { updateDefinitionModel(definition, version, errors); } } private void updateDefinitionModel(CSARArchive.Definition definition, String version, List errors) { definition.setToscaDefinitionVersion(version); if (mode.equals(CSARArchive.Mode.WITHOUT_TOSCA_META_DIR)) { //metadata section should be there if (!yaml.containsKey(CSARArchive.ENTRY_DEFINITION_METADATA)) { errors.add( new CSARArchive.CSARErrorInvalidEntryValueToscaDefinitionVersion( this.definitionYamlFileName)); } else { Map metadata = (Map) yaml.get(CSARArchive.ENTRY_DEFINITION_METADATA); final CSARArchive.Definition.Metadata metadataModel = definition.getMetadata(); populateMetadataModel(metadata, errors, metadataModel); validateMetadataModel(errors, metadataModel); } } } private void populateMetadataModel(Map metadata, List errors, CSARArchive.Definition.Metadata metadataModel) { for(Map.Entry entry: metadata.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); //continue till it reaches the metadata section if (key.equalsIgnoreCase(CSARArchive.ENTRY_DEFINITION_TEMPLATE_AUTHOR)) { metadataModel.setTemplateAuthor(value); } else if (key.equalsIgnoreCase(CSARArchive.ENTRY_DEFINITION_TEMPLATE_NAME)) { metadataModel.setTempalteName(value); } else if (key.equalsIgnoreCase(CSARArchive.ENTRY_DEFINITION_TEMPLATE_VERSION)) { metadataModel.setTemplateVersion(value); } else { errors.add( new CSARArchive.CSARErrorIgnored( key, this.definitionYamlFileName, -1, null)); } } } private void validateMetadataModel(List errors, CSARArchive.Definition.Metadata metadataModel) { if (metadataModel.getTemplateAuthor() == null) { errors.add( new CSARArchive.CSARErrorEntryMissingToscaDefinitionMetadataTemplateAuthor( this.definitionYamlFileName)); } if (metadataModel.getTemplateName() == null) { errors.add(new CSARArchive.CSARErrorEntryMissingToscaDefinitionMetadataTemplateName( this.definitionYamlFileName)); } if (metadataModel.getTemplateVersion() == null) { errors.add(new CSARArchive.CSARErrorEntryMissingToscaDefinitionMetadataTemplateVersion( this.definitionYamlFileName)); } } }