From 4cea23f8111aa3d3532ec8d74351eccbf0ac44a5 Mon Sep 17 00:00:00 2001 From: Yuli Shlosberg Date: Tue, 6 Mar 2018 17:57:45 +0200 Subject: update SDC-TOSCA package names Change-Id: I496713bcf2551f3b5c7f629f89ffcb8b1954b489 Issue-ID: SDC-951 Signed-off-by: Yuli Shlosberg --- .../sdc/tosca/parser/api/ConformanceLevel.java | 25 + .../onap/sdc/tosca/parser/api/ISdcCsarHelper.java | 454 ++++++++++ .../org/onap/sdc/tosca/parser/api/Version.java | 48 ++ .../sdc/tosca/parser/config/Configuration.java | 16 + .../tosca/parser/config/ConfigurationManager.java | 124 +++ .../tosca/parser/config/ErrorConfiguration.java | 46 ++ .../onap/sdc/tosca/parser/config/ErrorInfo.java | 59 ++ .../parser/config/JToscaValidationIssueInfo.java | 31 + .../config/JtoscaValidationIssueConfiguration.java | 52 ++ .../tosca/parser/config/SdcToscaParserErrors.java | 31 + .../parser/exceptions/SdcToscaParserException.java | 20 + .../org/onap/sdc/tosca/parser/impl/FilterType.java | 26 + .../parser/impl/JToscaValidationIssueType.java | 6 + .../sdc/tosca/parser/impl/SdcCsarHelperImpl.java | 908 ++++++++++++++++++++ .../sdc/tosca/parser/impl/SdcPropertyNames.java | 109 +++ .../tosca/parser/impl/SdcToscaParserFactory.java | 203 +++++ .../org/onap/sdc/tosca/parser/impl/SdcTypes.java | 46 ++ .../sdc/tosca/parser/utils/GeneralUtility.java | 53 ++ .../sdc/tosca/parser/utils/SdcToscaUtility.java | 19 + .../tosca/parser/utils/YamlToObjectConverter.java | 126 +++ .../sdc/tosca/parser/api/ConformanceLevel.java | 25 - .../sdc/tosca/parser/api/ISdcCsarHelper.java | 454 ---------- .../openecomp/sdc/tosca/parser/api/Version.java | 48 -- .../sdc/tosca/parser/config/Configuration.java | 16 - .../tosca/parser/config/ConfigurationManager.java | 124 --- .../tosca/parser/config/ErrorConfiguration.java | 46 -- .../sdc/tosca/parser/config/ErrorInfo.java | 59 -- .../parser/config/JToscaValidationIssueInfo.java | 31 - .../config/JtoscaValidationIssueConfiguration.java | 52 -- .../tosca/parser/config/SdcToscaParserErrors.java | 31 - .../parser/exceptions/SdcToscaParserException.java | 20 - .../sdc/tosca/parser/impl/FilterType.java | 26 - .../parser/impl/JToscaValidationIssueType.java | 6 - .../sdc/tosca/parser/impl/SdcCsarHelperImpl.java | 912 --------------------- .../sdc/tosca/parser/impl/SdcPropertyNames.java | 109 --- .../tosca/parser/impl/SdcToscaParserFactory.java | 199 ----- .../openecomp/sdc/tosca/parser/impl/SdcTypes.java | 46 -- .../sdc/tosca/parser/utils/GeneralUtility.java | 53 -- .../sdc/tosca/parser/utils/SdcToscaUtility.java | 19 - .../tosca/parser/utils/YamlToObjectConverter.java | 126 --- 40 files changed, 2402 insertions(+), 2402 deletions(-) create mode 100644 src/main/java/org/onap/sdc/tosca/parser/api/ConformanceLevel.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/api/Version.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/Configuration.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/ConfigurationManager.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/ErrorConfiguration.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/ErrorInfo.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/JToscaValidationIssueInfo.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/config/SdcToscaParserErrors.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/exceptions/SdcToscaParserException.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/FilterType.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/JToscaValidationIssueType.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/SdcToscaParserFactory.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/impl/SdcTypes.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/utils/GeneralUtility.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/utils/SdcToscaUtility.java create mode 100644 src/main/java/org/onap/sdc/tosca/parser/utils/YamlToObjectConverter.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/api/ConformanceLevel.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/api/Version.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/Configuration.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/ConfigurationManager.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorConfiguration.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorInfo.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/JToscaValidationIssueInfo.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/config/SdcToscaParserErrors.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/exceptions/SdcToscaParserException.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/FilterType.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/JToscaValidationIssueType.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcPropertyNames.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcToscaParserFactory.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcTypes.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/utils/GeneralUtility.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/utils/SdcToscaUtility.java delete mode 100644 src/main/java/org/openecomp/sdc/tosca/parser/utils/YamlToObjectConverter.java (limited to 'src/main') diff --git a/src/main/java/org/onap/sdc/tosca/parser/api/ConformanceLevel.java b/src/main/java/org/onap/sdc/tosca/parser/api/ConformanceLevel.java new file mode 100644 index 0000000..4b4d646 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/api/ConformanceLevel.java @@ -0,0 +1,25 @@ +package org.onap.sdc.tosca.parser.api; + +public class ConformanceLevel { + + private String minVersion; + private String maxVersion; + + public String getMaxVersion() { + return maxVersion; + } + + public void setMaxVersion(String maxVersion) { + this.maxVersion = maxVersion; + } + + public String getMinVersion() { + return minVersion; + } + + public void setMinVersion(String minVersion) { + this.minVersion = minVersion; + } + + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java b/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java new file mode 100644 index 0000000..76798d5 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java @@ -0,0 +1,454 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.tosca.parser.api; + + +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.tuple.Pair; +import org.onap.sdc.tosca.parser.impl.SdcTypes; +import org.onap.sdc.tosca.parser.impl.FilterType; +import org.onap.sdc.toscaparser.api.*; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.onap.sdc.toscaparser.api.parameters.Input; + + +public interface ISdcCsarHelper { + + /** + * Get all node templates by node_type for this CSAR service. + * + * @param nodeType - the TOSCA type of the node. + * @return service node templates of this type. + */ + public List getServiceNodeTemplatesByType(String nodeType); + + /** + * Get all node templates for this CSAR service. + * + * @return service node templates. + */ + public List getServiceNodeTemplates(); + + /** + * Get groups of a VF with type "org.onap.groups.VfModule". + * + * @param vfCustomizationUuid - customizationUuid of VF instance. + * @return list of vfModule groups. + */ + public List getVfModulesByVf(String vfCustomizationUuid); + + + /** + * Get any property leaf value for node template by full path separated by #.
+ * For example, for node template with this property:

+ * network_assignments:
+   ecomp_generated_network_assignment: true
+   is_shared_network: false
+   is_external_network: false
+   ipv4_subnet_default_assignments:
+     use_ipv4: true
+     ip_network_address_plan: 1.2.3.4
+     dhcp_enabled: true
+     ip_version: 4
+     cidr_mask: 24
+     min_subnets_count: 1
+   ipv6_subnet_default_assignments:
+     use_ipv6: false

+ + * calling
+ * getNodeTemplatePropertyLeafValue(nodeTemplate, "network_assignments#ipv6_subnet_default_assignments#use_ipv6")
+ * will return "false". + * @param nodeTemplate - nodeTemplate where the property should be looked up. + * @param pathToPropertyLeafValue - the full path of the required property. + * @return the leaf value as String, or null if there's no such property, or it's not a leaf. + */ + public String getNodeTemplatePropertyLeafValue(NodeTemplate nodeTemplate, String pathToPropertyLeafValue); + + /** + * Get any property leaf value for node template by full path separated by #.
+ * For example, for node template with this property:

+ * network_assignments:
+   ecomp_generated_network_assignment: true
+   is_shared_network: false
+   is_external_network: false
+   ipv4_subnet_default_assignments:
+     use_ipv4: true
+     ip_network_address_plan: 1.2.3.4
+     dhcp_enabled: true
+     ip_version: 4
+     cidr_mask: 24
+     min_subnets_count: 1
+   ipv6_subnet_default_assignments:
+     use_ipv6: false

+ + * calling
+ * getNodeTemplatePropertyLeafValue(nodeTemplate, "network_assignments#ipv6_subnet_default_assignments#use_ipv6")
+ * will return "false". + * @param nodeTemplate - nodeTemplate where the property should be looked up. + * @param pathToPropertyLeafValue - the full path of the required property. + * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type. + */ + public Object getNodeTemplatePropertyAsObject(NodeTemplate nodeTemplate, String pathToPropertyLeafValue); + + /** + * Get any property leaf value for a group definition by full path separated by #. + * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a group. + * @param group - group where the property should be looked up. + * @param propertyName - the name of the required property. + * @return the leaf value as String, or null if there's no such property, or it's not a leaf. + */ + public String getGroupPropertyLeafValue(Group group, String propertyName); + + /** + * Get any property value for a group definition by full path separated by #. + * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a group. + * @param group - group where the property should be looked up. + * @param propertyName - the name of the required property. + * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type. + */ + public Object getGroupPropertyAsObject(Group group, String propertyName); + + /** + * Get all VL node templates of the CSAR service. + * @return - all VL node templates. + */ + public List getServiceVlList(); + + /** + * Get all VF node templates of the CSAR service. + * @return - all VF node templates. + */ + public List getServiceVfList(); + + + /** + * + * Get a property from a metadata object.
+ * This is just sugaring method, same as calling metadata.getMetadataPropertyValue(metadataPropertyName).
+ * + * For metadata object representing the below:

+ * + * metadata:
+   invariantUUID: 4598a404-00e1-42a6-8767-0bda343e2066
+   UUID: e17940d6-42f8-4989-bad0-31de5addc619
+   customizationUUID: 83d086b2-a861-4d3b-aa84-3bfbb9b2ec20
+   version: '0.1'
+   name: vIPR_ATM
+   description: vIPR_ATM
+   type: VF
+   category: category1
+   subcategory: subCategory1

+ + calling
+ getMetadataPropertyValue(metadata,"invariantUUID")
+ will return "4598a404-00e1-42a6-8767-0bda343e2066". + + * @param metadata - metadata object. + * @param metadataPropertyName - the name of the metadata property. + * @return metadata property value + */ + public String getMetadataPropertyValue(Metadata metadata, String metadataPropertyName); + + + /** + * Get input leaf value for the CSAR service, by full path separated by #.
+ * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for an input full path. + * The expected format is "input_name#default[optionally #rest_of_path]" + * @param inputLeafValuePath by full path separated by #. + * @return input leaf value for the service. + */ + public String getServiceInputLeafValueOfDefault(String inputLeafValuePath); + + /** + * Get input leaf value for the CSAR service, by full path separated by #.
+ * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for an input full path. + * The expected format is "input_name#default[optionally #rest_of_path]" + * @param inputLeafValuePath by full path separated by #. + * @return input value for the service as Object. It's up to the caller to cast it to a proper type. + */ + public Object getServiceInputLeafValueOfDefaultAsObject(String inputLeafValuePath); + + /** + * Get the type name of the CSAR service's substitution mappings element.
+ * + * For the below:

+ * + * substitution_mappings:
+   type: org.onap.services.ViprATM
+ + calling
+ getServiceSubstitutionMappingsTypeName()
+ will return "org.onap.services.ViprATM" + * @return - the type name of the CSAR service's substitution mappings element + */ + public String getServiceSubstitutionMappingsTypeName(); + + /** + * Get service Metadata object.
+ * This object represents the "metadata" section of a CSAR service. + * @return - the service Metadata object. + */ + public Metadata getServiceMetadata(); + + /** + * Get the CSAR service metadata as map. + * @return - the service metadata object as Map. + * @deprecated This function is deprecated since its not tosca compliant.
+ * Tosca defines the Metadata section as map of string (not map of object).
+ * This function is targeted to be removed as part of 1802.
+ * Please use {@link #getServiceMetadataAllProperties() getServiceMetadataAllProperties()}. + */ + @Deprecated + public Map getServiceMetadataProperties(); + + /** + * Get the CSAR service metadata as map + * @return - the service metadata object as Map + */ + public Map getServiceMetadataAllProperties(); + + /** + * Get all VFC node templates from a specified VF. + * @param vfCustomizationId - customizationUuid of the VF node template. + * @return all VFC node templates from a specified VF + */ + public List getVfcListByVf(String vfCustomizationId); + + /** + * Get all CP node templates from a specified VF. + * @param vfCustomizationId - customizationUuid of the VF node template. + * @return all CP node templates from a specified VF + */ + public List getCpListByVf(String vfCustomizationId); + + /** + * Get all members of this group definition.
+ * + * For example, for this group definition:

+ * + * ViprAtm..vIPR-ATM-Base..module-0:
+   type: org.onap.groups.VfModule
+   .................
+   members: [vIPR_ATM_Ha_Two, vIPR_ATM_Ha_One, vIPR_ATM_OAM_SG, vIPR_ATM_HA_TWO_SG, vIPR_ATM_HA_ONE_SG]

+ + calling
+ getMembersOfVfModule(NoteTemplate vfNodeTemplate, Group group)
+ will return List of the following Node templates in the vfNodeTemplate: "vIPR_ATM_Ha_Two, vIPR_ATM_Ha_One, vIPR_ATM_OAM_SG, vIPR_ATM_HA_TWO_SG, vIPR_ATM_HA_ONE_SG"
+ * @param vf - VF to return the node templates from. + * @param vfModule - group to return the members from. + * @return node templates from vf with the names as in members section. + * + */ + public List getMembersOfVfModule(NodeTemplate vf, Group vfModule); + + + /** + * Get list of node template pairs, where for each pair,
+ * the left node template in pair has requirement with name reqName,
+ * which should be satisfied with respective capability by the right node template in pair.
+ * + * For example, if we have the below two node templates in the vIPR VF:

+ * + * oam_extCP:
+   type: org.onap.resources.cp.extCP
+   requirements:
+     - virtualBinding: vipr_atm_firewall

+ * + * vipr_atm_firewall:
+   type: org.onap.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm
+ ........

+ * + + * calling
+ * getNodeTemplatePairsByReqName(getCpListByVf(viprCustomUuid), getVfcListByVf(viprCustomUuid), "virtualBinding")
+ * will return a list with one Pair - where left element of pair will be "oam_extCP" node template,
+ * and right element will be "vipr_atm_firewall" node template.
+ * + * @param listOfReqNodeTemplates - list of node templates in which the "reqName" requirement should be looked. + * @param listOfCapNodeTemplates - list of node templates in which the capability matching the "reqName" requirement should be looked. + * @param reqName - the name of a requirement definition to match by. + * @return pairs of node templates according to described above. + */ + public List> getNodeTemplatePairsByReqName(List listOfReqNodeTemplates, List listOfCapNodeTemplates, String reqName); + + /** + * Get all allotted node templates from this service. + * @return all allotted node templates from this service. + */ + public List getAllottedResources(); + + /** + * Get node_type of a node template.
+ * + * For this node template:
+ * + * vipr_atm_firewall:
+   type: org.onap.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm
+ ........

+ * + * the function will return "org.onap.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm" + * + * @param nodeTemplate - node template object + * @return - node type string. + */ + public String getTypeOfNodeTemplate(NodeTemplate nodeTemplate); + + /** + * Get the CSAR service inputs list. + * @return - the service inputs list. + */ + public List getServiceInputs(); + + + /** + * Get the conformance level of this CSAR.
+ * The conformance level value of the CSAR is located in csar.meta file at the top level of the CSAR file.
+ * For 1707 CSARs, the conformance level is 3.0. + * @return the conformance level of the CSAR. + */ + public String getConformanceLevel(); + + + /** + * Get the map of CP-related props from a VFC node template.
+ * Let's say there are 5 CPs related to this VFC. Then the output will look like this:

+ * {port_fe1_sigtran={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_1", network_role_tag="SIGNET_vrf_B1_direct"},
+ * port_fe_cluster={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
+ * port_fe_slan={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
+ * port_fe_interce={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
+ * port_fe_oam={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_2", network_role_tag="Mobility_OAM_protected"}}

+ * @param vfc - VFC node template to look for CP-related props. + * @return map CP node template name to a map of full path to a property on this CP - value of this property on this CP. + * @deprecated This function is deprecated since its flattened form doesn't provide solution for cp properties of type List. + * Will be removed in 1802. + */ + @Deprecated + public Map> getCpPropertiesFromVfc(NodeTemplate vfc); + + /** + * Get the map of CP-related props from a VFC node template.
+ * Let's say there are 2 CPs (ports) related to this VFC. Then the output will look like this:

+ * {port_fe_sigtran={ip_requirements={ip_count_required: {count: 1}, dhcp_enabled: true, ip_version: 4}, subnetpoolid: "subnet_1", network_role_tag: "SIGNET_vrf_B1_direct"}
+ * port_fe_cluster={ip_requirements={ip_count_required: {count: 2}, dhcp_enabled: true, ip_version: 4}}
+ * @param vfc - VFC node template to look for CP-related props. + * @return map CP node template name to a map of property name - property value as object. + */ + public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc); + + /** + * Get customization UUID of a node template + * @param nt - node template + * @return customization UUID of a node template. + */ + public String getNodeTemplateCustomizationUuid(NodeTemplate nt); + + /** + * Filter Node Template property values by equals/contains operator and a pattern + * @param nodeTemplate Node Template to filter its properties + * @param filterType filter type - equals or contains + * @param pattern value to filter with it + * @return Map full path to a property mapped to property value filtered by type and pattern + */ + public Map filterNodeTemplatePropertiesByValue(NodeTemplate nodeTemplate, FilterType filterType, String pattern); + + /** + * Get all node templates by sdcType for parent Node Template. + * + * @param parentNodeTemplate - parent node template + * @param sdcType - the SDC type of the node. + * @return node templates of this SDC type. + */ + public List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType); + + /** + * Get all node templates by SDC type enum for this CSAR service. + * + * @param sdcType - the SDC type of the node (for example, CP, VF...). + * @return service node templates of this SDC type. + */ + public List getServiceNodeTemplateBySdcType(SdcTypes sdcType); + + /** + * Get all node templates for this CSAR service. + * @param vfCustomizationUuid - the Customization UUID of the node. + * @return VNF Configuration Node Template. + */ + public NodeTemplate getVnfConfig(String vfCustomizationUuid); + + /** + * Check if Node Template has Topology Template + * @param nodeTemplate - Node Template to check + * @return true if node template has topology template, false if not. + */ + public boolean hasTopology(NodeTemplate nodeTemplate); + + /** + * Get children node templates for node template. + * @param nodeTemplate - Node Template to get its children + * @return return list of children node templates for node template. + */ + public List getNodeTemplateChildren(NodeTemplate nodeTemplate); + + /** + * Get node template on service level by node template name. + * @param nodeName - the name of the node template. + * @return service-level node template with this name, or null if no such node template was found. + */ + public NodeTemplate getServiceNodeTemplateByNodeName(String nodeName); + + /** + * Get node template Metadata object.
+ * This object represents the "metadata" section of node template. + * @param nt - Node template to get its Metadata object. + * @return Metadata for this node template, or null if not found. + */ + public Metadata getNodeTemplateMetadata(NodeTemplate nt); + + /** + * Get CapabilityAssignments object for this node template.
+ * This should be an entry point function for working with capability assignments of node template.
+ * This object allows filtering capability assignments objects.
+ * @param nt - Node Template to get its capability assignments. + * @return CapabilitiesAssignments that contains list of capability assignments for the node template.
+ * If none found, an empty list will be returned. + */ + public CapabilityAssignments getCapabilitiesOf(NodeTemplate nt); + + /** + * Get RequirementAssignments object for this node template.
+ * This should be an entry point function for working with requirement assignments of node template.
+ * This object allows filtering requirement assignments objects.
+ * @param nt - Node Template to get its requirement assignments. + * @return RequirementAssignments that contains list of requirement assignments for the node template. + * If none found, an empty list will be returned. + */ + public RequirementAssignments getRequirementsOf(NodeTemplate nt); + + /** + * Get any property leaf value for capability by full path separated by #. + * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a capability assignment. + * @param capability - capability assignment where the property should be looked up. + * @param pathToPropertyLeafValue - the full path of the required property. + * @return the leaf value as String, or null if there's no such property, or it's not a leaf. + */ + public String getCapabilityPropertyLeafValue(CapabilityAssignment capability, String pathToPropertyLeafValue); + +} \ No newline at end of file diff --git a/src/main/java/org/onap/sdc/tosca/parser/api/Version.java b/src/main/java/org/onap/sdc/tosca/parser/api/Version.java new file mode 100644 index 0000000..c485b18 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/api/Version.java @@ -0,0 +1,48 @@ +package org.onap.sdc.tosca.parser.api; + +public class Version implements Comparable { + + private String version; + + public final String get() { + return this.version; + } + + public Version(String version) { + if(version == null) + throw new IllegalArgumentException("Version can not be null"); + if(!version.matches("[0-9]+(\\.[0-9]+)*")) + throw new IllegalArgumentException("Invalid version format"); + this.version = version; + } + + @Override public int compareTo(Version that) { + if(that == null) + return 1; + String[] thisParts = this.get().split("\\."); + String[] thatParts = that.get().split("\\."); + int length = Math.max(thisParts.length, thatParts.length); + for(int i = 0; i < length; i++) { + int thisPart = i < thisParts.length ? + Integer.parseInt(thisParts[i]) : 0; + int thatPart = i < thatParts.length ? + Integer.parseInt(thatParts[i]) : 0; + if(thisPart < thatPart) + return -1; + if(thisPart > thatPart) + return 1; + } + return 0; + } + + @Override public boolean equals(Object that) { + if(this == that) + return true; + if(that == null) + return false; + if(this.getClass() != that.getClass()) + return false; + return this.compareTo((Version) that) == 0; + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/Configuration.java b/src/main/java/org/onap/sdc/tosca/parser/config/Configuration.java new file mode 100644 index 0000000..7135b6b --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/Configuration.java @@ -0,0 +1,16 @@ +package org.onap.sdc.tosca.parser.config; + +import org.onap.sdc.tosca.parser.api.ConformanceLevel; + +public class Configuration { + + private ConformanceLevel conformanceLevel; + + public ConformanceLevel getConformanceLevel() { + return conformanceLevel; + } + + public void setConformanceLevel(ConformanceLevel conformanceLevel) { + this.conformanceLevel = conformanceLevel; + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/ConfigurationManager.java b/src/main/java/org/onap/sdc/tosca/parser/config/ConfigurationManager.java new file mode 100644 index 0000000..e0b9dc8 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/ConfigurationManager.java @@ -0,0 +1,124 @@ +package org.onap.sdc.tosca.parser.config; + +import com.google.common.base.Charsets; +import com.google.common.io.Resources; +import org.onap.sdc.tosca.parser.utils.YamlToObjectConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + + +public class ConfigurationManager { + + private static Logger log = LoggerFactory.getLogger(ConfigurationManager.class.getName()); + + private static final String CONFIGURATION_DIR = "config/"; + private static volatile ConfigurationManager instance; + + + Map configurations = new HashMap(); + + private ConfigurationManager() { + initialConfigObjectsFromFiles(); + } + + private void initialConfigObjectsFromFiles() { + loadConfigurationClass(ErrorConfiguration.class); + loadConfigurationClass(Configuration.class); + loadConfigurationClass(JtoscaValidationIssueConfiguration.class); + } + + private void loadConfigurationClass(Class clazz) { + T object = getObjectFromYaml(clazz); + configurations.put(clazz.getSimpleName(), object); + } + + private void loadConfigurationClass(Class clazz, String fileName) { + T object = getObjectFromYaml(clazz,fileName); + configurations.put(clazz.getSimpleName(), object); + } + + public static T getObjectFromYaml(Class className) { + return getObjectFromYaml(className, null); + } + + public static T getObjectFromYaml(Class className, String fileName) { + + + String configFileName = fileName != null ? fileName : calculateFileName(className); ; + + URL url = Resources.getResource(CONFIGURATION_DIR + configFileName); + String configFileContents = null; + try { + configFileContents = Resources.toString(url, Charsets.UTF_8); + } catch (IOException e) { + log.error("ConfigurationManager - Failed to load configuration file {}", configFileName, e); + } + YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter(); + T object = yamlToObjectConverter.convertFromString(configFileContents, className); + + return object; + } + + + public static ConfigurationManager getInstance() { + if (instance == null) { + synchronized (ConfigurationManager.class) { + if (instance == null) { + instance = new ConfigurationManager(); + } + } + } + return instance; + } + + private static String calculateFileName(Class className) { + + String[] words = className.getSimpleName().split("(?=\\p{Upper})"); + + StringBuilder builder = new StringBuilder(); + + // There cannot be a null value returned from "split" - words != null is + // redundant + // if (words != null) { + boolean isFirst = true; + for (int i = 0; i < words.length; i++) { + + String word = words[i]; + if (word != null && !word.isEmpty()) { + if (!isFirst) { + builder.append("-"); + } else { + isFirst = false; + } + builder.append(words[i].toLowerCase()); + } + } + return builder.toString() + ".yaml"; + + /* + * } else { return className.getSimpleName().toLowerCase() + Constants.YAML_SUFFIX; } + */ + + } + + public ErrorConfiguration getErrorConfiguration() { + return (ErrorConfiguration) configurations.get((ErrorConfiguration.class.getSimpleName())); + } + public JtoscaValidationIssueConfiguration getJtoscaValidationIssueConfiguration() { + return (JtoscaValidationIssueConfiguration) configurations.get((JtoscaValidationIssueConfiguration.class.getSimpleName())); + } + public void setJtoscaValidationIssueConfiguration(String fileName) { + loadConfigurationClass(JtoscaValidationIssueConfiguration.class, fileName); + } + public Configuration getConfiguration() { + return (Configuration) configurations.get((Configuration.class.getSimpleName())); + } + public void setErrorConfiguration(String fileName) { + loadConfigurationClass(ErrorConfiguration.class, fileName); + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/ErrorConfiguration.java b/src/main/java/org/onap/sdc/tosca/parser/config/ErrorConfiguration.java new file mode 100644 index 0000000..1b1f2e2 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/ErrorConfiguration.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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.sdc.tosca.parser.config; + +import java.util.Map; + +public class ErrorConfiguration { + + private Map errors; + + public Map getErrors() { + return errors; + } + + public void setErrors(Map errors) { + this.errors = errors; + } + + public ErrorInfo getErrorInfo(String key) { + ErrorInfo clone = null; + ErrorInfo other = errors.get(key); + if (other != null) { + clone = new ErrorInfo(); + clone.cloneData(other); + } + return clone; + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/ErrorInfo.java b/src/main/java/org/onap/sdc/tosca/parser/config/ErrorInfo.java new file mode 100644 index 0000000..52a92c4 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/ErrorInfo.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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.sdc.tosca.parser.config; + +public class ErrorInfo { + + private String code; + private String message; + private boolean failOnError; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean getFailOnError() { + return failOnError; + } + + public void setFailOnError(boolean failOnError) { + this.failOnError = failOnError; + } + + public void cloneData(ErrorInfo other) { + this.code = other.getCode(); + this.message = other.getMessage(); + this.failOnError = other.getFailOnError(); + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/JToscaValidationIssueInfo.java b/src/main/java/org/onap/sdc/tosca/parser/config/JToscaValidationIssueInfo.java new file mode 100644 index 0000000..0e76b29 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/JToscaValidationIssueInfo.java @@ -0,0 +1,31 @@ +package org.onap.sdc.tosca.parser.config; + +public class JToscaValidationIssueInfo { + + private String issueType; + private String sinceCsarConformanceLevel; + + public JToscaValidationIssueInfo() {} + + public String getIssueType() { + return issueType; + } + + public void setIssueType(String issueType) { + this.issueType = issueType; + } + + public String getSinceCsarConformanceLevel() { + return sinceCsarConformanceLevel; + } + + public void setSinceCsarConformanceLevel(String sinceCsarConformanceLevel) { + this.sinceCsarConformanceLevel = sinceCsarConformanceLevel; + } + + public void cloneData(JToscaValidationIssueInfo other) { + this.issueType = other.getIssueType(); + this.sinceCsarConformanceLevel = other.getSinceCsarConformanceLevel(); + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java b/src/main/java/org/onap/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java new file mode 100644 index 0000000..55912e6 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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.sdc.tosca.parser.config; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class JtoscaValidationIssueConfiguration { + + private Map> validationIssues; + + public Map> getValidationIssues() { + return validationIssues; + } + + public void setValidationIssues(Map> validationIssues) { + this.validationIssues = validationIssues; + } + + public List getJtoscaValidationIssueInfo(String key) { + List clone = new ArrayList<>(); + List other = validationIssues.get(key); + if (other != null) { + for (JToscaValidationIssueInfo item: other) { + JToscaValidationIssueInfo cloneitem = new JToscaValidationIssueInfo(); + cloneitem.cloneData(item); + clone.add(cloneitem); + } + } + return clone; + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/config/SdcToscaParserErrors.java b/src/main/java/org/onap/sdc/tosca/parser/config/SdcToscaParserErrors.java new file mode 100644 index 0000000..730142c --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/config/SdcToscaParserErrors.java @@ -0,0 +1,31 @@ +package org.onap.sdc.tosca.parser.config; + +import java.util.EnumMap; +import java.util.Map; + +import org.onap.sdc.toscaparser.api.utils.JToscaErrorCodes; + +public enum SdcToscaParserErrors { + + BAD_FORMAT, CONFORMANCE_LEVEL_ERROR, FILE_NOT_FOUND, GENERAL_ERROR; + + private static final Map JTOSCA_ERRORS = + new EnumMap(JToscaErrorCodes.class) {{ + + put(JToscaErrorCodes.GENERAL_ERROR, GENERAL_ERROR); + + put(JToscaErrorCodes.PATH_NOT_VALID, FILE_NOT_FOUND); + //CSAR contents problems + put(JToscaErrorCodes.MISSING_META_FILE, BAD_FORMAT); + put(JToscaErrorCodes.INVALID_META_YAML_CONTENT, BAD_FORMAT); + put(JToscaErrorCodes.ENTRY_DEFINITION_NOT_DEFINED, BAD_FORMAT); + put(JToscaErrorCodes.MISSING_ENTRY_DEFINITION_FILE, BAD_FORMAT); + put(JToscaErrorCodes.CSAR_TOSCA_VALIDATION_ERROR, BAD_FORMAT); + put(JToscaErrorCodes.INVALID_CSAR_FORMAT, BAD_FORMAT); + }}; + + public static SdcToscaParserErrors getSdcErrorByJToscaError(JToscaErrorCodes jToscaErrorCode) { + return JTOSCA_ERRORS.get(jToscaErrorCode); + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/exceptions/SdcToscaParserException.java b/src/main/java/org/onap/sdc/tosca/parser/exceptions/SdcToscaParserException.java new file mode 100644 index 0000000..5576750 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/exceptions/SdcToscaParserException.java @@ -0,0 +1,20 @@ +package org.onap.sdc.tosca.parser.exceptions; + +public class SdcToscaParserException extends Exception { + + private static final long serialVersionUID = 626014844866501196L; + private String code; + + public SdcToscaParserException(String string, String code) { + super(string); + this.code = code; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/FilterType.java b/src/main/java/org/onap/sdc/tosca/parser/impl/FilterType.java new file mode 100644 index 0000000..09c3c5c --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/FilterType.java @@ -0,0 +1,26 @@ +package org.onap.sdc.tosca.parser.impl; + +public enum FilterType { + + CONTAINS("contains"){ + @Override + public boolean isMatch(String value, String pattern) { + return value.contains(pattern); + } + }, + EQUALS("equals"){ + @Override + public boolean isMatch(String value, String pattern) { + return value.equals(pattern); + } + }; + + String filterName; + + FilterType(String name) { + this.filterName = name; + } + + public abstract boolean isMatch(String value, String pattern); + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/JToscaValidationIssueType.java b/src/main/java/org/onap/sdc/tosca/parser/impl/JToscaValidationIssueType.java new file mode 100644 index 0000000..fb13867 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/JToscaValidationIssueType.java @@ -0,0 +1,6 @@ +package org.onap.sdc.tosca.parser.impl; + +public enum JToscaValidationIssueType { + CRITICAL, + WARNING +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java new file mode 100644 index 0000000..0c42a4f --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java @@ -0,0 +1,908 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.tosca.parser.impl; + +import java.util.*; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.config.ConfigurationManager; +import org.onap.sdc.tosca.parser.utils.GeneralUtility; +import org.onap.sdc.tosca.parser.utils.SdcToscaUtility; +import org.onap.sdc.toscaparser.api.*; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.onap.sdc.toscaparser.api.elements.NodeType; +import org.onap.sdc.toscaparser.api.functions.Function; +import org.onap.sdc.toscaparser.api.parameters.Input; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SdcCsarHelperImpl implements ISdcCsarHelper { + + private static final String PATH_DELIMITER = "#"; + private static final String CUSTOMIZATION_UUID = "customizationUUID"; + private ToscaTemplate toscaTemplate; + private ConfigurationManager configurationManager; + private static Logger log = LoggerFactory.getLogger(SdcCsarHelperImpl.class.getName()); + + public SdcCsarHelperImpl(ToscaTemplate toscaTemplate) { + this.toscaTemplate = toscaTemplate; + } + + public SdcCsarHelperImpl(ToscaTemplate toscaTemplate, ConfigurationManager configurationManager) { + this.toscaTemplate = toscaTemplate; + this.configurationManager = configurationManager; + } + + @Override + //Sunny flow - covered with UT, flat and nested + public String getNodeTemplatePropertyLeafValue(NodeTemplate nodeTemplate, String leafValuePath) { + if (nodeTemplate == null) { + log.error("getNodeTemplatePropertyLeafValue - nodeTemplate is null"); + return null; + } + if (GeneralUtility.isEmptyString(leafValuePath)) { + log.error("getNodeTemplatePropertyLeafValue - leafValuePath is null or empty"); + return null; + } + String[] split = getSplittedPath(leafValuePath); + LinkedHashMap properties = nodeTemplate.getProperties(); + Object property = processProperties(split, properties); + return property == null || property instanceof Function ? null : String.valueOf(property); + } + + @Override + public Object getNodeTemplatePropertyAsObject(NodeTemplate nodeTemplate, String leafValuePath) { + if (nodeTemplate == null) { + log.error("getNodeTemplatePropertyAsObject - nodeTemplate is null"); + return null; + } + if (GeneralUtility.isEmptyString(leafValuePath)) { + log.error("getNodeTemplatePropertyAsObject - leafValuePath is null or empty"); + return null; + } + String[] split = getSplittedPath(leafValuePath); + LinkedHashMap properties = nodeTemplate.getProperties(); + return processProperties(split, properties); + } + + public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc) { + if (vfc == null) { + log.error("getCpPropertiesFromVfc - vfc is null"); + return new HashMap<>(); + } + + String presetProperty = "_ip_requirements"; + Map> cps = new HashMap<>(); + + Map props = vfc.getProperties(); + if (props != null) { + // find all port names by pre-set property (ip_requirements) + for (Map.Entry entry : props.entrySet()) { + if (entry.getKey().endsWith(presetProperty)) { + String portName = entry.getKey().replaceAll(presetProperty, ""); + cps.put(portName, new HashMap<>()); + } + } + + if (cps.size() > 0) { + // ports found - find all their properties + for (String portName : cps.keySet()) { + for (Map.Entry property: props.entrySet()) { + if (property.getKey().startsWith(portName)) { + String portProperty = property.getKey().replaceFirst(portName + "_", ""); + if (property.getValue() != null) { + cps.get(portName).put(portProperty, property.getValue().getValue()); + } + } + } + } + } + } + + return cps; + } + + public Map> getCpPropertiesFromVfc(NodeTemplate vfc) { + + if (vfc == null) { + log.error("getCpPropertiesFromVfc - vfc is null"); + return new HashMap<>(); + } + + String presetProperty = "_ip_requirements"; + Map> cps = new HashMap<>(); + + Map props = vfc.getProperties(); + if (props != null) { + // find all port names by pre-set property (ip_requirements) + for (Map.Entry entry : props.entrySet()) { + if (entry.getKey().endsWith(presetProperty)) { + String portName = entry.getKey().replaceAll(presetProperty, ""); + cps.put(portName, new HashMap<>()); + } + } + + if (cps.size() > 0) { + // ports found - find all their properties + for (String portName : cps.keySet()) { + for (Map.Entry property: props.entrySet()) { + if (property.getKey().startsWith(portName)) { + Map portPaths = new HashMap<>(); + String portProperty = property.getKey().replaceFirst(portName + "_", ""); + buildPathMappedToValue(portProperty, property.getValue().getValue(), portPaths); + + cps.get(portName).putAll(portPaths); + } + } + } + } + } + + return cps; + } + + @SuppressWarnings("unchecked") + private void buildPathMappedToValue(String path, Object property, Map pathsMap) { + if (property instanceof Map) { + for (Map.Entry item : ((Map) property).entrySet()) { + if (item.getValue() instanceof Map || item.getValue() instanceof List) { + buildPathMappedToValue(path + PATH_DELIMITER + item.getKey(), item.getValue(), pathsMap); + } else { + pathsMap.put(path + PATH_DELIMITER + item.getKey(), item.getValue()); + } + } + } else if (property instanceof List) { + for (Object item: (List)property) { + buildPathMappedToValue(path, item, pathsMap); + } + } else { + pathsMap.put(path, property); + } + + } + + @Override + //Sunny flow - covered with UT + public List getServiceVlList() { + List serviceVlList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VL); + return serviceVlList; + } + + @Override + //Sunny flow - covered with UT + public List getServiceVfList() { + List serviceVfList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VF); + return serviceVfList; + } + + @Override + //Sunny flow - covered with UT + public String getMetadataPropertyValue(Metadata metadata, String metadataPropertyName) { + if (GeneralUtility.isEmptyString(metadataPropertyName)) { + log.error("getMetadataPropertyValue - the metadataPropertyName is null or empty"); + return null; + } + if (metadata == null) { + log.error("getMetadataPropertyValue - the metadata is null"); + return null; + } + String metadataPropertyValue = metadata.getValue(metadataPropertyName); + return metadataPropertyValue; + } + + + @Override + //Sunny flow - covered with UT + public List getServiceNodeTemplatesByType(String nodeType) { + if (GeneralUtility.isEmptyString(nodeType)) { + log.error("getServiceNodeTemplatesByType - nodeType - is null or empty"); + return new ArrayList<>(); + } + + List res = new ArrayList<>(); + List nodeTemplates = toscaTemplate.getNodeTemplates(); + for (NodeTemplate nodeTemplate : nodeTemplates) { + if (nodeType.equals(nodeTemplate.getTypeDefinition().getType())) { + res.add(nodeTemplate); + } + } + + return res; + } + + + @Override + public List getServiceNodeTemplates() { + List nodeTemplates = toscaTemplate.getNodeTemplates(); + return nodeTemplates; + } + + @Override + //Sunny flow - covered with UT + public List getVfcListByVf(String vfCustomizationId) { + if (GeneralUtility.isEmptyString(vfCustomizationId)) { + log.error("getVfcListByVf - vfCustomizationId - is null or empty"); + return new ArrayList<>(); + } + + List serviceVfList = getServiceVfList(); + NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationId); + List vfcs = getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC); + vfcs.addAll(getNodeTemplateBySdcType(vfInstance, SdcTypes.CVFC)); + + return vfcs; + } + + @Override + //Sunny flow - covered with UT + public List getVfModulesByVf(String vfCustomizationUuid) { + List serviceVfList = getServiceVfList(); + NodeTemplate nodeTemplateByCustomizationUuid = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationUuid); + if (nodeTemplateByCustomizationUuid != null) { + /*SubstitutionMappings substitutionMappings = nodeTemplateByCustomizationUuid.getSubstitutionMappings(); + if (substitutionMappings != null){ + List groups = substitutionMappings.getGroups(); + if (groups != null){ + List collect = groups.stream().filter(x -> "org.openecomp.groups.VfModule".equals(x.getTypeDefinition().getType())).collect(Collectors.toList()); + log.debug("getVfModulesByVf - VfModules are {}", collect); + return collect; + } + }*/ + String name = nodeTemplateByCustomizationUuid.getName(); + String normaliseComponentInstanceName = SdcToscaUtility.normaliseComponentInstanceName(name); + List serviceLevelGroups = toscaTemplate.getTopologyTemplate().getGroups(); + log.debug("getVfModulesByVf - VF node template name {}, normalized name {}. Searching groups on service level starting with VF normalized name...", name, normaliseComponentInstanceName); + if (serviceLevelGroups != null) { + List collect = serviceLevelGroups + .stream() + .filter(x -> "org.openecomp.groups.VfModule".equals(x.getTypeDefinition().getType()) && x.getName().startsWith(normaliseComponentInstanceName)) + .collect(Collectors.toList()); + return collect; + } + } + return new ArrayList<>(); + } + + @Override + //Sunny flow - covered with UT + public String getServiceInputLeafValueOfDefault(String inputLeafValuePath) { + if (GeneralUtility.isEmptyString(inputLeafValuePath)) { + log.error("getServiceInputLeafValueOfDefault - inputLeafValuePath is null or empty"); + return null; + } + + String[] split = getSplittedPath(inputLeafValuePath); + if (split.length < 2 || !split[1].equals("default")) { + log.error("getServiceInputLeafValue - inputLeafValuePath should be of format #default[optionally #] "); + return null; + } + + List inputs = toscaTemplate.getInputs(); + if (inputs != null) { + Optional findFirst = inputs.stream().filter(x -> x.getName().equals(split[0])).findFirst(); + if (findFirst.isPresent()) { + Input input = findFirst.get(); + Object current = input.getDefault(); + Object property = iterateProcessPath(2, current, split); + return property == null || property instanceof Function? null : String.valueOf(property); + } + } + log.error("getServiceInputLeafValue - value not found"); + return null; + } + + @Override + public Object getServiceInputLeafValueOfDefaultAsObject(String inputLeafValuePath) { + if (GeneralUtility.isEmptyString(inputLeafValuePath)) { + log.error("getServiceInputLeafValueOfDefaultAsObject - inputLeafValuePath is null or empty"); + return null; + } + + String[] split = getSplittedPath(inputLeafValuePath); + if (split.length < 2 || !split[1].equals("default")) { + log.error("getServiceInputLeafValueOfDefaultAsObject - inputLeafValuePath should be of format #default[optionally #] "); + return null; + } + + List inputs = toscaTemplate.getInputs(); + if (inputs != null) { + Optional findFirst = inputs.stream().filter(x -> x.getName().equals(split[0])).findFirst(); + if (findFirst.isPresent()) { + Input input = findFirst.get(); + Object current = input.getDefault(); + return iterateProcessPath(2, current, split); + } + } + log.error("getServiceInputLeafValueOfDefaultAsObject - value not found"); + return null; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private Object iterateProcessPath(Integer index, Object current, String[] split) { + if (current == null) { + log.error("iterateProcessPath - this input has no default"); + return null; + } + if (split.length > index) { + for (int i = index; i < split.length; i++) { + if (current instanceof Map) { + current = ((Map) current).get(split[i]); + } else if (current instanceof List) { + current = ((List) current).get(0); + i--; + } + else { + log.error("iterateProcessPath - found an unexpected leaf where expected to find a complex type"); + return null; + } + } + } + if (current != null) { + return current; + } + log.error("iterateProcessPath - Path not Found"); + return null; + } + + private String[] getSplittedPath(String inputLeafValuePath) { + return inputLeafValuePath.split(PATH_DELIMITER); + } + + + @Override + //Sunny flow - covered with UT + public String getServiceSubstitutionMappingsTypeName() { + SubstitutionMappings substitutionMappings = toscaTemplate.getTopologyTemplate().getSubstitutionMappings(); + if (substitutionMappings == null) { + log.debug("getServiceSubstitutionMappingsTypeName - No Substitution Mappings defined"); + return null; + } + + NodeType nodeType = substitutionMappings.getNodeDefinition(); + if (nodeType == null) { + log.debug("getServiceSubstitutionMappingsTypeName - No Substitution Mappings node defined"); + return null; + } + + return nodeType.getType(); + } + + @Override + //Sunny flow - covered with UT + public Metadata getServiceMetadata() { + return toscaTemplate.getMetaData(); + } + + @Override + //Sunny flow - covered with UT + public Map getServiceMetadataProperties() { + if (toscaTemplate.getMetaData() == null){ + return null; + } + return new HashMap<>(toscaTemplate.getMetaData().getAllProperties()); + } + + @Override + public Map getServiceMetadataAllProperties() { + if (toscaTemplate.getMetaData() == null){ + return null; + } + return toscaTemplate.getMetaData().getAllProperties(); + } + + @Override + //Sunny flow - covered with UT + public List getServiceInputs() { + return toscaTemplate.getInputs(); + } + + @Override + //Sunny flow - covered with UT + public String getGroupPropertyLeafValue(Group group, String leafValuePath) { + if (group == null) { + log.error("getGroupPropertyLeafValue - group is null"); + return null; + } + + if (GeneralUtility.isEmptyString(leafValuePath)) { + log.error("getGroupPropertyLeafValue - leafValuePath is null or empty"); + return null; + } + + String[] split = getSplittedPath(leafValuePath); + LinkedHashMap properties = group.getProperties(); + Object property = processProperties(split, properties); + return property == null || property instanceof Function? null : String.valueOf(property); + } + + @Override + public Object getGroupPropertyAsObject(Group group, String leafValuePath) { + if (group == null) { + log.error("getGroupPropertyAsObject - group is null"); + return null; + } + + if (GeneralUtility.isEmptyString(leafValuePath)) { + log.error("getGroupPropertyAsObject - leafValuePath is null or empty"); + return null; + } + + String[] split = getSplittedPath(leafValuePath); + LinkedHashMap properties = group.getProperties(); + return processProperties(split, properties); + } + + @Override + //Sunny flow - covered with UT + public List getCpListByVf(String vfCustomizationId) { + List cpList = new ArrayList<>(); + if (GeneralUtility.isEmptyString(vfCustomizationId)) { + log.error("getCpListByVf vfCustomizationId string is empty"); + return cpList; + } + + List serviceVfList = getServiceVfList(); + if (serviceVfList == null || serviceVfList.size() == 0) { + log.error("getCpListByVf Vfs not exist for vfCustomizationId {}", vfCustomizationId); + return cpList; + } + NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationId); + if (vfInstance == null) { + log.debug("getCpListByVf vf list is null"); + return cpList; + } + cpList = getNodeTemplateBySdcType(vfInstance, SdcTypes.CP); + if (cpList == null || cpList.size() == 0) + log.debug("getCpListByVf cps not exist for vfCustomizationId {}", vfCustomizationId); + return cpList; + } + + @Override + //Sunny flow - covered with UT + public List getMembersOfVfModule(NodeTemplate vf, Group serviceLevelVfModule) { + if (vf == null) { + log.error("getMembersOfVfModule - vf is null"); + return new ArrayList<>(); + } + + if (serviceLevelVfModule == null || serviceLevelVfModule.getMetadata() == null || serviceLevelVfModule.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID) == null) { + log.error("getMembersOfVfModule - vfModule or its metadata is null. Cannot match a VF group based on invariantUuid from missing metadata."); + return new ArrayList<>(); + } + + + SubstitutionMappings substitutionMappings = vf.getSubMappingToscaTemplate(); + if (substitutionMappings != null) { + List groups = substitutionMappings.getGroups(); + if (groups != null) { + Optional findFirst = groups + .stream() + .filter(x -> (x.getMetadata() != null && serviceLevelVfModule.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID).equals(x.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)))).findFirst(); + if (findFirst.isPresent()) { + List members = findFirst.get().getMembers(); + if (members != null) { + List collect = substitutionMappings.getNodeTemplates().stream().filter(x -> members.contains(x.getName())).collect(Collectors.toList()); + return collect; + } + } + } + } + return new ArrayList<>(); + } + + @Override + //Sunny flow - covered with UT + @SuppressWarnings("unchecked") + public List> getNodeTemplatePairsByReqName( + List listOfReqNodeTemplates, List listOfCapNodeTemplates, String reqName) { + + if (listOfReqNodeTemplates == null) { + log.error("getNodeTemplatePairsByReqName - listOfReqNodeTemplates is null"); + return new ArrayList<>(); + } + + if (listOfCapNodeTemplates == null) { + log.error("getNodeTemplatePairsByReqName - listOfCapNodeTemplates is null"); + return new ArrayList<>(); + } + + if (GeneralUtility.isEmptyString(reqName)) { + log.error("getNodeTemplatePairsByReqName - reqName is null or empty"); + return new ArrayList<>(); + } + + List> pairsList = new ArrayList<>(); + + for (NodeTemplate reqNodeTemplate : listOfReqNodeTemplates) { + List requirements = reqNodeTemplate.getRequirements().getRequirementsByName(reqName).getAll(); + for (RequirementAssignment reqEntry : requirements) { + String node = reqEntry.getNodeTemplateName(); + if (node != null) { + Optional findFirst = listOfCapNodeTemplates.stream().filter(x -> x.getName().equals(node)).findFirst(); + if (findFirst.isPresent()) { + pairsList.add(new ImmutablePair(reqNodeTemplate, findFirst.get())); + } + } + } + } + + return pairsList; + } + + @Override + //Sunny flow - covered with UT + //TODO constant strings + public List getAllottedResources() { + List nodeTemplates = null; + nodeTemplates = toscaTemplate.getTopologyTemplate().getNodeTemplates(); + if (nodeTemplates.isEmpty()) { + log.error("getAllottedResources nodeTemplates not exist"); + } + nodeTemplates = nodeTemplates.stream().filter( + x -> x.getMetaData() != null && x.getMetaData().getValue("category").equals("Allotted Resource")) + .collect(Collectors.toList()); + if (nodeTemplates.isEmpty()) { + log.debug("getAllottedResources - allotted resources not exist"); + } else { + } + + return nodeTemplates; + } + + @Override + //Sunny flow - covered with UT + public String getTypeOfNodeTemplate(NodeTemplate nodeTemplate) { + if (nodeTemplate == null) { + + log.error("getTypeOfNodeTemplate nodeTemplate is null"); + return null; + } + return nodeTemplate.getTypeDefinition().getType(); + } + + /** + * This methdd is returning the csarConformanceLevel for input CSAR + * When csarConformanceLevel is configured with failOnError as False in Error Configuration; it + * assigns the default value to csarConformanceLevel which is the max level provided in + * Configuration file + * @return csarConformanceLevel + */ + @Override + public String getConformanceLevel() { + LinkedHashMap csarMeta = toscaTemplate.getMetaProperties("csar.meta"); + if (csarMeta == null){ + log.warn("No csar.meta file is found in CSAR - this file should hold the conformance level of the CSAR. This might be OK for older CSARs."); + if (configurationManager != null && !configurationManager.getErrorConfiguration() + .getErrorInfo("CONFORMANCE_LEVEL_ERROR").getFailOnError()){ + String csarConLevel = configurationManager.getConfiguration().getConformanceLevel().getMaxVersion(); + log.warn("csarConformanceLevel is not found in input csar; defaulting to max version {}" , csarConLevel); + return csarConLevel; + } + else { + log.warn("csarConformanceLevel is not found in input csar; returning null as no defaults defined in error configuration"); + return null; + } + } + + Object conformanceLevel = csarMeta.get("SDC-TOSCA-Definitions-Version"); + if (conformanceLevel != null){ + String confLevelStr = conformanceLevel.toString(); + log.debug("CSAR conformance level is {}", confLevelStr); + return confLevelStr; + } else { + log.error("Invalid csar.meta file - no entry found for SDC-TOSCA-Definitions-Version key. This entry should hold the conformance level."); + return null; + } + } + + + @Override + public String getNodeTemplateCustomizationUuid(NodeTemplate nt) { + String res = null; + if (nt != null && nt.getMetaData() != null){ + res = nt.getMetaData().getValue(CUSTOMIZATION_UUID); + } else { + log.error("Node template or its metadata is null"); + } + return res; + } + + public List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType) { + return getNodeTemplateBySdcType(parentNodeTemplate, sdcType, false); + } + + private List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType, boolean isVNF) { + + if (parentNodeTemplate == null) { + log.error("getNodeTemplateBySdcType - nodeTemplate is null or empty"); + return new ArrayList<>(); + } + + if (sdcType == null) { + log.error("getNodeTemplateBySdcType - sdcType is null or empty"); + return new ArrayList<>(); + } + + SubstitutionMappings substitutionMappings = parentNodeTemplate.getSubMappingToscaTemplate(); + + if (substitutionMappings != null) { + List nodeTemplates = substitutionMappings.getNodeTemplates(); + if (nodeTemplates != null && nodeTemplates.size() > 0) { + if (sdcType.equals(SdcTypes.VFC) && isVNF) { + return nodeTemplates.stream() + .filter(x -> (x.getMetaData() != null && + sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && isVNFType(x)) + .collect(Collectors.toList()); + } + else { + return nodeTemplates.stream() + .filter(x -> (x.getMetaData() != null && + sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && !isVNFType(x)) + .collect(Collectors.toList()); + } + } + else { + log.debug("getNodeTemplateBySdcType - SubstitutionMappings' node Templates not exist"); + } + } else + log.debug("getNodeTemplateBySdcType - SubstitutionMappings not exist"); + + return new ArrayList<>(); + } + + public Map filterNodeTemplatePropertiesByValue(NodeTemplate nodeTemplate, FilterType filterType, String pattern) { + Map filterMap = new HashMap<>(); + + if (nodeTemplate == null) { + log.error("filterNodeTemplatePropertiesByValue nodeTemplate is null"); + return filterMap; + } + + if (filterType == null) { + log.error("filterNodeTemplatePropertiesByValue filterType is null"); + return filterMap; + } + + if (GeneralUtility.isEmptyString(pattern)) { + log.error("filterNodeTemplatePropertiesByValue pattern string is empty"); + return filterMap; + } + + Map ntProperties = nodeTemplate.getProperties(); + + if (ntProperties != null && ntProperties.size() > 0) { + + for (Property current : ntProperties.values()) { + filterProperties(current.getValue(), current.getName(), filterType, pattern, filterMap); + } + } + + log.trace("filterNodeTemplatePropertiesByValue - filterMap value: {}", filterMap); + + return filterMap; + } + + public NodeTemplate getVnfConfig(String vfCustomizationUuid) { + + if (GeneralUtility.isEmptyString(vfCustomizationUuid)) { + log.error("getVnfConfig - vfCustomizationId - is null or empty"); + return null; + } + + List serviceVfList = getServiceVfList(); + NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationUuid); + NodeTemplate vnfConfig = getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC, true).stream().findAny().orElse(null); + return vnfConfig; + } + + @Override + public boolean hasTopology(NodeTemplate nodeTemplate) { + if (nodeTemplate == null) { + log.error("hasTopology - nodeTemplate - is null"); + return false; + } + + if (nodeTemplate.getMetaData() != null) { + String type = nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE); + log.debug("hasTopology - node template {} is a {} type", nodeTemplate.getName(), type); + return SdcTypes.isComplex(type); + } + + return false; + } + + @Override + public List getNodeTemplateChildren(NodeTemplate nodeTemplate) { + if (nodeTemplate == null) { + log.error("getNodeTemplateChildren - nodeTemplate - is null"); + return new ArrayList<>(); + } + + SubstitutionMappings substitutionMappings = nodeTemplate.getSubMappingToscaTemplate(); + if (substitutionMappings != null) { + List nodeTemplates = substitutionMappings.getNodeTemplates(); + if (nodeTemplates != null && nodeTemplates.size() > 0) { + + return nodeTemplates.stream() + .filter(x -> !isVNFType(x)) + .collect(Collectors.toList()); + } + else { + log.debug("getNodeTemplateChildren - SubstitutionMappings' node Templates not exist"); + } + } else + log.debug("getNodeTemplateChildren - SubstitutionMappings not exist"); + + return new ArrayList<>(); + } + + @Override + public NodeTemplate getServiceNodeTemplateByNodeName(String nodeName) { + if (GeneralUtility.isEmptyString(nodeName)) { + log.error("getServiceNodeTemplateByNodeName - nodeName - is null or empty"); + return null; + } + + List nodeTemplates = getServiceNodeTemplates(); + Optional findFirst = nodeTemplates.stream().filter(nt -> nt.getName().equals(nodeName)).findFirst(); + + return findFirst.isPresent() ? findFirst.get() : null; + } + + @Override + public Metadata getNodeTemplateMetadata(NodeTemplate nt) { + if (nt == null) { + log.error("getNodeTemplateMetadata - nt (node template) - is null"); + return null; + } + + return nt.getMetaData(); + } + + @Override + public CapabilityAssignments getCapabilitiesOf(NodeTemplate nt) { + if (nt == null) { + log.error("getCapabilitiesOf - nt (node template) - is null"); + return null; + } + + return nt.getCapabilities(); + } + + @Override + public RequirementAssignments getRequirementsOf(NodeTemplate nt) { + if (nt == null) { + log.error("getRequirementsOf - nt (node template) - is null"); + return null; + } + + return nt.getRequirements(); + } + + @Override + public String getCapabilityPropertyLeafValue(CapabilityAssignment capability, String pathToPropertyLeafValue) { + if (capability == null) { + log.error("getCapabilityPropertyLeafValue - capability is null"); + return null; + } + + if (GeneralUtility.isEmptyString(pathToPropertyLeafValue)) { + log.error("getCapabilityPropertyLeafValue - pathToPropertyLeafValue is null or empty"); + return null; + } + + String[] split = getSplittedPath(pathToPropertyLeafValue); + LinkedHashMap properties = capability.getProperties(); + Object property = processProperties(split, properties); + return property == null || property instanceof Function ? null : String.valueOf(property); + } + + /************************************* helper functions ***********************************/ + private boolean isVNFType(NodeTemplate nt) { + return nt.getType().endsWith("VnfConfiguration"); + } + + @SuppressWarnings("unchecked") + private Map filterProperties(Object property, String path, FilterType filterType, String pattern, Map filterMap) { + + if (property instanceof Map) { + for (Map.Entry item: ((Map) property).entrySet()) { + String itemPath = path + PATH_DELIMITER + item.getKey(); + filterProperties(item.getValue(), itemPath, filterType, pattern, filterMap); + } + } else if (property instanceof List) { + for (Object item: (List)property) { + filterProperties(item, path, filterType, pattern, filterMap); + } + } else { + if (filterType.isMatch(property.toString(), pattern)) { + filterMap.put(path, property.toString()); + } + } + + return filterMap; + } + + public List getServiceNodeTemplateBySdcType(SdcTypes sdcType) { + if (sdcType == null) { + log.error("getServiceNodeTemplateBySdcType - sdcType is null or empty"); + return new ArrayList<>(); + } + + TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate(); + return getNodeTemplateBySdcType(topologyTemplate, sdcType); + } + + + /************************************* helper functions ***********************************/ + private List getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, SdcTypes sdcType) { + if (sdcType == null) { + log.error("getNodeTemplateBySdcType - sdcType is null or empty"); + return new ArrayList<>(); + } + + if (topologyTemplate == null) { + log.error("getNodeTemplateBySdcType - topologyTemplate is null"); + return new ArrayList<>(); + } + + List nodeTemplates = topologyTemplate.getNodeTemplates(); + + if (nodeTemplates != null && nodeTemplates.size() > 0) + return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList()); + + log.debug("getNodeTemplateBySdcType - topologyTemplate's nodeTemplates not exist"); + return new ArrayList<>(); + } + + //Assumed to be unique property for the list + private NodeTemplate getNodeTemplateByCustomizationUuid(List nodeTemplates, String customizationId) { + if (customizationId != null) { + Optional findFirst = nodeTemplates.stream().filter(x -> (x.getMetaData() != null && customizationId.equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)))).findFirst(); + return findFirst.isPresent() ? findFirst.get() : null; + } + else { + log.error("getNodeTemplateByCustomizationUuid - customizationId is null"); + return null; + } + } + + private Object processProperties(String[] split, LinkedHashMap properties) { + Optional> findFirst = properties.entrySet().stream().filter(x -> x.getKey().equals(split[0])).findFirst(); + if (findFirst.isPresent()) { + Property property = findFirst.get().getValue(); + Object current = property.getValue(); + return iterateProcessPath(1, current, split); + } + String propName = (split != null && split.length > 0 ? split[0] : null); + log.error("processProperties - property {} not found", propName); + return null; + } + + + + + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java new file mode 100644 index 0000000..7235593 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java @@ -0,0 +1,109 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.tosca.parser.impl; + +public class SdcPropertyNames { + public static String PROPERTY_NAME_INVARIANTUUID = "invariantUUID"; + public static String PROPERTY_NAME_UUID = "UUID"; + public static String PROPERTY_NAME_CUSTOMIZATIONUUID = "customizationUUID"; + public static String PROPERTY_NAME_VERSION = "version"; + + //Groups metadata + public static String PROPERTY_NAME_VFMODULEMODELINVARIANTUUID = "vfModuleModelInvariantUUID"; + public static String PROPERTY_NAME_VFMODULEMODELUUID = "vfModuleModelUUID"; + public static String PROPERTY_NAME_VFMODULECUSTOMIZATIONUUID = "vfModuleCustomizationUUID"; + public static String PROPERTY_NAME_VFMODULEMODELVERSION = "vfModuleModelVersion"; + public static String PROPERTY_NAME_VFMODULEMODELNAME = "vfModuleModelName"; + + //Groups properties + public static String PROPERTY_NAME_VFMODULETYPE = "vf_module_type"; + public static String PROPERTY_NAME_VFMODULELABEL = "vf_module_label"; + public static String PROPERTY_NAME_MINVFMODULEINSTANCES = "min_vf_module_instances"; + public static String PROPERTY_NAME_MAXVFMODULEINSTANCES = "max_vf_module_instances"; + public static String PROPERTY_NAME_INITIALCOUNT = "initial_count"; + + + public static String PROPERTY_NAME_DESCRIPTION = "description"; + public static String PROPERTY_NAME_TYPE = "type"; + public static String PROPERTY_NAME_CATEGORY = "category"; + public static String PROPERTY_NAME_SUBCATEGORY = "subcategory"; + public static String PROPERTY_NAME_RESOURCEVENDOR = "resourceVendor"; + public static String PROPERTY_NAME_RESOURCEVENDORRELEASE = "resourceVendorRelease"; + //VFC + public static String PROPERTY_NAME_NFCCODE = "nfc_code"; + public static String PROPERTY_NAME_VMTYPETAG = "vm_type_tag"; + public static String PROPERTY_NAME_VMTYPE = "vm_type"; + public static String PROPERTY_NAME_VFCNAMING_ECOMPGENERATEDNAMING="vfc_naming#ecomp_generated_naming"; + public static String PROPERTY_NAME_VFCNAMING_NAMINGPOLICY="vfc_naming#naming_policy"; + //VF + public static String PROPERTY_NAME_NFTYPE = "nf_type"; + public static String PROPERTY_NAME_NFROLE = "nf_role"; + public static String PROPERTY_NAME_NFFUNCTION = "nf_function"; + public static String PROPERTY_NAME_NFCODE = "nf_code"; + public static String PROPERTY_NAME_MININSTANCES = "min_instances"; + public static String PROPERTY_NAME_MAXINSTANCES = "max_instances"; + public static String PROPERTY_NAME_AVAILABILITYZONEMAXCOUNT = "availability_zone_max_count"; + public static String PROPERTY_NAME_AVAILABILITYZONECOUNT = "availability_zone_count"; + public static String PROPERTY_NAME_NAME = "name"; + public static String PROPERTY_NAME_VNFECOMPNAMING_ECOMPGENERATEDNAMING="vnf_ecomp_naming#ecomp_generated_naming"; + public static String PROPERTY_NAME_VNFECOMPNAMING_NAMINGPOLICY="vnf_ecomp_naming#naming_policy"; + public static String PROPERTY_NAME_ECOMPGENERATEDVMASSIGNMENTS = "ecomp_generated_vm_assignments"; + //Service + public static String PROPERTY_NAME_SERVICENAMING_DEFAULT_ECOMPGENERATEDNAMING="service_naming#default#ecomp_generated_naming"; + public static String PROPERTY_NAME_SERVICENAMING_DEFAULT_NAMINGPOLICY="service_naming#default#naming_policy"; + //VL + public static String PROPERTY_NAME_NETWORKTYPE="network_type"; + public static String PROPERTY_NAME_NETWORKROLE="network_role"; + public static String PROPERTY_NAME_NETWORKROLETAG="network_role_tag"; + public static String PROPERTY_NAME_NETWORKTECHNOLOGY="network_technology"; + public static String PROPERTY_NAME_NETWORKSCOPE="network_scope"; + public static String PROPERTY_NAME_NETWORKECOMPNAMING_ECOMPGENERATEDNAMING="network_ecomp_naming#ecomp_generated_naming"; + public static String PROPERTY_NAME_NETWORKECOMPNAMING_NAMINGPOLICY="network_ecomp_naming#naming_policy"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_ISSHAREDNETWORK="network_assignments#is_shared_network"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_ISEXTERNALNETWORK="network_assignments#is_external_network"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_ECOMPGENERATEDNETWORKASSIGNMENT="network_assignments#ecomp_generated_network_assignment"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_USEIPV4="network_assignments#ipv4_subnet_default_assignments#use_ipv4"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_IPNETWORKADDRESSPLAN="network_assignments#ipv4_subnet_default_assignments#ip_network_address_plan"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_DHCPENABLED="network_assignments#ipv4_subnet_default_assignments#dhcp_enabled"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_IPVERSION="network_assignments#ipv4_subnet_default_assignments#ip_version"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_CIDRMASK="network_assignments#ipv4_subnet_default_assignments#cidr_mask"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_MINSUBNETSCOUNT="network_assignments#ipv4_subnet_default_assignments#min_subnets_count"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_USEIPV6="network_assignments#ipv6_subnet_default_assignments#use_ipv6"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_IPNETWORKADDRESSPLAN="network_assignments#ipv6_subnet_default_assignments#ip_network_address_plan"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_DHCPENABLED="network_assignments#ipv6_subnet_default_assignments#dhcp_enabled"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_IPVERSION="network_assignments#ipv6_subnet_default_assignments#ip_version"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_CIDRMASK="network_assignments#ipv6_subnet_default_assignments#cidr_mask"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_MINSUBNETSCOUNT="network_assignments#ipv6_subnet_default_assignments#min_subnets_count"; + + /*public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_ISPROVIDERNETWORK="network_assignments#provider_network#is_provider_network"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_PHYSICALNETWORKNAME="network_assignments#provider_network#physical_network_name"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_NUMA="network_assignments#provider_network#numa"; + public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_PNICINSTANCE="network_assignments#provider_network#pnic_instance"; + */ + + public static String PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK="provider_network#is_provider_network"; + public static String PROPERTY_NAME_PROVIDERNETWORK_PHYSICALNETWORKNAME="provider_network#physical_network_name"; + public static String PROPERTY_NAME_PROVIDERNETWORK_NUMA="provider_network#numa"; + public static String PROPERTY_NAME_PROVIDERNETWORK_PNICINSTANCE="provider_network#pnic_instance"; + + public static String PROPERTY_NAME_NETWORKFLOWS_ISBOUNDTOVPN="network_flows#is_bound_to_vpn"; + public static String PROPERTY_NAME_NETWORKFLOWS_VPNBINDING="network_flows#vpn_binding"; +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcToscaParserFactory.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcToscaParserFactory.java new file mode 100644 index 0000000..bc8d1b1 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcToscaParserFactory.java @@ -0,0 +1,203 @@ +package org.onap.sdc.tosca.parser.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.sdc.tosca.parser.api.ConformanceLevel; +import org.onap.sdc.tosca.parser.config.ConfigurationManager; +import org.onap.sdc.tosca.parser.config.ErrorInfo; +import org.onap.sdc.tosca.parser.config.JToscaValidationIssueInfo; +import org.onap.sdc.tosca.parser.config.SdcToscaParserErrors; +import org.onap.sdc.tosca.parser.utils.GeneralUtility; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.config.*; +import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.onap.sdc.toscaparser.api.ToscaTemplate; +import org.onap.sdc.toscaparser.api.common.JToscaValidationIssue; +import org.onap.sdc.toscaparser.api.common.JToscaException; +import org.onap.sdc.toscaparser.api.utils.JToscaErrorCodes; +import org.onap.sdc.toscaparser.api.utils.ThreadLocalsHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SdcToscaParserFactory { + private static Logger log = LoggerFactory.getLogger(SdcToscaParserFactory.class.getName()); + + private static ConfigurationManager configurationManager; + private static volatile SdcToscaParserFactory instance; + private List criticalExceptions = new ArrayList<>(); + private List warningExceptions = new ArrayList<>(); + private List notAnalyzadExceptions = new ArrayList<>(); + private SdcToscaParserFactory() {} + + /** + * Get an SdcToscaParserFactory instance. + * @return SdcToscaParserFactory instance. + */ + public static SdcToscaParserFactory getInstance() { + if (instance == null) { + synchronized (SdcToscaParserFactory.class) { + if (instance == null) { + instance = new SdcToscaParserFactory(); + configurationManager = ConfigurationManager.getInstance(); + } + } + } + return instance; + } + + public static void setConfigurationManager(ConfigurationManager configurationManager) { + SdcToscaParserFactory.configurationManager = configurationManager; + } + + /** + * Get an ISdcCsarHelper object for this CSAR file. + * + * @param csarPath - the absolute path to CSAR file. + * @return ISdcCsarHelper object. + * @throws SdcToscaParserException - in case the path or CSAR are invalid. + */ + public ISdcCsarHelper getSdcCsarHelper(String csarPath) throws SdcToscaParserException { + return init(csarPath, true); + } + + /** + * Get an ISdcCsarHelper object for this CSAR file. + * + * @param csarPath - the absolute path to CSAR file. + * @param resolveGetInput - resolve get_input properties + * @return ISdcCsarHelper object. + * @throws SdcToscaParserException - in case the path or CSAR are invalid. + */ + public ISdcCsarHelper getSdcCsarHelper(String csarPath, boolean resolveGetInput) throws SdcToscaParserException { + return init(csarPath, resolveGetInput); + } + + private ISdcCsarHelper init(String csarPath, boolean resolveGetInput) throws SdcToscaParserException { + synchronized (SdcToscaParserFactory.class) { + ToscaTemplate tosca = null; + try { + tosca = new ToscaTemplate(csarPath, null, true, null, resolveGetInput); + } catch (JToscaException e) { + throwSdcToscaParserException(e); + } + SdcCsarHelperImpl sdcCsarHelperImpl = new SdcCsarHelperImpl(tosca, configurationManager); + String cSarConformanceLevel = sdcCsarHelperImpl.getConformanceLevel(); + validateCsarVersion(cSarConformanceLevel); + try { + handleErrorsByTypes(csarPath, cSarConformanceLevel); + } catch (JToscaException e) { + throwSdcToscaParserException(e); + } + return sdcCsarHelperImpl; + } + } + + private void handleErrorsByTypes(String csarPath, String cSarConformanceLevel) throws JToscaException { + clearValidationIssuesLists(); + for(JToscaValidationIssue toscaValidationIssue : ThreadLocalsHolder.getCollector().getValidationIssues().values()){ + List issueInfos = configurationManager.getJtoscaValidationIssueConfiguration().getValidationIssues().get(toscaValidationIssue.getCode()); + if(issueInfos != null && !issueInfos.isEmpty()){ + JToscaValidationIssueInfo issueInfo = null; + issueInfo = issueInfos.stream() + .filter(i-> isMatchConformanceLevel(cSarConformanceLevel,i.getSinceCsarConformanceLevel())) + .max((i1,i2) -> GeneralUtility.conformanceLevelCompare(i1.getSinceCsarConformanceLevel(), i2.getSinceCsarConformanceLevel()) ) + .orElse(null); + + if(issueInfo != null){ + switch (JToscaValidationIssueType.valueOf(issueInfo.getIssueType())) { + case CRITICAL: + criticalExceptions.add(toscaValidationIssue); + break; + case WARNING: + warningExceptions.add(toscaValidationIssue); + break; + default: + break; + } + }else{ + notAnalyzadExceptions.add(toscaValidationIssue); + } + }else{//notAnalyzed + notAnalyzadExceptions.add(toscaValidationIssue); + } + } + logErrors(csarPath); + } + + private void clearValidationIssuesLists(){ + notAnalyzadExceptions.clear(); + criticalExceptions.clear(); + warningExceptions.clear(); + } + + private void logErrors(String inputPath) throws JToscaException{ + //Warnings + int warningsCount = warningExceptions.size(); + if (warningsCount > 0) { + log.warn("####################################################################################################"); + log.warn("CSAR Warnings found! CSAR name - {}", inputPath); + log.warn("ToscaTemplate - verifyTemplate - {} Parsing Warning{} occurred...", warningsCount, (warningsCount > 1 ? "s" : "")); + for (JToscaValidationIssue info : warningExceptions) { + log.warn("JTosca Exception [{}]: {}. CSAR name - {}", info.getCode(),info.getMessage(), inputPath); + } + log.warn("####################################################################################################"); + } + //Criticals + int criticalsCount = criticalExceptions.size(); + if (criticalsCount > 0) { + log.error("####################################################################################################"); + log.error("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", criticalsCount, (criticalsCount > 1 ? "s" : "")); + for (JToscaValidationIssue info : criticalExceptions) { + log.error("JTosca Exception [{}]: {}. CSAR name - {}", info.getCode(),info.getMessage(), inputPath); + } + throw new JToscaException(String.format("CSAR Validation Failed. CSAR name - {}. Please check logs for details.", inputPath), JToscaErrorCodes.CSAR_TOSCA_VALIDATION_ERROR.getValue()); + } + } + public List getCriticalExceptions() { + return criticalExceptions; + } + + public List getWarningExceptions() { + return warningExceptions; + } + + public List getNotAnalyzadExceptions() { + return notAnalyzadExceptions; + } + + + private void validateCsarVersion(String cSarVersion) throws SdcToscaParserException { + ConformanceLevel level = configurationManager.getConfiguration().getConformanceLevel(); + String minVersion = level.getMinVersion(); + String maxVersion = level.getMaxVersion(); + if (cSarVersion != null) { + if ((GeneralUtility.conformanceLevelCompare(cSarVersion, minVersion) < 0) || (GeneralUtility.conformanceLevelCompare(cSarVersion, maxVersion) > 0)) { + throwConformanceLevelException(minVersion, maxVersion); + } + } else { + throwConformanceLevelException(minVersion, maxVersion); + } + } + + private boolean isMatchConformanceLevel(String ValidationIssueVersion, String cSarVersion){ + if (ValidationIssueVersion != null && cSarVersion != null) { + if ((GeneralUtility.conformanceLevelCompare(ValidationIssueVersion, cSarVersion) >= 0)) { + return true; + } + } + return false; + } + private void throwConformanceLevelException(String minVersion, String maxVersion) throws SdcToscaParserException { + ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.CONFORMANCE_LEVEL_ERROR.toString()); + throw new SdcToscaParserException(String.format(errorInfo.getMessage(), minVersion, maxVersion), errorInfo.getCode()); + } + + private void throwSdcToscaParserException(JToscaException e) throws SdcToscaParserException { + ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.getSdcErrorByJToscaError(JToscaErrorCodes.getByCode(e.getCode())).toString()); + throw new SdcToscaParserException(errorInfo.getMessage(), errorInfo.getCode()); + } + + + +} \ No newline at end of file diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcTypes.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcTypes.java new file mode 100644 index 0000000..9daf0ef --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcTypes.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.tosca.parser.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum SdcTypes { + + CP("CP"), VL("VL"), VF("VF"), CR("CR"), VFC("VFC"), PNF("PNF"), SERVICE("Service"), CVFC("CVFC"), SERVICE_PROXY("Service Proxy"), CONFIGURATION("Configuration"); + + private String value; + + private static List complexTypes = Arrays.asList(VF, PNF, CR, SERVICE, CVFC).stream().map(SdcTypes::getValue).collect(Collectors.toList()); + + private SdcTypes(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static boolean isComplex(String sdcType) { + return complexTypes.contains(sdcType); + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/utils/GeneralUtility.java b/src/main/java/org/onap/sdc/tosca/parser/utils/GeneralUtility.java new file mode 100644 index 0000000..cddccd3 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/utils/GeneralUtility.java @@ -0,0 +1,53 @@ +package org.onap.sdc.tosca.parser.utils; + +import java.util.Arrays; + +public class GeneralUtility { + + public static boolean isEmptyString(String str) { + return str == null || str.trim().isEmpty(); + } + + + /** + * Compares two version strings. + *

+ * Use this instead of String.compareTo() for a non-lexicographical + * comparison that works for version strings. e.g. "1.10".compareTo("1.6"). + * + * @param str1 a string of ordinal numbers separated by decimal points. + * @param str2 a string of ordinal numbers separated by decimal points. + * @return The result is a negative integer if str1 is _numerically_ less than str2. + * The result is a positive integer if str1 is _numerically_ greater than str2. + * The result is zero if the strings are _numerically_ equal. + * It does not work if "1.10" is supposed to be equal to "1.10.0". + */ + public static int conformanceLevelCompare(String str1, String str2) { + String[] vals1 = str1.split("\\."); + String[] vals2 = str2.split("\\."); + int i = 0; + // set index to first non-equal ordinal or length of shortest version string + while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) { + i++; + } + // compare first non-equal ordinal number + if (i < vals1.length && i < vals2.length) { + int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i])); + return Integer.signum(diff); + } + //in case of 0 after the . e.g: "3" = "3.0" or "3.0.0.0" = "3.0" + str2 = str2.substring(i).replace(".", ""); + str1 = str1.substring(i).replace(".", ""); + if ((!(str1.equals(""))) && Integer.valueOf(str1) == 0){ + vals1 = Arrays.copyOf(vals1, i); + } + if ((!(str2.equals(""))) && Integer.valueOf(str2) == 0){ + vals2 = Arrays.copyOf(vals2, i); + } + + // the strings are equal or one string is a substring of the other + // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4" + return Integer.signum(vals1.length - vals2.length); + } + +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/utils/SdcToscaUtility.java b/src/main/java/org/onap/sdc/tosca/parser/utils/SdcToscaUtility.java new file mode 100644 index 0000000..57f4187 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/utils/SdcToscaUtility.java @@ -0,0 +1,19 @@ +package org.onap.sdc.tosca.parser.utils; + +import java.util.regex.Pattern; + +public class SdcToscaUtility { + + public final static Pattern COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-]+"); + + public static String normaliseComponentInstanceName(String name) { + String normalizedName = name.toLowerCase(); + normalizedName = COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" "); + String[] split = normalizedName.split(" "); + StringBuffer sb = new StringBuffer(); + for (String splitElement : split) { + sb.append(splitElement); + } + return sb.toString(); + } +} diff --git a/src/main/java/org/onap/sdc/tosca/parser/utils/YamlToObjectConverter.java b/src/main/java/org/onap/sdc/tosca/parser/utils/YamlToObjectConverter.java new file mode 100644 index 0000000..89963d8 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/utils/YamlToObjectConverter.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.tosca.parser.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; + +public class YamlToObjectConverter { + + private static Logger log = LoggerFactory + .getLogger(YamlToObjectConverter.class.getName()); + + private static HashMap yamls = new HashMap(); + + private static Yaml defaultYaml = new Yaml(); + + private static Yaml getYamlByClassName(Class className) { + + Yaml yaml = yamls.get(className.getName()); + if (yaml == null) { + yaml = defaultYaml; + } + + return yaml; + } + + public T convert(String dirPath, Class className, + String configFileName) { + + T config = null; + + try { + + String fullFileName = dirPath + File.separator + configFileName; + + config = convert(fullFileName, className); + + } catch (Exception e) { + log.error("Failed to convert yaml file " + configFileName + + " to object.", e); + } + + return config; + } + + public T convert(String fullFileName, Class className) { + + T config = null; + + Yaml yaml = getYamlByClassName(className); + + InputStream in = null; + try { + + File f = new File(fullFileName); + if (false == f.exists()) { + log.warn("The file " + fullFileName + + " cannot be found. Ignore reading configuration."); + return null; + } + in = Files.newInputStream(Paths.get(fullFileName)); + + config = yaml.loadAs(in, className); + + // System.out.println(config.toString()); + } catch (Exception e) { + log.error("Failed to convert yaml file " + fullFileName + + " to object.", e); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + return config; + } + + public T convertFromString(String yamlContents, Class className) { + + T config = null; + Yaml yaml = new Yaml(); + try { + Object data = yaml.load(yamlContents); + // convert it manually with jackson instead of using snakeyaml auto converter, + // because of problematic complex objects like JtoscaValidationIssueConfiguration + ObjectMapper mapper = new ObjectMapper(); + config = mapper.convertValue(data, className); + } catch (Exception e){ + log.error("Failed to convert YAML {} to object." , yamlContents, e); + } + + return config; + } +} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/api/ConformanceLevel.java b/src/main/java/org/openecomp/sdc/tosca/parser/api/ConformanceLevel.java deleted file mode 100644 index a026938..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/api/ConformanceLevel.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.openecomp.sdc.tosca.parser.api; - -public class ConformanceLevel { - - private String minVersion; - private String maxVersion; - - public String getMaxVersion() { - return maxVersion; - } - - public void setMaxVersion(String maxVersion) { - this.maxVersion = maxVersion; - } - - public String getMinVersion() { - return minVersion; - } - - public void setMinVersion(String minVersion) { - this.minVersion = minVersion; - } - - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java b/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java deleted file mode 100644 index df9e47d..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java +++ /dev/null @@ -1,454 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * sdc-distribution-client - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.api; - - -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.tuple.Pair; -import org.openecomp.sdc.tosca.parser.impl.FilterType; -import org.openecomp.sdc.tosca.parser.impl.SdcTypes; -import org.openecomp.sdc.toscaparser.api.*; -import org.openecomp.sdc.toscaparser.api.elements.Metadata; -import org.openecomp.sdc.toscaparser.api.parameters.Input; - - -public interface ISdcCsarHelper { - - /** - * Get all node templates by node_type for this CSAR service. - * - * @param nodeType - the TOSCA type of the node. - * @return service node templates of this type. - */ - public List getServiceNodeTemplatesByType(String nodeType); - - /** - * Get all node templates for this CSAR service. - * - * @return service node templates. - */ - public List getServiceNodeTemplates(); - - /** - * Get groups of a VF with type "org.openecomp.groups.VfModule". - * - * @param vfCustomizationUuid - customizationUuid of VF instance. - * @return list of vfModule groups. - */ - public List getVfModulesByVf(String vfCustomizationUuid); - - - /** - * Get any property leaf value for node template by full path separated by #.
- * For example, for node template with this property:

- * network_assignments:
-   ecomp_generated_network_assignment: true
-   is_shared_network: false
-   is_external_network: false
-   ipv4_subnet_default_assignments:
-     use_ipv4: true
-     ip_network_address_plan: 1.2.3.4
-     dhcp_enabled: true
-     ip_version: 4
-     cidr_mask: 24
-     min_subnets_count: 1
-   ipv6_subnet_default_assignments:
-     use_ipv6: false

- - * calling
- * getNodeTemplatePropertyLeafValue(nodeTemplate, "network_assignments#ipv6_subnet_default_assignments#use_ipv6")
- * will return "false". - * @param nodeTemplate - nodeTemplate where the property should be looked up. - * @param pathToPropertyLeafValue - the full path of the required property. - * @return the leaf value as String, or null if there's no such property, or it's not a leaf. - */ - public String getNodeTemplatePropertyLeafValue(NodeTemplate nodeTemplate, String pathToPropertyLeafValue); - - /** - * Get any property leaf value for node template by full path separated by #.
- * For example, for node template with this property:

- * network_assignments:
-   ecomp_generated_network_assignment: true
-   is_shared_network: false
-   is_external_network: false
-   ipv4_subnet_default_assignments:
-     use_ipv4: true
-     ip_network_address_plan: 1.2.3.4
-     dhcp_enabled: true
-     ip_version: 4
-     cidr_mask: 24
-     min_subnets_count: 1
-   ipv6_subnet_default_assignments:
-     use_ipv6: false

- - * calling
- * getNodeTemplatePropertyLeafValue(nodeTemplate, "network_assignments#ipv6_subnet_default_assignments#use_ipv6")
- * will return "false". - * @param nodeTemplate - nodeTemplate where the property should be looked up. - * @param pathToPropertyLeafValue - the full path of the required property. - * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type. - */ - public Object getNodeTemplatePropertyAsObject(NodeTemplate nodeTemplate, String pathToPropertyLeafValue); - - /** - * Get any property leaf value for a group definition by full path separated by #. - * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a group. - * @param group - group where the property should be looked up. - * @param propertyName - the name of the required property. - * @return the leaf value as String, or null if there's no such property, or it's not a leaf. - */ - public String getGroupPropertyLeafValue(Group group, String propertyName); - - /** - * Get any property value for a group definition by full path separated by #. - * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a group. - * @param group - group where the property should be looked up. - * @param propertyName - the name of the required property. - * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type. - */ - public Object getGroupPropertyAsObject(Group group, String propertyName); - - /** - * Get all VL node templates of the CSAR service. - * @return - all VL node templates. - */ - public List getServiceVlList(); - - /** - * Get all VF node templates of the CSAR service. - * @return - all VF node templates. - */ - public List getServiceVfList(); - - - /** - * - * Get a property from a metadata object.
- * This is just sugaring method, same as calling metadata.getMetadataPropertyValue(metadataPropertyName).
- * - * For metadata object representing the below:

- * - * metadata:
-   invariantUUID: 4598a404-00e1-42a6-8767-0bda343e2066
-   UUID: e17940d6-42f8-4989-bad0-31de5addc619
-   customizationUUID: 83d086b2-a861-4d3b-aa84-3bfbb9b2ec20
-   version: '0.1'
-   name: vIPR_ATM
-   description: vIPR_ATM
-   type: VF
-   category: category1
-   subcategory: subCategory1

- - calling
- getMetadataPropertyValue(metadata,"invariantUUID")
- will return "4598a404-00e1-42a6-8767-0bda343e2066". - - * @param metadata - metadata object. - * @param metadataPropertyName - the name of the metadata property. - * @return metadata property value - */ - public String getMetadataPropertyValue(Metadata metadata, String metadataPropertyName); - - - /** - * Get input leaf value for the CSAR service, by full path separated by #.
- * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for an input full path. - * The expected format is "input_name#default[optionally #rest_of_path]" - * @param inputLeafValuePath by full path separated by #. - * @return input leaf value for the service. - */ - public String getServiceInputLeafValueOfDefault(String inputLeafValuePath); - - /** - * Get input leaf value for the CSAR service, by full path separated by #.
- * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for an input full path. - * The expected format is "input_name#default[optionally #rest_of_path]" - * @param inputLeafValuePath by full path separated by #. - * @return input value for the service as Object. It's up to the caller to cast it to a proper type. - */ - public Object getServiceInputLeafValueOfDefaultAsObject(String inputLeafValuePath); - - /** - * Get the type name of the CSAR service's substitution mappings element.
- * - * For the below:

- * - * substitution_mappings:
-   type: org.openecomp.services.ViprATM
- - calling
- getServiceSubstitutionMappingsTypeName()
- will return "org.openecomp.services.ViprATM" - * @return - the type name of the CSAR service's substitution mappings element - */ - public String getServiceSubstitutionMappingsTypeName(); - - /** - * Get service Metadata object.
- * This object represents the "metadata" section of a CSAR service. - * @return - the service Metadata object. - */ - public Metadata getServiceMetadata(); - - /** - * Get the CSAR service metadata as map. - * @return - the service metadata object as Map. - * @deprecated This function is deprecated since its not tosca compliant.
- * Tosca defines the Metadata section as map of string (not map of object).
- * This function is targeted to be removed as part of 1802.
- * Please use {@link #getServiceMetadataAllProperties() getServiceMetadataAllProperties()}. - */ - @Deprecated - public Map getServiceMetadataProperties(); - - /** - * Get the CSAR service metadata as map - * @return - the service metadata object as Map - */ - public Map getServiceMetadataAllProperties(); - - /** - * Get all VFC node templates from a specified VF. - * @param vfCustomizationId - customizationUuid of the VF node template. - * @return all VFC node templates from a specified VF - */ - public List getVfcListByVf(String vfCustomizationId); - - /** - * Get all CP node templates from a specified VF. - * @param vfCustomizationId - customizationUuid of the VF node template. - * @return all CP node templates from a specified VF - */ - public List getCpListByVf(String vfCustomizationId); - - /** - * Get all members of this group definition.
- * - * For example, for this group definition:

- * - * ViprAtm..vIPR-ATM-Base..module-0:
-   type: org.openecomp.groups.VfModule
-   .................
-   members: [vIPR_ATM_Ha_Two, vIPR_ATM_Ha_One, vIPR_ATM_OAM_SG, vIPR_ATM_HA_TWO_SG, vIPR_ATM_HA_ONE_SG]

- - calling
- getMembersOfVfModule(NoteTemplate vfNodeTemplate, Group group)
- will return List of the following Node templates in the vfNodeTemplate: "vIPR_ATM_Ha_Two, vIPR_ATM_Ha_One, vIPR_ATM_OAM_SG, vIPR_ATM_HA_TWO_SG, vIPR_ATM_HA_ONE_SG"
- * @param vf - VF to return the node templates from. - * @param vfModule - group to return the members from. - * @return node templates from vf with the names as in members section. - * - */ - public List getMembersOfVfModule(NodeTemplate vf, Group vfModule); - - - /** - * Get list of node template pairs, where for each pair,
- * the left node template in pair has requirement with name reqName,
- * which should be satisfied with respective capability by the right node template in pair.
- * - * For example, if we have the below two node templates in the vIPR VF:

- * - * oam_extCP:
-   type: org.openecomp.resources.cp.extCP
-   requirements:
-     - virtualBinding: vipr_atm_firewall

- * - * vipr_atm_firewall:
-   type: org.openecomp.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm
- ........

- * - - * calling
- * getNodeTemplatePairsByReqName(getCpListByVf(viprCustomUuid), getVfcListByVf(viprCustomUuid), "virtualBinding")
- * will return a list with one Pair - where left element of pair will be "oam_extCP" node template,
- * and right element will be "vipr_atm_firewall" node template.
- * - * @param listOfReqNodeTemplates - list of node templates in which the "reqName" requirement should be looked. - * @param listOfCapNodeTemplates - list of node templates in which the capability matching the "reqName" requirement should be looked. - * @param reqName - the name of a requirement definition to match by. - * @return pairs of node templates according to described above. - */ - public List> getNodeTemplatePairsByReqName(List listOfReqNodeTemplates, List listOfCapNodeTemplates, String reqName); - - /** - * Get all allotted node templates from this service. - * @return all allotted node templates from this service. - */ - public List getAllottedResources(); - - /** - * Get node_type of a node template.
- * - * For this node template:
- * - * vipr_atm_firewall:
-   type: org.openecomp.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm
- ........

- * - * the function will return "org.openecomp.resources.vfc.ViprAtm.abstract.nodes.heat.vipr_atm" - * - * @param nodeTemplate - node template object - * @return - node type string. - */ - public String getTypeOfNodeTemplate(NodeTemplate nodeTemplate); - - /** - * Get the CSAR service inputs list. - * @return - the service inputs list. - */ - public List getServiceInputs(); - - - /** - * Get the conformance level of this CSAR.
- * The conformance level value of the CSAR is located in csar.meta file at the top level of the CSAR file.
- * For 1707 CSARs, the conformance level is 3.0. - * @return the conformance level of the CSAR. - */ - public String getConformanceLevel(); - - - /** - * Get the map of CP-related props from a VFC node template.
- * Let's say there are 5 CPs related to this VFC. Then the output will look like this:

- * {port_fe1_sigtran={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_1", network_role_tag="SIGNET_vrf_B1_direct"},
- * port_fe_cluster={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
- * port_fe_slan={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
- * port_fe_interce={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},
- * port_fe_oam={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_2", network_role_tag="Mobility_OAM_protected"}}

- * @param vfc - VFC node template to look for CP-related props. - * @return map CP node template name to a map of full path to a property on this CP - value of this property on this CP. - * @deprecated This function is deprecated since its flattened form doesn't provide solution for cp properties of type List. - * Will be removed in 1802. - */ - @Deprecated - public Map> getCpPropertiesFromVfc(NodeTemplate vfc); - - /** - * Get the map of CP-related props from a VFC node template.
- * Let's say there are 2 CPs (ports) related to this VFC. Then the output will look like this:

- * {port_fe_sigtran={ip_requirements={ip_count_required: {count: 1}, dhcp_enabled: true, ip_version: 4}, subnetpoolid: "subnet_1", network_role_tag: "SIGNET_vrf_B1_direct"}
- * port_fe_cluster={ip_requirements={ip_count_required: {count: 2}, dhcp_enabled: true, ip_version: 4}}
- * @param vfc - VFC node template to look for CP-related props. - * @return map CP node template name to a map of property name - property value as object. - */ - public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc); - - /** - * Get customization UUID of a node template - * @param nt - node template - * @return customization UUID of a node template. - */ - public String getNodeTemplateCustomizationUuid(NodeTemplate nt); - - /** - * Filter Node Template property values by equals/contains operator and a pattern - * @param nodeTemplate Node Template to filter its properties - * @param filterType filter type - equals or contains - * @param pattern value to filter with it - * @return Map full path to a property mapped to property value filtered by type and pattern - */ - public Map filterNodeTemplatePropertiesByValue(NodeTemplate nodeTemplate, FilterType filterType, String pattern); - - /** - * Get all node templates by sdcType for parent Node Template. - * - * @param parentNodeTemplate - parent node template - * @param sdcType - the SDC type of the node. - * @return node templates of this SDC type. - */ - public List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType); - - /** - * Get all node templates by SDC type enum for this CSAR service. - * - * @param sdcType - the SDC type of the node (for example, CP, VF...). - * @return service node templates of this SDC type. - */ - public List getServiceNodeTemplateBySdcType(SdcTypes sdcType); - - /** - * Get all node templates for this CSAR service. - * @param vfCustomizationUuid - the Customization UUID of the node. - * @return VNF Configuration Node Template. - */ - public NodeTemplate getVnfConfig(String vfCustomizationUuid); - - /** - * Check if Node Template has Topology Template - * @param nodeTemplate - Node Template to check - * @return true if node template has topology template, false if not. - */ - public boolean hasTopology(NodeTemplate nodeTemplate); - - /** - * Get children node templates for node template. - * @param nodeTemplate - Node Template to get its children - * @return return list of children node templates for node template. - */ - public List getNodeTemplateChildren(NodeTemplate nodeTemplate); - - /** - * Get node template on service level by node template name. - * @param nodeName - the name of the node template. - * @return service-level node template with this name, or null if no such node template was found. - */ - public NodeTemplate getServiceNodeTemplateByNodeName(String nodeName); - - /** - * Get node template Metadata object.
- * This object represents the "metadata" section of node template. - * @param nt - Node template to get its Metadata object. - * @return Metadata for this node template, or null if not found. - */ - public Metadata getNodeTemplateMetadata(NodeTemplate nt); - - /** - * Get CapabilityAssignments object for this node template.
- * This should be an entry point function for working with capability assignments of node template.
- * This object allows filtering capability assignments objects.
- * @param nt - Node Template to get its capability assignments. - * @return CapabilitiesAssignments that contains list of capability assignments for the node template.
- * If none found, an empty list will be returned. - */ - public CapabilityAssignments getCapabilitiesOf(NodeTemplate nt); - - /** - * Get RequirementAssignments object for this node template.
- * This should be an entry point function for working with requirement assignments of node template.
- * This object allows filtering requirement assignments objects.
- * @param nt - Node Template to get its requirement assignments. - * @return RequirementAssignments that contains list of requirement assignments for the node template. - * If none found, an empty list will be returned. - */ - public RequirementAssignments getRequirementsOf(NodeTemplate nt); - - /** - * Get any property leaf value for capability by full path separated by #. - * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a capability assignment. - * @param capability - capability assignment where the property should be looked up. - * @param pathToPropertyLeafValue - the full path of the required property. - * @return the leaf value as String, or null if there's no such property, or it's not a leaf. - */ - public String getCapabilityPropertyLeafValue(CapabilityAssignment capability, String pathToPropertyLeafValue); - -} \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/api/Version.java b/src/main/java/org/openecomp/sdc/tosca/parser/api/Version.java deleted file mode 100644 index 473e3a8..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/api/Version.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.openecomp.sdc.tosca.parser.api; - -public class Version implements Comparable { - - private String version; - - public final String get() { - return this.version; - } - - public Version(String version) { - if(version == null) - throw new IllegalArgumentException("Version can not be null"); - if(!version.matches("[0-9]+(\\.[0-9]+)*")) - throw new IllegalArgumentException("Invalid version format"); - this.version = version; - } - - @Override public int compareTo(Version that) { - if(that == null) - return 1; - String[] thisParts = this.get().split("\\."); - String[] thatParts = that.get().split("\\."); - int length = Math.max(thisParts.length, thatParts.length); - for(int i = 0; i < length; i++) { - int thisPart = i < thisParts.length ? - Integer.parseInt(thisParts[i]) : 0; - int thatPart = i < thatParts.length ? - Integer.parseInt(thatParts[i]) : 0; - if(thisPart < thatPart) - return -1; - if(thisPart > thatPart) - return 1; - } - return 0; - } - - @Override public boolean equals(Object that) { - if(this == that) - return true; - if(that == null) - return false; - if(this.getClass() != that.getClass()) - return false; - return this.compareTo((Version) that) == 0; - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/Configuration.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/Configuration.java deleted file mode 100644 index 1d00d14..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/Configuration.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.openecomp.sdc.tosca.parser.config; - -import org.openecomp.sdc.tosca.parser.api.ConformanceLevel; - -public class Configuration { - - private ConformanceLevel conformanceLevel; - - public ConformanceLevel getConformanceLevel() { - return conformanceLevel; - } - - public void setConformanceLevel(ConformanceLevel conformanceLevel) { - this.conformanceLevel = conformanceLevel; - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/ConfigurationManager.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/ConfigurationManager.java deleted file mode 100644 index f2fc903..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/ConfigurationManager.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.openecomp.sdc.tosca.parser.config; - -import com.google.common.base.Charsets; -import com.google.common.io.Resources; -import org.openecomp.sdc.tosca.parser.utils.YamlToObjectConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - - -public class ConfigurationManager { - - private static Logger log = LoggerFactory.getLogger(ConfigurationManager.class.getName()); - - private static final String CONFIGURATION_DIR = "config/"; - private static volatile ConfigurationManager instance; - - - Map configurations = new HashMap(); - - private ConfigurationManager() { - initialConfigObjectsFromFiles(); - } - - private void initialConfigObjectsFromFiles() { - loadConfigurationClass(ErrorConfiguration.class); - loadConfigurationClass(Configuration.class); - loadConfigurationClass(JtoscaValidationIssueConfiguration.class); - } - - private void loadConfigurationClass(Class clazz) { - T object = getObjectFromYaml(clazz); - configurations.put(clazz.getSimpleName(), object); - } - - private void loadConfigurationClass(Class clazz, String fileName) { - T object = getObjectFromYaml(clazz,fileName); - configurations.put(clazz.getSimpleName(), object); - } - - public static T getObjectFromYaml(Class className) { - return getObjectFromYaml(className, null); - } - - public static T getObjectFromYaml(Class className, String fileName) { - - - String configFileName = fileName != null ? fileName : calculateFileName(className); ; - - URL url = Resources.getResource(CONFIGURATION_DIR + configFileName); - String configFileContents = null; - try { - configFileContents = Resources.toString(url, Charsets.UTF_8); - } catch (IOException e) { - log.error("ConfigurationManager - Failed to load configuration file {}", configFileName, e); - } - YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter(); - T object = yamlToObjectConverter.convertFromString(configFileContents, className); - - return object; - } - - - public static ConfigurationManager getInstance() { - if (instance == null) { - synchronized (ConfigurationManager.class) { - if (instance == null) { - instance = new ConfigurationManager(); - } - } - } - return instance; - } - - private static String calculateFileName(Class className) { - - String[] words = className.getSimpleName().split("(?=\\p{Upper})"); - - StringBuilder builder = new StringBuilder(); - - // There cannot be a null value returned from "split" - words != null is - // redundant - // if (words != null) { - boolean isFirst = true; - for (int i = 0; i < words.length; i++) { - - String word = words[i]; - if (word != null && !word.isEmpty()) { - if (!isFirst) { - builder.append("-"); - } else { - isFirst = false; - } - builder.append(words[i].toLowerCase()); - } - } - return builder.toString() + ".yaml"; - - /* - * } else { return className.getSimpleName().toLowerCase() + Constants.YAML_SUFFIX; } - */ - - } - - public ErrorConfiguration getErrorConfiguration() { - return (ErrorConfiguration) configurations.get((ErrorConfiguration.class.getSimpleName())); - } - public JtoscaValidationIssueConfiguration getJtoscaValidationIssueConfiguration() { - return (JtoscaValidationIssueConfiguration) configurations.get((JtoscaValidationIssueConfiguration.class.getSimpleName())); - } - public void setJtoscaValidationIssueConfiguration(String fileName) { - loadConfigurationClass(JtoscaValidationIssueConfiguration.class, fileName); - } - public Configuration getConfiguration() { - return (Configuration) configurations.get((Configuration.class.getSimpleName())); - } - public void setErrorConfiguration(String fileName) { - loadConfigurationClass(ErrorConfiguration.class, fileName); - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorConfiguration.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorConfiguration.java deleted file mode 100644 index 59e8c6d..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorConfiguration.java +++ /dev/null @@ -1,46 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.config; - -import java.util.Map; - -public class ErrorConfiguration { - - private Map errors; - - public Map getErrors() { - return errors; - } - - public void setErrors(Map errors) { - this.errors = errors; - } - - public ErrorInfo getErrorInfo(String key) { - ErrorInfo clone = null; - ErrorInfo other = errors.get(key); - if (other != null) { - clone = new ErrorInfo(); - clone.cloneData(other); - } - return clone; - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorInfo.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorInfo.java deleted file mode 100644 index 34983ef..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/ErrorInfo.java +++ /dev/null @@ -1,59 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.config; - -public class ErrorInfo { - - private String code; - private String message; - private boolean failOnError; - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean getFailOnError() { - return failOnError; - } - - public void setFailOnError(boolean failOnError) { - this.failOnError = failOnError; - } - - public void cloneData(ErrorInfo other) { - this.code = other.getCode(); - this.message = other.getMessage(); - this.failOnError = other.getFailOnError(); - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/JToscaValidationIssueInfo.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/JToscaValidationIssueInfo.java deleted file mode 100644 index 31ab0a0..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/JToscaValidationIssueInfo.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.openecomp.sdc.tosca.parser.config; - -public class JToscaValidationIssueInfo { - - private String issueType; - private String sinceCsarConformanceLevel; - - public JToscaValidationIssueInfo() {} - - public String getIssueType() { - return issueType; - } - - public void setIssueType(String issueType) { - this.issueType = issueType; - } - - public String getSinceCsarConformanceLevel() { - return sinceCsarConformanceLevel; - } - - public void setSinceCsarConformanceLevel(String sinceCsarConformanceLevel) { - this.sinceCsarConformanceLevel = sinceCsarConformanceLevel; - } - - public void cloneData(JToscaValidationIssueInfo other) { - this.issueType = other.getIssueType(); - this.sinceCsarConformanceLevel = other.getSinceCsarConformanceLevel(); - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java deleted file mode 100644 index ff13251..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/JtoscaValidationIssueConfiguration.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.config; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class JtoscaValidationIssueConfiguration { - - private Map> validationIssues; - - public Map> getValidationIssues() { - return validationIssues; - } - - public void setValidationIssues(Map> validationIssues) { - this.validationIssues = validationIssues; - } - - public List getJtoscaValidationIssueInfo(String key) { - List clone = new ArrayList<>(); - List other = validationIssues.get(key); - if (other != null) { - for (JToscaValidationIssueInfo item: other) { - JToscaValidationIssueInfo cloneitem = new JToscaValidationIssueInfo(); - cloneitem.cloneData(item); - clone.add(cloneitem); - } - } - return clone; - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/config/SdcToscaParserErrors.java b/src/main/java/org/openecomp/sdc/tosca/parser/config/SdcToscaParserErrors.java deleted file mode 100644 index ce84a9c..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/config/SdcToscaParserErrors.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.openecomp.sdc.tosca.parser.config; - -import java.util.EnumMap; -import java.util.Map; - -import org.openecomp.sdc.toscaparser.api.utils.JToscaErrorCodes; - -public enum SdcToscaParserErrors { - - BAD_FORMAT, CONFORMANCE_LEVEL_ERROR, FILE_NOT_FOUND, GENERAL_ERROR; - - private static final Map JTOSCA_ERRORS = - new EnumMap(JToscaErrorCodes.class) {{ - - put(JToscaErrorCodes.GENERAL_ERROR, GENERAL_ERROR); - - put(JToscaErrorCodes.PATH_NOT_VALID, FILE_NOT_FOUND); - //CSAR contents problems - put(JToscaErrorCodes.MISSING_META_FILE, BAD_FORMAT); - put(JToscaErrorCodes.INVALID_META_YAML_CONTENT, BAD_FORMAT); - put(JToscaErrorCodes.ENTRY_DEFINITION_NOT_DEFINED, BAD_FORMAT); - put(JToscaErrorCodes.MISSING_ENTRY_DEFINITION_FILE, BAD_FORMAT); - put(JToscaErrorCodes.CSAR_TOSCA_VALIDATION_ERROR, BAD_FORMAT); - put(JToscaErrorCodes.INVALID_CSAR_FORMAT, BAD_FORMAT); - }}; - - public static SdcToscaParserErrors getSdcErrorByJToscaError(JToscaErrorCodes jToscaErrorCode) { - return JTOSCA_ERRORS.get(jToscaErrorCode); - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/exceptions/SdcToscaParserException.java b/src/main/java/org/openecomp/sdc/tosca/parser/exceptions/SdcToscaParserException.java deleted file mode 100644 index a7fd99d..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/exceptions/SdcToscaParserException.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.openecomp.sdc.tosca.parser.exceptions; - -public class SdcToscaParserException extends Exception { - - private static final long serialVersionUID = 626014844866501196L; - private String code; - - public SdcToscaParserException(String string, String code) { - super(string); - this.code = code; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/FilterType.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/FilterType.java deleted file mode 100644 index 0f7810f..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/FilterType.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.openecomp.sdc.tosca.parser.impl; - -public enum FilterType { - - CONTAINS("contains"){ - @Override - public boolean isMatch(String value, String pattern) { - return value.contains(pattern); - } - }, - EQUALS("equals"){ - @Override - public boolean isMatch(String value, String pattern) { - return value.equals(pattern); - } - }; - - String filterName; - - FilterType(String name) { - this.filterName = name; - } - - public abstract boolean isMatch(String value, String pattern); - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/JToscaValidationIssueType.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/JToscaValidationIssueType.java deleted file mode 100644 index 1e68c51..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/JToscaValidationIssueType.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.openecomp.sdc.tosca.parser.impl; - -public enum JToscaValidationIssueType { - CRITICAL, - WARNING -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java deleted file mode 100644 index 901b315..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java +++ /dev/null @@ -1,912 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * sdc-distribution-client - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.impl; - -import java.util.*; -import java.util.Map.Entry; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; -import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper; -import org.openecomp.sdc.tosca.parser.config.ConfigurationManager; -import org.openecomp.sdc.toscaparser.api.CapabilityAssignments; -import org.openecomp.sdc.tosca.parser.utils.GeneralUtility; -import org.openecomp.sdc.toscaparser.api.RequirementAssignments; -import org.openecomp.sdc.tosca.parser.utils.SdcToscaUtility; -import org.openecomp.sdc.toscaparser.api.*; -import org.openecomp.sdc.toscaparser.api.elements.Metadata; -import org.openecomp.sdc.toscaparser.api.elements.NodeType; -import org.openecomp.sdc.toscaparser.api.functions.Function; -import org.openecomp.sdc.toscaparser.api.parameters.Input; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.openecomp.sdc.tosca.parser.impl.SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID; - -public class SdcCsarHelperImpl implements ISdcCsarHelper { - - private static final String PATH_DELIMITER = "#"; - private static final String CUSTOMIZATION_UUID = "customizationUUID"; - private ToscaTemplate toscaTemplate; - private ConfigurationManager configurationManager; - private static Logger log = LoggerFactory.getLogger(SdcCsarHelperImpl.class.getName()); - - public SdcCsarHelperImpl(ToscaTemplate toscaTemplate) { - this.toscaTemplate = toscaTemplate; - } - - public SdcCsarHelperImpl(ToscaTemplate toscaTemplate, ConfigurationManager configurationManager) { - this.toscaTemplate = toscaTemplate; - this.configurationManager = configurationManager; - } - - @Override - //Sunny flow - covered with UT, flat and nested - public String getNodeTemplatePropertyLeafValue(NodeTemplate nodeTemplate, String leafValuePath) { - if (nodeTemplate == null) { - log.error("getNodeTemplatePropertyLeafValue - nodeTemplate is null"); - return null; - } - if (GeneralUtility.isEmptyString(leafValuePath)) { - log.error("getNodeTemplatePropertyLeafValue - leafValuePath is null or empty"); - return null; - } - String[] split = getSplittedPath(leafValuePath); - LinkedHashMap properties = nodeTemplate.getProperties(); - Object property = processProperties(split, properties); - return property == null || property instanceof Function ? null : String.valueOf(property); - } - - @Override - public Object getNodeTemplatePropertyAsObject(NodeTemplate nodeTemplate, String leafValuePath) { - if (nodeTemplate == null) { - log.error("getNodeTemplatePropertyAsObject - nodeTemplate is null"); - return null; - } - if (GeneralUtility.isEmptyString(leafValuePath)) { - log.error("getNodeTemplatePropertyAsObject - leafValuePath is null or empty"); - return null; - } - String[] split = getSplittedPath(leafValuePath); - LinkedHashMap properties = nodeTemplate.getProperties(); - return processProperties(split, properties); - } - - public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc) { - if (vfc == null) { - log.error("getCpPropertiesFromVfc - vfc is null"); - return new HashMap<>(); - } - - String presetProperty = "_ip_requirements"; - Map> cps = new HashMap<>(); - - Map props = vfc.getProperties(); - if (props != null) { - // find all port names by pre-set property (ip_requirements) - for (Map.Entry entry : props.entrySet()) { - if (entry.getKey().endsWith(presetProperty)) { - String portName = entry.getKey().replaceAll(presetProperty, ""); - cps.put(portName, new HashMap<>()); - } - } - - if (cps.size() > 0) { - // ports found - find all their properties - for (String portName : cps.keySet()) { - for (Map.Entry property: props.entrySet()) { - if (property.getKey().startsWith(portName)) { - String portProperty = property.getKey().replaceFirst(portName + "_", ""); - if (property.getValue() != null) { - cps.get(portName).put(portProperty, property.getValue().getValue()); - } - } - } - } - } - } - - return cps; - } - - public Map> getCpPropertiesFromVfc(NodeTemplate vfc) { - - if (vfc == null) { - log.error("getCpPropertiesFromVfc - vfc is null"); - return new HashMap<>(); - } - - String presetProperty = "_ip_requirements"; - Map> cps = new HashMap<>(); - - Map props = vfc.getProperties(); - if (props != null) { - // find all port names by pre-set property (ip_requirements) - for (Map.Entry entry : props.entrySet()) { - if (entry.getKey().endsWith(presetProperty)) { - String portName = entry.getKey().replaceAll(presetProperty, ""); - cps.put(portName, new HashMap<>()); - } - } - - if (cps.size() > 0) { - // ports found - find all their properties - for (String portName : cps.keySet()) { - for (Map.Entry property: props.entrySet()) { - if (property.getKey().startsWith(portName)) { - Map portPaths = new HashMap<>(); - String portProperty = property.getKey().replaceFirst(portName + "_", ""); - buildPathMappedToValue(portProperty, property.getValue().getValue(), portPaths); - - cps.get(portName).putAll(portPaths); - } - } - } - } - } - - return cps; - } - - @SuppressWarnings("unchecked") - private void buildPathMappedToValue(String path, Object property, Map pathsMap) { - if (property instanceof Map) { - for (Map.Entry item : ((Map) property).entrySet()) { - if (item.getValue() instanceof Map || item.getValue() instanceof List) { - buildPathMappedToValue(path + PATH_DELIMITER + item.getKey(), item.getValue(), pathsMap); - } else { - pathsMap.put(path + PATH_DELIMITER + item.getKey(), item.getValue()); - } - } - } else if (property instanceof List) { - for (Object item: (List)property) { - buildPathMappedToValue(path, item, pathsMap); - } - } else { - pathsMap.put(path, property); - } - - } - - @Override - //Sunny flow - covered with UT - public List getServiceVlList() { - List serviceVlList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VL); - return serviceVlList; - } - - @Override - //Sunny flow - covered with UT - public List getServiceVfList() { - List serviceVfList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VF); - return serviceVfList; - } - - @Override - //Sunny flow - covered with UT - public String getMetadataPropertyValue(Metadata metadata, String metadataPropertyName) { - if (GeneralUtility.isEmptyString(metadataPropertyName)) { - log.error("getMetadataPropertyValue - the metadataPropertyName is null or empty"); - return null; - } - if (metadata == null) { - log.error("getMetadataPropertyValue - the metadata is null"); - return null; - } - String metadataPropertyValue = metadata.getValue(metadataPropertyName); - return metadataPropertyValue; - } - - - @Override - //Sunny flow - covered with UT - public List getServiceNodeTemplatesByType(String nodeType) { - if (GeneralUtility.isEmptyString(nodeType)) { - log.error("getServiceNodeTemplatesByType - nodeType - is null or empty"); - return new ArrayList<>(); - } - - List res = new ArrayList<>(); - List nodeTemplates = toscaTemplate.getNodeTemplates(); - for (NodeTemplate nodeTemplate : nodeTemplates) { - if (nodeType.equals(nodeTemplate.getTypeDefinition().getType())) { - res.add(nodeTemplate); - } - } - - return res; - } - - - @Override - public List getServiceNodeTemplates() { - List nodeTemplates = toscaTemplate.getNodeTemplates(); - return nodeTemplates; - } - - @Override - //Sunny flow - covered with UT - public List getVfcListByVf(String vfCustomizationId) { - if (GeneralUtility.isEmptyString(vfCustomizationId)) { - log.error("getVfcListByVf - vfCustomizationId - is null or empty"); - return new ArrayList<>(); - } - - List serviceVfList = getServiceVfList(); - NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationId); - List vfcs = getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC); - vfcs.addAll(getNodeTemplateBySdcType(vfInstance, SdcTypes.CVFC)); - - return vfcs; - } - - @Override - //Sunny flow - covered with UT - public List getVfModulesByVf(String vfCustomizationUuid) { - List serviceVfList = getServiceVfList(); - NodeTemplate nodeTemplateByCustomizationUuid = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationUuid); - if (nodeTemplateByCustomizationUuid != null) { - /*SubstitutionMappings substitutionMappings = nodeTemplateByCustomizationUuid.getSubstitutionMappings(); - if (substitutionMappings != null){ - List groups = substitutionMappings.getGroups(); - if (groups != null){ - List collect = groups.stream().filter(x -> "org.openecomp.groups.VfModule".equals(x.getTypeDefinition().getType())).collect(Collectors.toList()); - log.debug("getVfModulesByVf - VfModules are {}", collect); - return collect; - } - }*/ - String name = nodeTemplateByCustomizationUuid.getName(); - String normaliseComponentInstanceName = SdcToscaUtility.normaliseComponentInstanceName(name); - List serviceLevelGroups = toscaTemplate.getTopologyTemplate().getGroups(); - log.debug("getVfModulesByVf - VF node template name {}, normalized name {}. Searching groups on service level starting with VF normalized name...", name, normaliseComponentInstanceName); - if (serviceLevelGroups != null) { - List collect = serviceLevelGroups - .stream() - .filter(x -> "org.openecomp.groups.VfModule".equals(x.getTypeDefinition().getType()) && x.getName().startsWith(normaliseComponentInstanceName)) - .collect(Collectors.toList()); - return collect; - } - } - return new ArrayList<>(); - } - - @Override - //Sunny flow - covered with UT - public String getServiceInputLeafValueOfDefault(String inputLeafValuePath) { - if (GeneralUtility.isEmptyString(inputLeafValuePath)) { - log.error("getServiceInputLeafValueOfDefault - inputLeafValuePath is null or empty"); - return null; - } - - String[] split = getSplittedPath(inputLeafValuePath); - if (split.length < 2 || !split[1].equals("default")) { - log.error("getServiceInputLeafValue - inputLeafValuePath should be of format #default[optionally #] "); - return null; - } - - List inputs = toscaTemplate.getInputs(); - if (inputs != null) { - Optional findFirst = inputs.stream().filter(x -> x.getName().equals(split[0])).findFirst(); - if (findFirst.isPresent()) { - Input input = findFirst.get(); - Object current = input.getDefault(); - Object property = iterateProcessPath(2, current, split); - return property == null || property instanceof Function? null : String.valueOf(property); - } - } - log.error("getServiceInputLeafValue - value not found"); - return null; - } - - @Override - public Object getServiceInputLeafValueOfDefaultAsObject(String inputLeafValuePath) { - if (GeneralUtility.isEmptyString(inputLeafValuePath)) { - log.error("getServiceInputLeafValueOfDefaultAsObject - inputLeafValuePath is null or empty"); - return null; - } - - String[] split = getSplittedPath(inputLeafValuePath); - if (split.length < 2 || !split[1].equals("default")) { - log.error("getServiceInputLeafValueOfDefaultAsObject - inputLeafValuePath should be of format #default[optionally #] "); - return null; - } - - List inputs = toscaTemplate.getInputs(); - if (inputs != null) { - Optional findFirst = inputs.stream().filter(x -> x.getName().equals(split[0])).findFirst(); - if (findFirst.isPresent()) { - Input input = findFirst.get(); - Object current = input.getDefault(); - return iterateProcessPath(2, current, split); - } - } - log.error("getServiceInputLeafValueOfDefaultAsObject - value not found"); - return null; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private Object iterateProcessPath(Integer index, Object current, String[] split) { - if (current == null) { - log.error("iterateProcessPath - this input has no default"); - return null; - } - if (split.length > index) { - for (int i = index; i < split.length; i++) { - if (current instanceof Map) { - current = ((Map) current).get(split[i]); - } else if (current instanceof List) { - current = ((List) current).get(0); - i--; - } - else { - log.error("iterateProcessPath - found an unexpected leaf where expected to find a complex type"); - return null; - } - } - } - if (current != null) { - return current; - } - log.error("iterateProcessPath - Path not Found"); - return null; - } - - private String[] getSplittedPath(String inputLeafValuePath) { - return inputLeafValuePath.split(PATH_DELIMITER); - } - - - @Override - //Sunny flow - covered with UT - public String getServiceSubstitutionMappingsTypeName() { - SubstitutionMappings substitutionMappings = toscaTemplate.getTopologyTemplate().getSubstitutionMappings(); - if (substitutionMappings == null) { - log.debug("getServiceSubstitutionMappingsTypeName - No Substitution Mappings defined"); - return null; - } - - NodeType nodeType = substitutionMappings.getNodeDefinition(); - if (nodeType == null) { - log.debug("getServiceSubstitutionMappingsTypeName - No Substitution Mappings node defined"); - return null; - } - - return nodeType.getType(); - } - - @Override - //Sunny flow - covered with UT - public Metadata getServiceMetadata() { - return toscaTemplate.getMetaData(); - } - - @Override - //Sunny flow - covered with UT - public Map getServiceMetadataProperties() { - if (toscaTemplate.getMetaData() == null){ - return null; - } - return new HashMap<>(toscaTemplate.getMetaData().getAllProperties()); - } - - @Override - public Map getServiceMetadataAllProperties() { - if (toscaTemplate.getMetaData() == null){ - return null; - } - return toscaTemplate.getMetaData().getAllProperties(); - } - - @Override - //Sunny flow - covered with UT - public List getServiceInputs() { - return toscaTemplate.getInputs(); - } - - @Override - //Sunny flow - covered with UT - public String getGroupPropertyLeafValue(Group group, String leafValuePath) { - if (group == null) { - log.error("getGroupPropertyLeafValue - group is null"); - return null; - } - - if (GeneralUtility.isEmptyString(leafValuePath)) { - log.error("getGroupPropertyLeafValue - leafValuePath is null or empty"); - return null; - } - - String[] split = getSplittedPath(leafValuePath); - LinkedHashMap properties = group.getProperties(); - Object property = processProperties(split, properties); - return property == null || property instanceof Function? null : String.valueOf(property); - } - - @Override - public Object getGroupPropertyAsObject(Group group, String leafValuePath) { - if (group == null) { - log.error("getGroupPropertyAsObject - group is null"); - return null; - } - - if (GeneralUtility.isEmptyString(leafValuePath)) { - log.error("getGroupPropertyAsObject - leafValuePath is null or empty"); - return null; - } - - String[] split = getSplittedPath(leafValuePath); - LinkedHashMap properties = group.getProperties(); - return processProperties(split, properties); - } - - @Override - //Sunny flow - covered with UT - public List getCpListByVf(String vfCustomizationId) { - List cpList = new ArrayList<>(); - if (GeneralUtility.isEmptyString(vfCustomizationId)) { - log.error("getCpListByVf vfCustomizationId string is empty"); - return cpList; - } - - List serviceVfList = getServiceVfList(); - if (serviceVfList == null || serviceVfList.size() == 0) { - log.error("getCpListByVf Vfs not exist for vfCustomizationId {}", vfCustomizationId); - return cpList; - } - NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationId); - if (vfInstance == null) { - log.debug("getCpListByVf vf list is null"); - return cpList; - } - cpList = getNodeTemplateBySdcType(vfInstance, SdcTypes.CP); - if (cpList == null || cpList.size() == 0) - log.debug("getCpListByVf cps not exist for vfCustomizationId {}", vfCustomizationId); - return cpList; - } - - @Override - //Sunny flow - covered with UT - public List getMembersOfVfModule(NodeTemplate vf, Group serviceLevelVfModule) { - if (vf == null) { - log.error("getMembersOfVfModule - vf is null"); - return new ArrayList<>(); - } - - if (serviceLevelVfModule == null || serviceLevelVfModule.getMetadata() == null || serviceLevelVfModule.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID) == null) { - log.error("getMembersOfVfModule - vfModule or its metadata is null. Cannot match a VF group based on invariantUuid from missing metadata."); - return new ArrayList<>(); - } - - - SubstitutionMappings substitutionMappings = vf.getSubMappingToscaTemplate(); - if (substitutionMappings != null) { - List groups = substitutionMappings.getGroups(); - if (groups != null) { - Optional findFirst = groups - .stream() - .filter(x -> (x.getMetadata() != null && serviceLevelVfModule.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID).equals(x.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)))).findFirst(); - if (findFirst.isPresent()) { - List members = findFirst.get().getMembers(); - if (members != null) { - List collect = substitutionMappings.getNodeTemplates().stream().filter(x -> members.contains(x.getName())).collect(Collectors.toList()); - return collect; - } - } - } - } - return new ArrayList<>(); - } - - @Override - //Sunny flow - covered with UT - @SuppressWarnings("unchecked") - public List> getNodeTemplatePairsByReqName( - List listOfReqNodeTemplates, List listOfCapNodeTemplates, String reqName) { - - if (listOfReqNodeTemplates == null) { - log.error("getNodeTemplatePairsByReqName - listOfReqNodeTemplates is null"); - return new ArrayList<>(); - } - - if (listOfCapNodeTemplates == null) { - log.error("getNodeTemplatePairsByReqName - listOfCapNodeTemplates is null"); - return new ArrayList<>(); - } - - if (GeneralUtility.isEmptyString(reqName)) { - log.error("getNodeTemplatePairsByReqName - reqName is null or empty"); - return new ArrayList<>(); - } - - List> pairsList = new ArrayList<>(); - - for (NodeTemplate reqNodeTemplate : listOfReqNodeTemplates) { - List requirements = reqNodeTemplate.getRequirements().getRequirementsByName(reqName).getAll(); - for (RequirementAssignment reqEntry : requirements) { - String node = reqEntry.getNodeTemplateName(); - if (node != null) { - Optional findFirst = listOfCapNodeTemplates.stream().filter(x -> x.getName().equals(node)).findFirst(); - if (findFirst.isPresent()) { - pairsList.add(new ImmutablePair(reqNodeTemplate, findFirst.get())); - } - } - } - } - - return pairsList; - } - - @Override - //Sunny flow - covered with UT - //TODO constant strings - public List getAllottedResources() { - List nodeTemplates = null; - nodeTemplates = toscaTemplate.getTopologyTemplate().getNodeTemplates(); - if (nodeTemplates.isEmpty()) { - log.error("getAllottedResources nodeTemplates not exist"); - } - nodeTemplates = nodeTemplates.stream().filter( - x -> x.getMetaData() != null && x.getMetaData().getValue("category").equals("Allotted Resource")) - .collect(Collectors.toList()); - if (nodeTemplates.isEmpty()) { - log.debug("getAllottedResources - allotted resources not exist"); - } else { - } - - return nodeTemplates; - } - - @Override - //Sunny flow - covered with UT - public String getTypeOfNodeTemplate(NodeTemplate nodeTemplate) { - if (nodeTemplate == null) { - - log.error("getTypeOfNodeTemplate nodeTemplate is null"); - return null; - } - return nodeTemplate.getTypeDefinition().getType(); - } - - /** - * This methdd is returning the csarConformanceLevel for input CSAR - * When csarConformanceLevel is configured with failOnError as False in Error Configuration; it - * assigns the default value to csarConformanceLevel which is the max level provided in - * Configuration file - * @return csarConformanceLevel - */ - @Override - public String getConformanceLevel() { - LinkedHashMap csarMeta = toscaTemplate.getMetaProperties("csar.meta"); - if (csarMeta == null){ - log.warn("No csar.meta file is found in CSAR - this file should hold the conformance level of the CSAR. This might be OK for older CSARs."); - if (configurationManager != null && !configurationManager.getErrorConfiguration() - .getErrorInfo("CONFORMANCE_LEVEL_ERROR").getFailOnError()){ - String csarConLevel = configurationManager.getConfiguration().getConformanceLevel().getMaxVersion(); - log.warn("csarConformanceLevel is not found in input csar; defaulting to max version {}" , csarConLevel); - return csarConLevel; - } - else { - log.warn("csarConformanceLevel is not found in input csar; returning null as no defaults defined in error configuration"); - return null; - } - } - - Object conformanceLevel = csarMeta.get("SDC-TOSCA-Definitions-Version"); - if (conformanceLevel != null){ - String confLevelStr = conformanceLevel.toString(); - log.debug("CSAR conformance level is {}", confLevelStr); - return confLevelStr; - } else { - log.error("Invalid csar.meta file - no entry found for SDC-TOSCA-Definitions-Version key. This entry should hold the conformance level."); - return null; - } - } - - - @Override - public String getNodeTemplateCustomizationUuid(NodeTemplate nt) { - String res = null; - if (nt != null && nt.getMetaData() != null){ - res = nt.getMetaData().getValue(CUSTOMIZATION_UUID); - } else { - log.error("Node template or its metadata is null"); - } - return res; - } - - public List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType) { - return getNodeTemplateBySdcType(parentNodeTemplate, sdcType, false); - } - - private List getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType, boolean isVNF) { - - if (parentNodeTemplate == null) { - log.error("getNodeTemplateBySdcType - nodeTemplate is null or empty"); - return new ArrayList<>(); - } - - if (sdcType == null) { - log.error("getNodeTemplateBySdcType - sdcType is null or empty"); - return new ArrayList<>(); - } - - SubstitutionMappings substitutionMappings = parentNodeTemplate.getSubMappingToscaTemplate(); - - if (substitutionMappings != null) { - List nodeTemplates = substitutionMappings.getNodeTemplates(); - if (nodeTemplates != null && nodeTemplates.size() > 0) { - if (sdcType.equals(SdcTypes.VFC) && isVNF) { - return nodeTemplates.stream() - .filter(x -> (x.getMetaData() != null && - sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && isVNFType(x)) - .collect(Collectors.toList()); - } - else { - return nodeTemplates.stream() - .filter(x -> (x.getMetaData() != null && - sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && !isVNFType(x)) - .collect(Collectors.toList()); - } - } - else { - log.debug("getNodeTemplateBySdcType - SubstitutionMappings' node Templates not exist"); - } - } else - log.debug("getNodeTemplateBySdcType - SubstitutionMappings not exist"); - - return new ArrayList<>(); - } - - public Map filterNodeTemplatePropertiesByValue(NodeTemplate nodeTemplate, FilterType filterType, String pattern) { - Map filterMap = new HashMap<>(); - - if (nodeTemplate == null) { - log.error("filterNodeTemplatePropertiesByValue nodeTemplate is null"); - return filterMap; - } - - if (filterType == null) { - log.error("filterNodeTemplatePropertiesByValue filterType is null"); - return filterMap; - } - - if (GeneralUtility.isEmptyString(pattern)) { - log.error("filterNodeTemplatePropertiesByValue pattern string is empty"); - return filterMap; - } - - Map ntProperties = nodeTemplate.getProperties(); - - if (ntProperties != null && ntProperties.size() > 0) { - - for (Property current : ntProperties.values()) { - filterProperties(current.getValue(), current.getName(), filterType, pattern, filterMap); - } - } - - log.trace("filterNodeTemplatePropertiesByValue - filterMap value: {}", filterMap); - - return filterMap; - } - - public NodeTemplate getVnfConfig(String vfCustomizationUuid) { - - if (GeneralUtility.isEmptyString(vfCustomizationUuid)) { - log.error("getVnfConfig - vfCustomizationId - is null or empty"); - return null; - } - - List serviceVfList = getServiceVfList(); - NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationUuid); - NodeTemplate vnfConfig = getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC, true).stream().findAny().orElse(null); - return vnfConfig; - } - - @Override - public boolean hasTopology(NodeTemplate nodeTemplate) { - if (nodeTemplate == null) { - log.error("hasTopology - nodeTemplate - is null"); - return false; - } - - if (nodeTemplate.getMetaData() != null) { - String type = nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE); - log.debug("hasTopology - node template {} is a {} type", nodeTemplate.getName(), type); - return SdcTypes.isComplex(type); - } - - return false; - } - - @Override - public List getNodeTemplateChildren(NodeTemplate nodeTemplate) { - if (nodeTemplate == null) { - log.error("getNodeTemplateChildren - nodeTemplate - is null"); - return new ArrayList<>(); - } - - SubstitutionMappings substitutionMappings = nodeTemplate.getSubMappingToscaTemplate(); - if (substitutionMappings != null) { - List nodeTemplates = substitutionMappings.getNodeTemplates(); - if (nodeTemplates != null && nodeTemplates.size() > 0) { - - return nodeTemplates.stream() - .filter(x -> !isVNFType(x)) - .collect(Collectors.toList()); - } - else { - log.debug("getNodeTemplateChildren - SubstitutionMappings' node Templates not exist"); - } - } else - log.debug("getNodeTemplateChildren - SubstitutionMappings not exist"); - - return new ArrayList<>(); - } - - @Override - public NodeTemplate getServiceNodeTemplateByNodeName(String nodeName) { - if (GeneralUtility.isEmptyString(nodeName)) { - log.error("getServiceNodeTemplateByNodeName - nodeName - is null or empty"); - return null; - } - - List nodeTemplates = getServiceNodeTemplates(); - Optional findFirst = nodeTemplates.stream().filter(nt -> nt.getName().equals(nodeName)).findFirst(); - - return findFirst.isPresent() ? findFirst.get() : null; - } - - @Override - public Metadata getNodeTemplateMetadata(NodeTemplate nt) { - if (nt == null) { - log.error("getNodeTemplateMetadata - nt (node template) - is null"); - return null; - } - - return nt.getMetaData(); - } - - @Override - public CapabilityAssignments getCapabilitiesOf(NodeTemplate nt) { - if (nt == null) { - log.error("getCapabilitiesOf - nt (node template) - is null"); - return null; - } - - return nt.getCapabilities(); - } - - @Override - public RequirementAssignments getRequirementsOf(NodeTemplate nt) { - if (nt == null) { - log.error("getRequirementsOf - nt (node template) - is null"); - return null; - } - - return nt.getRequirements(); - } - - @Override - public String getCapabilityPropertyLeafValue(CapabilityAssignment capability, String pathToPropertyLeafValue) { - if (capability == null) { - log.error("getCapabilityPropertyLeafValue - capability is null"); - return null; - } - - if (GeneralUtility.isEmptyString(pathToPropertyLeafValue)) { - log.error("getCapabilityPropertyLeafValue - pathToPropertyLeafValue is null or empty"); - return null; - } - - String[] split = getSplittedPath(pathToPropertyLeafValue); - LinkedHashMap properties = capability.getProperties(); - Object property = processProperties(split, properties); - return property == null || property instanceof Function ? null : String.valueOf(property); - } - - /************************************* helper functions ***********************************/ - private boolean isVNFType(NodeTemplate nt) { - return nt.getType().endsWith("VnfConfiguration"); - } - - @SuppressWarnings("unchecked") - private Map filterProperties(Object property, String path, FilterType filterType, String pattern, Map filterMap) { - - if (property instanceof Map) { - for (Map.Entry item: ((Map) property).entrySet()) { - String itemPath = path + PATH_DELIMITER + item.getKey(); - filterProperties(item.getValue(), itemPath, filterType, pattern, filterMap); - } - } else if (property instanceof List) { - for (Object item: (List)property) { - filterProperties(item, path, filterType, pattern, filterMap); - } - } else { - if (filterType.isMatch(property.toString(), pattern)) { - filterMap.put(path, property.toString()); - } - } - - return filterMap; - } - - public List getServiceNodeTemplateBySdcType(SdcTypes sdcType) { - if (sdcType == null) { - log.error("getServiceNodeTemplateBySdcType - sdcType is null or empty"); - return new ArrayList<>(); - } - - TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate(); - return getNodeTemplateBySdcType(topologyTemplate, sdcType); - } - - - /************************************* helper functions ***********************************/ - private List getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, SdcTypes sdcType) { - if (sdcType == null) { - log.error("getNodeTemplateBySdcType - sdcType is null or empty"); - return new ArrayList<>(); - } - - if (topologyTemplate == null) { - log.error("getNodeTemplateBySdcType - topologyTemplate is null"); - return new ArrayList<>(); - } - - List nodeTemplates = topologyTemplate.getNodeTemplates(); - - if (nodeTemplates != null && nodeTemplates.size() > 0) - return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.getValue().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList()); - - log.debug("getNodeTemplateBySdcType - topologyTemplate's nodeTemplates not exist"); - return new ArrayList<>(); - } - - //Assumed to be unique property for the list - private NodeTemplate getNodeTemplateByCustomizationUuid(List nodeTemplates, String customizationId) { - if (customizationId != null) { - Optional findFirst = nodeTemplates.stream().filter(x -> (x.getMetaData() != null && customizationId.equals(x.getMetaData().getValue(PROPERTY_NAME_CUSTOMIZATIONUUID)))).findFirst(); - return findFirst.isPresent() ? findFirst.get() : null; - } - else { - log.error("getNodeTemplateByCustomizationUuid - customizationId is null"); - return null; - } - } - - private Object processProperties(String[] split, LinkedHashMap properties) { - Optional> findFirst = properties.entrySet().stream().filter(x -> x.getKey().equals(split[0])).findFirst(); - if (findFirst.isPresent()) { - Property property = findFirst.get().getValue(); - Object current = property.getValue(); - return iterateProcessPath(1, current, split); - } - String propName = (split != null && split.length > 0 ? split[0] : null); - log.error("processProperties - property {} not found", propName); - return null; - } - - - - - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcPropertyNames.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcPropertyNames.java deleted file mode 100644 index 7d34c6f..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcPropertyNames.java +++ /dev/null @@ -1,109 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * sdc-distribution-client - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.impl; - -public class SdcPropertyNames { - public static String PROPERTY_NAME_INVARIANTUUID = "invariantUUID"; - public static String PROPERTY_NAME_UUID = "UUID"; - public static String PROPERTY_NAME_CUSTOMIZATIONUUID = "customizationUUID"; - public static String PROPERTY_NAME_VERSION = "version"; - - //Groups metadata - public static String PROPERTY_NAME_VFMODULEMODELINVARIANTUUID = "vfModuleModelInvariantUUID"; - public static String PROPERTY_NAME_VFMODULEMODELUUID = "vfModuleModelUUID"; - public static String PROPERTY_NAME_VFMODULECUSTOMIZATIONUUID = "vfModuleCustomizationUUID"; - public static String PROPERTY_NAME_VFMODULEMODELVERSION = "vfModuleModelVersion"; - public static String PROPERTY_NAME_VFMODULEMODELNAME = "vfModuleModelName"; - - //Groups properties - public static String PROPERTY_NAME_VFMODULETYPE = "vf_module_type"; - public static String PROPERTY_NAME_VFMODULELABEL = "vf_module_label"; - public static String PROPERTY_NAME_MINVFMODULEINSTANCES = "min_vf_module_instances"; - public static String PROPERTY_NAME_MAXVFMODULEINSTANCES = "max_vf_module_instances"; - public static String PROPERTY_NAME_INITIALCOUNT = "initial_count"; - - - public static String PROPERTY_NAME_DESCRIPTION = "description"; - public static String PROPERTY_NAME_TYPE = "type"; - public static String PROPERTY_NAME_CATEGORY = "category"; - public static String PROPERTY_NAME_SUBCATEGORY = "subcategory"; - public static String PROPERTY_NAME_RESOURCEVENDOR = "resourceVendor"; - public static String PROPERTY_NAME_RESOURCEVENDORRELEASE = "resourceVendorRelease"; - //VFC - public static String PROPERTY_NAME_NFCCODE = "nfc_code"; - public static String PROPERTY_NAME_VMTYPETAG = "vm_type_tag"; - public static String PROPERTY_NAME_VMTYPE = "vm_type"; - public static String PROPERTY_NAME_VFCNAMING_ECOMPGENERATEDNAMING="vfc_naming#ecomp_generated_naming"; - public static String PROPERTY_NAME_VFCNAMING_NAMINGPOLICY="vfc_naming#naming_policy"; - //VF - public static String PROPERTY_NAME_NFTYPE = "nf_type"; - public static String PROPERTY_NAME_NFROLE = "nf_role"; - public static String PROPERTY_NAME_NFFUNCTION = "nf_function"; - public static String PROPERTY_NAME_NFCODE = "nf_code"; - public static String PROPERTY_NAME_MININSTANCES = "min_instances"; - public static String PROPERTY_NAME_MAXINSTANCES = "max_instances"; - public static String PROPERTY_NAME_AVAILABILITYZONEMAXCOUNT = "availability_zone_max_count"; - public static String PROPERTY_NAME_AVAILABILITYZONECOUNT = "availability_zone_count"; - public static String PROPERTY_NAME_NAME = "name"; - public static String PROPERTY_NAME_VNFECOMPNAMING_ECOMPGENERATEDNAMING="vnf_ecomp_naming#ecomp_generated_naming"; - public static String PROPERTY_NAME_VNFECOMPNAMING_NAMINGPOLICY="vnf_ecomp_naming#naming_policy"; - public static String PROPERTY_NAME_ECOMPGENERATEDVMASSIGNMENTS = "ecomp_generated_vm_assignments"; - //Service - public static String PROPERTY_NAME_SERVICENAMING_DEFAULT_ECOMPGENERATEDNAMING="service_naming#default#ecomp_generated_naming"; - public static String PROPERTY_NAME_SERVICENAMING_DEFAULT_NAMINGPOLICY="service_naming#default#naming_policy"; - //VL - public static String PROPERTY_NAME_NETWORKTYPE="network_type"; - public static String PROPERTY_NAME_NETWORKROLE="network_role"; - public static String PROPERTY_NAME_NETWORKROLETAG="network_role_tag"; - public static String PROPERTY_NAME_NETWORKTECHNOLOGY="network_technology"; - public static String PROPERTY_NAME_NETWORKSCOPE="network_scope"; - public static String PROPERTY_NAME_NETWORKECOMPNAMING_ECOMPGENERATEDNAMING="network_ecomp_naming#ecomp_generated_naming"; - public static String PROPERTY_NAME_NETWORKECOMPNAMING_NAMINGPOLICY="network_ecomp_naming#naming_policy"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_ISSHAREDNETWORK="network_assignments#is_shared_network"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_ISEXTERNALNETWORK="network_assignments#is_external_network"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_ECOMPGENERATEDNETWORKASSIGNMENT="network_assignments#ecomp_generated_network_assignment"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_USEIPV4="network_assignments#ipv4_subnet_default_assignments#use_ipv4"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_IPNETWORKADDRESSPLAN="network_assignments#ipv4_subnet_default_assignments#ip_network_address_plan"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_DHCPENABLED="network_assignments#ipv4_subnet_default_assignments#dhcp_enabled"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_IPVERSION="network_assignments#ipv4_subnet_default_assignments#ip_version"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_CIDRMASK="network_assignments#ipv4_subnet_default_assignments#cidr_mask"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV4SUBNETDEFAULTASSIGNMENTS_MINSUBNETSCOUNT="network_assignments#ipv4_subnet_default_assignments#min_subnets_count"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_USEIPV6="network_assignments#ipv6_subnet_default_assignments#use_ipv6"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_IPNETWORKADDRESSPLAN="network_assignments#ipv6_subnet_default_assignments#ip_network_address_plan"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_DHCPENABLED="network_assignments#ipv6_subnet_default_assignments#dhcp_enabled"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_IPVERSION="network_assignments#ipv6_subnet_default_assignments#ip_version"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_CIDRMASK="network_assignments#ipv6_subnet_default_assignments#cidr_mask"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_IPV6SUBNETDEFAULTASSIGNMENTS_MINSUBNETSCOUNT="network_assignments#ipv6_subnet_default_assignments#min_subnets_count"; - - /*public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_ISPROVIDERNETWORK="network_assignments#provider_network#is_provider_network"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_PHYSICALNETWORKNAME="network_assignments#provider_network#physical_network_name"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_NUMA="network_assignments#provider_network#numa"; - public static String PROPERTY_NAME_NETWORKASSIGNMENTS_PROVIDERNETWORK_PNICINSTANCE="network_assignments#provider_network#pnic_instance"; - */ - - public static String PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK="provider_network#is_provider_network"; - public static String PROPERTY_NAME_PROVIDERNETWORK_PHYSICALNETWORKNAME="provider_network#physical_network_name"; - public static String PROPERTY_NAME_PROVIDERNETWORK_NUMA="provider_network#numa"; - public static String PROPERTY_NAME_PROVIDERNETWORK_PNICINSTANCE="provider_network#pnic_instance"; - - public static String PROPERTY_NAME_NETWORKFLOWS_ISBOUNDTOVPN="network_flows#is_bound_to_vpn"; - public static String PROPERTY_NAME_NETWORKFLOWS_VPNBINDING="network_flows#vpn_binding"; -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcToscaParserFactory.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcToscaParserFactory.java deleted file mode 100644 index 9fc59f2..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcToscaParserFactory.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.openecomp.sdc.tosca.parser.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.openecomp.sdc.tosca.parser.api.ConformanceLevel; -import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper; -import org.openecomp.sdc.tosca.parser.config.*; -import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.openecomp.sdc.tosca.parser.utils.GeneralUtility; -import org.openecomp.sdc.toscaparser.api.ToscaTemplate; -import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; -import org.openecomp.sdc.toscaparser.api.common.JToscaException; -import org.openecomp.sdc.toscaparser.api.utils.JToscaErrorCodes; -import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SdcToscaParserFactory { - private static Logger log = LoggerFactory.getLogger(SdcToscaParserFactory.class.getName()); - - private static ConfigurationManager configurationManager; - private static volatile SdcToscaParserFactory instance; - private List criticalExceptions = new ArrayList<>(); - private List warningExceptions = new ArrayList<>(); - private List notAnalyzadExceptions = new ArrayList<>(); - private SdcToscaParserFactory() {} - - /** - * Get an SdcToscaParserFactory instance. - * @return SdcToscaParserFactory instance. - */ - public static SdcToscaParserFactory getInstance() { - if (instance == null) { - synchronized (SdcToscaParserFactory.class) { - if (instance == null) { - instance = new SdcToscaParserFactory(); - configurationManager = ConfigurationManager.getInstance(); - } - } - } - return instance; - } - - public static void setConfigurationManager(ConfigurationManager configurationManager) { - SdcToscaParserFactory.configurationManager = configurationManager; - } - - /** - * Get an ISdcCsarHelper object for this CSAR file. - * - * @param csarPath - the absolute path to CSAR file. - * @return ISdcCsarHelper object. - * @throws SdcToscaParserException - in case the path or CSAR are invalid. - */ - public ISdcCsarHelper getSdcCsarHelper(String csarPath) throws SdcToscaParserException { - return init(csarPath, true); - } - - /** - * Get an ISdcCsarHelper object for this CSAR file. - * - * @param csarPath - the absolute path to CSAR file. - * @param resolveGetInput - resolve get_input properties - * @return ISdcCsarHelper object. - * @throws SdcToscaParserException - in case the path or CSAR are invalid. - */ - public ISdcCsarHelper getSdcCsarHelper(String csarPath, boolean resolveGetInput) throws SdcToscaParserException { - return init(csarPath, resolveGetInput); - } - - private ISdcCsarHelper init(String csarPath, boolean resolveGetInput) throws SdcToscaParserException { - synchronized (SdcToscaParserFactory.class) { - ToscaTemplate tosca = null; - try { - tosca = new ToscaTemplate(csarPath, null, true, null, resolveGetInput); - } catch (JToscaException e) { - throwSdcToscaParserException(e); - } - SdcCsarHelperImpl sdcCsarHelperImpl = new SdcCsarHelperImpl(tosca, configurationManager); - String cSarConformanceLevel = sdcCsarHelperImpl.getConformanceLevel(); - validateCsarVersion(cSarConformanceLevel); - try { - handleErrorsByTypes(csarPath, cSarConformanceLevel); - } catch (JToscaException e) { - throwSdcToscaParserException(e); - } - return sdcCsarHelperImpl; - } - } - - private void handleErrorsByTypes(String csarPath, String cSarConformanceLevel) throws JToscaException { - clearValidationIssuesLists(); - for(JToscaValidationIssue toscaValidationIssue : ThreadLocalsHolder.getCollector().getValidationIssues().values()){ - List issueInfos = configurationManager.getJtoscaValidationIssueConfiguration().getValidationIssues().get(toscaValidationIssue.getCode()); - if(issueInfos != null && !issueInfos.isEmpty()){ - JToscaValidationIssueInfo issueInfo = null; - issueInfo = issueInfos.stream() - .filter(i-> isMatchConformanceLevel(cSarConformanceLevel,i.getSinceCsarConformanceLevel())) - .max((i1,i2) -> GeneralUtility.conformanceLevelCompare(i1.getSinceCsarConformanceLevel(), i2.getSinceCsarConformanceLevel()) ) - .orElse(null); - - if(issueInfo != null){ - switch (JToscaValidationIssueType.valueOf(issueInfo.getIssueType())) { - case CRITICAL: - criticalExceptions.add(toscaValidationIssue); - break; - case WARNING: - warningExceptions.add(toscaValidationIssue); - break; - default: - break; - } - }else{ - notAnalyzadExceptions.add(toscaValidationIssue); - } - }else{//notAnalyzed - notAnalyzadExceptions.add(toscaValidationIssue); - } - } - logErrors(csarPath); - } - - private void clearValidationIssuesLists(){ - notAnalyzadExceptions.clear(); - criticalExceptions.clear(); - warningExceptions.clear(); - } - - private void logErrors(String inputPath) throws JToscaException{ - //Warnings - int warningsCount = warningExceptions.size(); - if (warningsCount > 0) { - log.warn("####################################################################################################"); - log.warn("CSAR Warnings found! CSAR name - {}", inputPath); - log.warn("ToscaTemplate - verifyTemplate - {} Parsing Warning{} occurred...", warningsCount, (warningsCount > 1 ? "s" : "")); - for (JToscaValidationIssue info : warningExceptions) { - log.warn("JTosca Exception [{}]: {}. CSAR name - {}", info.getCode(),info.getMessage(), inputPath); - } - log.warn("####################################################################################################"); - } - //Criticals - int criticalsCount = criticalExceptions.size(); - if (criticalsCount > 0) { - log.error("####################################################################################################"); - log.error("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", criticalsCount, (criticalsCount > 1 ? "s" : "")); - for (JToscaValidationIssue info : criticalExceptions) { - log.error("JTosca Exception [{}]: {}. CSAR name - {}", info.getCode(),info.getMessage(), inputPath); - } - throw new JToscaException(String.format("CSAR Validation Failed. CSAR name - {}. Please check logs for details.", inputPath), JToscaErrorCodes.CSAR_TOSCA_VALIDATION_ERROR.getValue()); - } - } - public List getCriticalExceptions() { - return criticalExceptions; - } - - public List getWarningExceptions() { - return warningExceptions; - } - - public List getNotAnalyzadExceptions() { - return notAnalyzadExceptions; - } - - - private void validateCsarVersion(String cSarVersion) throws SdcToscaParserException { - ConformanceLevel level = configurationManager.getConfiguration().getConformanceLevel(); - String minVersion = level.getMinVersion(); - String maxVersion = level.getMaxVersion(); - if (cSarVersion != null) { - if ((GeneralUtility.conformanceLevelCompare(cSarVersion, minVersion) < 0) || (GeneralUtility.conformanceLevelCompare(cSarVersion, maxVersion) > 0)) { - throwConformanceLevelException(minVersion, maxVersion); - } - } else { - throwConformanceLevelException(minVersion, maxVersion); - } - } - - private boolean isMatchConformanceLevel(String ValidationIssueVersion, String cSarVersion){ - if (ValidationIssueVersion != null && cSarVersion != null) { - if ((GeneralUtility.conformanceLevelCompare(ValidationIssueVersion, cSarVersion) >= 0)) { - return true; - } - } - return false; - } - private void throwConformanceLevelException(String minVersion, String maxVersion) throws SdcToscaParserException { - ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.CONFORMANCE_LEVEL_ERROR.toString()); - throw new SdcToscaParserException(String.format(errorInfo.getMessage(), minVersion, maxVersion), errorInfo.getCode()); - } - - private void throwSdcToscaParserException(JToscaException e) throws SdcToscaParserException { - ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.getSdcErrorByJToscaError(JToscaErrorCodes.getByCode(e.getCode())).toString()); - throw new SdcToscaParserException(errorInfo.getMessage(), errorInfo.getCode()); - } - - - -} \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcTypes.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcTypes.java deleted file mode 100644 index aeb4ee0..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcTypes.java +++ /dev/null @@ -1,46 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * sdc-distribution-client - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.impl; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public enum SdcTypes { - - CP("CP"), VL("VL"), VF("VF"), CR("CR"), VFC("VFC"), PNF("PNF"), SERVICE("Service"), CVFC("CVFC"), SERVICE_PROXY("Service Proxy"), CONFIGURATION("Configuration"); - - private String value; - - private static List complexTypes = Arrays.asList(VF, PNF, CR, SERVICE, CVFC).stream().map(SdcTypes::getValue).collect(Collectors.toList()); - - private SdcTypes(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public static boolean isComplex(String sdcType) { - return complexTypes.contains(sdcType); - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/utils/GeneralUtility.java b/src/main/java/org/openecomp/sdc/tosca/parser/utils/GeneralUtility.java deleted file mode 100644 index 84150f6..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/utils/GeneralUtility.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.openecomp.sdc.tosca.parser.utils; - -import java.util.Arrays; - -public class GeneralUtility { - - public static boolean isEmptyString(String str) { - return str == null || str.trim().isEmpty(); - } - - - /** - * Compares two version strings. - *

- * Use this instead of String.compareTo() for a non-lexicographical - * comparison that works for version strings. e.g. "1.10".compareTo("1.6"). - * - * @param str1 a string of ordinal numbers separated by decimal points. - * @param str2 a string of ordinal numbers separated by decimal points. - * @return The result is a negative integer if str1 is _numerically_ less than str2. - * The result is a positive integer if str1 is _numerically_ greater than str2. - * The result is zero if the strings are _numerically_ equal. - * It does not work if "1.10" is supposed to be equal to "1.10.0". - */ - public static int conformanceLevelCompare(String str1, String str2) { - String[] vals1 = str1.split("\\."); - String[] vals2 = str2.split("\\."); - int i = 0; - // set index to first non-equal ordinal or length of shortest version string - while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) { - i++; - } - // compare first non-equal ordinal number - if (i < vals1.length && i < vals2.length) { - int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i])); - return Integer.signum(diff); - } - //in case of 0 after the . e.g: "3" = "3.0" or "3.0.0.0" = "3.0" - str2 = str2.substring(i).replace(".", ""); - str1 = str1.substring(i).replace(".", ""); - if ((!(str1.equals(""))) && Integer.valueOf(str1) == 0){ - vals1 = Arrays.copyOf(vals1, i); - } - if ((!(str2.equals(""))) && Integer.valueOf(str2) == 0){ - vals2 = Arrays.copyOf(vals2, i); - } - - // the strings are equal or one string is a substring of the other - // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4" - return Integer.signum(vals1.length - vals2.length); - } - -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/utils/SdcToscaUtility.java b/src/main/java/org/openecomp/sdc/tosca/parser/utils/SdcToscaUtility.java deleted file mode 100644 index 77f7d55..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/utils/SdcToscaUtility.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.openecomp.sdc.tosca.parser.utils; - -import java.util.regex.Pattern; - -public class SdcToscaUtility { - - public final static Pattern COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-]+"); - - public static String normaliseComponentInstanceName(String name) { - String normalizedName = name.toLowerCase(); - normalizedName = COMPONENT_INSTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" "); - String[] split = normalizedName.split(" "); - StringBuffer sb = new StringBuffer(); - for (String splitElement : split) { - sb.append(splitElement); - } - return sb.toString(); - } -} diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/utils/YamlToObjectConverter.java b/src/main/java/org/openecomp/sdc/tosca/parser/utils/YamlToObjectConverter.java deleted file mode 100644 index 926b155..0000000 --- a/src/main/java/org/openecomp/sdc/tosca/parser/utils/YamlToObjectConverter.java +++ /dev/null @@ -1,126 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * sdc-distribution-client - * ================================================================================ - * 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.openecomp.sdc.tosca.parser.utils; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.yaml.snakeyaml.Yaml; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.HashMap; - -public class YamlToObjectConverter { - - private static Logger log = LoggerFactory - .getLogger(YamlToObjectConverter.class.getName()); - - private static HashMap yamls = new HashMap(); - - private static Yaml defaultYaml = new Yaml(); - - private static Yaml getYamlByClassName(Class className) { - - Yaml yaml = yamls.get(className.getName()); - if (yaml == null) { - yaml = defaultYaml; - } - - return yaml; - } - - public T convert(String dirPath, Class className, - String configFileName) { - - T config = null; - - try { - - String fullFileName = dirPath + File.separator + configFileName; - - config = convert(fullFileName, className); - - } catch (Exception e) { - log.error("Failed to convert yaml file " + configFileName - + " to object.", e); - } - - return config; - } - - public T convert(String fullFileName, Class className) { - - T config = null; - - Yaml yaml = getYamlByClassName(className); - - InputStream in = null; - try { - - File f = new File(fullFileName); - if (false == f.exists()) { - log.warn("The file " + fullFileName - + " cannot be found. Ignore reading configuration."); - return null; - } - in = Files.newInputStream(Paths.get(fullFileName)); - - config = yaml.loadAs(in, className); - - // System.out.println(config.toString()); - } catch (Exception e) { - log.error("Failed to convert yaml file " + fullFileName - + " to object.", e); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - return config; - } - - public T convertFromString(String yamlContents, Class className) { - - T config = null; - Yaml yaml = new Yaml(); - try { - Object data = yaml.load(yamlContents); - // convert it manually with jackson instead of using snakeyaml auto converter, - // because of problematic complex objects like JtoscaValidationIssueConfiguration - ObjectMapper mapper = new ObjectMapper(); - config = mapper.convertValue(data, className); - } catch (Exception e){ - log.error("Failed to convert YAML {} to object." , yamlContents, e); - } - - return config; - } -} -- cgit 1.2.3-korg