/*- * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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.so.asdc.util; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.yaml.snakeyaml.Yaml; import org.onap.so.db.catalog.beans.HeatTemplateParam; public class YamlEditor { protected static final String REFER_PATTERN = "file:///"; protected Map yml; protected Yaml yaml = new Yaml(); public YamlEditor() { } public YamlEditor(byte[] body) { init(body); } public YamlEditor(Yaml yaml) { this.yaml = yaml; } @SuppressWarnings("unchecked") protected synchronized void init(byte[] body) { InputStream input = new ByteArrayInputStream(body); yml = (Map) yaml.load(input); } public synchronized List getYamlNestedFileResourceTypeList() { List typeList = new ArrayList<>(); @SuppressWarnings("unchecked") Map resourceMap = (Map) yml.get("resources"); Iterator> it = resourceMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); @SuppressWarnings("unchecked") Map resourceEntry = (Map) pair.getValue(); String type = resourceEntry.get("type"); if (type.contains(REFER_PATTERN)) { typeList.add(type); } it.remove(); // avoids a ConcurrentModificationException } return typeList; } public synchronized List getYamlResourceTypeList() { List typeList = new ArrayList<>(); @SuppressWarnings("unchecked") Map resourceMap = (Map) yml.get("resources"); for (Entry pair : resourceMap.entrySet()) { @SuppressWarnings("unchecked") Map resourceEntry = (Map) pair.getValue(); typeList.add(resourceEntry.get("type")); } return typeList; } // Generate the parameter list based on the Heat Template // Based on the email from Ella Kvetny: // Within Heat Template, under parameters catalog, it might indicate the default value of the parameter // If default value exist, the parameter is not mandatory, otherwise its value should be set public synchronized Set getParameterList(String artifactUUID) { Set paramSet = new HashSet<>(); @SuppressWarnings("unchecked") Map resourceMap = (Map) yml.get("parameters"); for (Entry stringObjectEntry : resourceMap.entrySet()) { HeatTemplateParam param = new HeatTemplateParam(); Entry pair = stringObjectEntry; @SuppressWarnings("unchecked") Map resourceEntry = (Map) pair.getValue(); param.setParamName(pair.getKey()); // System.out.println(pair.getKey()+":"+type); if (resourceEntry.containsKey("default")) { param.setRequired(false); } else { param.setRequired(true); } // Now set the type String value = resourceEntry.get("type"); param.setParamType(value); param.setHeatTemplateArtifactUuid(artifactUUID); paramSet.add(param); } return paramSet; } public synchronized void addParameterList(Set heatSet) { @SuppressWarnings("unchecked") Map resourceMap = (Map) yml.get("parameters"); if (resourceMap == null) { resourceMap = new LinkedHashMap<>(); this.yml.put("parameters", resourceMap); } for (HeatTemplateParam heatParam : heatSet) { Map paramInfo = new HashMap<>(); paramInfo.put("type", heatParam.getParamType()); resourceMap.put(heatParam.getParamName(), paramInfo); } // this.yml.put("parameters", resourceMap); } public boolean isParentTemplate(String templateBody) { return templateBody.contains(REFER_PATTERN); } public boolean verifyTemplate() { // Verify whether the heat template is for Vnf Resource // We don't support other template installation yet return true; } public String encode(Map content) { return yaml.dump(content); } public synchronized String encode() { return this.yaml.dump(this.yml); } /** * This method return the YAml file as a string. * */ @Override public String toString() { return encode(); } }