aboutsummaryrefslogtreecommitdiffstats
path: root/jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java
diff options
context:
space:
mode:
Diffstat (limited to 'jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java')
-rw-r--r--jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java176
1 files changed, 86 insertions, 90 deletions
diff --git a/jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java b/jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java
index ddb8ddb..e2ec62a 100644
--- a/jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java
+++ b/jtosca/src/main/java/org/onap/sdc/toscaparser/api/ToscaTemplate.java
@@ -36,12 +36,11 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
-
import org.onap.sdc.toscaparser.api.common.JToscaException;
import org.onap.sdc.toscaparser.api.common.JToscaValidationIssue;
import org.onap.sdc.toscaparser.api.common.ValidationIssueCollector;
-import org.onap.sdc.toscaparser.api.elements.EntityType;
import org.onap.sdc.toscaparser.api.elements.DataType;
+import org.onap.sdc.toscaparser.api.elements.EntityType;
import org.onap.sdc.toscaparser.api.elements.Metadata;
import org.onap.sdc.toscaparser.api.extensions.ExtTools;
import org.onap.sdc.toscaparser.api.parameters.Input;
@@ -56,8 +55,7 @@ import org.yaml.snakeyaml.Yaml;
public class ToscaTemplate extends Object {
public static final int MAX_LEVELS = 20;
- private static Logger log = LoggerFactory.getLogger(ToscaTemplate.class.getName());
-
+ private static final Logger log = LoggerFactory.getLogger(ToscaTemplate.class.getName());
// TOSCA template key names
private static final String DEFINITION_VERSION = "tosca_definitions_version";
private static final String DEFAULT_NAMESPACE = "tosca_default_namespace";
@@ -78,18 +76,16 @@ public class ToscaTemplate extends Object {
private static final String POLICY_TYPES = "policy_types";
private static final String GROUP_TYPES = "group_types";
private static final String REPOSITORIES = "repositories";
-
- private static String SECTIONS[] = {
- DEFINITION_VERSION, DEFAULT_NAMESPACE, TEMPLATE_NAME,
- TOPOLOGY_TEMPLATE, TEMPLATE_AUTHOR, TEMPLATE_VERSION,
- DESCRIPTION, IMPORTS, DSL_DEFINITIONS, NODE_TYPES,
- RELATIONSHIP_TYPES, RELATIONSHIP_TEMPLATES,
- CAPABILITY_TYPES, ARTIFACT_TYPES, DATA_TYPES,
- INTERFACE_TYPES, POLICY_TYPES, GROUP_TYPES, REPOSITORIES
- };
-
// Sections that are specific to individual template definitions
private static final String METADATA = "metadata";
+ private static String SECTIONS[] = {
+ DEFINITION_VERSION, DEFAULT_NAMESPACE, TEMPLATE_NAME,
+ TOPOLOGY_TEMPLATE, TEMPLATE_AUTHOR, TEMPLATE_VERSION,
+ DESCRIPTION, IMPORTS, DSL_DEFINITIONS, NODE_TYPES,
+ RELATIONSHIP_TYPES, RELATIONSHIP_TEMPLATES,
+ CAPABILITY_TYPES, ARTIFACT_TYPES, DATA_TYPES,
+ INTERFACE_TYPES, POLICY_TYPES, GROUP_TYPES, REPOSITORIES
+ };
private static ArrayList<String> SPECIAL_SECTIONS;
private ExtTools exttools = new ExtTools();
@@ -152,17 +148,18 @@ public class ToscaTemplate extends Object {
VALID_TEMPLATE_VERSIONS = new ArrayList<>();
VALID_TEMPLATE_VERSIONS.add("tosca_simple_yaml_1_0");
VALID_TEMPLATE_VERSIONS.add("tosca_simple_yaml_1_1");
+ VALID_TEMPLATE_VERSIONS.add("tosca_simple_yaml_1_2");
+ VALID_TEMPLATE_VERSIONS.add("tosca_simple_yaml_1_3");
VALID_TEMPLATE_VERSIONS.addAll(exttools.getVersions());
ADDITIONAL_SECTIONS = new LinkedHashMap<>();
SPECIAL_SECTIONS = new ArrayList<>();
SPECIAL_SECTIONS.add(METADATA);
ADDITIONAL_SECTIONS.put("tosca_simple_yaml_1_0", SPECIAL_SECTIONS);
ADDITIONAL_SECTIONS.put("tosca_simple_yaml_1_1", SPECIAL_SECTIONS);
+ ADDITIONAL_SECTIONS.put("tosca_simple_yaml_1_2", SPECIAL_SECTIONS);
+ ADDITIONAL_SECTIONS.put("tosca_simple_yaml_1_3", SPECIAL_SECTIONS);
ADDITIONAL_SECTIONS.putAll(exttools.getSections());
- //long startTime = System.nanoTime();
-
-
isFile = aFile;
inputPath = null;
path = null;
@@ -182,7 +179,7 @@ public class ToscaTemplate extends Object {
if (path != null && !path.isEmpty()) {
try (InputStream input = new FileInputStream(new File(path));) {
//System.out.println("Loading YAML file " + path);
- log.debug("ToscaTemplate Loading YAMEL file {}", path);
+ log.debug("ToscaTemplate Loading YAML file {}", path);
Yaml yaml = new Yaml();
Object data = yaml.load(input);
this.tpl = (LinkedHashMap<String, Object>) data;
@@ -190,13 +187,13 @@ public class ToscaTemplate extends Object {
log.error("ToscaTemplate - Exception loading yaml: {}", e.getMessage());
log.error("Exception", e);
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE275",
- "ToscaTemplate - Exception loading yaml: -> " + e.getMessage()));
+ "ToscaTemplate - Exception loading yaml: -> " + e.getMessage()));
return;
} catch (Exception e) {
log.error("ToscaTemplate - Error loading yaml, aborting -> ", e.getMessage());
log.error("Exception", e);
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE275",
- "ToscaTemplate - Error loading yaml, aborting -> " + e.getMessage()));
+ "ToscaTemplate - Error loading yaml, aborting -> " + e.getMessage()));
return;
}
@@ -215,7 +212,7 @@ public class ToscaTemplate extends Object {
tpl = yamlDictTpl;
} else {
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE244",
- "ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse"));
+ "ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse"));
log.debug("ToscaTemplate ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse");
}
@@ -264,12 +261,12 @@ public class ToscaTemplate extends Object {
private TopologyTemplate _topologyTemplate() {
return new TopologyTemplate(
- _tplTopologyTemplate(),
- _getAllCustomDefs(imports),
- relationshipTypes,
- parsedParams,
- null,
- resolveGetInput);
+ _tplTopologyTemplate(),
+ _getAllCustomDefs(imports),
+ relationshipTypes,
+ parsedParams,
+ null,
+ resolveGetInput);
}
private ArrayList<Input> _inputs() {
@@ -314,7 +311,7 @@ public class ToscaTemplate extends Object {
@SuppressWarnings("unchecked")
private ArrayList<Repository> _tplRepositories() {
LinkedHashMap<String, Object> repositories =
- (LinkedHashMap<String, Object>) tpl.get(REPOSITORIES);
+ (LinkedHashMap<String, Object>) tpl.get(REPOSITORIES);
ArrayList<Repository> reposit = new ArrayList<>();
if (repositories != null) {
for (Map.Entry<String, Object> me : repositories.entrySet()) {
@@ -350,7 +347,7 @@ public class ToscaTemplate extends Object {
@SuppressWarnings("unchecked")
private HashSet<DataType> getTopologyDataTypes() {
LinkedHashMap<String, Object> value =
- (LinkedHashMap<String, Object>) tpl.get(DATA_TYPES);
+ (LinkedHashMap<String, Object>) tpl.get(DATA_TYPES);
HashSet<DataType> datatypes = new HashSet<>();
if (value != null) {
customDefsFinal.putAll(value);
@@ -360,7 +357,6 @@ public class ToscaTemplate extends Object {
}
}
-
return datatypes;
}
@@ -380,10 +376,9 @@ public class ToscaTemplate extends Object {
@SuppressWarnings("unchecked")
private LinkedHashMap<String, Object> _getAllCustomDefs(Object alImports) {
-
String types[] = {
- IMPORTS, NODE_TYPES, CAPABILITY_TYPES, RELATIONSHIP_TYPES,
- DATA_TYPES, INTERFACE_TYPES, POLICY_TYPES, GROUP_TYPES
+ IMPORTS, NODE_TYPES, CAPABILITY_TYPES, RELATIONSHIP_TYPES, ARTIFACT_TYPES,
+ DATA_TYPES, INTERFACE_TYPES, POLICY_TYPES, GROUP_TYPES
};
List<Map<String, Object>> imports = (List<Map<String, Object>>) alImports;
@@ -480,12 +475,13 @@ public class ToscaTemplate extends Object {
*/
private String getPath(String path, String importFileName) {
String tempFullPath = (Paths.get(path).toAbsolutePath().getParent()
- .toString() + File.separator + importFileName.replace("../", "")).replace('\\', '/');
+ .toString() + File.separator + importFileName.replace("../", "")).replace('\\', '/');
String tempPartialPath = (Paths.get(path).toAbsolutePath().getParent().toString()).replace('\\', '/');
- if (Files.exists(Paths.get(tempFullPath)))
+ if (Files.exists(Paths.get(tempFullPath))) {
return tempFullPath;
- else
+ } else {
return getPath(tempPartialPath, importFileName);
+ }
}
/**
@@ -507,10 +503,10 @@ public class ToscaTemplate extends Object {
Map.Entry<String, String> val = it.next();
if (val.getValue().contains("/")) {
importFileName = (Paths.get(rootPath).toAbsolutePath().getParent().toString() + File
- .separator + val.getValue().replace("../", "")).replace('\\', '/');
+ .separator + val.getValue().replace("../", "")).replace('\\', '/');
} else {
importFileName = (Paths.get(path).toAbsolutePath().getParent().toString() + File
- .separator + val.getValue().replace("../", "")).replace('\\', '/');
+ .separator + val.getValue().replace("../", "")).replace('\\', '/');
}
retMap.put("importFileName", importFileName);
retMap.put("importRelativeName", val.getValue());
@@ -530,8 +526,8 @@ public class ToscaTemplate extends Object {
* @return the list containing filtered imports
*/
private List<Map<String, Object>> filterImportsForRecursion(List<Map<String, Object>>
- customImports, Map<String,
- String> importNameDetails) {
+ customImports, Map<String,
+ String> importNameDetails) {
for (Map<String, Object> map1 : customImports) {
for (Map.Entry<String, Object> entry : map1.entrySet()) {
Map innerMostMap = (Map) entry.getValue();
@@ -627,27 +623,27 @@ public class ToscaTemplate extends Object {
this.processedImports = new HashSet<>();
for (Map.Entry<String, Object> me : nestedToscaTplsWithTopology.entrySet()) {
LinkedHashMap<String, Object> toscaTpl =
- (LinkedHashMap<String, Object>) me.getValue();
+ (LinkedHashMap<String, Object>) me.getValue();
for (NodeTemplate nt : tt.getNodeTemplates()) {
if (_isSubMappedNode(nt, toscaTpl)) {
parsedParams = _getParamsForNestedTemplate(nt);
ArrayList<Object> alim = (ArrayList<Object>) toscaTpl.get(IMPORTS);
LinkedHashMap<String, Object> topologyTpl =
- (LinkedHashMap<String, Object>) toscaTpl.get(TOPOLOGY_TEMPLATE);
+ (LinkedHashMap<String, Object>) toscaTpl.get(TOPOLOGY_TEMPLATE);
TopologyTemplate topologyWithSubMapping =
- new TopologyTemplate(topologyTpl,
- _getAllCustomDefs(alim),
- relationshipTypes,
- parsedParams,
- nt,
- resolveGetInput);
+ new TopologyTemplate(topologyTpl,
+ _getAllCustomDefs(alim),
+ relationshipTypes,
+ parsedParams,
+ nt,
+ resolveGetInput);
nt.setOriginComponentTemplate(topologyWithSubMapping);
if (topologyWithSubMapping.getSubstitutionMappings() != null) {
// Record nested topology templates in top level template
//nestedToscaTemplatesWithTopology.add(topologyWithSubMapping);
// Set substitution mapping object for mapped node
nt.setSubMappingToscaTemplate(
- topologyWithSubMapping.getSubstitutionMappings());
+ topologyWithSubMapping.getSubstitutionMappings());
_handleNestedToscaTemplatesWithTopology(topologyWithSubMapping);
}
}
@@ -689,7 +685,7 @@ public class ToscaTemplate extends Object {
String sVersion = _tplVersion();
if (sVersion == null) {
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE245", String.format(
- "MissingRequiredField: Template is missing required field \"%s\"", DEFINITION_VERSION)));
+ "MissingRequiredField: Template is missing required field \"%s\"", DEFINITION_VERSION)));
} else {
_validateVersion(sVersion);
this.version = sVersion;
@@ -706,14 +702,14 @@ public class ToscaTemplate extends Object {
// check ADDITIONAL_SECTIONS
if (!bFound) {
if (ADDITIONAL_SECTIONS.get(version) != null &&
- ADDITIONAL_SECTIONS.get(version).contains(sKey)) {
+ ADDITIONAL_SECTIONS.get(version).contains(sKey)) {
bFound = true;
}
}
if (!bFound) {
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE246", String.format(
- "UnknownFieldError: Template contains unknown field \"%s\"",
- sKey)));
+ "UnknownFieldError: Template contains unknown field \"%s\"",
+ sKey)));
}
}
}
@@ -728,11 +724,9 @@ public class ToscaTemplate extends Object {
}
if (!bFound) {
ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE247", String.format(
- "InvalidTemplateVersion: \"%s\" is invalid. Valid versions are %s",
- sVersion, VALID_TEMPLATE_VERSIONS.toString())));
- } else if ((!sVersion.equals("tosca_simple_yaml_1_0") && !sVersion.equals("tosca_simple_yaml_1_1"))) {
+ "InvalidTemplateVersion: \"%s\" is invalid. Valid versions are %s", sVersion, VALID_TEMPLATE_VERSIONS.toString())));
+ } else if (!sVersion.startsWith("tosca_simple_yaml_1_")) {
EntityType.updateDefinitions(sVersion);
-
}
}
@@ -756,7 +750,8 @@ public class ToscaTemplate extends Object {
return csar.getTempDir() + File.separator + csar.getMainTemplate();
}
} else {
- ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE248", "ValueError: " + _path + " is not a valid file"));
+ ThreadLocalsHolder.getCollector()
+ .appendValidationIssue(new JToscaValidationIssue("JE248", "ValueError: " + _path + " is not a valid file"));
return null;
}
return null;
@@ -768,7 +763,8 @@ public class ToscaTemplate extends Object {
if (validationIssuesCaught > 0) {
List<String> validationIssueStrings = ThreadLocalsHolder.getCollector().getValidationIssueReport();
log.trace("####################################################################################################");
- log.trace("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", validationIssuesCaught, (validationIssuesCaught > 1 ? "s" : ""));
+ log.trace("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", validationIssuesCaught,
+ (validationIssuesCaught > 1 ? "s" : ""));
for (String s : validationIssueStrings) {
log.trace("{}. CSAR name - {}", s, inputPath);
}
@@ -837,8 +833,8 @@ public class ToscaTemplate extends Object {
private boolean _isSubMappedNode(NodeTemplate nt, LinkedHashMap<String, Object> toscaTpl) {
// Return True if the nodetemple is substituted
if (nt != null && nt.getSubMappingToscaTemplate() == null &&
- getSubMappingNodeType(toscaTpl).equals(nt.getType()) &&
- nt.getInterfaces().size() < 1) {
+ getSubMappingNodeType(toscaTpl).equals(nt.getType()) &&
+ nt.getInterfaces().size() < 1) {
return true;
}
return false;
@@ -865,7 +861,7 @@ public class ToscaTemplate extends Object {
// Return substitution mappings node type
if (toscaTpl != null) {
return TopologyTemplate.getSubMappingNodeType(
- (LinkedHashMap<String, Object>) toscaTpl.get(TOPOLOGY_TEMPLATE));
+ (LinkedHashMap<String, Object>) toscaTpl.get(TOPOLOGY_TEMPLATE));
}
return null;
}
@@ -873,7 +869,7 @@ public class ToscaTemplate extends Object {
public boolean hasNestedTemplates() {
// Return True if the tosca template has nested templates
return nestedToscaTemplatesWithTopology != null &&
- nestedToscaTemplatesWithTopology.size() >= 1;
+ nestedToscaTemplatesWithTopology.size() >= 1;
}
@@ -897,33 +893,33 @@ public class ToscaTemplate extends Object {
@Override
public String toString() {
return "ToscaTemplate{" +
- "exttools=" + exttools +
- ", VALID_TEMPLATE_VERSIONS=" + VALID_TEMPLATE_VERSIONS +
- ", ADDITIONAL_SECTIONS=" + ADDITIONAL_SECTIONS +
- ", isFile=" + isFile +
- ", path='" + path + '\'' +
- ", inputPath='" + inputPath + '\'' +
- ", parsedParams=" + parsedParams +
- ", tpl=" + tpl +
- ", version='" + version + '\'' +
- ", imports=" + imports +
- ", relationshipTypes=" + relationshipTypes +
- ", metaData=" + metaData +
- ", description='" + description + '\'' +
- ", topologyTemplate=" + topologyTemplate +
- ", repositories=" + repositories +
- ", inputs=" + inputs +
- ", relationshipTemplates=" + relationshipTemplates +
- ", nodeTemplates=" + nodeTemplates +
- ", outputs=" + outputs +
- ", policies=" + policies +
- ", nestedToscaTplsWithTopology=" + nestedToscaTplsWithTopology +
- ", nestedToscaTemplatesWithTopology=" + nestedToscaTemplatesWithTopology +
- ", graph=" + graph +
- ", csarTempDir='" + csarTempDir + '\'' +
- ", nestingLoopCounter=" + nestingLoopCounter +
- ", dataTypes=" + dataTypes +
- '}';
+ "exttools=" + exttools +
+ ", VALID_TEMPLATE_VERSIONS=" + VALID_TEMPLATE_VERSIONS +
+ ", ADDITIONAL_SECTIONS=" + ADDITIONAL_SECTIONS +
+ ", isFile=" + isFile +
+ ", path='" + path + '\'' +
+ ", inputPath='" + inputPath + '\'' +
+ ", parsedParams=" + parsedParams +
+ ", tpl=" + tpl +
+ ", version='" + version + '\'' +
+ ", imports=" + imports +
+ ", relationshipTypes=" + relationshipTypes +
+ ", metaData=" + metaData +
+ ", description='" + description + '\'' +
+ ", topologyTemplate=" + topologyTemplate +
+ ", repositories=" + repositories +
+ ", inputs=" + inputs +
+ ", relationshipTemplates=" + relationshipTemplates +
+ ", nodeTemplates=" + nodeTemplates +
+ ", outputs=" + outputs +
+ ", policies=" + policies +
+ ", nestedToscaTplsWithTopology=" + nestedToscaTplsWithTopology +
+ ", nestedToscaTemplatesWithTopology=" + nestedToscaTemplatesWithTopology +
+ ", graph=" + graph +
+ ", csarTempDir='" + csarTempDir + '\'' +
+ ", nestingLoopCounter=" + nestingLoopCounter +
+ ", dataTypes=" + dataTypes +
+ '}';
}
public List<Input> getInputs(boolean annotationsRequired) {